326 //////////////////////////////////////////////////////////////////////////////// |
326 //////////////////////////////////////////////////////////////////////////////// |
327 procedure doStepHedgehogFree(Gear: PGear); |
327 procedure doStepHedgehogFree(Gear: PGear); |
328 var prevState: Longword; |
328 var prevState: Longword; |
329 begin |
329 begin |
330 prevState:= Gear^.State; |
330 prevState:= Gear^.State; |
331 if not TestCollisionYwithGear(Gear, 1) then |
331 if not TestCollisionYKick(Gear, 1) then |
332 begin |
332 begin |
333 if (Gear^.dY.isNegative) and TestCollisionYwithGear(Gear, -1) then Gear^.dY:= _0; |
333 if (Gear^.dY.isNegative) and TestCollisionYKick(Gear, -1) then Gear^.dY:= _0; |
334 Gear^.State:= Gear^.State or gstFalling or gstMoving; |
334 Gear^.State:= Gear^.State or gstFalling or gstMoving; |
335 Gear^.dY:= Gear^.dY + cGravity |
335 Gear^.dY:= Gear^.dY + cGravity |
336 end else begin |
336 end else begin |
337 CheckHHDamage(Gear); |
337 CheckHHDamage(Gear); |
338 if ((hwAbs(Gear^.dX) + hwAbs(Gear^.dY)) < _0_55) |
338 if ((hwAbs(Gear^.dX) + hwAbs(Gear^.dY)) < _0_55) |
343 end; |
343 end; |
344 |
344 |
345 if (Gear^.State <> 0) then DeleteCI(Gear); |
345 if (Gear^.State <> 0) then DeleteCI(Gear); |
346 |
346 |
347 if (Gear^.State and gstMoving) <> 0 then |
347 if (Gear^.State and gstMoving) <> 0 then |
348 if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then |
348 if TestCollisionXKick(Gear, hwSign(Gear^.dX)) then |
349 if ((Gear^.State and gstFalling) = 0) then |
349 if ((Gear^.State and gstFalling) = 0) then |
350 if hwAbs(Gear^.dX) > _0_01 then |
350 if hwAbs(Gear^.dX) > _0_01 then |
351 if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -1, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_96; Gear^.Y:= Gear^.Y - _1 end else |
351 if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -1, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_96; Gear^.Y:= Gear^.Y - _1 end else |
352 if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -2, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_93; Gear^.Y:= Gear^.Y - _2 end else |
352 if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -2, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_93; Gear^.Y:= Gear^.Y - _2 end else |
353 if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -3, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_9 ; Gear^.Y:= Gear^.Y - _3 end else |
353 if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -3, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_9 ; Gear^.Y:= Gear^.Y - _3 end else |
375 if (Gear^.State and gstMoving) <> 0 then |
375 if (Gear^.State and gstMoving) <> 0 then |
376 begin |
376 begin |
377 Gear^.State:= Gear^.State and not gstAnimation; |
377 Gear^.State:= Gear^.State and not gstAnimation; |
378 Gear^.X:= Gear^.X + Gear^.dX; |
378 Gear^.X:= Gear^.X + Gear^.dX; |
379 Gear^.Y:= Gear^.Y + Gear^.dY; |
379 Gear^.Y:= Gear^.Y + Gear^.dY; |
380 if (Gear^.dY > _0) and not TestCollisionYwithGear(Gear, 1) and TestCollisionYwithXYShift(Gear, 0, 1, 1) then |
380 if (not Gear^.dY.isNegative) and |
|
381 (not TestCollisionYKick(Gear, 1)) and |
|
382 TestCollisionYwithXYShift(Gear, 0, 1, 1) then |
381 begin |
383 begin |
382 CheckHHDamage(Gear); |
384 CheckHHDamage(Gear); |
383 Gear^.dY:= _0; |
385 Gear^.dY:= _0; |
384 Gear^.Y:= Gear^.Y + _1 |
386 Gear^.Y:= Gear^.Y + _1 |
385 end; |
387 end; |