1439 else // gsttmpFlag = 0 |
1439 else // gsttmpFlag = 0 |
1440 if TurnTimeLeft = 0 then Gear^.State := Gear^.State or gsttmpFlag; |
1440 if TurnTimeLeft = 0 then Gear^.State := Gear^.State or gsttmpFlag; |
1441 end; |
1441 end; |
1442 |
1442 |
1443 //////////////////////////////////////////////////////////////////////////////// |
1443 //////////////////////////////////////////////////////////////////////////////// |
1444 procedure doStepSMine(Gear: PGear); forward; |
1444 procedure doStepSMine(Gear: PGear); |
1445 procedure doStepSMineSticked(Gear: PGear); |
1445 begin |
1446 begin |
1446 DeleteCI(Gear); |
1447 if (hwAbs(Gear^.dX) > _0) or (hwAbs(Gear^.dY) > _0) then // moving - "unstick" (better solution?) |
1447 // TODO: do real calculation? |
1448 begin |
1448 if TestCollisionXwithGear(Gear, 2) and TestCollisionYwithGear(Gear, -2) then |
1449 Gear^.doStep:= @doStepSMine; |
1449 begin |
1450 Gear^.doStep(Gear); |
1450 Gear^.dX:= _0; |
1451 exit; |
1451 Gear^.dY:= _0; |
1452 end; |
1452 Gear^.DirAngle:= 225 |
|
1453 end |
|
1454 else if TestCollisionXwithGear(Gear, -2) and TestCollisionYwithGear(Gear, -2) then |
|
1455 begin |
|
1456 Gear^.dX:= _0; |
|
1457 Gear^.dY:= _0; |
|
1458 Gear^.DirAngle:= 135 |
|
1459 end |
|
1460 else if TestCollisionXwithGear(Gear, 2) and TestCollisionYwithGear(Gear, 2) then |
|
1461 begin |
|
1462 Gear^.dX:= _0; |
|
1463 Gear^.dY:= _0; |
|
1464 Gear^.DirAngle:= 315 |
|
1465 end |
|
1466 else if TestCollisionXwithGear(Gear, -2) and TestCollisionYwithGear(Gear, 2) then |
|
1467 begin |
|
1468 Gear^.dX:= _0; |
|
1469 Gear^.dY:= _0; |
|
1470 Gear^.DirAngle:= 45 |
|
1471 end |
|
1472 else if TestCollisionYwithGear(Gear, -2) then |
|
1473 begin |
|
1474 Gear^.dX:= _0; |
|
1475 Gear^.dY:= _0; |
|
1476 Gear^.DirAngle:= 180 |
|
1477 end |
|
1478 else if TestCollisionYwithGear(Gear, 2) then |
|
1479 begin |
|
1480 Gear^.dX:= _0; |
|
1481 Gear^.dY:= _0; |
|
1482 Gear^.DirAngle:= 0 |
|
1483 end |
|
1484 else if TestCollisionXwithGear(Gear, -2) then |
|
1485 begin |
|
1486 Gear^.dX:= _0; |
|
1487 Gear^.dY:= _0; |
|
1488 Gear^.DirAngle:= 90 |
|
1489 end |
|
1490 else if TestCollisionXwithGear(Gear, 2) then |
|
1491 begin |
|
1492 Gear^.dX:= _0; |
|
1493 Gear^.dY:= _0; |
|
1494 Gear^.DirAngle:= 270 |
|
1495 end |
|
1496 else |
|
1497 begin |
|
1498 doStepFallingGear(Gear); |
|
1499 AllInactive := false; |
|
1500 CalcRotationDirAngle(Gear); |
|
1501 end; |
|
1502 AddGearCI(Gear); |
|
1503 |
1453 if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then |
1504 if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then |
1454 if ((Gear^.State and gstAttacking) = 0) then |
1505 if ((Gear^.State and gstAttacking) = 0) then |
1455 begin |
1506 begin |
1456 if ((GameTicks and $1F) = 0) then |
1507 if ((GameTicks and $1F) = 0) then |
1457 if CheckGearNear(Gear, gtHedgehog, 46, 32) <> nil then Gear^.State := Gear^.State or |
1508 if CheckGearNear(Gear, gtHedgehog, 46, 32) <> nil then Gear^.State := Gear^.State or |
1469 end; |
1520 end; |
1470 dec(Gear^.Timer); |
1521 dec(Gear^.Timer); |
1471 end |
1522 end |
1472 else // gsttmpFlag = 0 |
1523 else // gsttmpFlag = 0 |
1473 if TurnTimeLeft = 0 then Gear^.State := Gear^.State or gsttmpFlag; |
1524 if TurnTimeLeft = 0 then Gear^.State := Gear^.State or gsttmpFlag; |
1474 end; |
|
1475 |
|
1476 procedure doStepSMine(Gear: PGear); |
|
1477 begin |
|
1478 if ((Gear^.State and gstCollision) <> 0) and (Gear^.dX < _0_2) and (Gear^.dY < _0_2) then |
|
1479 begin |
|
1480 Gear^.dX:= _0; |
|
1481 Gear^.dY:= _0; |
|
1482 Gear^.doStep:= @doStepSMineSticked; |
|
1483 Gear^.doStep(Gear); |
|
1484 exit |
|
1485 end; |
|
1486 if (Gear^.State and gstMoving) <> 0 then |
|
1487 begin |
|
1488 DeleteCI(Gear); |
|
1489 doStepFallingGear(Gear); |
|
1490 if (Gear^.State and gstMoving) = 0 then |
|
1491 AddGearCI(Gear); |
|
1492 end; |
|
1493 CalcRotationDirAngle(Gear); |
|
1494 AllInactive := false |
|
1495 end; |
1525 end; |
1496 |
1526 |
1497 //////////////////////////////////////////////////////////////////////////////// |
1527 //////////////////////////////////////////////////////////////////////////////// |
1498 procedure doStepDynamite(Gear: PGear); |
1528 procedure doStepDynamite(Gear: PGear); |
1499 begin |
1529 begin |