hedgewars/uGearsHandlersMess.pas
changeset 14591 0da43a3d5500
parent 14589 e26fa5ea2bf6
child 14593 34e810295d08
equal deleted inserted replaced
14590:0149d5ed5dc5 14591:0da43a3d5500
  6447         DeleteGear(Gear);
  6447         DeleteGear(Gear);
  6448         AfterAttack;
  6448         AfterAttack;
  6449         exit
  6449         exit
  6450         end;
  6450         end;
  6451     updateFuel(Gear);
  6451     updateFuel(Gear);
  6452     if WorldWrap(Gear) and (WorldEdge = weWrap) and (Gear^.Target.X = NoPointX) then
  6452     if (WorldEdge <> weBounce) then
  6453         // Use FlightTime to count number of times the gear has world-wrapped
  6453         if WorldWrap(Gear) and (WorldEdge = weWrap) and (Gear^.Target.X = NoPointX) then
  6454         inc(Gear^.FlightTime);
  6454             // Use FlightTime to count number of times the gear has world-wrapped
       
  6455             inc(Gear^.FlightTime);
  6455 
  6456 
  6456     with Gear^ do
  6457     with Gear^ do
  6457         begin
  6458         begin
  6458         HedgehogChAngle(HHGear);
  6459         HedgehogChAngle(HHGear);
  6459         ndX:= SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _4;
  6460         ndX:= SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _4;
  6460         ndY:= -AngleCos(HHGear^.Angle) * _4;
  6461         ndY:= -AngleCos(HHGear^.Angle) * _4;
  6461         if (ndX <> dX) or (ndY <> dY) or (Gear^.Message and (gmUp or gmDown) <> 0) or
  6462         if (ndX <> dX) or (ndY <> dY) or (Gear^.Message and (gmUp or gmDown) <> 0) or
  6462            (((Target.X <> NoPointX) and (Target.X and LAND_WIDTH_MASK = 0) and
  6463            (((Target.X <> NoPointX) and (Target.X and LAND_WIDTH_MASK = 0) and
  6463              (Target.Y and LAND_HEIGHT_MASK = 0) and ((Land[Target.Y, Target.X] = 0)) and
  6464              (Target.Y and LAND_HEIGHT_MASK = 0) and ((Land[Target.Y, Target.X] = 0)) and
  6464              (not CheckCoordInWater(Target.X, Target.Y))) and (CheckGearNear(gtAirMine, int2hwFloat(Target.X),int2hwFloat(Target.Y), Gear^.Radius*3, Gear^.Radius*3) = nil)) then
  6465              (not CheckCoordInWater(Target.X, Target.Y))) and (CheckGearNear(gtAirMine, int2hwFloat(Target.X),int2hwFloat(Target.Y), Gear^.Radius*3, Gear^.Radius*3) = nil) and
       
  6466              (not ((WorldEdge = weBounce) and ((Target.X > rightX) or (Target.X < leftX))))) then
  6465             begin
  6467             begin
  6466             updateTarget(Gear, ndX, ndY);
  6468             updateTarget(Gear, ndX, ndY);
  6467             Timer := iceWaitCollision;
  6469             Timer := iceWaitCollision;
  6468             FlightTime := 0;
  6470             FlightTime := 0;
  6469             end
  6471             end
  6663                 Target.X:= gX;
  6665                 Target.X:= gX;
  6664                 Target.Y:= gY;
  6666                 Target.Y:= gY;
  6665                 X:= HHGear^.X;
  6667                 X:= HHGear^.X;
  6666                 Y:= HHGear^.Y
  6668                 Y:= HHGear^.Y
  6667                 end
  6669                 end
       
  6670             else if (WorldEdge = weBounce) and ((gX > rightX) or (gX < leftX)) then
       
  6671                 begin
       
  6672                 Target.X:= gX;
       
  6673                 Target.Y:= gY;
       
  6674                 X:= HHGear^.X;
       
  6675                 Y:= HHGear^.Y
       
  6676                 end
  6668             else
  6677             else
  6669                 begin
  6678                 begin
  6670                 iter:= CheckGearNear(Gear, gtAirMine, Gear^.Radius*2, Gear^.Radius*2);
  6679                 iter:= CheckGearNear(Gear, gtAirMine, Gear^.Radius*2, Gear^.Radius*2);
  6671                 if (iter <> nil) and (iter^.State <> gstFrozen) then
  6680                 if (iter <> nil) and (iter^.State <> gstFrozen) then
  6672                     begin
  6681                     begin