SAIL - SortByDistance (sortowanie wg. odległości)

Gotowe kody SAIL'a, informacje na temat moddingu, itd.

Moderator: zoNE

Post Reply
User avatar

Topic author
zoNE
The Great Uniter & Site Administrator
The Great Uniter & Site Administrator
Posts: 1308
Joined: Fri Feb 17, 2006 3:44 pm
Location: Poland
Contact:

SAIL - SortByDistance (sortowanie wg. odległości)

#1

Post by zoNE » Tue Oct 16, 2018 8:15 pm

Serpent wrote:
Tue Oct 16, 2018 7:52 pm
Funkcja sortująca jednostki z listy wg. odległości od wskazanego hexa (x,y).

Zwraca tablicę w postaci:
[ [jednostka, odległość], [jednostka, odległość], ...]

Parametry:
  • x,y - koordynaty
  • list - lista jednostek
  • asc - tryb sortowania: true -> rosnąco, false -> malejąco

Code: Select all

Export Function SortByDistanceXY(x, y, list, asc);
var i, j, tmp;
begin
if not list then
   exit;

result := [];

for i in list do
    begin
    tmp := GetDistUnitXY(i, x, y);

    if not result then
       result := [[i, tmp]]
     else
      begin
       if result[result][2] < tmp then
          result := Insert(result, result+1, [i, tmp])
       else
       for j = 1 to result do
           begin
           if tmp < result[j][2] then
              begin
              result := Insert(result, j, [i, tmp]);
              break;
              end;
           end;
      end;
    end;

if result and not asc then
   begin
   tmp := result;

   for i = tmp downto 1 do
       result := Replace(result, tmp - i + 1, tmp[i]);
   end;
End;
Z tej funkcji wyprowadzić można sortowanie dla pozycji konkretnej jednostki:

Code: Select all

Export Function SortByDistanceUnit(unit, list, asc);
begin
result := SortByDistanceXY(GetX(unit), GetY(unit), list, asc);
End;
Author: Serpent
Topic: viewtopic.php?f=42&t=5866
PC MB: MSI Z97-G43 | CPU: Intel Xeon E3-1231v3 3.4GHz + Raijintek EreBoss | RAM: HyperX 2x8GB 1866MHz DDR3 CL9 | GPU: MSI GeForce GTX 970 100ME 4GB GDDR5 (256bit) | SSD: Crucial BX100 250GB | HDD: 4TB | LCD: EIZO FlexScan 22" S2243W Black | AUDIO: Asus Xonar D2 + KODA DRA-660 + KODA AV-701 + SW-550 v2 + Sennheiser HD 595 | OS: Windows 10 Pro
Laptop DELL Precision M6500 CPU: i5-520M RAM: 8GB DDR3 SSD: 128GB HDD: 500GB GPU: ATI FirePro M7740 1GB DDR5 OS: Windows 7 Ultimate 64-bit

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest