hedgewars/uGearsHandlersMess.pas
changeset 15230 4576e41c0692
parent 15229 b96868956514
child 15232 a9a1f5824076
equal deleted inserted replaced
15229:b96868956514 15230:4576e41c0692
  3077     doStepParachuteWork(Gear)
  3077     doStepParachuteWork(Gear)
  3078 end;
  3078 end;
  3079 
  3079 
  3080 ////////////////////////////////////////////////////////////////////////////////
  3080 ////////////////////////////////////////////////////////////////////////////////
  3081 procedure doStepAirAttackWork(Gear: PGear);
  3081 procedure doStepAirAttackWork(Gear: PGear);
       
  3082 var uw, nuw: boolean;
       
  3083     tmpFloat: hwFloat;
  3082 begin
  3084 begin
  3083     AllInactive := false;
  3085     AllInactive := false;
  3084     Gear^.X := Gear^.X + cAirPlaneSpeed * Gear^.Tag;
  3086     Gear^.X := Gear^.X + cAirPlaneSpeed * Gear^.Tag;
  3085     if (Gear^.Health > 0) and (not (Gear^.X < Gear^.dX)) and (Gear^.X < Gear^.dX + cAirPlaneSpeed) then
  3087     if (Gear^.Health > 0) and (not (Gear^.X < Gear^.dX)) and (Gear^.X < Gear^.dX + cAirPlaneSpeed) then
  3086         begin
  3088         begin
  3093             3: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtDrill, gsttmpFlag, cBombsSpeed * Gear^.Tag, _0, Gear^.Timer + 1);
  3095             3: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtDrill, gsttmpFlag, cBombsSpeed * Gear^.Tag, _0, Gear^.Timer + 1);
  3094         end;
  3096         end;
  3095         Gear^.dX := Gear^.dX + int2hwFloat(Gear^.Damage * Gear^.Tag);
  3097         Gear^.dX := Gear^.dX + int2hwFloat(Gear^.Damage * Gear^.Tag);
  3096         if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then
  3098         if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y)) then
  3097             FollowGear^.State:= FollowGear^.State or gstSubmersible;
  3099             FollowGear^.State:= FollowGear^.State or gstSubmersible;
  3098         if (Gear^.SoundChannel <> -1) then
  3100         if (Gear^.SoundChannel <> -1) and (WorldEdge <> weSea) then
  3099             begin
  3101             begin
  3100             StopSoundChan(Gear^.SoundChannel, 4000);
  3102             StopSoundChan(Gear^.SoundChannel, 4000);
  3101             Gear^.SoundChannel := -1;
  3103             Gear^.SoundChannel := -1;
  3102             end;
  3104             end;
  3103         end;
  3105         end;
  3116         if (Gear^.SoundChannel <> -1) then
  3118         if (Gear^.SoundChannel <> -1) then
  3117             begin
  3119             begin
  3118             StopSoundChan(Gear^.SoundChannel);
  3120             StopSoundChan(Gear^.SoundChannel);
  3119             Gear^.SoundChannel := -1;
  3121             Gear^.SoundChannel := -1;
  3120             end;
  3122             end;
  3121         DeleteGear(Gear)
  3123         DeleteGear(Gear);
  3122         end
  3124         exit;
       
  3125         end;
       
  3126 
       
  3127     uw := (Gear^.Karma <> 0); // Was plane underwater last tick?
       
  3128     nuw := CheckCoordInWater(hwRound(Gear^.X) + Gear^.Radius * Gear^.Tag, hwRound(Gear^.Y)); // Is plane underwater now?
       
  3129 
       
  3130     // if water entered or left
       
  3131     if nuw <> uw then
       
  3132         begin
       
  3133         tmpFloat:= Gear^.dX;
       
  3134         Gear^.dX := cAirPlaneSpeed * Gear^.Tag;
       
  3135         AddSplashForGear(Gear, false);
       
  3136         Gear^.dX := tmpFloat;
       
  3137         StopSoundChan(Gear^.SoundChannel);
       
  3138         if nuw then
       
  3139             begin
       
  3140             Gear^.SoundChannel := LoopSound(sndPlaneWater);
       
  3141             StopSoundChan(Gear^.SoundChannel, 4000);
       
  3142             Gear^.SoundChannel := -1;
       
  3143             Gear^.Karma := 1;
       
  3144             end
       
  3145         else
       
  3146             begin
       
  3147             Gear^.SoundChannel := LoopSound(sndPlane);
       
  3148             Gear^.Karma := 0;
       
  3149             end;
       
  3150         end;
       
  3151 
  3123 end;
  3152 end;
  3124 
  3153 
  3125 procedure doStepAirAttack(Gear: PGear);
  3154 procedure doStepAirAttack(Gear: PGear);
  3126 var HHGear: PGear;
  3155 var HHGear: PGear;
  3127 begin
  3156 begin
  3156     else if (int2hwFloat(Gear^.Target.Y) - Gear^.Y > _0) then
  3185     else if (int2hwFloat(Gear^.Target.Y) - Gear^.Y > _0) then
  3157             Gear^.dX := Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(Gear^.Target.Y) - Gear^.Y) * 2 /
  3186             Gear^.dX := Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(Gear^.Target.Y) - Gear^.Y) * 2 /
  3158                 cGravity) * Gear^.Tag;
  3187                 cGravity) * Gear^.Tag;
  3159 
  3188 
  3160     Gear^.doStep := @doStepAirAttackWork;
  3189     Gear^.doStep := @doStepAirAttackWork;
  3161     Gear^.SoundChannel := LoopSound(sndPlane, 4000);
  3190 
       
  3191     if (WorldEdge = weSea) then
       
  3192         begin
       
  3193         Gear^.SoundChannel := LoopSound(sndPlaneWater, 4000);
       
  3194         Gear^.Karma := 1;
       
  3195         end
       
  3196     else
       
  3197         begin
       
  3198         Gear^.SoundChannel := LoopSound(sndPlane, 4000);
       
  3199         Gear^.Karma := 0;
       
  3200         end;
  3162 
  3201 
  3163 end;
  3202 end;
  3164 
  3203 
  3165 ////////////////////////////////////////////////////////////////////////////////
  3204 ////////////////////////////////////////////////////////////////////////////////
  3166 
  3205 
  3471 
  3510 
  3472         DeleteGear(Gear);
  3511         DeleteGear(Gear);
  3473         exit
  3512         exit
  3474         end;
  3513         end;
  3475 
  3514 
       
  3515     // particles
  3476     if (GameTicks and $3F) = 0 then
  3516     if (GameTicks and $3F) = 0 then
  3477         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
  3517         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
  3478 end;
  3518 end;
  3479 
  3519 
  3480 ////////////////////////////////////////////////////////////////////////////////
  3520 ////////////////////////////////////////////////////////////////////////////////