From: Sean B. <sbr...@ya...> - 2007-07-12 05:06:31
|
One of the biggest mistakes I made in TripleA (and I made quite a few) was storing a lot of state in the delegates, rather than pushing everything into the game data. State stored in the delegate is not easily available for rendering on the ui, and prevents nifty things like restarting a game from any point in the history. The first step in moving data into the GameData was to make TransportTrakcer stateless. The transport state is associated with a unit (this unit is transporting these other units), so a game can use a subclass of unit. In a&a, units are TripleAUnit. A TripleAUnit currently stores information about who it is transporting, transported by, if it was loaded this round, and the units it unloaded in the round. The game specifies which unit subclass to through the method IGameLoader.getUnitFactory() Changes to a Units properties can be made using ChangeFactory.changeunitProperty(...). Changes made in this way, and added to the game by a delegate through DelegateBridge.addChange(...) will be serialized to all nodes in the network, just as any other change. TransportTracker used to store transporting info in a bunch of maps, but now all that information is stored in the units themselves. This allows a client to simply create and use a TransportTracker, rather than having to make a call to a delegate. You can see these changes in revision, http://triplea.svn.sourceforge.net/viewvc/triplea?view=rev&revision=1841 Sean ____________________________________________________________________________________ Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, photos & more. http://mobile.yahoo.com/go?refer=1GNXIC |