2012-12-29 10:30:42 +00:00
|
|
|
extern void object::FollowPhazer()
|
|
|
|
{
|
|
|
|
object item; // info. about phazer
|
|
|
|
point dest; // position where to go
|
|
|
|
float dist; // distance to phazer
|
|
|
|
|
|
|
|
item = radar(PhazerShooter);
|
|
|
|
if ( item == null )
|
|
|
|
{
|
|
|
|
message("No phazer found");
|
|
|
|
return; // stop the program
|
|
|
|
}
|
|
|
|
shield(1, 25); // activate the shield
|
|
|
|
|
|
|
|
while ( true ) // repeat forever
|
|
|
|
{
|
|
|
|
item = radar(PhazerShooter);// look for phazer
|
|
|
|
if ( item == null ) break;
|
|
|
|
|
|
|
|
dist = distance(item.position, position);
|
|
|
|
if ( dist < 5 )
|
|
|
|
{ // if closer than 5 m:
|
|
|
|
wait(1); // wait
|
|
|
|
}
|
|
|
|
else // otherwise:
|
|
|
|
{ // Calculate a position 5 m before the phazer
|
|
|
|
dest.x = (item.position.x-position.x)*((dist-5)/dist)+position.x;
|
|
|
|
dest.y = (item.position.y-position.y)*((dist-5)/dist)+position.y;
|
|
|
|
dest.z = (item.position.z-position.z)*((dist-5)/dist)+position.z;
|
|
|
|
goto(dest, 0, 1, 1); // and go there
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|