Big project cleanup with overhaul of file responsibilities (KISS) and code (DRY, YAGNI)
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
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<ResearchSaveData>(),
|
||||
Layers = new List<LayerSaveData>(),
|
||||
Robots = new List<RobotSaveData>()
|
||||
};
|
||||
}
|
||||
|
||||
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<ItemSaveData> CreateInventorySaveData()
|
||||
{
|
||||
List<ItemSaveData> result = new List<ItemSaveData>();
|
||||
|
||||
foreach (Item item in GameData.inventory.items)
|
||||
{
|
||||
result.Add(new ItemSaveData
|
||||
{
|
||||
Id = item.data.Id,
|
||||
Amount = item.currentAmount
|
||||
});
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static List<ResearchSaveData> CreateResearchSaveData()
|
||||
{
|
||||
List<ResearchSaveData> result = new List<ResearchSaveData>();
|
||||
|
||||
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<LayerSaveData> CreateLayerSaveData()
|
||||
{
|
||||
List<LayerSaveData> result = new List<LayerSaveData>();
|
||||
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<Ingredient>(layer.gateIngredients),
|
||||
CurrentResources = new List<string>(layer.currentResources),
|
||||
Tiles = CreateTileSaveData(layer)
|
||||
});
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static List<TileSaveData> CreateTileSaveData(Layer layer)
|
||||
{
|
||||
List<TileSaveData> result = new List<TileSaveData>();
|
||||
|
||||
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<RobotSaveData> CreateRobotSaveData()
|
||||
{
|
||||
List<RobotSaveData> result = new List<RobotSaveData>();
|
||||
|
||||
foreach (Robot robot in GameData.robots)
|
||||
{
|
||||
result.Add(robot.CreateSaveData());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user