示例#1
0
        private StarData(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            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 imageSizeScaleSave = rawData[SizeKey];

            this.ImageSizeScale = imageSizeScaleSave.To <float>();

            var nameSave = rawData[NameKey];

            this.Name = loadName(nameSave);

            var    positionSave  = rawData[PositionKey];
            var    positionArray = positionSave.To <IkonArray>();
            double positionX     = positionArray[0].To <double>();
            double positionY     = positionArray[1].To <double>();

            this.Position = new Vector2D(positionX, positionY);

            var traitsSave = rawData[TraitsKey];

            this.Traits = new PendableSet <BodyTrait>();
            foreach (var item in traitsSave.To <IkonArray>())
            {
                this.Traits.Add(deindexer.Get <BodyTraitType>(item.Tag as string).Load(this, item));
            }
        }
示例#2
0
        public static PlanetIntelligence Load(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            var loadedData = new PlanetIntelligence(rawData);

            deindexer.Add(loadedData);
            return(loadedData);
        }
示例#3
0
 public static IStarName Load(IkonComposite rawData)
 {
     return(new ConstellationStarName(
                rawData[ConstellationKey].To <int>(),
                rawData[DesignationKey].To <int>()
                ));
 }
示例#4
0
 private static DerivedStatistic loadDerivedStat(IkonComposite data)
 {
     return(new DerivedStatistic(
                data[DerivedStatBase].To <Formula>(),
                data[DerivedStatTotal].To <Formula>()
                ));
 }
示例#5
0
 private void loadNatives(IkonComposite data)
 {
     foreach (var designName in data.Keys)
     {
         this.NativeDesigns[designName] = loadPredefDesign(data[designName].To <IkonComposite>());
     }
 }
示例#6
0
        public static ConstructionOrders Load(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            var loadedData = new ConstructionOrders(rawData, deindexer);

            deindexer.Add(loadedData);
            return(loadedData);
        }
示例#7
0
        protected virtual void load(TaggableQueue <object, IkadnBaseObject> data)
        {
            IkonComposite baseData = data.Dequeue(BaseSettingsTag).To <IkonComposite>();

            this.LanguageId = baseData[LanguageKey].To <string>();
            this.LastGame   = new LastGameInfo(baseData[LastGameKey].To <IkonComposite>());
        }
        public virtual IkonComposite Save(ObjectIndexer indexer)
        {
            var data = new IkonComposite(TableTag);

            data.Add(LocationKey, this.Location.Save(indexer));

            data.Add(OwnerKey, new IkonInteger(indexer.IndexOf(this.Owner)));

            var buildingsData = new IkonArray();

            foreach (var item in this.Buildings)
            {
                var itemData = new IkonComposite(BuildingsTag);
                itemData.Add(BuildingTypeKey, new IkonText(item.Key));
                itemData.Add(BuildingAmountKey, new IkonFloat(item.Value));
                buildingsData.Add(itemData);
            }
            data.Add(BuildingsKey, buildingsData);

            var stockpileData = new IkonArray();

            foreach (var item in this.Stockpile)
            {
                var itemData = new IkonComposite(StockpileTag);
                itemData.Add(StockpileGroupKey, new IkonText(item.Key));
                itemData.Add(StockpileAmountKey, new IkonFloat(item.Value));
                stockpileData.Add(itemData);
            }
            data.Add(StockpileKey, stockpileData);
            return(data);
        }
示例#9
0
 public LastGameInfo(IkonComposite ikstonData) : this()
 {
     this.StartConditions      = ikstonData.ToOrDefault(StartingConditionsKey, x => new StartingConditions(x.To <IkonComposite>()), null);
     this.StarPositionerConfig = ikstonData.ToOrDefault(StarPositionerKey, x => x.To <IkonArray>(), null);
     this.StarConnectorConfig  = ikstonData.ToOrDefault(StarConnectorKey, x => x.To <IkonArray>(), null);
     this.StarPopulatorConfig  = ikstonData.ToOrDefault(StarPopulatorKey, x => x.To <IkonArray>(), null);
 }
示例#10
0
        private Planet(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            var starSave = rawData[StarKey];

            this.Star = deindexer.Get <StarData>(starSave.To <int>());

            var positionSave = rawData[PositionKey];

            this.Position = positionSave.To <int>();

            var typeSave = rawData[TypeKey];

            this.Type = (PlanetType)Enum.Parse(typeof(PlanetType), (string)typeSave.Tag);

            var sizeSave = rawData[SizeKey];

            this.Size = sizeSave.To <double>();

            var traitsSave = rawData[TraitsKey];

            this.Traits = new PendableSet <BodyTrait>();
            foreach (var item in traitsSave.To <IkonArray>())
            {
                this.Traits.Add(deindexer.Get <BodyTraitType>(item.Tag as string).Load(this, item));
            }
        }
示例#11
0
        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);
        }
示例#12
0
        public IkonBaseObject Make()
        {
            //TODO(later) assumes single player
            var player   = this.controller.LocalHumanPlayers().First();
            var starData = new IkonArray();

            foreach (var star in player.Stars)
            {
                var data = new IkonComposite(StarTag);
                data.Add("x", new IkonFloat(star.Position.X));
                data.Add("y", new IkonFloat(star.Position.Y));
                data.Add(ColorKey, new IkonArray(
                             new []
                {
                    new IkonInteger(star.Color.R),
                    new IkonInteger(star.Color.G),
                    new IkonInteger(star.Color.B)
                }
                             ));
                starData.Add(data);
            }

            var previewData = new IkonComposite(Tag);

            previewData.Add(TurnKey, new IkonInteger(player.Turn));
            previewData.Add(StarsKey, starData);

            return(previewData);
        }
示例#13
0
        internal IkonComposite Save()
        {
            ObjectIndexer indexer = this.GenerateIndices();

            var gameData    = new IkonComposite(SaveGameTag);
            var playersData = new IkonArray();
            var ordersData  = new IkonArray();

            gameData.Add(TurnKey, new IkonInteger(this.Turn));

            gameData.Add(StatesKey, this.States.Save(indexer));

            foreach (var player in this.MainPlayers)
            {
                playersData.Add(player.Save(indexer));
            }
            gameData.Add(PlayersKey, playersData);
            gameData.Add(OrganellePlayerKey, this.StareaterOrganelles.Save(indexer));

            foreach (var player in this.MainPlayers)
            {
                ordersData.Add(player.Orders.Save(indexer));
            }
            gameData.Add(OrdersKey, ordersData);
            gameData.Add(OrganelleOrdersKey, this.StareaterOrganelles.Orders.Save(indexer));

            return(gameData);
        }
示例#14
0
        public IkonComposite Save()
        {
            var data      = new IkonComposite(TableTag);
            var colorData = new IkonArray();

            colorData.Add(new IkonInteger(this.Color.R));
            colorData.Add(new IkonInteger(this.Color.G));
            colorData.Add(new IkonInteger(this.Color.B));
            data.Add(ColorKey, colorData);

            data.Add(SizeKey, new IkonFloat(this.ImageSizeScale));

            data.Add(NameKey, this.Name.Save());

            var positionData = new IkonArray();

            positionData.Add(new IkonFloat(this.Position.X));
            positionData.Add(new IkonFloat(this.Position.Y));
            data.Add(PositionKey, positionData);

            var traitsData = new IkonArray();

            foreach (var item in this.Traits)
            {
                traitsData.Add(item.Save());
            }
            data.Add(TraitsKey, traitsData);
            return(data);
        }
示例#15
0
        public static StellarisAdmin Load(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            var loadedData = new StellarisAdmin(rawData, deindexer);

            deindexer.Add(loadedData);
            return(loadedData);
        }
示例#16
0
        public IkonComposite BuildSaveData()
        {
            var lastGameData = new IkonComposite(ClassName);

            if (this.StartConditions != null)
            {
                lastGameData.Add(StartingConditionsKey, this.StartConditions.BuildSaveData());                 //TODO(v0.5) check if data is valid before loading
            }
            if (this.StarPositionerConfig != null)
            {
                lastGameData.Add(StarPositionerKey, this.StarPositionerConfig);
            }

            if (this.StarConnectorConfig != null)
            {
                lastGameData.Add(StarConnectorKey, this.StarConnectorConfig);
            }

            if (this.StarPopulatorConfig != null)
            {
                lastGameData.Add(StarPopulatorKey, this.StarPopulatorConfig);
            }

            return(lastGameData);
        }
示例#17
0
        public IkonComposite BuildSaveData()
        {
            var lastGameData = new IkonComposite(ClassName);

            if (this.StartConditions != null)
            {
                lastGameData.Add(StartingConditionsKey, this.StartConditions.BuildSaveData());
            }

            if (this.PlayersConfig != null)
            {
                lastGameData.Add(PlayersKey, new IkonArray(this.PlayersConfig));
            }

            if (this.StarPositionerConfig != null)
            {
                lastGameData.Add(StarPositionerKey, this.StarPositionerConfig);
            }

            if (this.StarConnectorConfig != null)
            {
                lastGameData.Add(StarConnectorKey, this.StarConnectorConfig);
            }

            if (this.StarPopulatorConfig != null)
            {
                lastGameData.Add(StarPopulatorKey, this.StarPopulatorConfig);
            }

            return(lastGameData);
        }
示例#18
0
        public IkonComposite Save(ObjectIndexer indexer)
        {
            var data = new IkonComposite(TableTag);

            data.Add(NameKey, new IkonText(this.Name));

            var colorData = new IkonArray();

            colorData.Add(new IkonInteger(this.Color.R));
            colorData.Add(new IkonInteger(this.Color.G));
            colorData.Add(new IkonInteger(this.Color.B));
            data.Add(ColorKey, colorData);

            data.Add(ControlTypeKey, new IkonComposite(this.ControlType.ToString()));

            data.Add(OffscreenControlKey, this.OffscreenControl != null ? this.OffscreenControl.Save() : new IkonComposite("None"));

            var unlockedDesignsData = new IkonArray();

            foreach (var item in this.UnlockedDesigns)
            {
                unlockedDesignsData.Add(new IkonInteger(indexer.IndexOf(item)));
            }
            data.Add(UnlockedDesignsKey, unlockedDesignsData);

            data.Add(IntelligenceKey, this.Intelligence.Save(indexer));
            return(data);
        }
示例#19
0
        public static Design Load(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            var loadedData = new Design(rawData, deindexer);

            deindexer.Add(loadedData);
            return(loadedData);
        }
示例#20
0
        public static Treaty Load(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            var loadedData = new Treaty(rawData, deindexer);

            deindexer.Add(loadedData);
            return(loadedData);
        }
示例#21
0
 private static ColonyFormulaSet loadColonyFormulas(IkonComposite data)
 {
     return(new ColonyFormulaSet(
                data[ColonizationPopulationThreshold].To <Formula>(),
                data[UncolonizedMaxPopulation].To <Formula>(),
                data[ColonyVictoryWorth].To <Formula>(),
                data[ColonyFarmFields].To <Formula>(),
                data[ColonyEnvironment].To <Formula>(),
                data[ColonyMaxPopulation].To <Formula>(),
                loadDerivedStat(data[ColonyPopulationGrowth].To <IkonComposite>()),
                data[ColonyEmigrants].To <Formula>(),
                data[ColonyOrganization].To <Formula>(),
                data[ColonySpaceliftFactor].To <Formula>(),
                data[ColonyDesirability].To <Formula>(),
                loadPopulationActivity(data, ColonyFarming),
                loadPopulationActivity(data, ColonyGardening),
                loadPopulationActivity(data, ColonyMining),
                loadPopulationActivity(data, ColonyDevelopment),
                loadPopulationActivity(data, ColonyIndustry),
                data[ColonyFuelProduction].To <Formula>(),
                data[ColonyFuelCost].To <Formula>(),
                data[ColonyRepairPoints].To <Formula>(),
                data[ColonyPopulationHitPoints].To <Formula>(),
                data[ColonyMaintenanceLimit].To <Formula>()
                ));
 }
示例#22
0
        public IkonComposite Save(ObjectIndexer indexer)
        {
            var data = new IkonComposite(TableTag);

            data.Add(DevelopmentFocusIndexKey, new IkonInteger(this.DevelopmentFocusIndex));

            data.Add(DevelopmentQueueKey, saveDevelopment());

            data.Add(ResearchFocusKey, new IkonText(this.ResearchFocus));

            data.Add(ConstructionPlansKey, saveConstruction(indexer));

            data.Add(ShipOrdersKey, saveShipOrders(indexer));

            data.Add(ColonizationOrdersKey, saveColonizationOrders(indexer));

            data.Add(RefitOrdersKey, saveRefitOrders(indexer));

            var audienceRequestsData = new IkonArray();

            foreach (var item in this.AudienceRequests)
            {
                audienceRequestsData.Add(new IkonInteger(item));
            }
            data.Add(AudienceRequestsKey, audienceRequestsData);
            return(data);
        }
示例#23
0
        private static ShipFormulaSet loadShipFormulas(IkonComposite data)
        {
            var colonizerBuildings = new Dictionary <string, Formula>();
            var buildingData       = data[ShipColonyBuildings].To <IkonComposite>();

            foreach (var buildingId in buildingData.Keys)
            {
                colonizerBuildings.Add(buildingId, buildingData[buildingId].To <Formula>());
            }

            return(new ShipFormulaSet(
                       data[ShipCloaking].To <Formula>(),
                       data[ShipCombatSpeed].To <Formula>(),
                       data[ShipDetection].To <Formula>(),
                       data[ShipEvasion].To <Formula>(),
                       data[ShipHitPoints].To <Formula>(),
                       data[ShipJamming].To <Formula>(),
                       data[ShipScaneRange].To <Formula>(),
                       data[ShipColonyPopulation].To <Formula>(),
                       colonizerBuildings,
                       data[ShipReactorSize].To <Formula>(),
                       data[ShipShieldSize].To <Formula>(),
                       data[ShipNaturalCloakBonus].To <Formula>().Evaluate(null),
                       data[ShipSensorRangePenalty].To <Formula>().Evaluate(null),
                       data[ShipRepairCostFactor].To <Formula>().Evaluate(null),
                       data[ShipLevelRefitCost].To <Formula>(),
                       data[ShipArmorCostPortion].To <Formula>().Evaluate(null),
                       data[ShipReactorCostPortion].To <Formula>().Evaluate(null),
                       data[ShipSensorCostPortion].To <Formula>().Evaluate(null),
                       data[ShipThrustersCostPortion].To <Formula>().Evaluate(null),
                       data[ShipFuelUsage].To <Formula>(),
                       data[ShipWormholeSpeed].To <Formula>()
                       ));
        }
示例#24
0
        public static PlayerOrders Load(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            var loadedData = new PlayerOrders(rawData, deindexer);

            deindexer.Add(loadedData);
            return(loadedData);
        }
        public static ColonizationProject Load(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            var loadedData = new ColonizationProject(rawData, deindexer);

            deindexer.Add(loadedData);
            return(loadedData);
        }
示例#26
0
        private IkadnBaseObject saveConstruction(ObjectIndexer indexer)
        {
            var queue = new IkonArray();

            foreach (var plan in this.ConstructionPlans)
            {
                IkonComposite planData;

                if (plan.Key.Location.Planet == null)
                {
                    planData = new IkonComposite(StellarisConstructionTag);
                    planData.Add(LocationKey, new IkonInteger(indexer.IndexOf((StellarisAdmin)plan.Key)));
                }
                else
                {
                    planData = new IkonComposite(ColonyConstructionTag);
                    planData.Add(LocationKey, new IkonInteger(indexer.IndexOf((Colony)plan.Key)));
                }

                planData.Add(OrdersKey, plan.Value.Save(indexer));
                queue.Add(planData);
            }

            return(queue);
        }
示例#27
0
        public static Wormhole Load(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            var loadedData = new Wormhole(rawData, deindexer);

            deindexer.Add(loadedData);
            return(loadedData);
        }
 public StartingConditions(IkonComposite ikstonData) :
     this(ikstonData[PopulationKey].To <long>(),
          ikstonData[ColoniesKey].To <int>(),
          ikstonData[InfrastructureKey].To <long>(),
          ikstonData[NameKey].To <string>())
 {
 }
示例#29
0
        public static ShipGroup Load(IkonComposite rawData, ObjectDeindexer deindexer)
        {
            var loadedData = new ShipGroup(rawData, deindexer);

            deindexer.Add(loadedData);
            return(loadedData);
        }
示例#30
0
        public IkonComposite Save(ObjectIndexer indexer)
        {
            var data = new IkonComposite(TableTag);

            data.Add(OwnerKey, new IkonInteger(indexer.IndexOf(this.Owner)));

            var positionData = new IkonArray();

            positionData.Add(new IkonFloat(this.Position.X));
            positionData.Add(new IkonFloat(this.Position.Y));
            data.Add(PositionKey, positionData);

            var missionsData = new IkonArray();

            foreach (var item in this.Missions)
            {
                missionsData.Add(item.Save(indexer));
            }
            data.Add(MissionsKey, missionsData);

            var shipsData = new IkonArray();

            foreach (var item in this.Ships)
            {
                shipsData.Add(item.Save(indexer));
            }
            data.Add(ShipsKey, shipsData);
            return(data);
        }