861 //////////////////////////////////////////////////////////////////////////////// |
861 //////////////////////////////////////////////////////////////////////////////// |
862 procedure doStepHedgehogMoving(Gear: PGear); |
862 procedure doStepHedgehogMoving(Gear: PGear); |
863 var isFalling, isUnderwater: boolean; |
863 var isFalling, isUnderwater: boolean; |
864 land: Word; |
864 land: Word; |
865 begin |
865 begin |
|
866 if Gear^.Hedgehog^.Unplaced then |
|
867 begin |
|
868 Gear^.dY:= _0; |
|
869 Gear^.dX:= _0; |
|
870 Gear^.State:= Gear^.State and (not gstMoving); |
|
871 exit |
|
872 end; |
|
873 |
866 land:= 0; |
874 land:= 0; |
867 isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius); |
875 isUnderwater:= CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + Gear^.Radius); |
868 if Gear^.dX.QWordValue > 8160437862 then |
876 if Gear^.dX.QWordValue > 8160437862 then |
869 Gear^.dX.QWordValue:= 8160437862; |
877 Gear^.dX.QWordValue:= 8160437862; |
870 if Gear^.dY.QWordValue > 8160437862 then |
878 if Gear^.dY.QWordValue > 8160437862 then |
871 Gear^.dY.QWordValue:= 8160437862; |
879 Gear^.dY.QWordValue:= 8160437862; |
872 |
880 |
873 if Gear^.Hedgehog^.Unplaced then |
|
874 begin |
|
875 Gear^.dY:= _0; |
|
876 Gear^.dX:= _0; |
|
877 Gear^.State:= Gear^.State and (not gstMoving); |
|
878 exit |
|
879 end; |
|
880 isFalling:= (Gear^.dY.isNegative) or (TestCollisionYKick(Gear, 1) = 0); |
881 isFalling:= (Gear^.dY.isNegative) or (TestCollisionYKick(Gear, 1) = 0); |
881 if isFalling then |
882 if isFalling then |
882 begin |
883 begin |
883 land:= TestCollisionYKick(Gear, -1); |
884 land:= TestCollisionYKick(Gear, -1); |
884 if (Gear^.dY.isNegative) and (land <> 0) then |
885 if (Gear^.dY.isNegative) and (land <> 0) then |
1357 |
1358 |
1358 //////////////////////////////////////////////////////////////////////////////// |
1359 //////////////////////////////////////////////////////////////////////////////// |
1359 procedure doStepHedgehog(Gear: PGear); |
1360 procedure doStepHedgehog(Gear: PGear); |
1360 var tX: hwFloat; |
1361 var tX: hwFloat; |
1361 begin |
1362 begin |
1362 CheckGearDrowning(Gear); |
1363 // it might make sense to skip more than just drowning check here |
|
1364 if (not Gear^.Hedgehog^.Unplaced) then |
|
1365 CheckGearDrowning(Gear); |
1363 if Gear = nil then exit; |
1366 if Gear = nil then exit; |
1364 tX:= Gear^.X; |
1367 tX:= Gear^.X; |
1365 if WorldWrap(Gear) then |
1368 if WorldWrap(Gear) then |
1366 begin |
1369 begin |
1367 if (WorldEdge <> weBounce) and (Gear = CurrentHedgehog^.Gear) and |
1370 if (WorldEdge <> weBounce) and (Gear = CurrentHedgehog^.Gear) and |