1045 |
1045 |
1046 HHGear^.Y:= HHGear^.Y + cGravity * 100; |
1046 HHGear^.Y:= HHGear^.Y + cGravity * 100; |
1047 end; |
1047 end; |
1048 |
1048 |
1049 //////////////////////////////////////////////////////////////////////////////// |
1049 //////////////////////////////////////////////////////////////////////////////// |
1050 const cAirPlaneSpeed: hwFloat = (isNegative: false; QWordValue: 6012954214); // 1.4 |
|
1051 cBombsDistance: hwFloat = (isNegative: false; QWordValue: 128849018880); // 30 |
|
1052 cBombsSpeed : hwFloat = (isNegative: false; QWordValue: 429496729); |
|
1053 |
|
1054 procedure doStepAirAttackWork(Gear: PGear); |
1050 procedure doStepAirAttackWork(Gear: PGear); |
1055 begin |
1051 begin |
1056 AllInactive:= false; |
1052 AllInactive:= false; |
1057 Gear^.X:= Gear^.X + cAirPlaneSpeed * Gear^.Tag; |
1053 Gear^.X:= Gear^.X + cAirPlaneSpeed * Gear^.Tag; |
1058 if (Gear^.Health > 0)and( not (Gear^.X < Gear^.dX))and(Gear^.X < Gear^.dX + cAirPlaneSpeed) then |
1054 if (Gear^.Health > 0)and(not (Gear^.X < Gear^.dX))and(Gear^.X < Gear^.dX + cAirPlaneSpeed) then |
1059 begin |
1055 begin |
1060 dec(Gear^.Health); |
1056 dec(Gear^.Health); |
1061 case Gear^.State of |
1057 case Gear^.State of |
1062 0: FollowGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
1058 0: FollowGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtAirBomb, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
1063 1: FollowGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
1059 1: FollowGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtMine, 0, cBombsSpeed * Gear^.Tag, _0, 0); |
1064 end; |
1060 end; |
1065 Gear^.dX:= Gear^.dX + cBombsDistance * Gear^.Tag |
1061 Gear^.dX:= Gear^.dX + int2hwFloat(30 * Gear^.Tag) |
1066 end; |
1062 end; |
1067 if (hwRound(Gear^.X) > 3072) or (hwRound(Gear^.X) < -1024) then DeleteGear(Gear) |
1063 if (hwRound(Gear^.X) > 3072) or (hwRound(Gear^.X) < -1024) then DeleteGear(Gear) |
1068 end; |
1064 end; |
1069 |
1065 |
1070 procedure doStepAirAttack(Gear: PGear); |
1066 procedure doStepAirAttack(Gear: PGear); |
1071 begin |
1067 begin |
1072 AllInactive:= false; |
1068 AllInactive:= false; |
|
1069 |
1073 if Gear^.X.QWordValue = 0 then Gear^.Tag:= 1 |
1070 if Gear^.X.QWordValue = 0 then Gear^.Tag:= 1 |
1074 else Gear^.Tag:= -1; |
1071 else Gear^.Tag:= -1; |
1075 Gear^.X:= _1024 - _2048 * Gear^.Tag; |
1072 Gear^.X:= _1024 - _2048 * Gear^.Tag; |
1076 Gear^.Y:= -_128; |
1073 Gear^.Y:= -_128; |
1077 Gear^.dX:= int2hwFloat(TargetPoint.X) - |
1074 Gear^.dX:= int2hwFloat(TargetPoint.X - 5 * Gear^.Tag * 15); |
1078 cBombsDistance * _5 * Gear^.Tag / _2; |
1075 |
1079 |
1076 if int2hwFloat(TargetPoint.Y) - Gear^.Y > _0 then |
1080 if TargetPoint.Y - hwRound(Gear^.Y) > 0 then |
|
1081 Gear^.dX:= Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(TargetPoint.Y) - Gear^.Y) * 2 / cGravity) * Gear^.Tag; |
1077 Gear^.dX:= Gear^.dX - cBombsSpeed * hwSqrt((int2hwFloat(TargetPoint.Y) - Gear^.Y) * 2 / cGravity) * Gear^.Tag; |
|
1078 addfilelog('attack: x = '+floattostr(gear^.dx)); |
|
1079 |
1082 Gear^.Health:= 6; |
1080 Gear^.Health:= 6; |
1083 Gear^.doStep:= @doStepAirAttackWork |
1081 Gear^.doStep:= @doStepAirAttackWork |
1084 end; |
1082 end; |
1085 |
1083 |
1086 //////////////////////////////////////////////////////////////////////////////// |
1084 //////////////////////////////////////////////////////////////////////////////// |