home *** CD-ROM | disk | FTP | other *** search
- extern void object::Attack( )
- {
- int list[];
- int i;
- object p;
- float dist, prox;
- point dest;
- boolean advance = true;
-
- errmode(0); // ne stoppe pas si erreur
- while ( ismovie() != 0 ) wait(1);
-
- i = 0;
- list[i++] = WingedGrabber;
- list[i++] = TrackedGrabber;
- list[i++] = WheeledGrabber;
- list[i++] = LeggedGrabber;
- list[i++] = WingedShooter;
- list[i++] = TrackedShooter;
- list[i++] = WheeledShooter;
- list[i++] = LeggedShooter;
- list[i++] = WingedOrgaShooter;
- list[i++] = TrackedOrgaShooter;
- list[i++] = WheeledOrgaShooter;
- list[i++] = LeggedOrgaShooter;
- list[i++] = WingedSniffer;
- list[i++] = TrackedSniffer;
- list[i++] = WheeledSniffer;
- list[i++] = LeggedSniffer;
- list[i++] = Thumper;
- list[i++] = PhazerShooter;
- list[i++] = Recycler;
- list[i++] = Shielder;
- list[i++] = Subber;
- list[i++] = Me;
- list[i++] = Derrick;
- list[i++] = BotFactory;
- list[i++] = PowerStation;
- list[i++] = Converter;
- list[i++] = RepairCenter;
- list[i++] = DefenseTower;
- list[i++] = ResearchCenter;
- list[i++] = RadarStation;
- list[i++] = ExchangePost;
- list[i++] = PowerPlant;
- list[i++] = AutoLab;
- list[i++] = NuclearPlant;
-
- while ( true )
- {
- p = radar(list, 0, 360, 0, 1000);
- if ( p == null )
- {
- wait(2);
- }
- else
- {
- dist = distance(p.position, position);
- if ( dist <= 40 && !advance )
- {
- fire(p.position);
- advance = true;
- }
- else
- {
- //? if ( RetBaseDistance() > 20 )
- {
- prox = dist-(5+rand()*5);
- if ( prox < 5 ) prox = 5;
- dest.x = (position.x-p.position.x)*prox/dist + p.position.x;
- dest.y = (position.y-p.position.y)*prox/dist + p.position.y;
- dest.z = (position.z-p.position.z)*prox/dist + p.position.z;
- goto(dest);
- advance = false;
- }
- }
- }
- }
- }
-
- // Calcule la distance jusqu'α la base.
-
- float object::RetBaseDistance()
- {
- object p;
- float dist;
-
- p = radar(SpaceShip, 0, 360, 0, 1000);
- if ( p == null ) return 1000;
- dist = distance(p.position, position);
- return dist;
- }
-
-