public static FactionSdo ConvertToFactionSdo(Faction faction) { var sdo = new FactionSdo { PopType = faction.PopType, FactionReputation = faction.FactionReputation, CitizenIds = new List <Guid>(), EntitiesWithFluffIds = new List <Guid>(), Leader = EntitySdo.ConvertToEntitySdo(faction.Leader), Name = faction.Name, Population = faction.Population }; foreach (var citizen in faction.Citizens) { sdo.CitizenIds.Add(citizen.Id); } foreach (var entity in faction.EntitiesWithFluff) { sdo.EntitiesWithFluffIds.Add(entity.Id); } return(sdo); }
public Faction(FactionSdo sdo) { Religions = new Dictionary <string, int>(); EntitiesWithFluff = new List <Entity>(); PopType = sdo.PopType; FactionReputation = sdo.FactionReputation; Citizens = new List <Entity>(); EntitiesWithFluff = new List <Entity>(); Name = sdo.Name; Population = sdo.Population; Leader = EntitySdo.ConvertToEntity(sdo.Leader); if (Leader == null) { Debug.Log($@"Leader missing for faction {Name}"); } foreach (var id in sdo.CitizenIds) { if (!WorldData.Instance.Entities.ContainsKey(id)) { continue; } var citizen = WorldData.Instance.Entities[id]; citizen.Faction = this; Citizens.Add(citizen); } foreach (var id in sdo.EntitiesWithFluffIds) { if (!WorldData.Instance.Entities.ContainsKey(id)) { continue; } var entity = WorldData.Instance.Entities[id]; EntitiesWithFluff.Add(entity); } if (Leader != null && !WorldData.Instance.Entities.ContainsKey(Leader.Id)) { WorldData.Instance.Entities[Leader.Id] = Leader; } if (!EntitiesWithFluff.Contains(Leader)) { EntitiesWithFluff.Add(Leader); } }
//todo make save game file right after world gen public void Save() { Debug.Log("Saving..."); try { var data = new SaveData { StartingSeed = WorldData.Instance.Seed, SeedState = Random.state, Map = ConvertMapForSaving(WorldData.Instance.Map), PlayerId = GameManager.Instance.Player.Id, CurrentCellId = GameManager.Instance.CurrentCell.Id, CurrentAreaId = GameManager.Instance.CurrentArea.Id, CurrentTileId = GameManager.Instance.CurrentTile.Id, CurrentState = GameManager.Instance.CurrentState, CurrentSceneName = GameManager.Instance.CurrentScene.name, Messages = Messenger.Instance.GetAllMessages(), ActiveOrders = ConvertActiveOrdersForSaving(GameManager.Instance.ActiveOrders), EntitySdos = EntitySdo.ConvertToEntitySdos(WorldData.Instance.Entities.Values.ToList()), FactionSdos = FactionSdo.ConvertToFactionSdos(WorldData.Instance.Factions.Values.ToList()), Items = ConvertItemsForSaving(WorldData.Instance.Items), PlayerStartingPlaceCellId = WorldData.Instance.PlayerStartingPlace.Id, AbilityMap = ConvertAbilityMapForSaving(InputController.Instance.AbilityMap) }; var saveGameFileNames = new SaveGameFileNames { FileNames = new SaveGameFileNames.SerializableFileNamesDictionary() }; var fileName = $@"{WorldData.Instance.SaveGameId}"; SaveFileNames.Add(fileName, GameManager.Instance.Player.Fluff.Name); foreach (var saveFileName in SaveFileNames.Keys) { saveGameFileNames.FileNames.Add(saveFileName, SaveFileNames[saveFileName]); } SaveGame.Save(FileNamesIdentifier, saveGameFileNames, Serializer); SaveGame.Save(fileName, data, Serializer); } catch (Exception e) { Debug.Log("Error saving! " + e.Message); throw; } }