T2-ACCM/scripts/modscripts/ai/s17.cs
2013-03-17 23:06:38 -04:00

107 lines
2.5 KiB
C#

$S17moveforce = 500;
function S17Think(%obj){
if(!isObject(%obj))
return;
if(%obj.task !$= ""){
%task = %obj.task;
%fun = "S17"@%task;
%obj.mode = %task;
cancel(%obj.loop);cancel(%obj.loop);cancel(%obj.loop);
if(%obj.specvar[%task] !$= "")
%obj.loop = schedule(10, 0, %fun, %obj, %obj.specvar[%task]);
else
%obj.loop = schedule(10, 0, %fun, %obj);
}
}
function S17GUARD(%obj,%pos){
if(!isObject(%obj))
return;
%obj.mode = "MOVE";
S17MOVE(%obj,%pos);
}
function S17MOVE(%obj,%pos){
if(!isObject(%obj))
return;
if(%obj.mode !$= "MOVE")
return;
%objpos = %obj.getPosition();
%dist = vectorDist(%pos,%objpos);
if(%dist > 10){
%vec = vectorNormalize(vectorSub(%pos,%objpos));
%vec = vectorScale(%vec,$S17moveforce);
%obj.applyImpulse(%objpos,%vec);
}
else
return;
%obj.loop = schedule(100, 0, "S17MOVE",%obj,%pos);
}
function S17ATTACK(%obj,%target){
if(!isObject(%obj))
return;
if(!isObject(%target)){
%obj.val = "";
return;
}
if(%obj.mode !$= "ATTACK"){
%obj.val = "";
return;
}
%objpos = %obj.getPosition();
%trgpos = %target.getPosition();
%dist = vectorDist(%trgpos,%objpos);
if(%dist > 100){
%vec = vectorNormalize(vectorSub(%pos,%objpos));
%vec = vectorScale(%vec,$S17moveforce);
%obj.applyImpulse(%objpos,%vec);
}
else {
%vec = vectorSub(%trgpos,%objpos);
%random = getRandom(1,2);
if(%obj.val $= ""){
if(%random == 1)
%obj.val = "0 0 -1";
else
%obj.val = "0 0 1";
}
%vec = vectorNormalize(vectorCross(%vec,%val));
%vec = vectorScale(%vec,$S17moveforce);
%obj.applyImpulse(%objpos,%vec);
}
%obj.loop = schedule(100, 0, "S17ATTACK",%obj,%target);
}
function S17REARM(%obj,%target){
if(!isObject(%obj))
return;
if(!isObject(%target)){
%target.setRepairRate(0);
return;
}
if(%obj.mode !$= "REARM"){
%target.setRepairRate(0);
return;
}
%objpos = %obj.getPosition();
%trgpos = %target.getPosition();
%dist = vectorDist(%trgpos,%objpos);
%DamageLevel = %targetObject.getDamageLevel();
if(%dist > 6){
%vec = vectorNormalize(vectorCross(%vec,%val));
%vec = vectorScale(%vec,$S17moveforce);
%obj.applyImpulse(%objpos,%vec);
}
else if(%DamageLevel > 0)
%obj.setRepairRate(0.01);
else {
%obj.setRepairRate(0);
return;
}
%obj.loop = schedule(100, 0, "S17ATTACK",%obj,%target);
}