From: Michael B. <Mic...@gm...> - 2007-12-28 09:04:26
|
Olivier Schmitt wrote: > Hello, > > I am almost done with moving ModelMessages serialization later in the > Game serialization. > > This change is required because of forward references in the XML format > (Player serialized before units on the Map) and also because we don't > know the precise type of the "source" object, so it cannot be created > immediately. > > The last open issue is related to objects (units, colonies) that get > destroyed or killed. > When such objects die and we save the game as a file, the ModelMessages > still refer to them via their ID in the "source" attribute, but the > objects are not available anymore on the map, players... > When reloading such file, the "source" object cannot be retrieved. > Saving an loading a game is not the only scenario in which we would like to serialize ModelMessages. At the moment, some messages never reach the human player because they are generated by objects that do not belong to him or her, such as other units. If ModelMessages are serializable, we can send these messages to the player. > What should be the best way to deal with this ? > > 1. Do not serialized such messages to XML > => we could loose some messages about dead units in the turn report. > I do not like this idea > > 2. Save these messages to XML anyway, but when reloading the file: > * accomodate for null source where necessary > * or use the owner player as alternate source ? > > 3. any other idea? > Do not dispose the object as long as a ModelMessage still has a reference to them (probably difficult). Regards Michael > Best regards, > > Olivier > > Olivier Schmitt wrote: > >> I am working on delayed serialization of ModelMessages at the end of >> the Game serialization. >> To properly reconnect a message to its owner Player, I am considering >> adding a "owner" Player variable to the ModelMessage class. It would >> be serialized in a similar fashion as source and display, and would >> avoid jumping through hoops we currently have to retrieve the player >> and reconnect the message to the owner player >> >> I hope it would also help fix another bizarre issue I noticed: >> * a unit loses a battle with another unit >> * a message "a unit has been slaughtered by..." is created to inform >> the player >> * the unit is used as "source" of the message >> * I save the game as a file >> * the losing unit is nowhere to be found in the file (it has been >> killed), but the message still refers to it by its id. >> * when reloading the file, the message source cannot be found (unit >> missing) >> * and because we currently derive the owner player from the source, >> the message cannot be reattached to its owner. >> >> Regards, >> >> Olivier >> >> |