Complete.Org: Mailing Lists: Archives: freeciv-dev: July 2003:
[Freeciv-Dev] Re: (PR#4648) how to do wrapping in map_to_canvas_pos?
Home

[Freeciv-Dev] Re: (PR#4648) how to do wrapping in map_to_canvas_pos?

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: jdorje@xxxxxxxxxxxxxxxxxxxxx
Subject: [Freeciv-Dev] Re: (PR#4648) how to do wrapping in map_to_canvas_pos?
From: "Gregory Berkolaiko" <Gregory.Berkolaiko@xxxxxxxxxxxx>
Date: Tue, 22 Jul 2003 15:40:12 -0700
Reply-to: rt@xxxxxxxxxxxxxx

On Tue, 22 Jul 2003, Jason Short wrote:

> map_to_canvas_pos must first wrap the given map position relative to the 
> mapview origin, then convert that to a canvas position.
> 
> It is the wrapping that is tricky.  The obvious logic is something like:
> 
>    if (map_x < map_view_x0) {
>      map_x += map.xsize;
>    }
> 
> and this is basically what is currently used for both iso and non-iso 
> views.  But this isn't quite right for iso-view; for instance 
> (map_view_x0,map_view_y0-2) will wrap to itself and will never be shown, 
> no matter how large you make the window.
> 
> When we allow north-south wrapping and iso-maps this becomes 
> exponentially more complicated.
> 
> One alternative is to do the wrapping explicitly, as is done above. 
> Ross has written a function to do this for gen-topologies, called 
> unnormalize_map_pos.  It is very complicated.  See the attached 
> unnormalize_map_pos.c.

ugh, took me about 1/2 hour to digest it.

> Another alternative is to use map_distance_vector to find the 
> representative position "closest" to the center of the mapview window, 
> and use that position for the calculations.  This means 
> map_distance_vector must be able to deal with unreal positions, as 
> map_to_canvas_pos does.  See the attached map_to_canvas_pos.diff (this 
> patch fixes the "not quite right" part of the current implementation).

I do not understand why map_center_[xy] should stay unnormalized?
Let them be normalized, it should work just as well.  It would save you 
from removing CHECK_MAP_POSs, although you can do that to save time.

G.





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