hedgewars/GSHandlers.inc
changeset 876 d5b6e0ae5755
parent 854 fef7f2d908bf
child 883 07a568ba44e0
equal deleted inserted replaced
875:226d0de2fb68 876:d5b6e0ae5755
   282    Gear^.doStep:= @doStepUFOWork
   282    Gear^.doStep:= @doStepUFOWork
   283    end;
   283    end;
   284 end;
   284 end;
   285 
   285 
   286 ////////////////////////////////////////////////////////////////////////////////
   286 ////////////////////////////////////////////////////////////////////////////////
       
   287 procedure doStepShotIdle(Gear: PGear);
       
   288 begin
       
   289 AllInactive:= false;
       
   290 inc(Gear^.Timer);
       
   291 if Gear^.Timer > 75 then
       
   292 	begin
       
   293 	DeleteGear(Gear);
       
   294 	AfterAttack
       
   295 	end
       
   296 end;
       
   297 
   287 procedure doStepShotgunShot(Gear: PGear);
   298 procedure doStepShotgunShot(Gear: PGear);
   288 var i: LongWord;
   299 var i: LongWord;
   289 begin
   300 begin
   290 AllInactive:= false;
   301 AllInactive:= false;
   291 if Gear^.Timer > 0 then
   302 
   292    begin
   303 if ((Gear^.State and gstAnimation) = 0) then
   293    dec(Gear^.Timer);
   304 	begin
   294    if Gear^.Timer = 0 then PlaySound(sndShotgunFire, false);
   305 	dec(Gear^.Timer);
   295    exit
   306 	if Gear^.Timer = 0 then
   296    end;
   307 		begin
       
   308 		PlaySound(sndShotgunFire, false);
       
   309 		Gear^.State:= Gear^.State or gstAnimation
       
   310 		end;
       
   311 	exit
       
   312 	end
       
   313 	else inc(Gear^.Timer);
       
   314 
   297 i:= 200;
   315 i:= 200;
   298 repeat
   316 repeat
   299 Gear^.X:= Gear^.X + Gear^.dX;
   317 Gear^.X:= Gear^.X + Gear^.dX;
   300 Gear^.Y:= Gear^.Y + Gear^.dY;
   318 Gear^.Y:= Gear^.Y + Gear^.dY;
   301 CheckCollision(Gear);
   319 CheckCollision(Gear);
   302 if (Gear^.State and gstCollision) <> 0 then
   320 if (Gear^.State and gstCollision) <> 0 then
   303    begin
   321 	begin
   304    Gear^.X:= Gear^.X + Gear^.dX * 8;
   322 	Gear^.X:= Gear^.X + Gear^.dX * 8;
   305    Gear^.Y:= Gear^.Y + Gear^.dY * 8;
   323 	Gear^.Y:= Gear^.Y + Gear^.dY * 8;
   306    ShotgunShot(Gear);
   324 	ShotgunShot(Gear);
   307    DeleteGear(Gear);
   325 	Gear^.doStep:= @doStepShotIdle;
   308    AfterAttack;
   326 	exit
   309    exit
   327 	end;
   310    end;
       
   311 dec(i)
   328 dec(i)
   312 until i = 0;
   329 until i = 0;
   313 if (Gear^.X < _0) or (Gear^.Y < _0) or (Gear^.X > _2048) or (Gear^.Y > _1024) then
   330 if (Gear^.X < _0) or (Gear^.Y < _0) or (Gear^.X > _2048) or (Gear^.Y > _1024) then
   314    begin
   331 	Gear^.doStep:= @doStepShotIdle
   315    DeleteGear(Gear);
       
   316    AfterAttack
       
   317    end
       
   318 end;
   332 end;
   319 
   333 
   320 ////////////////////////////////////////////////////////////////////////////////
   334 ////////////////////////////////////////////////////////////////////////////////
   321 procedure doStepDEagleShotWork(Gear: PGear);
   335 procedure doStepDEagleShotWork(Gear: PGear);
   322 var i, x, y: LongWord;
   336 var i, x, y: LongWord;
   323     oX, oY: hwFloat;
   337     oX, oY: hwFloat;
   324 begin
   338 begin
   325 AllInactive:= false;
   339 AllInactive:= false;
       
   340 inc(Gear^.Timer);
   326 i:= 80;
   341 i:= 80;
   327 oX:= Gear^.X;
   342 oX:= Gear^.X;
   328 oY:= Gear^.Y;
   343 oY:= Gear^.Y;
   329 repeat
   344 repeat
   330   Gear^.X:= Gear^.X + Gear^.dX;
   345   Gear^.X:= Gear^.X + Gear^.dX;
   341    DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 82 - i, 1);
   356    DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 82 - i, 1);
   342    dec(Gear^.Health, Gear^.Damage);
   357    dec(Gear^.Health, Gear^.Damage);
   343    Gear^.Damage:= 0
   358    Gear^.Damage:= 0
   344    end;
   359    end;
   345 if (Gear^.Health <= 0) or (Gear^.X < _0) or (Gear^.Y < _0) or (Gear^.X > _2048) or (Gear^.Y > _1024) then
   360 if (Gear^.Health <= 0) or (Gear^.X < _0) or (Gear^.Y < _0) or (Gear^.X > _2048) or (Gear^.Y > _1024) then
   346    DeleteGear(Gear)
   361 	Gear^.doStep:= @doStepShotIdle
   347 end;
   362 end;
   348 
   363 
   349 procedure doStepDEagleShot(Gear: PGear);
   364 procedure doStepDEagleShot(Gear: PGear);
   350 begin
   365 begin
   351 PlaySound(sndGun, false);
   366 PlaySound(sndGun, false);