// Deploy effects

datablock AudioProfile(DrillLinkSound)
{
   filename    = "fx/misc/mine.deploy.wav";
   description = AudioClose3d;
   preload = true;
};

datablock AudioProfile(SingeLinkSound)
{
   filename    = "fx/weapons/chaingun_off.wav"; // "fx/weapons/grenade_camera_activate.wav";
   description = AudioClose3d;
   preload = true;
};


datablock AudioProfile(BoltLinkSound)
{
   filename    = "fx/misc/health_patch.wav";
   description = AudioClose3d;
   preload = true;
};

datablock AudioProfile(ClickLinkSound)
{
   filename    = "fx/misc/health_patch.wav";
   description = AudioClose3d;
   preload = true;
};

datablock AudioProfile(SingeSound)
{
   filename    = "fx/weapons/ElF_hit.wav";
   description = AudioClose3d;
   preload = true;
};

datablock AudioProfile(LargeLinkeSound)
{
   filename    = "fx/weapons/grenade_explode_UW.wav";
   description = AudioClose3d;
   preload = true;
};


datablock LinearProjectileData(FastSingeProjectile) {
	className = "LinearProjectileData";
	projectileShapeName = "turret_muzzlepoint.dts";
	emitterDelay = "-1";
	velInheritFactor = "0";
	directDamage = "0";
	hasDamageRadius = "0";
	indirectDamage = "0";
	damageRadius = "0";
	radiusDamageType = "0";
	kickBackStrength = "0";
	baseEmitter = "ELFSparksEmitter";
	hasLight = "0";
	lightRadius = "20";
	lightColor = "1.000000 1.000000 1.000000 1.000000";
	hasLightUnderwaterColor = "0";
	underWaterLightColor = "1.000000 1.000000 1.000000 1.000000";
	explodeOnWaterImpact = "0";
	depthTolerance = "5";
	bubbleEmitTime = "0.5";
	faceViewer = "0";
	scale = "1 1 1";
	dryVelocity = "5";
	wetVelocity = "5";
	fizzleTimeMS = "60000";
	lifetimeMS = "60000";
	explodeOnDeath = "0";
	reflectOnWaterImpactAngle = "0";
	deflectionOnWaterImpact = "0";
	fizzleUnderwaterMS = "-1";
	activateDelayMS = "-1";
	doDynamicClientHits = "0";
        sound = "ELFHitTargetSound";
	explosion = "BlasterExplosion";
};

datablock LinearProjectileData(SlowSingeProjectile) {
	className = "LinearProjectileData";
	projectileShapeName = "turret_muzzlepoint.dts";
	emitterDelay = "-1";
	velInheritFactor = "0";
	directDamage = "0";
	hasDamageRadius = "0";
	indirectDamage = "0";
	damageRadius = "0";
	radiusDamageType = "0";
	kickBackStrength = "0";
	baseEmitter = "ElfSparksEmitter";
	hasLight = "0";
	lightRadius = "20";
	lightColor = "1.000000 1.000000 1.000000 1.000000";
	hasLightUnderwaterColor = "0";
	underWaterLightColor = "1.000000 1.000000 1.000000 1.000000";
	explodeOnWaterImpact = "0";
	depthTolerance = "5";
	bubbleEmitTime = "0.5";
	faceViewer = "0";
	scale = "1 1 1";
	dryVelocity = "1";
	wetVelocity = "1";
	fizzleTimeMS = "60000";
	lifetimeMS = "60000";
	explodeOnDeath = "0";
	reflectOnWaterImpactAngle = "0";
	deflectionOnWaterImpact = "0";
	fizzleUnderwaterMS = "-1";
	activateDelayMS = "-1";
	doDynamicClientHits = "0";
        sound = "ELFHitTargetSound";
	explosion = "BlasterExplosion";
};


function singe(%pos,%dir,%size,%type) {
  %p = new LinearProjectile() {
      dataBlock        = %type @"SingeProjectile";
      initialDirection = %dir;
      initialPosition  = %pos;
   };

if (%type $= "fast")
    %p.schedule((%size/5)*1000,"delete");
else
    %p.schedule((%size)*1000,"delete");
}

function edgesinge(%obj)
{
%objsize = VectorSub(getWords(%obj.getObjectBox(),3,5),getWords(%obj.getObjectBox(),0,2));
%realsize = realSize(%obj);//VectorMultiply(VectorMultiply(%objsize,%obj.getScale()),"1 1 0");

%offset = VectorScale(Realvec(%obj,%realsize),0.49);
%offset2 = VectorScale(VectorCross(VectorNormalize(%offset),realvec(%obj,"0 0 1")),VectorLen(%offset));
%pos1 = VectorAdd(%obj.getWorldBoxCenter(),%offset);
%pos2 = VectorAdd(%obj.getWorldBoxCenter(),VectorScale(%offset,-1));
singe(%pos1,Realvec(%obj,"-1 0 0"),GetWord(%realsize,0),"fast");
singe(%pos1,Realvec(%obj,"0 -1 0"),GetWord(%realsize,1),"fast");
singe(%pos2,Realvec(%obj,"1 0 0"),GetWord(%realsize,0),"fast");
singe(%pos2,Realvec(%obj,"0 1 0"),GetWord(%realsize,1),"fast");
}

function linksinge(%obj,%pt,%nrm)
{
if (%nrm !$= "")
{
%nrm = VectorNormalize(%nrm);
%dir = VectorNormalize(VectorCross(%nrm,Realvec(%obj,"0 0 1")));
%objsize = VectorSub(getWords(%obj.getObjectBox(),3,5),getWords(%obj.getObjectBox(),0,2));
%realsize = VectorScale(VectorMultiply(%objsize,%obj.getScale()),0.49);
%side = VirVec(%obj,%nrm);
%oside = VectorCross("0 0 1",%side);

%forward = Realvec(%obj,VectorMultiply(%realsize,%side));
%left = Realvec(%obj,VectorMultiply(%realsize,%oside));
%len = Vectorlen(%left);
%pos1 = VectorAdd(%obj.getWorldBoxCenter(),VectorAdd(%forward,%left));
%pos2 = VectorAdd(%obj.getWorldBoxCenter(),VectorAdd(%forward,VectorScale(%left,-1)));
singe(%pos1,%dir,%len,"fast");
singe(%pos2,VectorScale(%dir,-1),%len,"fast");
}
}

function floordrill(%obj)
{
%objsize = VectorSub(getWords(%obj.getObjectBox(),3,5),getWords(%obj.getObjectBox(),0,2));
%realsize = VectorMultiply(VectorMultiply(%objsize,%obj.getScale()),"0.5 0.5 0.5");
%forward = VectorScale(realvec(%obj,"1 0 0"),GetWord(%realsize,0));
%left = VectorScale(realvec(%obj,"0 1 0"),GetWord(%realsize,1));
%up = VectorScale(realvec(%obj,"0 0 1"),GetWord(%realsize,2));
%p1 = VectorAdd(VectorAdd(%forward,%left),%up);
%p2 = VectorAdd(VectorAdd(VectorScale(%forward,-1),%left),%up);
%p3 = VectorAdd(VectorAdd(%forward,VectorScale(%left,-1)),%up);
%p4 = VectorAdd(VectorAdd(VectorScale(%forward,-1),VectorScale(%left,-1)),%up);
schedule(0,%obj,"llink",VectorAdd(%p1,%obj.getWorldBoxCenter()));
schedule(500,%obj,"llink",VectorAdd(%p2,%obj.getWorldBoxCenter()));
schedule(1000,%obj,"llink",VectorAdd(%p4,%obj.getWorldBoxCenter()));
schedule(1500,%obj,"llink",VectorAdd(%p3,%obj.getWorldBoxCenter()));
}

function MSinge(%obj)
{
%objsize = VectorSub(getWords(%obj.getObjectBox(),3,5),getWords(%obj.getObjectBox(),0,2));
%realsize = VectorMultiply(VectorMultiply(%objsize,%obj.getScale()),"0.5 0.5 0.5");
%forward = VectorScale(realvec(%obj,"1 0 0"),GetWord(%realsize,0));
%left = VectorScale(realvec(%obj,"0 1 0"),GetWord(%realsize,1));
%up = VectorScale(realvec(%obj,"0 0 -1"),GetWord(%realsize,2));
%p1 = VectorAdd(VectorAdd(%forward,%left),%up);
%p2 = VectorAdd(VectorAdd(VectorScale(%forward,-1),%left),%up);
%p3 = VectorAdd(VectorAdd(%forward,VectorScale(%left,-1)),%up);
%p4 = VectorAdd(VectorAdd(VectorScale(%forward,-1),VectorScale(%left,-1)),%up);
schedule(0,%obj,"mlink",VectorAdd(%p1,%obj.getWorldBoxCenter()));
schedule(250,%obj,"mlink",VectorAdd(%p2,%obj.getWorldBoxCenter()));
schedule(500,%obj,"mlink",VectorAdd(%p4,%obj.getWorldBoxCenter()));
schedule(750,%obj,"mlink",VectorAdd(%p3,%obj.getWorldBoxCenter()));
}

function MSinge2(%obj)
{
%objsize = VectorSub(getWords(%obj.getObjectBox(),3,5),getWords(%obj.getObjectBox(),0,2));
%realsize = VectorMultiply(VectorMultiply(%objsize,%obj.getScale()),"0.5 0.5 0.5");
%forward = VectorScale(realvec(%obj,"1 0 0"),GetWord(%realsize,0));
%left = VectorScale(realvec(%obj,"0 1 0"),GetWord(%realsize,1));
%up = VectorScale(realvec(%obj,"0 0 1"),GetWord(%realsize,2));
%p1 = VectorAdd(VectorAdd(%forward,%left),%up);
%p2 = VectorAdd(VectorAdd(VectorScale(%forward,-1),%left),%up);
%p3 = VectorAdd(VectorAdd(%forward,VectorScale(%left,-1)),%up);
%p4 = VectorAdd(VectorAdd(VectorScale(%forward,-1),VectorScale(%left,-1)),%up);
schedule(0,%obj,"mlink",VectorAdd(%p1,%obj.getWorldBoxCenter()));
schedule(250,%obj,"mlink",VectorAdd(%p2,%obj.getWorldBoxCenter()));
schedule(500,%obj,"mlink",VectorAdd(%p4,%obj.getWorldBoxCenter()));
schedule(750,%obj,"mlink",VectorAdd(%p3,%obj.getWorldBoxCenter()));
}


function floorlink(%obj,%pt,%nrm) {
%fstat = aboveground(%obj.getworldboxcenter(),1,%obj);
%stat = GetWord(%fstat,0);
//warn(%stat);
if(%stat $= "open" || %stat $= "roof" || %stat $= "shadow") 
   linksinge(%obj,%pt,%nrm);
else
   floordrill(%obj);
}

function slink(%pt)
{
createLifeEmitter(%pt, ELFSparksEmitter, 200);   
Serverplay3D(SingeLinkSound,%pt);
}

function mlink(%pt)
{
createLifeEmitter(%pt, ELFSparksEmitter, 200);   
Serverplay3D(SingeLinkSound,%pt);
}

function llink(%pt)
{
createLifeEmitter(%pt, SmallLightDamageSmoke, 500);   
Serverplay3D(LargeLinkeSound,%pt);
}

function deployEffect(%obj,%pt,%nrm,%type)
{
if ($Host::NoDeployEffects)
   return "";
if (%type $= "pad")
   {
   edgesinge(%obj);
   }
else if (%type $= "walk")
   {
   linksinge(%obj,%pt,%nrm);
   }
else if (%type $= "spine")
   {
   slink(%pt);
   }
else if (%type $= "spine1")
   {
   slink(%pt);
   %p2 = VectorAdd( pos( %obj ),realvec( %obj,VectorMultiply("0 0 0.5",%obj.getScale()) ) );
   schedule(500,%obj,"slink",%p2);
   }
else if (%type $= "mspine")
   {
   msinge(%obj);
   }
else if (%type $= "mspine1")
   {
   msinge(%obj);
   schedule(1000,%obj,"msinge2",%obj);
   }
else if (%type $= "floor")
   {
   floorlink(%obj,%pt,%nrm);
   }
}
