Пример #1
0
        public static void StartConditionsLoader(IEnumerable <TracableStream> dataSources)
        {
            var conditionList = new List <StartingConditions>();

            foreach (var source in dataSources)
            {
                var parser = new IkonParser(source.Stream);
                try
                {
                    foreach (var item in parser.ParseAll())
                    {
                        conditionList.Add(new StartingConditions(item.Value.To <IkonComposite>()));
                    }
                }
                catch (IOException e)
                {
                    throw new IOException(source.SourceInfo, e);
                }
                catch (FormatException e)
                {
                    throw new FormatException(source.SourceInfo, e);
                }
            }

            Starts = conditionList.ToArray();
        }
Пример #2
0
        public static void ColorLoader(IEnumerable <TracableStream> dataSources)
        {
            var colorList = new List <Color>();

            foreach (var source in dataSources)
            {
                var       parser = new IkonParser(source.Stream);
                IkonArray colorsData;

                try
                {
                    colorsData = parser.ParseNext().To <IkonComposite>()[ColorsKey].To <IkonArray>();
                }
                catch (IOException e)
                {
                    throw new IOException(source.SourceInfo, e);
                }
                catch (FormatException e)
                {
                    throw new FormatException(source.SourceInfo, e);
                }

                foreach (var item in colorsData)
                {
                    var colorData = item.To <IkonArray>();
                    colorList.Add(Color.FromArgb(
                                      colorData[0].To <int>(),
                                      colorData[1].To <int>(),
                                      colorData[2].To <int>()
                                      ));
                }
            }

            Colors = colorList.ToArray();
        }
Пример #3
0
        private void checkFiles()
        {
            var saveFolder = new DirectoryInfo(this.saveFolderPath);
            var saveFiles  = new Dictionary <SavedGameInfo, DateTime>();
            var saveNames  = new HashSet <string>();

            if (!saveFolder.Exists)
            {
                this.nextSaveNumber = 1;
                this.games          = new LinkedList <SavedGameInfo>();
                return;
            }

            foreach (var file in saveFolder.EnumerateFiles("*." + SaveNameExtension))
            {
                saveNames.Add(file.Name);

#if DEBUG
                if (file.Length == 0)
                {
                    System.Diagnostics.Trace.TraceWarning("Empty save file: " + file.Name);
                    continue;
                }
#endif

                using (var parser = new IkonParser(file.OpenText()))
                {
#if !DEBUG
                    try
                    {
#endif
                    var versionData = parser.ParseNext() as IkonArray;
                    var title       = parser.ParseNext().To <string>();
                    var previewData = parser.ParseNext() as IkonBaseObject;
                    saveFiles.Add(
                        new SavedGameInfo(
                            title,
                            previewData,
                            file
                            ),
                        file.LastWriteTimeUtc
                        );
#if !DEBUG
                }
                catch (IOException)
                {
                    //TODO(later) Notify about corrupted save file
                }
#endif
                }
            }

            for (this.nextSaveNumber = 1;
                 saveNames.Contains(SaveNamePrefix + this.nextSaveNumber + "." + SaveNameExtension);
                 this.nextSaveNumber++)
            {
                ;
            }
            this.games = new LinkedList <SavedGameInfo>(saveFiles.OrderByDescending(x => x.Value).Select(x => x.Key));
        }
Пример #4
0
        public RybStarPopulator()
        {
            TaggableQueue <object, IkadnBaseObject> data;

            using (var parser = new IkonParser(new StreamReader(MapsFolder + ParametersFile)))
                data = parser.ParseAll();

            var starTypes = new List <StarType>();

            while (data.CountOf(StarTypeKey) > 0)
            {
                var starTypeData = data.Dequeue(StarTypeKey).To <IkonComposite>();
                starTypes.Add(new StarType(
                                  extractColor(starTypeData[StarColorKey].To <IkonArray>()),
                                  starTypeData[StarMinRadiationKey].To <double>(),
                                  starTypeData[StarMaxRadiationKey].To <double>()
                                  ));
            }
            this.starTypes = starTypes.ToArray();

            this.climateParameter = new SelectorParameter(LanguageContext, "climate", new Dictionary <int, string>()
            {
                { 0, "hostileClimate" },
                { 1, "normalClimate" },
                { 2, "paradiseClimate" },
            }, 1);
        }
Пример #5
0
        public static void OrganizationsLoader(IEnumerable <TracableStream> dataSources)
        {
            var list = new List <Organization>();

            foreach (var source in dataSources)
            {
                var parser = new IkonParser(source.Stream);
                try
                {
                    foreach (var item in parser.ParseAll())
                    {
                        var data = item.Value.To <IkonComposite>();
                        list.Add(new Organization(
                                     data[OrganizationNameKey].To <string>(),
                                     data[OrganizationDescriptionKey].To <string>()
                                     ));
                    }
                }
                catch (IOException e)
                {
                    throw new IOException(source.SourceInfo, e);
                }
                catch (FormatException e)
                {
                    throw new FormatException(source.SourceInfo, e);
                }
            }

            list.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.Ordinal));
            Organizations = list.ToArray();
        }
        public ProximityLanesBuilder()
        {
            TaggableQueue <object, IkadnBaseObject> data;

            using (var parser = new IkonParser(new StreamReader(MapsFolder + ParametersFile)))
                data = parser.ParseAll();

            degreesParameter = loadDegrees(data);
        }
        public void Initialize(string dataPath)
        {
            TaggableQueue <object, IkadnBaseObject> data;

            using (var parser = new IkonParser(new StreamReader(dataPath + ParametersFile)))
                data = parser.ParseAll();

            degreesParameter = loadDegrees(data);
        }
Пример #8
0
        public void Load(SavedGameInfo savedGameData, IEnumerable <TracableStream> staticDataSources)
        {
            IkonComposite saveRawData;

            using (var parser = new IkonParser(savedGameData.FileInfo.OpenText()))
                saveRawData = parser.ParseAll().Dequeue(MainGame.SaveGameTag).To <IkonComposite>();

            this.gameController.LoadGame(GameBuilder.LoadGame(saveRawData, staticDataSources, GameController.GetStateManager()));
        }
Пример #9
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);
        }
Пример #10
0
        public void Load(SavedGameInfo savedGameData, IEnumerable <NamedStream> staticDataSources)
        {
            if (savedGameData == null)
            {
                throw new ArgumentNullException(nameof(savedGameData));
            }

            IkonComposite saveRawData;

            using (var parser = new IkonParser(savedGameData.FileInfo.OpenText()))
                saveRawData = parser.ParseAll().Dequeue(MainGame.SaveGameTag).To <IkonComposite>();

            this.gameController.LoadGame(GameBuilder.LoadGame(saveRawData, staticDataSources, GameController.GetStateManager()));
        }
Пример #11
0
        private void checkFiles()
        {
            var saveFolder = new DirectoryInfo(this.saveFolderPath);
            var saveFiles  = new Dictionary <SavedGameInfo, DateTime>();
            var saveNames  = new HashSet <string>();

            if (!saveFolder.Exists)
            {
                this.nextSaveNumber = 1;
                this.games          = new LinkedList <SavedGameInfo>();
                return;
            }

            foreach (var file in saveFolder.EnumerateFiles("*." + SaveNameExtension))
            {
                saveNames.Add(file.Name);

                using (var parser = new IkonParser(file.OpenText())) {
#if !DEBUG
                    try
                    {
#endif
                    var rawData = parser.ParseNext() as IkonComposite;
                    saveFiles.Add(
                        new SavedGameInfo(
                            rawData[SaveGameTitleKey].To <string>(),
                            rawData[MainGame.TurnKey].To <int>(),
                            rawData,
                            file
                            ),
                        file.LastWriteTimeUtc
                        );
#if !DEBUG
                }
                catch (IOException)
                {
                    //TODO(later) Notify about corrupted save file
                }
#endif
                }
            }

            for (this.nextSaveNumber = 1;
                 saveNames.Contains(SaveNamePrefix + this.nextSaveNumber + "." + SaveNameExtension);
                 this.nextSaveNumber++)
            {
                ;
            }
            this.games = new LinkedList <SavedGameInfo>(saveFiles.OrderByDescending(x => x.Value).Select(x => x.Key));
        }
Пример #12
0
        protected override TaggableQueue <object, IkadnBaseObject> loadData()
        {
            TaggableQueue <object, IkadnBaseObject> data;

            if (File.Exists(SettingsFilePath))
            {
                using (var parser = new IkonParser(new StreamReader(SettingsFilePath)))
                    data = parser.ParseAll();
            }
            else
            {
                data = null;
            }

            return(data);
        }
Пример #13
0
        public void Initialize(string dataPath)
        {
            LabeledQueue <object, IkadnBaseObject> data;

            using (var parser = new IkonParser(new StreamReader(dataPath + ParametersFile)))
                data = parser.ParseAll();

            var constants = data.Dequeue(ConstantsKey).To <IkonComposite>();

            this.starDistance        = constants[StarDistanceKey].To <double>();
            this.homeSystemDistance  = constants[HomeSystemDistance].To <double>();
            this.emptyPositionsRatio = constants[EmptyPositionsRatio].To <double>();

            this.sizeParameter         = loadSizes(data);
            this.displacementParameter = new ContinuousRangeParameter(LanguageContext, "displacement", 0, 0.5, constants[DefaultDisplacementKey].To <double>(), displacementPercentage);
        }
Пример #14
0
        public static void ColorLoader(IEnumerable <NamedStream> dataSources)
        {
            var colorList = new List <Color>();

            using (var parser = new IkonParser(dataSources))
                foreach (var item in parser.ParseNext().To <IkonComposite>()[ColorsKey].To <IkonArray>())
                {
                    var colorData = item.To <IkonArray>();
                    colorList.Add(Color.FromArgb(
                                      colorData[0].To <int>(),
                                      colorData[1].To <int>(),
                                      colorData[2].To <int>()
                                      ));
                }

            Colors = Array.AsReadOnly(colorList.ToArray());
        }
Пример #15
0
        public static void StartConditionsLoader(IEnumerable <NamedStream> dataSources)
        {
            var conditionList = new List <StartingConditions>();

            using (var parser = new IkonParser(dataSources))
                foreach (var item in parser.ParseAll())
                {
                    var start = StartingConditions.Load(item.Value.To <IkonComposite>());
                    if (start != null)
                    {
                        conditionList.Add(start);
                    }
                    else
                    {
                        throw new FormatException();
                    }
                }

            Starts = Array.AsReadOnly(conditionList.ToArray());
        }
Пример #16
0
        public IkadnBaseObject Parse(IkadnParser parser)
        {
            string contextName = IkonParser.ReadIdentifier(parser.Reader);
            var    entries     = new Dictionary <string, IText>();

            while (parser.Reader.PeekNextNonwhite() != ClosingChar)
            {
                var id = IkonParser.ReadIdentifier(parser.Reader).ToLower();

                if (!entries.ContainsKey(id))
                {
                    entries.Add(id, parser.ParseNext().To <IText>());
                }
                else
                {
                    System.Diagnostics.Trace.WriteLine("Duplicate localization entry, id: " + id + " in context: " + contextName);
                }
            }

            parser.Reader.Read();

            return(new Context(contextName, entries));
        }
Пример #17
0
        public IkadnBaseObject Parse(IkadnReader reader)
        {
            string contextName = IkonParser.ReadIdentifier(reader);
            var    entries     = new Dictionary <string, IText>();

            while (reader.PeekNextNonwhite() != ClosingChar)
            {
                var id = IkonParser.ReadIdentifier(reader).ToUpperInvariant();

                if (!entries.ContainsKey(id))
                {
                    entries.Add(id, reader.ReadObject().To <IText>());
                }
                else
                {
                    AppData.ErrorReporter.Get.Report(new ArgumentException("Duplicate localization entry, id: " + id + " in context: " + contextName));
                }
            }

            reader.Read();

            return(new Context(contextName, entries));
        }
Пример #18
0
        public void Initialize(string dataPath)
        {
            LabeledQueue <object, IkadnBaseObject> queue;
            IkadnBaseObject homeStarData;

            using (var parser = new IkonParser(new StreamReader(dataPath + ParametersFile)))
            {
                queue        = parser.ParseAll();
                homeStarData = parser.GetNamedObject("HomeStar");
            }

            var generalData = queue.Dequeue("General").To <IkonComposite>();
            var ranges      = generalData["ranges"].To <double[][]>();

            this.MinScore            = generalData["minScore"].To <double>();
            this.MaxScore            = generalData["maxScore"].To <double>();
            this.planetTraitIdGroups = generalData["traitGroups"].To <string[][]>();
            this.homeworldSize       = generalData["homeworldSize"].To <double>();
            this.homeworldPosition   = generalData["homeworldPosition"].To <int>();
            this.homeworldTraits     = generalData["homeworldTraits"].To <string[]>();

            this.traitConditions = new Dictionary <string, Formula>();
            var conditions = generalData["traitConditions"].To <IkonComposite>();

            foreach (var traitId in conditions.Keys)
            {
                var parser = new ExpressionParser(conditions[traitId].To <string>());
                parser.Parse();
                if (parser.errors.count > 0)
                {
                    throw new FormatException(parser.errors.errorMessages.ToString());
                }
                this.traitConditions[traitId] = parser.ParsedFormula;
            }

            var climates = new List <ClimateLevel>();

            while (queue.CountOf(ClimateLevelKey) > 0)
            {
                var data = queue.Dequeue(ClimateLevelKey).To <IkonComposite>();
                climates.Add(new ClimateLevel(
                                 data["langCode"].To <string>(),
                                 data["rangeWeights"].To <double[]>().Select((x, i) => new WeightedRange(ranges[i][0], ranges[i][1], x)).ToArray(),
                                 data["homeSystemStart"].To <double>()
                                 ));
            }
            climateLevels = climates.ToArray();

            var potentials = new List <PotentialLevel>();

            while (queue.CountOf(PotentialLevelKey) > 0)
            {
                var data = queue.Dequeue(PotentialLevelKey).To <IkonComposite>();
                potentials.Add(new PotentialLevel(
                                   data["langCode"].To <string>(),
                                   data["rangeWeights"].To <double[]>().Select((x, i) => new WeightedRange(ranges[i][0], ranges[i][1], x)).ToArray(),
                                   data["homeSystemPotential"].To <double>()
                                   ));
            }
            potentialLevels = potentials.ToArray();

            var starTypes = new List <StarType>();

            while (queue.CountOf(StarTypeKey) > 0)
            {
                var data = queue.Dequeue(StarTypeKey).To <IkonComposite>();
                var type = new StarType(
                    extractColor(data["color"].To <IkonArray>()),
                    data["minSize"].To <double>(),
                    data["maxSize"].To <double>(),
                    data["traits"].To <string[]>()
                    );

                starTypes.Add(type);
                if (data == homeStarData)
                {
                    this.homeStarType = type;
                }
            }
            this.starTypes = starTypes.ToArray();

            //TODO(v0.8) why Dictionary<int, string>?
            this.climateParameter = new SelectorParameter(
                LanguageContext, "climate",
                climates.Select((x, i) => i).ToDictionary(i => i, i => climates[i].LanguageCode),
                generalData["defaultClimate"].To <int>()
                );
            this.potentialParameter = new SelectorParameter(
                LanguageContext, "potential",
                potentials.Select((x, i) => i).ToDictionary(i => i, i => potentials[i].LanguageCode),
                generalData["defaultPotential"].To <int>()
                );
        }
Пример #19
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);
                            }
                        }
                    }
                }

                //TODO(later) move to atlas generator
                var atlasData = new ColorMap(atlasImage);
                for (int y = 0; y < atlasData.Height; y++)
                {
                    for (int x = 0; x < atlasData.Width; x++)
                    {
                        if (atlasData[x, y].A == 0)
                        {
                            var colorSum = new Vector4();
                            var alphaSum = 0f;
                            foreach (var color in atlasData.Subregion(x - 1, y - 1, x + 1, y + 1))
                            {
                                colorSum += new Vector4(color.R, color.G, color.B, 1) * color.A;
                                alphaSum += color.A;
                            }

                            if (alphaSum > 0)
                            {
                                colorSum       /= alphaSum;
                                atlasData[x, y] = new Color4(colorSum.X, colorSum.Y, colorSum.Z, 0);
                            }
                        }
                    }
                }

                this.textureId = TextureUtils.CreateTexture(atlasData);
                this.Size      = new Vector2(atlasImage.Width, atlasImage.Height);
            }

            return(ikonData);
        }