hedgewars/uGearsHandlersMess.pas
changeset 13403 9c9d29be9e00
parent 13402 13be6de7860f
child 13404 8ce83caec236
equal deleted inserted replaced
13402:13be6de7860f 13403:9c9d29be9e00
  1299 end;
  1299 end;
  1300 
  1300 
  1301 procedure LineShoveHelp(Gear: PGear; oX, oY, tX, tY, dX, dY: hwFloat; count: LongWord);
  1301 procedure LineShoveHelp(Gear: PGear; oX, oY, tX, tY, dX, dY: hwFloat; count: LongWord);
  1302 var dmg,power: LongInt;
  1302 var dmg,power: LongInt;
  1303 begin
  1303 begin
  1304     if ((Gear^.Kind = gtMinigunBullet) or (Gear^.Damage > 0))
  1304     if hwSqr(tX - oX) + hwSqr(tY - oY) > _0_25 then
  1305     and (hwSqr(tX - oX) + hwSqr(tY - oY) > _0_25) then
       
  1306     begin
  1305     begin
  1307         if (Gear^.AmmoType = amDEagle) or (Gear^.AmmoType = amMinigun) then
  1306         if (Gear^.AmmoType = amDEagle) or (Gear^.AmmoType = amMinigun) then
  1308             dmg:= Gear^.Boom
  1307             dmg:= Gear^.Boom
  1309         else
  1308         else
  1310             dmg:= Gear^.Timer * Gear^.Boom div 100000;
  1309             dmg:= Gear^.Timer * Gear^.Boom div 100000;
  1484     // remember who fired this
  1483     // remember who fired this
  1485     if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then
  1484     if (Gear^.Hedgehog <> nil) and (Gear^.Hedgehog^.Gear <> nil) then
  1486         Gear^.Data:= Pointer(Gear^.Hedgehog^.Gear);
  1485         Gear^.Data:= Pointer(Gear^.Hedgehog^.Gear);
  1487 
  1486 
  1488     PlaySound(sndGun);
  1487     PlaySound(sndGun);
       
  1488     ClearHitOrder();
  1489     // add 2 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just plain old weird angles
  1489     // add 2 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just plain old weird angles
  1490     Gear^.X := Gear^.X + Gear^.dX * 2;
  1490     Gear^.X := Gear^.X + Gear^.dX * 2;
  1491     Gear^.Y := Gear^.Y + Gear^.dY * 2;
  1491     Gear^.Y := Gear^.Y + Gear^.dY * 2;
  1492     Gear^.FlightTime := 0;
  1492     Gear^.FlightTime := 0;
  1493     Gear^.doStep := @doStepBulletWork
  1493     Gear^.doStep := @doStepBulletWork
  1526         CreateShellForGear(Gear, 1);
  1526         CreateShellForGear(Gear, 1);
  1527         Gear^.State := Gear^.State or gstAnimation;
  1527         Gear^.State := Gear^.State or gstAnimation;
  1528         Gear^.dX := SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _0_5;
  1528         Gear^.dX := SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _0_5;
  1529         Gear^.dY := -AngleCos(HHGear^.Angle) * _0_5;
  1529         Gear^.dY := -AngleCos(HHGear^.Angle) * _0_5;
  1530         PlaySound(sndGun);
  1530         PlaySound(sndGun);
       
  1531         ClearHitOrder();
  1531         // add 2 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just weird angles
  1532         // add 2 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just weird angles
  1532         Gear^.X := Gear^.X + Gear^.dX * 2;
  1533         Gear^.X := Gear^.X + Gear^.dX * 2;
  1533         Gear^.Y := Gear^.Y + Gear^.dY * 2;
  1534         Gear^.Y := Gear^.Y + Gear^.dY * 2;
  1534         Gear^.FlightTime := 0;
  1535         Gear^.FlightTime := 0;
  1535         Gear^.doStep := @doStepBulletWork;
  1536         Gear^.doStep := @doStepBulletWork;