Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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);
        }
    }
Exemplo n.º 3
0
    //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;
        }
    }