public static MainGame LoadGame(IkonComposite saveData, IEnumerable <TracableStream> staticDataSources, StateManager stateManager) { var statics = StaticsDB.Load(staticDataSources); var deindexer = new ObjectDeindexer(); deindexer.AddAll(PlayerAssets.OrganizationsRaw); deindexer.AddAll(statics.Constructables); deindexer.AddAll(statics.DevelopmentTopics); deindexer.AddAll(statics.PredeginedDesigns); deindexer.AddAll(statics.ResearchTopics); deindexer.AddAll(statics.Armors.Values); deindexer.AddAll(statics.Hulls.Values); deindexer.AddAll(statics.IsDrives.Values); deindexer.AddAll(statics.MissionEquipment.Values); deindexer.AddAll(statics.Reactors.Values); deindexer.AddAll(statics.Sensors.Values); deindexer.AddAll(statics.Shields.Values); deindexer.AddAll(statics.SpecialEquipment.Values); deindexer.AddAll(statics.Thrusters.Values); deindexer.AddAll(statics.PlanetTraits.Values); deindexer.AddAll(statics.StarTraits.Values); var game = stateManager.Load <MainGame>( saveData.To <IkonComposite>(), deindexer, new Dictionary <Type, Action <object> >() { { typeof(Design), x => ((Design)x).CalcHash(statics) } } ); var derivates = initDerivates(statics, game.MainPlayers, game.StareaterOrganelles, game.States); game.Initialze(statics, derivates); foreach (var player in game.MainPlayers) { var playerProc = derivates.Players.Of[player]; playerProc.Initialize(game); } game.CalculateDerivedEffects(); return(game); }
public static MainGame LoadGame(IkonComposite saveData, IEnumerable <TracableStream> staticDataSources) { var statics = StaticsDB.Load(staticDataSources); var deindexer = new ObjectDeindexer(); int turn = saveData[MainGame.TurnKey].To <int>(); deindexer.AddAll(statics.Constructables, x => x.IdCode); deindexer.AddAll(statics.DevelopmentTopics, x => x.IdCode); deindexer.AddAll(statics.PredeginedDesigns); deindexer.AddAll(statics.ResearchTopics, x => x.IdCode); deindexer.AddAll(statics.Armors.Values, x => x.IdCode); deindexer.AddAll(statics.Hulls.Values, x => x.IdCode); deindexer.AddAll(statics.IsDrives.Values, x => x.IdCode); deindexer.AddAll(statics.MissionEquipment.Values, x => x.IdCode); deindexer.AddAll(statics.Reactors.Values, x => x.IdCode); deindexer.AddAll(statics.Sensors.Values, x => x.IdCode); deindexer.AddAll(statics.Shields.Values, x => x.IdCode); deindexer.AddAll(statics.SpecialEquipment.Values, x => x.IdCode); deindexer.AddAll(statics.Thrusters.Values, x => x.IdCode); deindexer.AddAll(statics.Traits.Values, x => x.IdCode); var loadedStates = loadSaveData(saveData, deindexer, statics); var states = loadedStates.Item1; var players = loadedStates.Item2; var organellePlayer = loadedStates.Item3; var derivates = initDerivates(statics, players, organellePlayer, states); var game = new MainGame(players.ToArray(), organellePlayer, statics, states, derivates); game.CalculateDerivedEffects(); return(game); }