hedgewars/GSHandlers.inc
changeset 543 465e2ec8f05f
parent 542 ec26095f1bed
child 545 f527450337c1
equal deleted inserted replaced
542:ec26095f1bed 543:465e2ec8f05f
  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 ////////////////////////////////////////////////////////////////////////////////