home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 104.BASEPATH.INC < prev    next >
Text File  |  1992-07-12  |  1KB  |  44 lines

  1. function FixPath( start, finish : sectorindex; max : integer ) : integer;
  2. { Adjusts Distances from start up to point were finish is entered or we reach
  3.   a distance of max.  Returns length of path, or max + 1. }
  4. var
  5.   s : sector;
  6.   breadth : queue;
  7.   daddy, sonny : sector;
  8.   i : warpindex;
  9.   done : boolean;
  10. begin
  11.   for s := 1 to maxSector do
  12.     Distances[s].d := -1;
  13.   breadth.front := 0;
  14.   enqueue( breadth, start, start );
  15.   repeat
  16.       serve( breadth, daddy, sonny );
  17.       if (Distances[ sonny ].d = -1) then {haven't hit him before:}
  18.         begin
  19.           distances[ sonny ].d := distances[ daddy ].d + 1;
  20.           distances[ sonny ].s := daddy;
  21.           if (space.sectors[sonny].etc and avoid) = Nothing then
  22.             with space.sectors[ sonny ] do if number > 0 then
  23.               for i := 1 to number do
  24.                 enqueue( breadth, sonny, data[ i ] );
  25.           done := sonny = finish;
  26.         end; {if}
  27.   until done or (breadth.front = 0) or (distances[sonny].d = max);
  28.   for s := 1 to maxSector do
  29.     if distances[s].d = -1 then distances[s].d := maxint;
  30.   if done then
  31.     FixPath := distances[ finish ].d
  32.   else
  33.     FixPath := max + 1;
  34. end; {FixPath}
  35.  
  36. procedure PrintPath( var home : sectorindex; sec : sectorindex );
  37. var
  38.   dummy : text;
  39. begin
  40.   if home <> sec then
  41.     PrintPath( home, distances[ sec ].s );
  42.   displaySector( sec, 'Dist', error, false, dummy )
  43. end;
  44.