Complete.Org: Mailing Lists: Archives: freeciv-dev: April 2002:
[Freeciv-Dev] Re: [RFC] Path finding interface
Home

[Freeciv-Dev] Re: [RFC] Path finding interface

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: Gregory Berkolaiko <Gregory.Berkolaiko@xxxxxxxxxxxx>
Cc: freeciv-dev@xxxxxxxxxxx
Subject: [Freeciv-Dev] Re: [RFC] Path finding interface
From: Raimar Falke <hawk@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 10 Apr 2002 19:13:31 +0200
Reply-to: rf13@xxxxxxxxxxxxxxxxxxxxxx

On Wed, Apr 10, 2002 at 05:38:55PM +0100, Gregory Berkolaiko wrote:
> On Wed, 10 Apr 2002, Raimar Falke wrote:
> 
> > On Wed, Apr 10, 2002 at 04:47:46PM +0100, Gregory Berkolaiko wrote:
> > > On Wed, 10 Apr 2002, Raimar Falke wrote:
> > > 
> > > > On Wed, Apr 10, 2002 at 12:14:44PM +0100, Gregory Berkolaiko wrote:
> > > > > Read your latest path_finding3.h
> > > > > Still not sure how get_next_path is supposed to be used?
> > > > 
> > > > You have the source and the destination. You pass the source to
> > > > pf_get_map and the destination to pf_get_path_from_map. From
> > > > pf_get_path_from_map you will get the path. After this you destroy the
> > > > map.
> > > 
> > > Raimar, it would really help if you occasionally read the questions 
> > > before 
> > > writing the answer.  Please answer the original question.
> > 
> > Sorry I misread it. The example I posted makes it quite clear:
> > 
> >   map = pf_get_map(parameter);
> >   do {
> >      struct pf_path path;
> > 
> >      pf_get_next_path_from_map(map, &path);
> > 
> >      if(!path.found_a_valid) {
> >        break;
> >      }
> > 
> >      check_position_xy_for_something(LAST_POSITION(&path));
> >   } while (position_is_relevant(path));
> > 
> >   pf_destroy_map(map);
> 
> either I am very confused or you propose to return the whole path to each 
> new accessible destination but you don't use anything but the last 
> position.  Doesn't make any sense to me...

Yes it returns a whole path. We may shorten this to one position if
this get speed. I made it this way to be consistent with the
pf_get_path_from_map.

> > > > > Is it just very expensive version of my get_next_location?
> > > 
> > > And this one.  I mean: does get_next_path actually returns a path?
> > 
> > It does the same as get_next_location AFAI can say this at this
> > point. Yes it returns the path from the start to the current
> > position. So in essence:
> >  get_next_location == LAST_POSITION(pf_get_next_path_from_map)
> 
> my worst fears confirmed.
> 
> > > > provide provide iterators not only for one step but also for multiple
> > > > targets. Just thing of this example: you have a settler which want
> > > > itself to add to some city. You have the start position and multiple
> > > > destinations on the same continent. You don't have to calculate all
> > > > costs to reach all tiles of the continent. You may use the simple
> > > > iterator but pf_get_path_from_map will do this for you.
> > > 
> > > how will get_path do it?
> > 
> > pf_get_path_from_map is an optimized version of:
> > 
> >   forever:
> >     path=pf_get_next_path_from_map
> >     if !path.is_valid: 
> >       return path
> >     if LAST_POS(path) == destination:
> >       return path
> 
> that doesn't answer the question.
> do you propose to stuff a list of destinations into pf_get_path ?
> or supply it with a is_final_destination callback?

void pf_get_path_from_map(pf_map_t map, int dest_x, int dest_y,
                          struct pf_path *path);

So the user just specify the destination by a map position.

> I think just letting the "user" write the loop is much clearer and 
> cheaper.  I tried it call-back way (terminating explorer search on 
> discovering a hut), it didn't look pretty.

        Raimar

-- 
 email: rf13@xxxxxxxxxxxxxxxxx
 "These download files are in Microsoft Word 6.0 format. After
  unzipping, these files can be viewed in any text editor, including
  all versions of Microsoft Word, WordPad, and Microsoft Word Viewer."
    -- http://www.microsoft.com/hwdev/pc99.htm


[Prev in Thread] Current Thread [Next in Thread]