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 //////////////////////////////////////////////////////////////////////////////// |
|
1485 const cakeh = 27; |
|
1486 var CakePoints: array[0..Pred(cakeh)] of record x, y: hwFloat; end; |
|
1487 CakeI: Longword; |
|
1488 |
1484 procedure doStepCakeWork(Gear: PGear); |
1489 procedure doStepCakeWork(Gear: PGear); |
1485 const dirs: array[0..3] of TPoint = ((x: 0; y: -1), (x: 1; y: 0),(x: 0; y: 1),(x: -1; y: 0)); |
1490 const dirs: array[0..3] of TPoint = ((x: 0; y: -1), (x: 1; y: 0),(x: 0; y: 1),(x: -1; y: 0)); |
1486 var xx, yy, xxn, yyn: LongInt; |
1491 var xx, yy, xxn, yyn: LongInt; |
1487 da: LongInt; |
1492 da: LongInt; |
|
1493 tdx, tdy: hwFloat; |
1488 |
1494 |
1489 procedure PrevAngle; |
1495 procedure PrevAngle; |
1490 begin |
1496 begin |
1491 Gear^.Angle:= (Gear^.Angle + 4 - dA) mod 4 |
1497 Gear^.Angle:= (Gear^.Angle + 4 - dA) mod 4 |
1492 end; |
1498 end; |
1524 Gear^.Tag:= 0; |
1529 Gear^.Tag:= 0; |
1525 Gear^.X:= Gear^.X + int2hwFloat(xx); |
1530 Gear^.X:= Gear^.X + int2hwFloat(xx); |
1526 if not TestCollisionYwithGear(Gear, yyn) then NextAngle |
1531 if not TestCollisionYwithGear(Gear, yyn) then NextAngle |
1527 end; |
1532 end; |
1528 |
1533 |
|
1534 if Gear^.Tag = 0 then |
|
1535 begin |
|
1536 CakeI:= (CakeI + 1) mod cakeh; |
|
1537 tdx:= CakePoints[CakeI].x - Gear^.X; |
|
1538 tdy:= - CakePoints[CakeI].y + Gear^.Y; |
|
1539 CakePoints[CakeI].x:= Gear^.X; |
|
1540 CakePoints[CakeI].y:= Gear^.Y; |
|
1541 Gear^.DirAngle:= DxDy2Angle(tdx, tdy); |
|
1542 end; |
|
1543 |
1529 dec(Gear^.Health); |
1544 dec(Gear^.Health); |
1530 if (Gear^.Health = 0) or ((Gear^.Message and gm_Attack) <> 0) then |
1545 if (Gear^.Health = 0) or ((Gear^.Message and gm_Attack) <> 0) then |
1531 begin |
1546 begin |
1532 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 75, EXPLAutoSound); |
1547 doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 75, EXPLAutoSound); |
1533 AfterAttack; |
1548 AfterAttack; |
1534 DeleteGear(Gear) |
1549 DeleteGear(Gear) |
1535 end |
1550 end |
1536 end; |
1551 end; |
1537 |
1552 |
|
1553 procedure doStepCakeUp(Gear: PGear); |
|
1554 var i: Longword; |
|
1555 begin |
|
1556 AllInactive:= false; |
|
1557 |
|
1558 begin |
|
1559 for i:= 0 to Pred(cakeh) do |
|
1560 begin |
|
1561 CakePoints[i].x:= Gear^.X; |
|
1562 CakePoints[i].y:= Gear^.Y |
|
1563 end; |
|
1564 CakeI:= 0; |
|
1565 Gear^.doStep:= @doStepCakeWork |
|
1566 end |
|
1567 end; |
|
1568 |
1538 procedure doStepCakeFall(Gear: PGear); |
1569 procedure doStepCakeFall(Gear: PGear); |
1539 begin |
1570 begin |
1540 AllInactive:= false; |
1571 AllInactive:= false; |
1541 |
1572 |
1542 Gear^.dY:= Gear^.dY + cGravity; |
1573 Gear^.dY:= Gear^.dY + cGravity; |
1543 if TestCollisionYwithGear(Gear, 1) then |
1574 if TestCollisionYwithGear(Gear, 1) then |
1544 Gear^.doStep:= @doStepCakeWork |
1575 Gear^.doStep:= @doStepCakeUp |
1545 else |
1576 else |
1546 begin |
1577 begin |
1547 Gear^.Y:= Gear^.Y + Gear^.dY; |
1578 Gear^.Y:= Gear^.Y + Gear^.dY; |
1548 if CheckGearDrowning(Gear) then AfterAttack |
1579 if CheckGearDrowning(Gear) then AfterAttack |
1549 end |
1580 end |