private ResearchProgress(IkonComposite rawData, ObjectDeindexer deindexer) { var ownerSave = rawData[OwnerKey]; this.Owner = deindexer.Get <Player>(ownerSave.To <int>()); var topicSave = rawData[TopicKey]; this.Topic = deindexer.Get <ResearchTopic>(topicSave.To <string>()); var levelSave = rawData[LevelKey]; this.Level = levelSave.To <int>(); var investedPointsSave = rawData[InvestedKey]; this.InvestedPoints = investedPointsSave.To <double>(); }
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); }
private StarIntelligence(IkonComposite rawData, ObjectDeindexer deindexer) { var lastVisitedSave = rawData[LastVisitedKey]; this.LastVisited = lastVisitedSave.To <int>(); var planetsSave = rawData[PlanetsKey]; this.Planets = new Dictionary <Planet, PlanetIntelligence>(); foreach (var item in planetsSave.To <IEnumerable <IkonComposite> >()) { var itemKey = item[PlanetKey]; var itemValue = item[PlanetIntelligenceKey]; this.Planets.Add( deindexer.Get <Planet>(itemKey.To <int>()), PlanetIntelligence.Load(itemValue.To <IkonComposite>(), deindexer) ); } }
protected AConstructionSite(IkonComposite rawData, ObjectDeindexer deindexer) { var locationSave = rawData[LocationKey]; this.Location = LocationBody.Load(locationSave.To <IkonComposite>(), deindexer); var ownerSave = rawData[OwnerKey]; this.Owner = deindexer.Get <Player>(ownerSave.To <int>()); var buildingsSave = rawData[BuildingsKey]; this.Buildings = new Dictionary <string, double>(); foreach (var item in buildingsSave.To <IEnumerable <IkonComposite> >()) { var itemKey = item[BuildingTypeKey]; var itemValue = item[BuildingAmountKey]; this.Buildings.Add( itemKey.To <string>(), itemValue.To <double>() ); } var stockpileSave = rawData[StockpileKey]; this.Stockpile = new Dictionary <string, double>(); foreach (var item in stockpileSave.To <IEnumerable <IkonComposite> >()) { var itemKey = item[StockpileGroupKey]; var itemValue = item[StockpileAmountKey]; this.Stockpile.Add( itemKey.To <string>(), itemValue.To <double>() ); } #if DEBUG this.id = NextId(); #endif }
private Player(IkonComposite rawData, ObjectDeindexer deindexer) { var nameSave = rawData[NameKey]; this.Name = nameSave.To <string>(); var colorSave = rawData[ColorKey]; var colorArray = colorSave.To <IkonArray>(); int colorR = colorArray[0].To <int>(); int colorG = colorArray[1].To <int>(); int colorB = colorArray[2].To <int>(); this.Color = Color.FromArgb(colorR, colorG, colorB); var controlTypeSave = rawData[ControlTypeKey]; this.ControlType = (PlayerControlType)Enum.Parse(typeof(PlayerControlType), (string)controlTypeSave.Tag); var offscreenControlSave = rawData[OffscreenControlKey]; this.OffscreenControl = loadControl(offscreenControlSave); var unlockedDesignsSave = rawData[UnlockedDesignsKey]; this.UnlockedDesigns = new HashSet <PredefinedDesign>(); foreach (var item in unlockedDesignsSave.To <IkonArray>()) { this.UnlockedDesigns.Add(deindexer.Get <PredefinedDesign>(item.To <int>())); } var intelligenceSave = rawData[IntelligenceKey]; this.Intelligence = Intelligence.Load(intelligenceSave.To <IkonComposite>(), deindexer); #if DEBUG this.id = NextId(); #endif }
private PlayerOrders(IkonComposite rawData, ObjectDeindexer deindexer) { var developmentFocusIndexSave = rawData[DevelopmentFocusIndexKey]; this.DevelopmentFocusIndex = developmentFocusIndexSave.To <int>(); var developmentQueueSave = rawData[DevelopmentQueueKey]; this.DevelopmentQueue = loadDevelopmet(developmentQueueSave, deindexer); var researchFocusSave = rawData[ResearchFocusKey]; this.ResearchFocus = researchFocusSave.To <string>(); var constructionPlansSave = rawData[ConstructionPlansKey]; this.ConstructionPlans = loadConstruction(constructionPlansSave, deindexer); var shipOrdersSave = rawData[ShipOrdersKey]; this.ShipOrders = loadShipOrders(shipOrdersSave, deindexer); var colonizationOrdersSave = rawData[ColonizationOrdersKey]; this.ColonizationOrders = loadColonizationOrders(colonizationOrdersSave, deindexer); var refitOrdersSave = rawData[RefitOrdersKey]; this.RefitOrders = loadRefitOrders(refitOrdersSave, deindexer); var audienceRequestsSave = rawData[AudienceRequestsKey]; this.AudienceRequests = new HashSet <int>(); foreach (var item in audienceRequestsSave.To <IkonArray>()) { this.AudienceRequests.Add(item.To <int>()); } }
public T Load <T>(IkonComposite saveData, ObjectDeindexer deindexer) { return(new LoadSession(getTypeStrategy, deindexer). Load <T>(saveData[EntryPointKey])); }
private Design(IkonComposite rawData, ObjectDeindexer deindexer) { var idCodeSave = rawData[IdCodeKey]; this.IdCode = idCodeSave.To <string>(); var ownerSave = rawData[OwnerKey]; this.Owner = deindexer.Get <Player>(ownerSave.To <int>()); var isObsoleteSave = rawData[IsObsoleteKey]; this.IsObsolete = isObsoleteSave.To <int>() >= 0; var isVirtualSave = rawData[IsVirtualKey]; this.IsVirtual = isVirtualSave.To <int>() >= 0; var nameSave = rawData[NameKey]; this.Name = nameSave.To <string>(); var imageIndexSave = rawData[ImageIndexKey]; this.ImageIndex = imageIndexSave.To <int>(); var armorSave = rawData[ArmorKey]; this.Armor = Component <ArmorType> .Load(armorSave.To <IkonArray>(), deindexer); var hullSave = rawData[HullKey]; this.Hull = Component <HullType> .Load(hullSave.To <IkonArray>(), deindexer); if (rawData.Keys.Contains(IsDriveKey)) { var isDriveSave = rawData[IsDriveKey]; this.IsDrive = Component <IsDriveType> .Load(isDriveSave.To <IkonArray>(), deindexer); } var reactorSave = rawData[ReactorKey]; this.Reactor = Component <ReactorType> .Load(reactorSave.To <IkonArray>(), deindexer); var sensorsSave = rawData[SensorsKey]; this.Sensors = Component <SensorType> .Load(sensorsSave.To <IkonArray>(), deindexer); if (rawData.Keys.Contains(ShieldKey)) { var shieldSave = rawData[ShieldKey]; this.Shield = Component <ShieldType> .Load(shieldSave.To <IkonArray>(), deindexer); } var missionEquipmentSave = rawData[EquipmentKey]; this.MissionEquipment = new List <Component <MissionEquipmentType> >(); foreach (var item in missionEquipmentSave.To <IkonArray>()) { this.MissionEquipment.Add(Component <MissionEquipmentType> .Load(item.To <IkonArray>(), deindexer)); } var specialEquipmentSave = rawData[SpecialsKey]; this.SpecialEquipment = new List <Component <SpecialEquipmentType> >(); foreach (var item in specialEquipmentSave.To <IkonArray>()) { this.SpecialEquipment.Add(Component <SpecialEquipmentType> .Load(item.To <IkonArray>(), deindexer)); } var thrustersSave = rawData[ThrustersKey]; this.Thrusters = Component <ThrusterType> .Load(thrustersSave.To <IkonArray>(), deindexer); this.Cost = initCost(); }
//TODO(v0.8) check if post load actions are still needed after removing hash from Design internal LoadSession(Func <Type, ITypeStrategy> expertGetter, ObjectDeindexer deindexer, Dictionary <Type, Action <object> > postLoadActions) { this.expertGetter = expertGetter; this.postLoadActions = postLoadActions; this.Deindexer = deindexer; }
private StellarisAdmin(IkonComposite rawData, ObjectDeindexer deindexer) : base(rawData, deindexer) { }
private Dictionary <Vector2D, HashSet <Fleet> > loadShipOrders(IkadnBaseObject rawData, ObjectDeindexer deindexer) { var orders = new Dictionary <Vector2D, HashSet <Fleet> >(); foreach (var orderData in rawData.To <IEnumerable <IkonComposite> >()) { var rawPosition = orderData[Position].To <double[]>(); var fleets = new HashSet <Fleet>(); foreach (var fleetData in orderData[Fleets].To <IEnumerable <IkonComposite> >()) { fleets.Add(Fleet.Load(fleetData, deindexer)); } orders.Add(new Vector2D(rawPosition[0], rawPosition[1]), fleets); } return(orders); }
//TODO(later) make separate collections for colony and stellaris construction orders private Dictionary <AConstructionSite, ConstructionOrders> loadConstruction(IkadnBaseObject rawData, ObjectDeindexer deindexer) { var queue = new Dictionary <AConstructionSite, ConstructionOrders>(); foreach (var plan in rawData.To <IEnumerable <IkonComposite> >()) { AConstructionSite site = plan.Tag.Equals(StellarisConstructionTag) ? (AConstructionSite)deindexer.Get <StellarisAdmin>(plan[LocationKey].To <int>()) : (AConstructionSite)deindexer.Get <Colony>(plan[LocationKey].To <int>()); queue.Add(site, ConstructionOrders.Load(plan[OrdersKey].To <IkonComposite>(), deindexer)); } return(queue); }
private Dictionary <Planet, ColonizationPlan> loadColonizationOrders(IkadnBaseObject rawData, ObjectDeindexer deindexer) { var orders = new Dictionary <Planet, ColonizationPlan>(); foreach (var orderData in rawData.To <IEnumerable <IkonComposite> >()) { var destination = deindexer.Get <Planet>(orderData[ColonizationDestinationTag].To <int>()); var plan = new ColonizationPlan(destination); foreach (var sourceIndex in orderData[ColonizationSourcesTag].To <IEnumerable <int> >()) { plan.Sources.Add(deindexer.Get <StarData>(sourceIndex)); } orders.Add(destination, plan); } return(orders); }
private Colony(IkonComposite rawData, ObjectDeindexer deindexer) : base(rawData, deindexer) { var populationSave = rawData[PopulationKey]; this.Population = populationSave.To <double>(); }
public T Load <T>(IkonComposite saveData, ObjectDeindexer deindexer, Dictionary <Type, Action <object> > postLoadActions) { return(new LoadSession(getTypeStrategy, deindexer, postLoadActions). Load <T>(saveData[EntryPointKey])); }
internal LoadSession(Func <Type, ITypeStrategy> expertGetter, ObjectDeindexer deindexer) { this.expertGetter = expertGetter; this.Deindexer = deindexer; }
public static ColonizationPlan Load(IkonComposite rawData, ObjectDeindexer deindexer) { var loadedData = new ColonizationPlan(rawData, deindexer); deindexer.Add(loadedData); return loadedData; }
private static Tuple <StatesDB, Player[], Player> loadSaveData(IkonComposite saveData, ObjectDeindexer deindexer, StaticsDB statics) { var stateData = saveData[MainGame.StatesKey].To <IkonComposite>(); var ordersData = saveData[MainGame.OrdersKey].To <IkonArray>(); var stars = new StarCollection(); foreach (var rawData in stateData[StatesDB.StarsKey].To <IEnumerable <IkonComposite> >()) { stars.Add(StarData.Load(rawData, deindexer)); } var planets = new PlanetCollection(); foreach (var rawData in stateData[StatesDB.PlanetsKey].To <IEnumerable <IkonComposite> >()) { planets.Add(Planet.Load(rawData, deindexer)); } var wormholes = new WormholeCollection(); foreach (var rawData in stateData[StatesDB.WormholesKey].To <IEnumerable <IkonComposite> >()) { wormholes.Add(Wormhole.Load(rawData, deindexer)); } var players = new List <Player>(); foreach (var rawData in saveData[MainGame.PlayersKey].To <IEnumerable <IkonComposite> >()) { players.Add(Player.Load(rawData, deindexer)); } var organellePlayer = Player.Load(saveData[MainGame.OrganellePlayerKey].To <IkonComposite>(), deindexer); var developments = new DevelopmentProgressCollection(); foreach (var rawData in stateData[StatesDB.DevelopmentAdvancesKey].To <IEnumerable <IkonComposite> >()) { developments.Add(DevelopmentProgress.Load(rawData, deindexer)); } var research = new ResearchProgressCollection(); foreach (var rawData in stateData[StatesDB.ResearchAdvancesKey].To <IEnumerable <IkonComposite> >()) { research.Add(ResearchProgress.Load(rawData, deindexer)); } var treaties = new TreatyCollection(); foreach (var rawData in stateData[StatesDB.TreatiesKey].To <IEnumerable <IkonComposite> >()) { treaties.Add(Treaty.Load(rawData, deindexer)); } var reports = new ReportCollection(); foreach (var rawData in stateData[StatesDB.ReportsKey].To <IEnumerable <IkonComposite> >()) { reports.Add(ReportFactory.Load(rawData, deindexer)); } var designs = new DesignCollection(); foreach (var rawData in stateData[StatesDB.DesignsKey].To <IEnumerable <IkonComposite> >()) { var design = Design.Load(rawData, deindexer); design.CalcHash(statics); designs.Add(design); deindexer.Add(design.ConstructionProject, design.ConstructionProject.IdCode); } var colonizations = new ColonizationCollection(); foreach (var rawData in stateData[StatesDB.ColonizationKey].To <IEnumerable <IkonComposite> >()) { colonizations.Add(ColonizationProject.Load(rawData, deindexer)); } var fleets = new FleetCollection(); foreach (var rawData in stateData[StatesDB.IdleFleetsKey].To <IEnumerable <IkonComposite> >()) { fleets.Add(Fleet.Load(rawData, deindexer)); } var colonies = new ColonyCollection(); foreach (var rawData in stateData[StatesDB.ColoniesKey].To <IEnumerable <IkonComposite> >()) { colonies.Add(Colony.Load(rawData, deindexer)); } var stellarises = new StellarisCollection(); foreach (var rawData in stateData[StatesDB.StellarisesKey].To <IEnumerable <IkonComposite> >()) { stellarises.Add(StellarisAdmin.Load(rawData, deindexer)); } for (int i = 0; i < players.Count; i++) { players[i].Orders = PlayerOrders.Load(ordersData[i].To <IkonComposite>(), deindexer); } organellePlayer.Orders = PlayerOrders.Load(saveData[MainGame.OrganelleOrdersKey].To <IkonComposite>(), deindexer); return(new Tuple <StatesDB, Player[], Player>( new StatesDB(stars, wormholes, planets, colonies, stellarises, developments, research, treaties, reports, designs, fleets, colonizations), players.ToArray(), organellePlayer )); }