hedgewars/uGearsHandlersMess.pas
changeset 9768 08799c901a42
parent 9767 17df4c8201f6
child 9769 5814e0c47c99
equal deleted inserted replaced
9767:17df4c8201f6 9768:08799c901a42
   435         Gear^.State := Gear^.State or gstCollision;
   435         Gear^.State := Gear^.State or gstCollision;
   436     
   436     
   437     if ((xland or land) and lfBouncy <> 0) and
   437     if ((xland or land) and lfBouncy <> 0) and
   438         (((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or
   438         (((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or
   439             ((Gear^.Radius >= 3) and
   439             ((Gear^.Radius >= 3) and
   440                 ((Gear^.dX.QWordValue > _0_1.QWordValue) or (Gear^.dY.QWordValue > _0_1.QWordValue)))) then
   440                 ((Gear^.dX.QWordValue > _0_15.QWordValue) or (Gear^.dY.QWordValue > _0_15.QWordValue)))) then
   441         PlaySound(sndMelonImpact, true)
   441         PlaySound(sndMelonImpact, true)
   442     else if (Gear^.nImpactSounds > 0) and
   442     else if (Gear^.nImpactSounds > 0) and
   443         (Gear^.State and gstCollision <> 0) and
   443         (Gear^.State and gstCollision <> 0) and
   444         (((Gear^.Kind <> gtMine) and (Gear^.Damage <> 0)) or (Gear^.State and gstMoving <> 0)) and
   444         (((Gear^.Kind <> gtMine) and (Gear^.Damage <> 0)) or (Gear^.State and gstMoving <> 0)) and
   445         (((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or
   445         (((Gear^.Radius < 3) and (Gear^.dY < -_0_1)) or
  2468 procedure doStepGirder(Gear: PGear);
  2468 procedure doStepGirder(Gear: PGear);
  2469 var
  2469 var
  2470     HHGear: PGear;
  2470     HHGear: PGear;
  2471     x, y, tx, ty: hwFloat;
  2471     x, y, tx, ty: hwFloat;
  2472     rx: LongInt;
  2472     rx: LongInt;
       
  2473     LandFlags: Word;
  2473 begin
  2474 begin
  2474     AllInactive := false;
  2475     AllInactive := false;
  2475 
  2476 
  2476     HHGear := Gear^.Hedgehog^.Gear;
  2477     HHGear := Gear^.Hedgehog^.Gear;
  2477     tx := int2hwFloat(Gear^.Target.X);
  2478     tx := int2hwFloat(Gear^.Target.X);
  2478     ty := int2hwFloat(Gear^.Target.Y);
  2479     ty := int2hwFloat(Gear^.Target.Y);
  2479     x := HHGear^.X;
  2480     x := HHGear^.X;
  2480     y := HHGear^.Y;
  2481     y := HHGear^.Y;
  2481     rx:= hwRound(x);
  2482     rx:= hwRound(x);
  2482 
  2483 
       
  2484     LandFlags:= 0;
       
  2485     if cIce then LandFlags:= lfIce
       
  2486     else if Gear^.AmmoType = amRubber then LandFlags:= lfBouncy;
       
  2487 
  2483     if ((Distance(tx - x, ty - y) > _256) and ((WorldEdge <> weWrap) or 
  2488     if ((Distance(tx - x, ty - y) > _256) and ((WorldEdge <> weWrap) or 
  2484             (
  2489             (
  2485             (Distance(tx - int2hwFloat(rightX+(rx-leftX)), ty - y) > _256) and
  2490             (Distance(tx - int2hwFloat(rightX+(rx-leftX)), ty - y) > _256) and
  2486             (Distance(tx - int2hwFloat(leftX-(rightX-rx)), ty - y) > _256)
  2491             (Distance(tx - int2hwFloat(leftX-(rightX-rx)), ty - y) > _256)
  2487             )))
  2492             )))
  2488     or (not TryPlaceOnLand(Gear^.Target.X - SpritesData[sprAmGirder].Width div 2, Gear^.Target.Y - SpritesData[sprAmGirder].Height div 2, sprAmGirder, Gear^.State, true, false)) then
  2493     or (not TryPlaceOnLand(Gear^.Target.X - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Width div 2, Gear^.Target.Y - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Height div 2, Ammoz[Gear^.AmmoType].PosSprite, Gear^.State, true, false, LandFlags)) then
  2489         begin
  2494         begin
  2490         PlaySound(sndDenied);
  2495         PlaySound(sndDenied);
  2491         HHGear^.Message := HHGear^.Message and (not gmAttack);
  2496         HHGear^.Message := HHGear^.Message and (not gmAttack);
  2492         HHGear^.State := HHGear^.State and (not gstAttacking);
  2497         HHGear^.State := HHGear^.State and (not gstAttacking);
  2493         HHGear^.State := HHGear^.State or gstHHChooseTarget;
  2498         HHGear^.State := HHGear^.State or gstHHChooseTarget;