using System.Collections.Generic; public static class SaveGameDataFactory { public static SaveGameData CreateSaveData() { return new SaveGameData { Seed = GameData.seed, CurrentLayer = GameData.currentLayer, VisibleLayer = GameData.visibleLayer, LowestLayer = GameData.lowestLayer, MaxRobotCount = GameData.maxRobotCount, CanMove = GameData.canMove, Settings = CreateSettingsSaveData(), Survival = CreateSurvivalSaveData(), Inventory = CreateInventorySaveData(), Research = CreateResearchSaveData(), Layers = CreateLayerSaveData(), Robots = CreateRobotSaveData() }; } public static SaveGameData CreateCoreSaveData(SaveGameData saveGame) { return new SaveGameData { Seed = saveGame.Seed, CurrentLayer = saveGame.CurrentLayer, VisibleLayer = saveGame.VisibleLayer, LowestLayer = saveGame.LowestLayer, MaxRobotCount = saveGame.MaxRobotCount, CanMove = saveGame.CanMove, Settings = saveGame.Settings, Survival = saveGame.Survival, Inventory = saveGame.Inventory, Research = new List(), Layers = new List(), Robots = new List() }; } private static SurvivalSaveData CreateSurvivalSaveData() { return new SurvivalSaveData { Hunger = GameData.survival.hunger, Thirst = GameData.survival.thirst, Energy = GameData.survival.energy, IsDead = GameData.survival.isDead, DeathReason = GameData.survival.deathReason, CurrentStatus = GameData.survival.currentStatus, ElapsedSeconds = GameData.survival.elapsedSeconds }; } private static SettingsSaveData CreateSettingsSaveData() { return new SettingsSaveData { ScreenMode = GameData.screenMode, SoundVolume = GameData.soundVolume, LightColorR = GameData.lightColor.R, LightColorG = GameData.lightColor.G, LightColorB = GameData.lightColor.B, LightColorA = GameData.lightColor.A }; } private static List CreateInventorySaveData() { List result = new List(); foreach (Item item in GameData.inventory.items) { result.Add(new ItemSaveData { Id = item.data.Id, Amount = item.currentAmount }); } return result; } private static List CreateResearchSaveData() { List result = new List(); foreach (Research research in GameData.availableResearch.Values) { result.Add(new ResearchSaveData { Id = research.data.Id, State = research.state, ElapsedResearchTime = research.elapsedResearchTime, PaidResources = research.paidResources }); } return result; } private static List CreateLayerSaveData() { List result = new List(); if (GameData.map == null) return result; foreach (Layer layer in GameData.map) { if (layer == null) continue; result.Add(new LayerSaveData { Level = layer.level, IsGateOpen = layer.isGateOpen, HasContentGenerated = layer.hasContentGenerated, GateIngredients = new List(layer.gateIngredients), CurrentResources = new List(layer.currentResources), Tiles = CreateTileSaveData(layer) }); } return result; } private static List CreateTileSaveData(Layer layer) { List result = new List(); foreach (Tile tile in layer.tiles) { result.Add(new TileSaveData { X = tile.GridPosition.X, Y = tile.GridPosition.Y, CollapsedMesh = tile.collapsedMesh, ContainsLight = tile.containsLight, ContainsDecoration = tile.containsDecoration, ContainsResource = tile.containsResource, WasVisited = tile.wasVisited, Resource = tile.resource == null ? null : tile.resource.CreateSaveData() }); } return result; } private static List CreateRobotSaveData() { List result = new List(); foreach (Robot robot in GameData.robots) { result.Add(robot.CreateSaveData()); } return result; } }