diff --git a/README.mkd b/README.mkd --- a/README.mkd +++ b/README.mkd @@ -159,7 +159,7 @@ Libraries: [FNA](https://fna-xna.github.io/), [SpriteFontPlus](https://github.com/rds1983/SpriteFontPlus), [Tracery.Net](https://github.com/josh-perry/Tracery.Net), [ImGui.NET](http://imgui.net/), and [Encompass-cs](http://moonside.games/docs/encompass/) -Fonts: Droid Sans, [Iosevka,](https://typeof.net/Iosevka/) [Typicons by Stephen Hutchings](https://www.s-ings.com/typicons/) +Fonts: Droid Sans, [Iosevka,](https://typeof.net/Iosevka/), [Typicons by Stephen Hutchings](https://www.s-ings.com/typicons/), [OCRA}() designed by American Type Founders and converted by Matthew Skala Sources for the procedural generation are documented in Sources.md. diff --git a/isometric-park-fna/Content/OCRA.ttf b/isometric-park-fna/Content/OCRA.ttf new file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6a64901c92dccd9b600f2aa2f06f88d8b37b5f05 GIT binary patch literal 15896 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 Fe*lpfVMhP} diff --git a/isometric-park-fna/FNAGame.cs b/isometric-park-fna/FNAGame.cs --- a/isometric-park-fna/FNAGame.cs +++ b/isometric-park-fna/FNAGame.cs @@ -49,6 +49,7 @@ // #endif private SpriteFont monoFont; private SpriteFont largeMonoFont; + private SpriteFont ocrFont; private Camera camera = new Camera(new float[] {0.125f, 0.25f, 0.5f, 1.0f, 2.0f, 4.0f }); @@ -246,8 +247,25 @@ new CharacterRange((char) 0x00B7) } ); + + var bakedOCR = TtfFontBaker.Bake(File.OpenRead(@"Content/OCRA.ttf"), + 18, + 1024, + 1024, + new[] + { + CharacterRange.BasicLatin, + CharacterRange.Latin1Supplement, + CharacterRange.LatinExtendedA, + CharacterRange.Cyrillic, + CharacterRange.LatinExtendedB, + new CharacterRange((char) 0x00B7) + } + ); + monoFont = bakedMono.CreateSpriteFont(GraphicsDevice); largeMonoFont = bakedMonoLarge.CreateSpriteFont(GraphicsDevice); + ocrFont = bakedOCR.CreateSpriteFont(GraphicsDevice); //Has to happen before Encompass stuff, because the Encompass machinery around ImGui requires debugWindow's monoFont to be loaded: this.debugWindow = new DebugWindow(this._imGuiRenderer, GraphicsDevice, this.imageMap); @@ -398,7 +416,7 @@ } this.simulation.LoadContent(this.newsItems, this.grammar); - this.budgetWindow = new BudgetWindow(new Budget { }, this.monoFont, 0, 0); + this.budgetWindow = new BudgetWindow(new Budget { }, this.ocrFont, 0, 0); Logging.Success("Content loaded."); } diff --git a/isometric-park-fna/UI/BudgetWindow.cs b/isometric-park-fna/UI/BudgetWindow.cs --- a/isometric-park-fna/UI/BudgetWindow.cs +++ b/isometric-park-fna/UI/BudgetWindow.cs @@ -108,7 +108,7 @@ batch.DrawString(font, String.Format("EXPENSES", this.budget.upkeep), new Vector2(x, bar_height * 10 + y), Color.Black); batch.DrawString(font, String.Format("Upkeep.................${0:}....${1:}", this.budget.upkeep, this.previous_budget.upkeep), new Vector2(x, bar_height * 11 + y), Color.Black); - batch.DrawString(font, String.Format("Tree Planting.1........${0:}....${1:}", this.budget.tree_planting, this.previous_budget.tree_planting), new Vector2(x, bar_height * 12 + y), Color.Black); + batch.DrawString(font, String.Format("Tree Planting..........${0:}....${1:}", this.budget.tree_planting, this.previous_budget.tree_planting), new Vector2(x, bar_height * 12 + y), Color.Black); batch.DrawString(font, String.Format("Tree Clearing..........${0:}....${1:}", this.budget.tree_clearing, this.previous_budget.tree_clearing), new Vector2(x, bar_height * 13 + y), Color.Black); batch.DrawString(font, String.Format("Enforcement............${0:}....${1:}", this.budget.enforcement, this.previous_budget.enforcement), new Vector2(x, bar_height * 14 + y), Color.Black); diff --git a/isometric-park-fna/isometric-park-fna.csproj b/isometric-park-fna/isometric-park-fna.csproj --- a/isometric-park-fna/isometric-park-fna.csproj +++ b/isometric-park-fna/isometric-park-fna.csproj @@ -114,6 +114,9 @@ PreserveNewest + + PreserveNewest +