public void RestoreMemento(SerializableSector memento) { _owner = memento.owner; Owner = Owner; // if owned, apply ownership setup if (memento.unit != null) { // only sectors that have an owner can have a unit // this means we can shorthand unit intialization Owner.SpawnUnitAt(this); // spawn unit here Unit.RestoreMemento(memento.unit); // restore unit } _effects.RestoreMemento(memento.effectManager); }
/// <summary> /// Restores the sector state from a memento. This also needs the list of /// available players in order to set up the Owner reference. /// </summary> /// <param name="memento">The memento to restore from.</param> /// <param name="players">The list of current players.</param> public void RestoreFromMemento(SerializableSector memento, Player[] players) { // restore the occupying unit if (memento.unit != null) { unit = Instantiate(players[memento.ownerId].unitPrefab).GetComponent <Unit>(); unit.RestoreFromMemento(memento.unit, players, this); } landmark = gameObject.GetComponentInChildren <Landmark>(); if (landmark != null) { landmark.RestoreFromMemento(memento.landmark); } if (memento.ownerId >= 0) { players[memento.ownerId].Capture(this); } pvc = memento.PVC; }
/// <summary> /// Saves the game state to a memento (stored as <see cref="SerializableGame"/>). /// This is the top level memento handler, meaning that the entire game state is /// stored in the result, and can be completely restored by the result. /// </summary> /// <returns>The memento of the current game state.</returns> public SerializableGame SaveToMemento() { SerializablePlayer[] sPlayers = new SerializablePlayer[players.Length]; for (int i = 0; i < players.Length; i++) { sPlayers[i] = players[i].SaveToMemento(); } Sector[] sectors = gameMap.GetComponentsInChildren <Sector>(); SerializableSector[] sSectors = new SerializableSector[sectors.Length]; for (int i = 0; i < sectors.Length; i++) { sSectors[i] = sectors[i].SaveToMemento(); } return(new SerializableGame { turnState = turnState, players = sPlayers, sectors = sSectors, currentPlayerId = currentPlayer.Id, lastDiscovererOfPvcId = PvcDiscoveredByLast?.Id }); }
void serializeSectorData(SerializableSector copyTo, WorldSector copyFrom) { // save indexes copyTo.x = copyFrom.x; copyTo.z = copyFrom.z; // save sector levels List<WorldSectorLevel> levels = copyFrom.levels.getAllLevels(); for (int i = 0; i < levels.Count; ++i) { copyTo.levels.Add(new SerializableLevel()); serializeLevelData(copyTo.levels[i], levels[i]); } }
public void restoreSectorData(SerializableSector restoreFrom) { levels.restoreLevelsData (restoreFrom.levels); }