hedgewars/uAIMisc.pas
changeset 108 08f1fe6f21f8
parent 100 f324a18698fe
child 136 89970b70b076
equal deleted inserted replaced
107:b08ce0293a51 108:08f1fe6f21f8
   241 case JumpType of
   241 case JumpType of
   242      jmpNone: exit;
   242      jmpNone: exit;
   243     jmpHJump: if not TestCollisionYwithGear(Gear, -1) then
   243     jmpHJump: if not TestCollisionYwithGear(Gear, -1) then
   244                  begin
   244                  begin
   245                  Gear.dY:= -0.20;
   245                  Gear.dY:= -0.20;
   246                  Gear.dX:= 0.0000001 * Sign(Gear.dX);
   246                  Gear.dX:= 0.0000001 * hwSign(Gear.dX);
   247                  Gear.X:= Gear.X - Sign(Gear.dX)*0.00008; // shift compensation
   247                  Gear.X:= Gear.X - hwSign(Gear.dX)*0.00008; // shift compensation
   248                  Gear.State:= Gear.State or gstFalling or gstHHJumping;
   248                  Gear.State:= Gear.State or gstFalling or gstHHJumping;
   249                  end else exit;
   249                  end else exit;
   250     jmpLJump: begin
   250     jmpLJump: begin
   251               if not TestCollisionYwithGear(Gear, -1) then
   251               if not TestCollisionYwithGear(Gear, -1) then
   252                  if not TestCollisionXwithXYShift(Gear, 0, -2, Sign(Gear.dX)) then Gear.Y:= Gear.Y - 2 else
   252                  if not TestCollisionXwithXYShift(Gear, 0, -2, hwSign(Gear.dX)) then Gear.Y:= Gear.Y - 2 else
   253                  if not TestCollisionXwithXYShift(Gear, 0, -1, Sign(Gear.dX)) then Gear.Y:= Gear.Y - 1;
   253                  if not TestCollisionXwithXYShift(Gear, 0, -1, hwSign(Gear.dX)) then Gear.Y:= Gear.Y - 1;
   254               if not (TestCollisionXwithGear(Gear, Sign(Gear.dX))
   254               if not (TestCollisionXwithGear(Gear, hwSign(Gear.dX))
   255                  or   TestCollisionYwithGear(Gear, -1)) then
   255                  or   TestCollisionYwithGear(Gear, -1)) then
   256                  begin
   256                  begin
   257                  Gear.dY:= -0.15;
   257                  Gear.dY:= -0.15;
   258                  Gear.dX:= Sign(Gear.dX) * 0.15;
   258                  Gear.dX:= hwSign(Gear.dX) * 0.15;
   259                  Gear.State:= Gear.State or gstFalling or gstHHJumping
   259                  Gear.State:= Gear.State or gstFalling or gstHHJumping
   260                  end else exit
   260                  end else exit
   261               end
   261               end
   262     end;
   262     end;
   263     
   263     
   267    begin
   267    begin
   268    if (GoInfo.Ticks = 350) then
   268    if (GoInfo.Ticks = 350) then
   269       if (abs(Gear.dX) < 0.0000002) and (Gear.dY < -0.02) then
   269       if (abs(Gear.dX) < 0.0000002) and (Gear.dY < -0.02) then
   270          begin
   270          begin
   271          Gear.dY:= -0.25;
   271          Gear.dY:= -0.25;
   272          Gear.dX:= Sign(Gear.dX) * 0.02
   272          Gear.dX:= hwSign(Gear.dX) * 0.02
   273          end;
   273          end;
   274    if TestCollisionXwithGear(Gear, Sign(Gear.dX)) then Gear.dX:= 0.0000001 * Sign(Gear.dX);
   274    if TestCollisionXwithGear(Gear, hwSign(Gear.dX)) then Gear.dX:= 0.0000001 * hwSign(Gear.dX);
   275    Gear.X:= Gear.X + Gear.dX;
   275    Gear.X:= Gear.X + Gear.dX;
   276    inc(GoInfo.Ticks);
   276    inc(GoInfo.Ticks);
   277    Gear.dY:= Gear.dY + cGravity;
   277    Gear.dY:= Gear.dY + cGravity;
   278    if Gear.dY > 0.40 then exit;
   278    if Gear.dY > 0.40 then exit;
   279    if (Gear.dY < 0)and TestCollisionYwithGear(Gear, -1) then Gear.dY:= 0; 
   279    if (Gear.dY < 0)and TestCollisionYwithGear(Gear, -1) then Gear.dY:= 0; 
   338       end;
   338       end;
   339    continue
   339    continue
   340    end;
   340    end;
   341    if (Gear.Message and gm_Left  )<>0 then Gear.dX:= -1.0 else
   341    if (Gear.Message and gm_Left  )<>0 then Gear.dX:= -1.0 else
   342    if (Gear.Message and gm_Right )<>0 then Gear.dX:=  1.0 else exit;
   342    if (Gear.Message and gm_Right )<>0 then Gear.dX:=  1.0 else exit;
   343    if TestCollisionXwithGear(Gear, Sign(Gear.dX)) then
   343    if TestCollisionXwithGear(Gear, hwSign(Gear.dX)) then
   344       begin
   344       begin
   345       if not (TestCollisionXwithXYShift(Gear, 0, -6, Sign(Gear.dX))
   345       if not (TestCollisionXwithXYShift(Gear, 0, -6, hwSign(Gear.dX))
   346          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   346          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   347       if not (TestCollisionXwithXYShift(Gear, 0, -5, Sign(Gear.dX))
   347       if not (TestCollisionXwithXYShift(Gear, 0, -5, hwSign(Gear.dX))
   348          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   348          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   349       if not (TestCollisionXwithXYShift(Gear, 0, -4, Sign(Gear.dX))
   349       if not (TestCollisionXwithXYShift(Gear, 0, -4, hwSign(Gear.dX))
   350          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   350          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   351       if not (TestCollisionXwithXYShift(Gear, 0, -3, Sign(Gear.dX))
   351       if not (TestCollisionXwithXYShift(Gear, 0, -3, hwSign(Gear.dX))
   352          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   352          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   353       if not (TestCollisionXwithXYShift(Gear, 0, -2, Sign(Gear.dX))
   353       if not (TestCollisionXwithXYShift(Gear, 0, -2, hwSign(Gear.dX))
   354          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   354          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   355       if not (TestCollisionXwithXYShift(Gear, 0, -1, Sign(Gear.dX))
   355       if not (TestCollisionXwithXYShift(Gear, 0, -1, hwSign(Gear.dX))
   356          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   356          or TestCollisionYwithGear(Gear, -1)) then Gear.Y:= Gear.Y - 1;
   357       end;
   357       end;
   358 
   358 
   359    if not TestCollisionXwithGear(Gear, Sign(Gear.dX)) then
   359    if not TestCollisionXwithGear(Gear, hwSign(Gear.dX)) then
   360       begin
   360       begin
   361       Gear.X:= Gear.X + Gear.dX;
   361       Gear.X:= Gear.X + Gear.dX;
   362       inc(GoInfo.Ticks, cHHStepTicks)
   362       inc(GoInfo.Ticks, cHHStepTicks)
   363       end;
   363       end;
   364    if not TestCollisionYwithGear(Gear, 1) then
   364    if not TestCollisionYwithGear(Gear, 1) then
   381    Gear.Y:= Gear.Y + 1;
   381    Gear.Y:= Gear.Y + 1;
   382    if not TestCollisionYwithGear(Gear, 1) then
   382    if not TestCollisionYwithGear(Gear, 1) then
   383       begin
   383       begin
   384       Gear.Y:= Gear.Y - 6;
   384       Gear.Y:= Gear.Y - 6;
   385       Gear.dY:= 0;
   385       Gear.dY:= 0;
   386       Gear.dX:= 0.0000001 * Sign(Gear.dX);
   386       Gear.dX:= 0.0000001 * hwSign(Gear.dX);
   387       Gear.State:= Gear.State or gstFalling
   387       Gear.State:= Gear.State or gstFalling
   388       end
   388       end
   389    end
   389    end
   390    end
   390    end
   391    end
   391    end