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(); }
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(); }
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)); }
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); }
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); }
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())); }
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); }
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())); }
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)); }
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); }
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); }
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()); }
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()); }
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)); }
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)); }
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>() ); }
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); }