hedgewars/uGearsUtils.pas
changeset 13399 3d6aae2ae698
parent 13381 caed04706564
child 13403 9c9d29be9e00
equal deleted inserted replaced
13398:d5db8f71e52e 13399:3d6aae2ae698
    38 procedure ResurrectHedgehog(var gear: PGear);
    38 procedure ResurrectHedgehog(var gear: PGear);
    39 
    39 
    40 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt); inline;
    40 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt); inline;
    41 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt; skipProximity: boolean);
    41 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt; skipProximity: boolean);
    42 
    42 
       
    43 function  CheckGearNear(Kind: TGearType; X, Y: hwFloat; rX, rY: LongInt): PGear;
    43 function  CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
    44 function  CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
    44 function  CheckGearDrowning(var Gear: PGear): boolean;
    45 function  CheckGearDrowning(var Gear: PGear): boolean;
    45 procedure CheckCollision(Gear: PGear); inline;
    46 procedure CheckCollision(Gear: PGear); inline;
    46 procedure CheckCollisionWithLand(Gear: PGear); inline;
    47 procedure CheckCollisionWithLand(Gear: PGear); inline;
    47 
    48 
  1023         Gear:= nil
  1024         Gear:= nil
  1024         end
  1025         end
  1025     end
  1026     end
  1026 end;
  1027 end;
  1027 
  1028 
  1028 function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
  1029 function CheckGearNear(Kind: TGearType; X, Y: hwFloat; rX, rY: LongInt): PGear;
  1029 var t: PGear;
  1030 var t: PGear;
       
  1031 	width: hwFloat;
  1030 begin
  1032 begin
  1031 t:= GearsList;
  1033 t:= GearsList;
  1032 rX:= sqr(rX);
  1034 rX:= sqr(rX);
  1033 rY:= sqr(rY);
  1035 rY:= sqr(rY);
       
  1036 width:= int2hwFloat(RightX-LeftX);
       
  1037 
       
  1038 while t <> nil do
       
  1039     begin
       
  1040     if (t^.Kind = Kind) then
       
  1041         if (not ((hwSqr(X - t^.X) / rX + hwSqr(Y - t^.Y) / rY) > _1)) or
       
  1042         ((WorldEdge = weWrap) and (
       
  1043         (not ((hwSqr(X - width - t^.X) / rX + hwSqr(Y - t^.Y) / rY) > _1)) or
       
  1044         (not ((hwSqr(X + width - t^.X) / rX + hwSqr(Y - t^.Y) / rY) > _1)))) then
       
  1045         begin
       
  1046             CheckGearNear:= t;
       
  1047             exit;
       
  1048         end;
       
  1049     t:= t^.NextGear
       
  1050     end;
       
  1051 
       
  1052 CheckGearNear:= nil
       
  1053 end;
       
  1054 
       
  1055 function CheckGearNear(Gear: PGear; Kind: TGearType; rX, rY: LongInt): PGear;
       
  1056 var t: PGear;
       
  1057 	width: hwFloat;
       
  1058 begin
       
  1059 t:= GearsList;
       
  1060 rX:= sqr(rX);
       
  1061 rY:= sqr(rY);
       
  1062 width:= int2hwFloat(RightX-LeftX);
  1034 
  1063 
  1035 while t <> nil do
  1064 while t <> nil do
  1036     begin
  1065     begin
  1037     if (t <> Gear) and (t^.Kind = Kind) then
  1066     if (t <> Gear) and (t^.Kind = Kind) then
  1038         if (not ((hwSqr(Gear^.X - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1)) or
  1067         if (not ((hwSqr(Gear^.X - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1)) or
  1039         ((WorldEdge = weWrap) and (
  1068         ((WorldEdge = weWrap) and (
  1040         (not ((hwSqr(Gear^.X - int2hwFloat(RightX-LeftX) - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1)) or
  1069         (not ((hwSqr(Gear^.X - width - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1)) or
  1041         (not ((hwSqr(Gear^.X + int2hwFloat(RightX-LeftX) - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1)))) then
  1070         (not ((hwSqr(Gear^.X + width - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1)))) then
  1042         begin
  1071         begin
  1043             CheckGearNear:= t;
  1072             CheckGearNear:= t;
  1044             exit;
  1073             exit;
  1045         end;
  1074         end;
  1046     t:= t^.NextGear
  1075     t:= t^.NextGear
  1288 
  1317 
  1289 
  1318 
  1290         case Gear^.Kind of
  1319         case Gear^.Kind of
  1291             gtHedgehog,
  1320             gtHedgehog,
  1292             gtMine,
  1321             gtMine,
       
  1322             gtAirMine,
  1293             gtSMine,
  1323             gtSMine,
  1294             gtKnife,
  1324             gtKnife,
  1295             gtTarget,
  1325             gtTarget,
  1296             gtCase,
  1326             gtCase,
  1297             gtExplosives: //,
  1327             gtExplosives: //,
  1479 
  1509 
  1480     GearsNear.size:= s;
  1510     GearsNear.size:= s;
  1481     GearsNear.ar:= @GearsNearArray
  1511     GearsNear.ar:= @GearsNearArray
  1482 end;
  1512 end;
  1483 
  1513 
  1484 
       
  1485 procedure SpawnBoxOfSmth;
  1514 procedure SpawnBoxOfSmth;
  1486 var t, aTot, uTot, a, h: LongInt;
  1515 var t, aTot, uTot, a, h: LongInt;
  1487     i: TAmmoType;
  1516     i: TAmmoType;
  1488 begin
  1517 begin
  1489 if (PlacingHogs) or
  1518 if (PlacingHogs) or