示例#1
0
        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>();
        }
示例#2
0
        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);
        }
示例#3
0
        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
        }
示例#5
0
        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
        }
示例#6
0
        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>());
            }
        }
示例#7
0
 public T Load <T>(IkonComposite saveData, ObjectDeindexer deindexer)
 {
     return(new LoadSession(getTypeStrategy, deindexer).
            Load <T>(saveData[EntryPointKey]));
 }
示例#8
0
        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();
        }
示例#9
0
 //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;
 }
示例#10
0
 private StellarisAdmin(IkonComposite rawData, ObjectDeindexer deindexer) : base(rawData, deindexer)
 {
 }
示例#11
0
        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);
        }
示例#12
0
        //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);
        }
示例#13
0
        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);
        }
示例#14
0
        private Colony(IkonComposite rawData, ObjectDeindexer deindexer) : base(rawData, deindexer)
        {
            var populationSave = rawData[PopulationKey];

            this.Population = populationSave.To <double>();
        }
示例#15
0
 public T Load <T>(IkonComposite saveData, ObjectDeindexer deindexer, Dictionary <Type, Action <object> > postLoadActions)
 {
     return(new LoadSession(getTypeStrategy, deindexer, postLoadActions).
            Load <T>(saveData[EntryPointKey]));
 }
示例#16
0
 internal LoadSession(Func <Type, ITypeStrategy> expertGetter, ObjectDeindexer deindexer)
 {
     this.expertGetter = expertGetter;
     this.Deindexer    = deindexer;
 }
示例#17
0
		public static ColonizationPlan Load(IkonComposite rawData, ObjectDeindexer deindexer)
		{
			var loadedData = new ColonizationPlan(rawData, deindexer);
			deindexer.Add(loadedData);
			return loadedData;
		}
示例#18
0
        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
                       ));
        }