On 29.06.2013 06:00, Michael T. Pope wrote:
> Yet another heads up wrt trunk.  I am working on the disappearing
> settlements bug (the one where a settlement disappears or changes
> while you can not see it, currently this correctly does not update
> during the game, but will incorrectly if you save/load, plus similar
> issues with missionaries and other tile properties etc).  I have a
> "working" solution, but it is brutal and ugly.  In the hope of finding
> something more elegant I have been investigating if it is possible to
> make deep but self-contained copies of FreeColObjects.
>
> We have a cloneFreeColGameObject routine that uses serialization to do
> something close, but it copies only one level deep and makes a new
> object within the current Game.  I am using the same technique to make
> a general copy method for FreeColObject (which needs some fairly
> intimate hacks to the FCGO reader routines) to create an almost
> identical copy, differing only in that:
>
>    - it is not "interned" in the Game it was derived from,
>      i.e. Game.getFreeColGameObject will still find the original
>      object, not the copy, even though it has the same id
>
>    - any "enclosed" object is also an "uninterned" copy, where by
>      "enclosed" I mean anything that is lexically within the serialized
>      form of the object.  So for example, if I copy a native
>      settlement, the result will include a copy of any missionary
>      present, or unit inside the settlement, but the owning player/s
>      will be references to the originals.
>
> The plan is then that the PlayerExploredTiles can change from
> including a whole bunch of explicit fields for everything that might
> be there, to just a Tile, which is a copy of the original Tile, made
> every time it is sighted.  Serializing an unseen Tile to a client then
> becomes simply a write of this cached copy if it exists, which means
> we can lose all the explicit PET handling throughout the serialization
> code other than Tile.java.  There is a bit of complexity in saving the
> PET itself, as you have to use a non-interning read routine on
> restore, but that already exists to implement FreeColObject.copy().
>
> That would be much cleaner code.  What remains is to see if I can make
> it work.  Despite the serialization clean up there are still a few
> special cases (e.g. the hack that adds settlements to players) that
> might need some attention.  Also unclear is whether all this extra
> serialization will slow things down unacceptably.  If so we may have
> to go down the clone() path:-P.
>
> So, do not be surprised if there is some thrashing about in trunk over
> this issue in the near future.
>
> Cheers,
> Mike Pope
>    

Sounds like a sensible plan.


Regards

Michael


------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Freecol-developers mailing list
Freecol-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freecol-developers

Reply via email to