hedgewars/uGearsHandlersMess.pas
changeset 9820 1c04ccb9e5fd
parent 9817 2f2f4f0f671d
child 9824 136e0708eda2
equal deleted inserted replaced
9819:5b10d119955c 9820:1c04ccb9e5fd
   318     or (gX > max(LAND_WIDTH * 3 div 2, 6144)) then
   318     or (gX > max(LAND_WIDTH * 3 div 2, 6144)) then
   319         Gear^.State := Gear^.State or gstCollision;
   319         Gear^.State := Gear^.State or gstCollision;
   320 
   320 
   321     if Gear^.dY.isNegative then
   321     if Gear^.dY.isNegative then
   322         begin
   322         begin
   323         isFalling := true;
       
   324         land:= TestCollisionYwithGear(Gear, -1);
   323         land:= TestCollisionYwithGear(Gear, -1);
       
   324         isFalling := land = 0;
   325         if land <> 0 then
   325         if land <> 0 then
   326             begin
   326             begin
   327             collV := -1;
   327             collV := -1;
   328             if land and lfIce <> 0 then
   328             if land and lfIce <> 0 then
   329                  Gear^.dX := Gear^.dX * (_0_9 + Gear^.Friction * _0_1)
   329                  Gear^.dX := Gear^.dX * (_0_9 + Gear^.Friction * _0_1)
   421     if isFalling then
   421     if isFalling then
   422         begin
   422         begin
   423         Gear^.dY := Gear^.dY + cGravity;
   423         Gear^.dY := Gear^.dY + cGravity;
   424         if (GameFlags and gfMoreWind) <> 0 then
   424         if (GameFlags and gfMoreWind) <> 0 then
   425             Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density
   425             Gear^.dX := Gear^.dX + cWindSpeed / Gear^.Density
   426             end;
   426         end;
   427 
   427 
   428     Gear^.X := Gear^.X + Gear^.dX;
   428     Gear^.X := Gear^.X + Gear^.dX;
   429     Gear^.Y := Gear^.Y + Gear^.dY;
   429     Gear^.Y := Gear^.Y + Gear^.dY;
   430     CheckGearDrowning(Gear);
   430     CheckGearDrowning(Gear);
   431     //if (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) < _0_0002) and
   431     //if (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) < _0_0002) and
   932         if TestCollisionY(Gear, -1) <> 0 then
   932         if TestCollisionY(Gear, -1) <> 0 then
   933             Gear^.dY := _0;
   933             Gear^.dY := _0;
   934 
   934 
   935     if not Gear^.dY.isNegative then
   935     if not Gear^.dY.isNegative then
   936         if TestCollisionY(Gear, 1) <> 0 then
   936         if TestCollisionY(Gear, 1) <> 0 then
   937         begin
   937             begin
   938             Gear^.dY := - Gear^.dY * Gear^.Elasticity;
   938             Gear^.dY := - Gear^.dY * Gear^.Elasticity;
   939             if Gear^.dY > - _1div1024 then
   939             if Gear^.dY > - _1div1024 then
   940             begin
   940                 begin
   941                 Gear^.Active := false;
   941                 Gear^.Active := false;
   942                 exit
   942                 exit
   943             end
   943                 end
   944             else if Gear^.dY < - _0_03 then
   944             else if Gear^.dY < - _0_03 then
   945                 PlaySound(Gear^.ImpactSound)
   945                 PlaySound(Gear^.ImpactSound)
   946         end;
   946             end;
   947 
   947 
   948     Gear^.Y := Gear^.Y + Gear^.dY;
   948     Gear^.Y := Gear^.Y + Gear^.dY;
   949     CheckGearDrowning(Gear);
   949     CheckGearDrowning(Gear);
   950     Gear^.dY := Gear^.dY + cGravity
   950     Gear^.dY := Gear^.dY + cGravity
   951 end;
   951 end;
  1997         begin
  1997         begin
  1998         AllInactive := false;
  1998         AllInactive := false;
  1999 
  1999 
  2000         Gear^.dY := Gear^.dY + cGravity;
  2000         Gear^.dY := Gear^.dY + cGravity;
  2001 
  2001 
  2002         if (Gear^.dY.isNegative) and (TestCollisionYwithGear(Gear, -1) <> 0) then
  2002         if ((not Gear^.dY.isNegative) and (TestCollisionYwithGear(Gear, 1) <> 0)) or
  2003             Gear^.dY := _0;
  2003            (Gear^.dY.isNegative and (TestCollisionYwithGear(Gear, -1) <> 0)) then
  2004 
  2004              Gear^.dY := _0
  2005         Gear^.Y := Gear^.Y + Gear^.dY;
  2005         else Gear^.Y := Gear^.Y + Gear^.dY;
  2006 
  2006 
  2007         if (not Gear^.dY.isNegative) and (Gear^.dY > _0_001) then
  2007         if (not Gear^.dY.isNegative) and (Gear^.dY > _0_001) then
  2008             SetAllHHToActive(false);
  2008             SetAllHHToActive(false);
  2009 
  2009 
  2010         if (not Gear^.dY.isNegative) and (TestCollisionYwithGear(Gear, 1) <> 0) then
  2010         if (not Gear^.dY.isNegative) and (TestCollisionYwithGear(Gear, 1) <> 0) then