hedgewars/uGearsUtils.pas
changeset 12743 f45ffb4cf1e1
parent 12737 d08afea02908
child 12804 a889cb350930
equal deleted inserted replaced
12742:f37f48a24f57 12743:f45ffb4cf1e1
  1001 rY:= sqr(rY);
  1001 rY:= sqr(rY);
  1002 
  1002 
  1003 while t <> nil do
  1003 while t <> nil do
  1004     begin
  1004     begin
  1005     if (t <> Gear) and (t^.Kind = Kind) then
  1005     if (t <> Gear) and (t^.Kind = Kind) then
  1006         if not((hwSqr(Gear^.X - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1) then
  1006         if (not ((hwSqr(Gear^.X - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1)) or
       
  1007         ((WorldEdge = weWrap) and (
       
  1008         (not ((hwSqr(Gear^.X - int2hwFloat(RightX-LeftX) - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1)) or
       
  1009         (not ((hwSqr(Gear^.X + int2hwFloat(RightX-LeftX) - t^.X) / rX + hwSqr(Gear^.Y - t^.Y) / rY) > _1)))) then
  1007         begin
  1010         begin
  1008             CheckGearNear:= t;
  1011             CheckGearNear:= t;
  1009             exit;
  1012             exit;
  1010         end;
  1013         end;
  1011     t:= t^.NextGear
  1014     t:= t^.NextGear
  1390 var GearsNearArray : TPGearArray;
  1393 var GearsNearArray : TPGearArray;
  1391 function GearsNear(X, Y: hwFloat; Kind: TGearType; r: LongInt): PGearArrayS;
  1394 function GearsNear(X, Y: hwFloat; Kind: TGearType; r: LongInt): PGearArrayS;
  1392 var
  1395 var
  1393     t: PGear;
  1396     t: PGear;
  1394     s: Longword;
  1397     s: Longword;
       
  1398     xc, xc_left, xc_right, yc: hwFloat;
  1395 begin
  1399 begin
  1396     r:= r*r;
  1400     r:= r*r;
  1397     s:= 0;
  1401     s:= 0;
  1398     SetLength(GearsNearArray, s);
  1402     SetLength(GearsNearArray, s);
  1399     t := GearsList;
  1403     t := GearsList;
  1400     while t <> nil do
  1404     while t <> nil do
  1401         begin
  1405         begin
  1402         if (t^.Kind = Kind)
  1406             xc:= (X - t^.X)*(X - t^.X);
  1403             and ((X - t^.X)*(X - t^.X) + (Y - t^.Y)*(Y-t^.Y) < int2hwFloat(r)) then
  1407             xc_left:= ((X - int2hwFloat(RightX-LeftX)) - t^.X)*((X - int2hwFloat(RightX-LeftX)) - t^.X);
  1404             begin
  1408             xc_right := ((X + int2hwFloat(RightX-LeftX)) - t^.X)*((X + int2hwFloat(RightX-LeftX)) - t^.X);
  1405             inc(s);
  1409             yc:= (Y - t^.Y)*(Y - t^.Y);
  1406             SetLength(GearsNearArray, s);
  1410             if (t^.Kind = Kind)
  1407             GearsNearArray[s - 1] := t;
  1411                 and ((xc + yc < int2hwFloat(r))
  1408             end;
  1412                 or ((WorldEdge = weWrap) and
  1409         t := t^.NextGear;
  1413                 ((xc_left + yc < int2hwFloat(r)) or
  1410     end;
  1414                 (xc_right + yc < int2hwFloat(r))))) then
       
  1415                 begin
       
  1416                 inc(s);
       
  1417                 SetLength(GearsNearArray, s);
       
  1418                 GearsNearArray[s - 1] := t;
       
  1419                 end;
       
  1420             t := t^.NextGear;
       
  1421         end;
  1411 
  1422 
  1412     GearsNear.size:= s;
  1423     GearsNear.size:= s;
  1413     GearsNear.ar:= @GearsNearArray
  1424     GearsNear.ar:= @GearsNearArray
  1414 end;
  1425 end;
  1415 
  1426