Пример #1
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);
        }
Пример #2
0
        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);
        }
Пример #3
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);
 }
Пример #4
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);
        }
Пример #5
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);
        }
Пример #6
0
        public static T Load <T>(IkonArray data, T[] generators) where T : IMapBuilderPiece
        {
            if (data == null)
            {
                return(generators[0]);
            }

            try
            {
                var dataQueue     = new Queue <IkadnBaseObject>(data as IEnumerable <IkadnBaseObject>);
                var generatorCode = dataQueue.Dequeue().To <string>();
                var generator     = generators.FirstOrDefault(x => x.Code == generatorCode);
                var loader        = new ParameterLoadingVisitor(dataQueue);

                foreach (var parameter in generator.Parameters)
                {
                    parameter.Accept(loader);
                }

                return(generator);
            }
            catch
            {
                return(generators[0]);
            }
        }
Пример #7
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);
        }
Пример #8
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);
        }
Пример #9
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);
        }
Пример #10
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);
        }
Пример #11
0
 public static Component <T> Load(IkonArray rawData, ObjectDeindexer deindexer)
 {
     return(new Component <T>(
                deindexer.Get <T>(rawData[TypeIndex].To <string>()),
                rawData[LevelIndex].To <int>(),
                QuantityIndex < rawData.Count ? rawData[QuantityIndex].To <int>() : 1
                ));
 }
Пример #12
0
 private static PredefinedComponent loadPredefinedComponent(IkonArray data)
 {
     return(new PredefinedComponent(
                data[0].To <string>(),
                data[1].To <int>(),
                0
                ));
 }
Пример #13
0
        static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("Usage: TextureAtlas <folder> [options]");
                return;
            }
            else
            {
                ReadParameters(args);
            }

            var builder = new AtlasBuilder(
                items.Select(x => new KeyValuePair <string, Size>(x.Key, x.Value.Size)).ToArray(),
                margin, new Size(width, heigth)
                );

            var atlasIkon  = new IkonComposite(compositeTag);
            var atlasImage = new Bitmap(width, heigth);

            using (Graphics g = Graphics.FromImage(atlasImage))
                foreach (var x in builder.Build())
                {
                    Console.WriteLine(x.Key + " " + x.Value);
                    string[] nameParams = x.Key.Split('-');

                    var bounds = x.Value;
                    foreach (var param in nameParams)
                    {
                        if (param.StartsWith("hStretch"))
                        {
                            int amount;
                            if (!int.TryParse(param.Substring("hStretch".Length), out amount))
                            {
                                amount = 1;
                            }
                            bounds.Inflate(-amount, 0);
                        }
                    }

                    var textureCoords = new IkonArray();
                    textureCoords.Add(serializeRectangle(bounds.Left, bounds.Top));
                    textureCoords.Add(serializeRectangle(bounds.Right, bounds.Top));
                    textureCoords.Add(serializeRectangle(bounds.Right, bounds.Bottom));
                    textureCoords.Add(serializeRectangle(bounds.Left, bounds.Bottom));

                    atlasIkon.Add(nameParams[0], textureCoords);
                    var destRect = new Rectangle(x.Value.Location, x.Value.Size);
                    g.DrawImage(items[x.Key], destRect);
                }

            using (var outStream = new StreamWriter(outputIkonPath)) {
                var writer = new IkadnWriter(outStream);
                atlasIkon.Compose(writer);
            }

            atlasImage.Save(outputImagePath, ImageFormat.Png);
        }
Пример #14
0
        private static Ikadn.IkadnBaseObject serializeRectangle(float x, float y)
        {
            var result = new IkonArray();

            result.Add(new IkonNumeric(x / width));
            result.Add(new IkonNumeric(y / heigth));

            return(result);
        }
Пример #15
0
        Ikadn.IkadnBaseObject serializeSpriteCorner(int x, int y, Size atlasSize)
        {
            var result = new IkonArray();

            result.Add(new IkonFloat(x / (double)atlasSize.Width));
            result.Add(new IkonFloat(y / (double)atlasSize.Height));

            return(result);
        }
Пример #16
0
        private IkonBaseObject serializeChildren <T>(ICollection <T> originalCollection, SaveSession session)
        {
            var data = new IkonArray();

            foreach (var element in originalCollection)
            {
                data.Add(session.Serialize(element));
            }

            return(data);
        }
Пример #17
0
        public TextureInfo(int textureId, IkonArray textureCoordsIkon)
        {
            this.Id          = textureId;
            this.Coordinates = new Vector2[textureCoordsIkon.Count];

            for (int i = 0; i < textureCoordsIkon.Count; i++)
            {
                float[] coords = textureCoordsIkon[i].To <float[]>();
                this.Coordinates[i] = new Vector2(coords[0], coords[1]);
            }
        }
Пример #18
0
        private IkadnBaseObject saveDevelopment()
        {
            var queue = new IkonArray();

            foreach (var techId in this.DevelopmentQueue.OrderBy(x => x.Value))
            {
                queue.Add(new IkonText(techId.Key));
            }

            return(queue);
        }
Пример #19
0
        private IkonBaseObject serializeChildren <K, V>(IDictionary <K, V> originalDictionary, SaveSession session)
        {
            var data = new IkonArray();

            foreach (var element in originalDictionary)
            {
                data.Add(session.Serialize(element.Key));
                data.Add(session.Serialize(element.Value));
            }

            return(data);
        }
Пример #20
0
		public IkonComposite Save(ObjectIndexer indexer) 
		{
			var data = new IkonComposite(TableTag);
			data.Add(DestinationKey, new IkonInteger(indexer.IndexOf(this.Destination)));

			var sourcesData = new IkonArray();
			foreach(var item in this.Sources)
				sourcesData.Add(new IkonInteger(indexer.IndexOf(item)));
			data.Add(SourcesKey, sourcesData);
			return data;
 
		}
Пример #21
0
        private IkonComposite loadAtlas()
        {
            var atlasFile    = new FileInfo(AtlasImagePath);
            var metadataFile = new FileInfo(AtlasIkonPath);
            var rootFolder   = SettingsWinforms.Get.DataRootPath ?? "";
            var extraSprites = new DirectoryInfo(rootFolder + SpritesPath).
                               GetFiles().
                               Where(x => x.Name != atlasFile.Name && x.Name != metadataFile.Name).
                               ToList();

            IkonComposite ikonData;

            using (var ikonParser = new IkonParser(new StreamReader(rootFolder + AtlasIkonPath)))
                ikonData = ikonParser.ParseNext(AtlasTag).To <IkonComposite>();

            using (var atlasImage = new Bitmap(rootFolder + AtlasImagePath))
            {
                if (extraSprites.Any())
                {
#if DEBUG
                    System.Diagnostics.Trace.WriteLine("Adding loose sprites to atlas: " + string.Join(" ", extraSprites.Select(x => x.Name)));
#endif
                    var atlasBuilder = new AtlasBuilder(ikonData, SpriteMargin, atlasImage.Size);
                    using (Graphics g = Graphics.FromImage(atlasImage))
                    {
                        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
                        g.PixelOffsetMode   = System.Drawing.Drawing2D.PixelOffsetMode.None;

                        foreach (var spriteFile in extraSprites)
                        {
                            using (var sprite = new Bitmap(spriteFile.FullName))
                            {
                                var spriteRegion = atlasBuilder.Add(sprite.Size);
                                g.DrawImage(sprite, spriteRegion);

                                var textureCoords = new IkonArray
                                {
                                    serializeSpriteCorner(spriteRegion.Left, spriteRegion.Top, atlasImage.Size),
                                    serializeSpriteCorner(spriteRegion.Right, spriteRegion.Top, atlasImage.Size),
                                    serializeSpriteCorner(spriteRegion.Right, spriteRegion.Bottom, atlasImage.Size),
                                    serializeSpriteCorner(spriteRegion.Left, spriteRegion.Bottom, atlasImage.Size)
                                };
                                ikonData.Add(Path.GetFileNameWithoutExtension(spriteFile.Name), textureCoords);
                            }
                        }
                    }
                }
                this.textureId = TextureUtils.CreateTexture(atlasImage);
                this.Size      = new Vector2(atlasImage.Width, atlasImage.Height);
            }

            return(ikonData);
        }
Пример #22
0
        public IkonComposite Save(ObjectIndexer indexer)
        {
            var data = new IkonComposite(TableTag);

            data.Add(IdCodeKey, new IkonText(this.IdCode));

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

            data.Add(IsObsoleteKey, new IkonInteger(this.IsObsolete ? 1 : -1));

            data.Add(IsVirtualKey, new IkonInteger(this.IsVirtual ? 1 : -1));

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

            data.Add(ImageIndexKey, new IkonInteger(this.ImageIndex));

            data.Add(ArmorKey, this.Armor.Save());

            data.Add(HullKey, this.Hull.Save());

            if (this.IsDrive != null)
            {
                data.Add(IsDriveKey, this.IsDrive.Save());
            }

            data.Add(ReactorKey, this.Reactor.Save());

            data.Add(SensorsKey, this.Sensors.Save());

            if (this.Shield != null)
            {
                data.Add(ShieldKey, this.Shield.Save());
            }

            var missionEquipmentData = new IkonArray();

            foreach (var item in this.MissionEquipment)
            {
                missionEquipmentData.Add(item.Save());
            }
            data.Add(EquipmentKey, missionEquipmentData);

            var specialEquipmentData = new IkonArray();

            foreach (var item in this.SpecialEquipment)
            {
                specialEquipmentData.Add(item.Save());
            }
            data.Add(SpecialsKey, specialEquipmentData);

            data.Add(ThrustersKey, this.Thrusters.Save());
            return(data);
        }
        public IkonArray Save(IMapBuilderPiece generator)
        {
            this.data = new IkonArray();
            data.Add(new IkonText(generator.Code));

            foreach (var parameter in generator.Parameters)
            {
                parameter.Accept(this);
            }

            return(this.data);
        }
Пример #24
0
        public IkadnBaseObject Save()
        {
            var data = new IkonArray();

            data.Add(new IkonText(this.TypeInfo.IdCode));
            data.Add(new IkonInteger(this.Level));

            if (this.TypeInfo.CanHaveMultiple)
            {
                data.Add(new IkonInteger(this.Quantity));
            }

            return(data);
        }
Пример #25
0
        public IkonComposite Save(ObjectIndexer indexer)
        {
            var data = new IkonComposite(TableTag);

            data.Add(SpendingRatioKey, new IkonFloat(this.SpendingRatio));

            var queueData = new IkonArray();

            foreach (var item in this.Queue)
            {
                queueData.Add(new IkonText(item.IdCode));
            }
            data.Add(QueueKey, queueData);
            return(data);
        }
Пример #26
0
        public IkonComposite Save(ObjectIndexer indexer)
        {
            var data = new IkonComposite(TableTag);
            var starKnowledgeData = new IkonArray();

            foreach (var item in this.starKnowledge)
            {
                var itemData = new IkonComposite(StarIntellTag);
                itemData.Add(StarDataKey, new IkonInteger(indexer.IndexOf(item.Key)));
                itemData.Add(StarIntelligenceKey, item.Value.Save(indexer));
                starKnowledgeData.Add(itemData);
            }
            data.Add(StarKnowledgeKey, starKnowledgeData);
            return(data);
        }
Пример #27
0
        private static List <PredefinedComponent> loadPredefinedEquipment(IkonArray data)
        {
            var result = new List <PredefinedComponent>();

            for (int i = 0; i < data.Count / 3; i++)
            {
                result.Add(new PredefinedComponent(
                               data[i * 3].To <string>(),
                               data[i * 3 + 1].To <int>(),
                               data[i * 3 + 2].To <int>()
                               ));
            }

            return(result);
        }
Пример #28
0
        private IkadnBaseObject saveColonizationOrders(ObjectIndexer indexer)
        {
            var queue = new IkonArray();

            foreach (var order in this.ColonizationOrders)
            {
                IkonComposite orderData;

                orderData = new IkonComposite(ColonizationOrdersTag);
                orderData.Add(ColonizationDestinationTag, new IkonInteger(indexer.IndexOf(order.Value.Destination)));
                orderData.Add(ColonizationSourcesTag, new IkonArray(order.Value.Sources.Select(x => new IkonInteger(indexer.IndexOf(x)))));
                queue.Add(orderData);
            }

            return(queue);
        }
Пример #29
0
        private void save(FileInfo saveFile, string title, IkonBaseObject previewData)
        {
            using (var output = new StreamWriter(saveFile.Create()))
            {
                var version     = System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
                var versionData = new IkonArray();
                versionData.Add(new IkonInteger(version.Major));
                versionData.Add(new IkonInteger(version.Minor));
                versionData.Add(new IkonInteger(version.Revision));
                versionData.Add(new IkonInteger(version.Build));

                var writer = new IkadnWriter(output);
                versionData.Compose(writer);
                new IkonText(title).Compose(writer);
                previewData.Compose(writer);
                gameController.Save().Compose(writer);
            }
        }
Пример #30
0
        public IkonComposite Save(ObjectIndexer indexer)
        {
            var data = new IkonComposite(TableTag);

            data.Add(LastVisitedKey, new IkonInteger(this.LastVisited));

            var planetsData = new IkonArray();

            foreach (var item in this.Planets)
            {
                var itemData = new IkonComposite(PlanetIntellTag);
                itemData.Add(PlanetKey, new IkonInteger(indexer.IndexOf(item.Key)));
                itemData.Add(PlanetIntelligenceKey, item.Value.Save());
                planetsData.Add(itemData);
            }
            data.Add(PlanetsKey, planetsData);
            return(data);
        }