diff --git a/Docs/docfx.json b/Docs/docfx.json index caf771e..f83dd6c 100644 --- a/Docs/docfx.json +++ b/Docs/docfx.json @@ -1,14 +1,23 @@ { - "metadata": [{ - "src": [{ - "src": "../", - "files": ["**/MLEM**.csproj"], - "exclude": ["**.FNA.**"] - }], - "dest": "api" - }], + "metadata": [ + { + "src": [ + { + "src": "../", + "files": [ + "**/MLEM**.csproj" + ], + "exclude": [ + "**.FNA.**" + ] + } + ], + "dest": "api" + } + ], "build": { - "content": [{ + "content": [ + { "files": [ "articles/**.md", "articles/**/toc.yml", @@ -24,13 +33,16 @@ "src": ".." } ], - "resource": [{ + "resource": [ + { "files": [ "favicon.ico" ] }, { - "files": ["*"], + "files": [ + "*" + ], "src": "../Media" } ], @@ -41,14 +53,10 @@ "_enableSearch": true }, "dest": "_site", - "globalMetadataFiles": [], - "fileMetadataFiles": [], "template": [ "default", - "templates/darkfx" - ], - "postProcessors": [], - "markdownEngineName": "markdig", - "noLangKeyword": false + "modern", + "overrides" + ] } } diff --git a/Docs/index.md b/Docs/index.md index 3f9f36e..6935a70 100644 --- a/Docs/index.md +++ b/Docs/index.md @@ -1,49 +1 @@ -![The MLEM logo](https://raw.githubusercontent.com/Ellpeck/MLEM/release/Media/Banner.png) - -**MLEM Library for Extending MonoGame and FNA** is a set of multipurpose libraries for the game frameworks [MonoGame](https://www.monogame.net/) and [FNA](https://fna-xna.github.io/) that provides abstractions, quality of life improvements and additional features like an extensive ui system and easy input handling. - -MLEM is platform-agnostic and multi-targets .NET Standard 2.0, .NET 6.0 and .NET Framework 4.5.2, which makes it compatible with MonoGame and FNA on Desktop, mobile devices and consoles. - -# What next? -- Get it on [NuGet](https://www.nuget.org/packages?q=ellpeck+mlem) -- Get prerelease builds on [BaGet](https://nuget.ellpeck.de/?q=mlem) -- See the source code on [GitHub](https://github.com/Ellpeck/MLEM) -- See tutorials and API documentation on [the website](https://mlem.ellpeck.de/) -- Check out [the demos](https://github.com/Ellpeck/MLEM/tree/release/Demos) on [Desktop](https://github.com/Ellpeck/MLEM/tree/release/Demos.DesktopGL) or [Android](https://github.com/Ellpeck/MLEM/tree/release/Demos.Android) -- See [the changelog](https://mlem.ellpeck.de/CHANGELOG.html) for information on updates - -# Packages -- **MLEM** is the base package, which provides various small addons and abstractions for MonoGame and FNA, including a text formatting system and simple input handling -- **MLEM.Ui** provides a mouse, keyboard, gamepad and touch ready Ui system that features automatic anchoring, sizing and several ready-to-use element types -- **MLEM.Extended** ties in with MonoGame.Extended and other MonoGame and FNA libraries -- **MLEM.Data** provides simple loading and processing of textures and other data, including the ability to load non-XNB content files easily -- **MLEM.Startup** combines MLEM with some other useful libraries into a quick Game startup class -- **MLEM.Templates** contains cross-platform project templates - -# Made with MLEM -- [Touchy Tickets](https://ell.lt/touchytickets), a mobile idle game ([Source](https://git.ellpeck.de/Ellpeck/TouchyTickets)) -- [A Breath of Spring Air](https://ellpeck.itch.io/a-breath-of-spring-air), a short platformer ([Source](https://git.ellpeck.de/Ellpeck/GreatSpringGameJam)) -- [Don't Wake Up](https://ellpeck.itch.io/dont-wake-up), a short puzzle game ([Source](https://github.com/Ellpeck/DontLetGo)) -- Pong Clone, a very simple pong clone demo ([Source](https://github.com/luanfagu/pong)) -- [Tiny Life](https://tinylifegame.com), an isometric life simulation game ([Modding API](https://github.com/Ellpeck/TinyLifeExampleMod)) - -If you created a game with the help of MLEM, you can get it added to this list by submitting it on the [issue tracker](https://github.com/Ellpeck/MLEM/issues). If its source is public, other people will be able to use your project as an example, too! - -# Gallery -Here are some images that show a couple of MLEM's features. - -The [MLEM.Ui](https://mlem.ellpeck.de/articles/ui) demo in action: - -![A gif showing various user interface elements from the MLEM.Ui demo](https://raw.githubusercontent.com/Ellpeck/MLEM/release/Media/Ui.gif) - -MLEM's [text formatting system](https://mlem.ellpeck.de/articles/text_formatting), which is compatible with both MLEM.Ui and regular sprite batch rendering: - -![An image showing text with various colors and other formatting](https://raw.githubusercontent.com/Ellpeck/MLEM/release/Media/Formatting.png) - -# Friends of MLEM -There are several other libraries and tools that work well in combination with MonoGame, FNA and MLEM. Here are some of them: -- [Contentless](https://github.com/Ellpeck/Contentless), a tool that removes the need to add assets to the MonoGame Content Pipeline manually -- [GameBundle](https://github.com/Ellpeck/GameBundle), a tool that packages MonoGame and other .NET applications into several distributable formats -- [Coroutine](https://github.com/Ellpeck/Coroutine), a package that implements Unity-style coroutines for any project -- [DynamicEnums](https://github.com/Ellpeck/DynamicEnums), a package that provides enum-like single-instance values with many additional capabilities -- [MonoGame.Extended](https://github.com/craftworkgames/MonoGame.Extended), a package that also provides several additional features for MonoGame +[!INCLUDE [](../README.md)] diff --git a/Docs/overrides/conceptual.extension.js b/Docs/overrides/conceptual.extension.js new file mode 100644 index 0000000..7b45100 --- /dev/null +++ b/Docs/overrides/conceptual.extension.js @@ -0,0 +1,6 @@ +exports.preTransform = function (model) { + // point to the release branch in the readme when on the website + if (model._path.includes("index")) + model.conceptual = model.conceptual.replaceAll(/\/MLEM(\/[^/]+)?\/main\//g, "/MLEM$1/release/"); + return model; +}; diff --git a/Docs/templates/darkfx/partials/affix.tmpl.partial b/Docs/templates/darkfx/partials/affix.tmpl.partial deleted file mode 100644 index 11caeb3..0000000 --- a/Docs/templates/darkfx/partials/affix.tmpl.partial +++ /dev/null @@ -1,40 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} - - diff --git a/Docs/templates/darkfx/partials/footer.tmpl.partial b/Docs/templates/darkfx/partials/footer.tmpl.partial deleted file mode 100644 index a9da7c3..0000000 --- a/Docs/templates/darkfx/partials/footer.tmpl.partial +++ /dev/null @@ -1,29 +0,0 @@ -{{!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} - - \ No newline at end of file diff --git a/Docs/templates/darkfx/partials/head.tmpl.partial b/Docs/templates/darkfx/partials/head.tmpl.partial deleted file mode 100644 index 83fc5f9..0000000 --- a/Docs/templates/darkfx/partials/head.tmpl.partial +++ /dev/null @@ -1,20 +0,0 @@ -{{!Copyright (c) Oscar Vasquez. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.}} - - - - - {{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}} - - - - {{#_description}}{{/_description}} - - - - - - - {{#_noindex}}{{/_noindex}} - {{#_enableSearch}}{{/_enableSearch}} - {{#_enableNewTab}}{{/_enableNewTab}} - \ No newline at end of file diff --git a/Docs/templates/darkfx/styles/main.css b/Docs/templates/darkfx/styles/main.css deleted file mode 100644 index 8735586..0000000 --- a/Docs/templates/darkfx/styles/main.css +++ /dev/null @@ -1,443 +0,0 @@ -:root, body.dark-theme { - --color-foreground: #ccd5dc; - --color-navbar: #66666d; - --color-breadcrumb: #999; - --color-underline: #ddd; - --color-toc-hover: #fff; - --color-background: #2d2d30; - --color-background-subnav: #333337; - --color-background-dark: #1e1e1e; - --color-background-table-alt: #212123; - --color-background-quote: #69696e; -} - -body.light-theme { - --color-foreground: #171717; - --color-breadcrumb: #4a4a4a; - --color-toc-hover: #4c4c4c; - --color-background: #ffffff; - --color-background-subnav: #f5f5f5; - --color-background-dark: #ddd; - --color-background-table-alt: #f9f9f9; -} - -body { - color: var(--color-foreground); - line-height: 1.5; - font-size: 14px; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - word-wrap: break-word; - background-color: var(--color-background); -} - -.btn.focus, .btn:focus, .btn:hover { - color: var(--color-foreground); -} - -h1 { - font-weight: 600; - font-size: 32px; -} - -h2 { - font-weight: 600; - font-size: 24px; - line-height: 1.8; -} - -h3 { - font-weight: 600; - font-size: 20px; - line-height: 1.8; -} - -h5 { - font-size: 14px; - padding: 10px 0px; -} - -article h1, article h2, article h3, article h4 { - margin-top: 35px; - margin-bottom: 15px; -} - -article h4 { - padding-bottom: 8px; - border-bottom: 2px solid var(--color-underline); -} - -.navbar-brand>img { - color: var(--color-background); -} - -.navbar { - border: none; -} - -.subnav { - border-top: 1px solid var(--color-underline); - background-color: var(--color-background-subnav); -} - -.sidenav, .fixed_header, .toc { - background-color: var(--color-background); -} - -.navbar-inverse { - background-color: var(--color-background-dark); - z-index: 100; -} - -.navbar-inverse .navbar-nav>li>a, .navbar-inverse .navbar-text { - color: var(--color-navbar); - background-color: var(--color-background-dark); - border-bottom: 3px solid transparent; - padding-bottom: 12px; -} - -.navbar-inverse .navbar-nav>li>a:focus, .navbar-inverse .navbar-nav>li>a:hover { - color: var(--color-foreground); - background-color: var(--color-background-dark); - border-bottom: 3px solid var(--color-background-subnav); - transition: all ease 0.25s; -} - -.navbar-inverse .navbar-nav>.active>a, .navbar-inverse .navbar-nav>.active>a:focus, .navbar-inverse .navbar-nav>.active>a:hover { - color: var(--color-foreground); - background-color: var(--color-background-dark); - border-bottom: 3px solid var(--color-foreground); - transition: all ease 0.25s; -} - -.navbar-form .form-control { - border: none; - border-radius: 0; -} - -.light-theme .navbar-brand svg { - filter: brightness(20%); -} - -.toc .level1>li { - font-weight: 400; -} - -.toc .nav>li>a { - color: var(--color-foreground); -} - -.sidefilter { - background-color: var(--color-background); - border-left: none; - border-right: none; -} - -.sidefilter { - background-color: var(--color-background); - border-left: none; - border-right: none; -} - -.toc-filter { - padding: 10px; - margin: 0; - background-color: var(--color-background); -} - -.toc-filter>input { - border: none; - border-radius: unset; - background-color: var(--color-background-subnav); - padding: 5px 0 5px 20px; - font-size: 90% -} - -.toc-filter>.clear-icon { - position: absolute; - top: 17px; - right: 15px; -} - -.toc-filter>input:focus { - color: var(--color-foreground); - transition: all ease 0.25s; -} - -.toc-filter>.filter-icon { - display: none; -} - -.sidetoc>.toc { - background-color: var(--color-background); - overflow-x: hidden; -} - -.sidetoc { - background-color: var(--color-background); - border: none; -} - -.alert { - background-color: inherit; - border: none; - padding: 10px 0; - border-radius: 0; -} - -.alert>p { - margin-bottom: 0; - padding: 5px 10px; - border-bottom: 1px solid; - background-color: var(--color-background-dark); -} - -.alert>h5 { - padding: 10px 15px; - margin-top: 0; - margin-bottom: 0; - text-transform: uppercase; - font-weight: bold; - border-top: 2px solid; - background-color: var(--color-background-dark); - border-radius: none; -} - -.alert>ul { - margin-bottom: 0; - padding: 5px 40px; -} - -.alert-info { - color: #1976d2; -} - -.alert-warning { - color: #f57f17; -} - -.alert-danger { - color: #d32f2f; -} - -pre { - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - word-break: break-all; - word-wrap: break-word; - background-color: var(--color-background-dark); - border-radius: 0; - border: none; -} - -code { - background: var(--color-background-dark) !important; - border-radius: 2px; -} - -.hljs { - color: var(--color-foreground); -} - -.toc .nav>li.active>.expand-stub::before, .toc .nav>li.in>.expand-stub::before, .toc .nav>li.in.active>.expand-stub::before, .toc .nav>li.filtered>.expand-stub::before { - content: "▾"; -} - -.toc .nav>li>.expand-stub::before, .toc .nav>li.active>.expand-stub::before { - content: "▸"; -} - -.affix ul ul>li>a:before { - content: "|"; -} - -.breadcrumb { - background-color: var(--color-background-subnav); -} - -.breadcrumb .label.label-primary { - background: #444; - border-radius: 0; - font-weight: normal; - font-size: 100%; -} - -#breadcrumb .breadcrumb>li a { - border-radius: 0; - font-weight: normal; - font-size: 85%; - display: inline; - padding: 0 .6em 0; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - color: var(--color-breadcrumb); -} - -#breadcrumb .breadcrumb>li a:hover { - color: var(--color-foreground); - transition: all ease 0.25s; -} - -.breadcrumb>li+li:before { - content: "⯈"; - font-size: 75%; - color: var(--color-background-dark); - padding: 0; -} - -.light-theme .breadcrumb>li+li:before { - color: var(--color-foreground) - } - -.toc .level1>li { - font-weight: 600; - font-size: 130%; - padding-left: 5px; -} - -.footer { - border-top: none; - background-color: var(--color-background-dark); - padding: 15px 0; - font-size: 90%; -} - -.toc .nav>li>a:hover, .toc .nav>li>a:focus { - color: var(--color-toc-hover); - transition: all ease 0.1s; -} - -.form-control { - background-color: var(--color-background-subnav); - border: none; - border-radius: 0; - -webkit-box-shadow: none; - box-shadow: none; -} - -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: none; - box-shadow: none; -} - -input#search-query:focus { - color: var(--color-foreground); -} - -.table-bordered, .table-bordered>tbody>tr>td, .table-bordered>tbody>tr>th, .table-bordered>tfoot>tr>td, .table-bordered>tfoot>tr>th, .table-bordered>thead>tr>td, .table-bordered>thead>tr>th { - border: 1px solid var(--color-background-dark); -} - -.table-striped>tbody>tr:nth-of-type(odd) { - background-color: var(--color-background-table-alt); -} - -blockquote { - padding: 10px 20px; - margin: 0 0 10px; - font-size: 110%; - border-left: 5px solid var(--color-background-quote); - color: var(--color-background-quote); -} - -.pagination>.disabled>a, .pagination>.disabled>a:focus, .pagination>.disabled>a:hover, .pagination>.disabled>span, .pagination>.disabled>span:focus, .pagination>.disabled>span:hover { - background-color: var(--color-background-subnav); - border-color: var(--color-background-subnav); -} - -.breadcrumb>li, .pagination { - display: inline; -} - -.tabGroup a[role="tab"] { - border-bottom: 2px solid var(--color-background-dark); -} - -.tabGroup a[role="tab"][aria-selected="true"] { - color: var(--color-foreground); -} - -.tabGroup section[role="tabpanel"] { - border: 1px solid var(--color-background-dark); -} - -.sideaffix > div.contribution > ul > li > a.contribution-link:hover { - background-color: var(--color-background); -} - -.switch { - position: relative; - display: inline-block; - width: 40px; - height: 20px; -} - -.switch input { - opacity: 0; - width: 0; - height: 0; -} - -.slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #ccc; - -webkit-transition: .4s; - transition: .4s; -} - -.slider:before { - position: absolute; - content: ""; - height: 14px; - width: 14px; - left: 4px; - bottom: 3px; - background-color: white; - -webkit-transition: .4s; - transition: .4s; -} - -input:checked + .slider { - background-color: #337ab7; -} - -input:focus + .slider { - box-shadow: 0 0 1px #337ab7; -} - -input:checked + .slider:before { - -webkit-transform: translateX(19px); - -ms-transform: translateX(19px); - transform: translateX(19px); -} - -/* Rounded sliders */ -.slider.round { - border-radius: 20px; -} - -.slider.round:before { - border-radius: 50%; -} -.toggle-mode .icon { - display: inline-block; -} - -.toggle-mode .icon i { - font-style: normal; - font-size: 17px; - display: inline-block; - padding-right: 7px; - padding-left: 7px; - vertical-align: middle; -} diff --git a/Docs/templates/darkfx/styles/toggle-theme.js b/Docs/templates/darkfx/styles/toggle-theme.js deleted file mode 100644 index f2ea5f5..0000000 --- a/Docs/templates/darkfx/styles/toggle-theme.js +++ /dev/null @@ -1,35 +0,0 @@ -const sw = document.getElementById("switch-style"), sw_mobile = document.getElementById("switch-style-m"), b = document.body; -if (b) { - function toggleTheme(target, dark) { - target.classList.toggle("dark-theme", dark) - target.classList.toggle("light-theme", !dark) - } - - function switchEventListener() { - toggleTheme(b, this.checked); - if (window.localStorage) { - this.checked ? localStorage.setItem("theme", "dark-theme") : localStorage.setItem("theme", "light-theme") - } - } - - var isDarkTheme = !window.localStorage || !window.localStorage.getItem("theme") || window.localStorage && localStorage.getItem("theme") === "dark-theme"; - - if(sw && sw_mobile){ - sw.checked = isDarkTheme; - sw_mobile.checked = isDarkTheme; - - sw.addEventListener("change", switchEventListener); - sw_mobile.addEventListener("change", switchEventListener); - - // sync state between switches - sw.addEventListener("change", function() { - sw_mobile.checked = this.checked; - }); - - sw_mobile.addEventListener("change", function() { - sw.checked = this.checked; - }); - } - - toggleTheme(b, isDarkTheme); -} \ No newline at end of file diff --git a/README.md b/README.md index 9342e76..103927a 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ MLEM is platform-agnostic and multi-targets .NET Standard 2.0, .NET 6.0 and .NET - Pong Clone, a very simple pong clone demo ([Source](https://github.com/luanfagu/pong)) - [Tiny Life](https://tinylifegame.com), an isometric life simulation game ([Modding API](https://github.com/Ellpeck/TinyLifeExampleMod)) -If you created a game with the help of MLEM, you can get it added to this list by submitting it on the [issue tracker](https://github.com/Ellpeck/MLEM/issues). If its source is public, other people will be able to use your project as an example, too! +If you created a project with the help of MLEM, you can get it added to this list by submitting an issue or a pull request. If its source is public, other people will be able to use your project as an example, too! # Gallery Here are some images that show a couple of MLEM's features. diff --git a/build.cake b/build.cake index 4843eb3..b91e5fc 100644 --- a/build.cake +++ b/build.cake @@ -1,5 +1,5 @@ #addin nuget:?package=Cake.DocFx&version=1.0.0 -#tool dotnet:?package=docfx&version=2.61.0 +#tool dotnet:?package=docfx&version=2.63.0 // this is the upcoming version, for prereleases var version = Argument("version", "6.2.0");