1479 Gear^.Timer:= 550; |
1479 Gear^.Timer:= 550; |
1480 |
1480 |
1481 Gear^.doStep:= @doStepKamikazeIdle |
1481 Gear^.doStep:= @doStepKamikazeIdle |
1482 end; |
1482 end; |
1483 |
1483 |
1484 procedure doStepSpider(Gear: PGear); |
1484 procedure doStepCakeWork(Gear: PGear); |
1485 begin |
1485 const dirs: array[0..3] of TPoint = ((x: 0; y: -1), (x: 1; y: 0),(x: 0; y: 1),(x: -1; y: 0)); |
1486 AfterAttack; |
1486 var xx, yy, xxn, yyn: LongInt; |
1487 DeleteGear(Gear); |
1487 da: LongInt; |
1488 end; |
1488 |
|
1489 procedure PrevAngle; |
|
1490 begin |
|
1491 Gear^.Angle:= (Gear^.Angle + 4 - dA) mod 4 |
|
1492 end; |
|
1493 |
|
1494 procedure NextAngle; |
|
1495 begin |
|
1496 Gear^.Angle:= (Gear^.Angle + 4 + dA) mod 4 |
|
1497 end; |
|
1498 |
|
1499 begin |
|
1500 inc(Gear^.Tag); |
|
1501 if Gear^.Tag < 5 then exit; |
|
1502 |
|
1503 |
|
1504 dA:= hwSign(Gear^.dX); |
|
1505 xx:= dirs[Gear^.Angle].x; |
|
1506 yy:= dirs[Gear^.Angle].y; |
|
1507 xxn:= dirs[(Gear^.Angle + 4 + dA) mod 4].x; |
|
1508 yyn:= dirs[(Gear^.Angle + 4 + dA) mod 4].y; |
|
1509 |
|
1510 |
|
1511 if (xx = 0) then |
|
1512 if TestCollisionYwithGear(Gear, yy) then |
|
1513 PrevAngle |
|
1514 else begin |
|
1515 Gear^.Tag:= 0; |
|
1516 Gear^.Y:= Gear^.Y + int2hwFloat(yy); |
|
1517 if not TestCollisionXwithGear(Gear, xxn) then NextAngle |
|
1518 end; |
|
1519 |
|
1520 if (yy = 0) then |
|
1521 if TestCollisionXwithGear(Gear, xx) then |
|
1522 PrevAngle |
|
1523 else begin |
|
1524 Gear^.Tag:= 0; |
|
1525 Gear^.X:= Gear^.X + int2hwFloat(xx); |
|
1526 if not TestCollisionYwithGear(Gear, yyn) then NextAngle |
|
1527 end; |
|
1528 |
|
1529 dec(Gear^.Health); |
|
1530 if Gear^.Health = 0 then |
|
1531 begin |
|
1532 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 75, EXPLAutoSound); |
|
1533 AfterAttack; |
|
1534 DeleteGear(Gear) |
|
1535 end |
|
1536 end; |
|
1537 |
|
1538 procedure doStepCakeFall(Gear: PGear); |
|
1539 begin |
|
1540 AllInactive:= false; |
|
1541 |
|
1542 Gear^.dY:= Gear^.dY + cGravity; |
|
1543 if TestCollisionYwithGear(Gear, 1) then |
|
1544 Gear^.doStep:= @doStepCakeWork |
|
1545 else |
|
1546 begin |
|
1547 Gear^.Y:= Gear^.Y + Gear^.dY; |
|
1548 if CheckGearDrowning(Gear) then AfterAttack |
|
1549 end |
|
1550 end; |
|
1551 |
|
1552 procedure doStepCake(Gear: PGear); |
|
1553 var HHGear: PGear; |
|
1554 begin |
|
1555 AllInactive:= false; |
|
1556 |
|
1557 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
|
1558 DeleteCI(HHGear); |
|
1559 |
|
1560 Gear^.doStep:= @doStepCakeFall |
|
1561 end; |
|
1562 |