diff --git a/indigo/build.sbt b/indigo/build.sbt index 278202875..a0f3bf0fb 100644 --- a/indigo/build.sbt +++ b/indigo/build.sbt @@ -11,12 +11,12 @@ ThisBuild / scalaVersion := scala3Version lazy val indigoVersion = IndigoVersion.getVersion // For the docs site -lazy val indigoDocsVersion = "0.14.0" -lazy val tyrianDocsVersion = "0.6.0" +lazy val indigoDocsVersion = "0.15.0-RC3" +lazy val tyrianDocsVersion = "0.7.1" lazy val scalaJsDocsVersion = "1.13.1" lazy val scalaDocsVersion = "3.3.0" -lazy val sbtDocsVersion = "1.9.0" -lazy val millDocsVersion = "0.10.12" +lazy val sbtDocsVersion = "1.9.2" +lazy val millDocsVersion = "0.11.0" lazy val commonSettings: Seq[sbt.Def.Setting[_]] = Seq( version := indigoVersion, @@ -194,8 +194,8 @@ lazy val jsdocs = project "io.indigoengine" %%% "indigo-json-circe" % indigoDocsVersion, "io.indigoengine" %%% "indigo" % indigoDocsVersion, "io.indigoengine" %%% "indigo-extras" % indigoDocsVersion, - "io.indigoengine" %%% "tyrian-io" % tyrianDocsVersion, - "io.indigoengine" %%% "tyrian-indigo-bridge" % tyrianDocsVersion + "io.indigoengine" %%% "tyrian-io" % tyrianDocsVersion//, + // "io.indigoengine" %%% "tyrian-indigo-bridge" % tyrianDocsVersion ) ) .enablePlugins(ScalaJSPlugin) diff --git a/indigo/docs/01-quickstart/directory.conf b/indigo/docs/01-quickstart/directory.conf new file mode 100644 index 000000000..9b0e1f665 --- /dev/null +++ b/indigo/docs/01-quickstart/directory.conf @@ -0,0 +1 @@ +laika.title = "Setup & Configuration" diff --git a/indigo/docs/quickstart/examples.md b/indigo/docs/01-quickstart/examples.md similarity index 61% rename from indigo/docs/quickstart/examples.md rename to indigo/docs/01-quickstart/examples.md index 37ae43dbd..7777774b2 100644 --- a/indigo/docs/quickstart/examples.md +++ b/indigo/docs/01-quickstart/examples.md @@ -1,16 +1,11 @@ ---- -id: examples -title: Examples ---- +# Examples At various points in Indigo's development, little games and examples have been made. These help drive out requirements, test the feel of the engine against real examples and help ensure the build is stable. They are not always very polished, but they are small and reasonably easy to follow. -> The examples have moved. They now track the latest public release! - They can all be found in the [indigo-examples](https://github.com/PurpleKingdomGames/indigo-examples) repo. Please visit the [repo](https://github.com/PurpleKingdomGames/indigo-examples) for more information. -You can play a game of [Snake](/snake.html) and try the [The Cursed Pirate](/pirate.html) demo on this site. Please note that The Cursed Pirate is not a game, just a little demo of how you might build a platformer. +You can play a game of Snake and try the The Cursed Pirate Demo demo on this site. Please note that The Cursed Pirate is not a game, just a little demo of how you might build a platformer. diff --git a/indigo/docs/quickstart/hello-indigo.md b/indigo/docs/01-quickstart/hello-indigo.md similarity index 98% rename from indigo/docs/quickstart/hello-indigo.md rename to indigo/docs/01-quickstart/hello-indigo.md index 9b34ca021..16f2d9d7d 100644 --- a/indigo/docs/quickstart/hello-indigo.md +++ b/indigo/docs/01-quickstart/hello-indigo.md @@ -1,7 +1,4 @@ ---- -id: hello-indigo -title: Hello, Indigo! ---- +# Hello, Indigo! This is a quick start tutorial to help you build something with Indigo. @@ -23,7 +20,7 @@ In this guide, we'll be using `IndigoSandbox` for brevity and our "game" will be ## "Hello, Indigo!" -We'll skip over the initial project set up and assume that you followed the [set up guide](setup-and-configuration.md), or have [checked out the repo](https://github.com/PurpleKingdomGames/hello-indigo) for reference. +We'll skip over the initial project set up and assume that you followed the [set up guide](quickstart.md), or have [checked out the repo](https://github.com/PurpleKingdomGames/hello-indigo) for reference. Here is our starting point: @@ -31,7 +28,7 @@ Here is our starting point: import indigo.* import scala.scalajs.js.annotation.JSExportTopLevel -@JSExportTopLevel("IndigoGame") +// @JSExportTopLevel("IndigoGame") // Pandering to mdoc object HelloIndigo extends IndigoSandbox[Unit, Unit] { val config: GameConfig = @@ -100,7 +97,7 @@ One small thing to note is that most types in Indigo try to provide sensible def We're going to follow the Mill version of the project below, but the SBT version is almost identical, substituting `sbt runGame` in place of `mill helloindigo.runGame`. -So assuming you have followed the [set up guide](setup-and-configuration.md), to run the demo enter the following from your command line: +So assuming you have followed the [set up guide](quickstart.md), to run the demo enter the following from your command line: ```bash mill helloindigo.runGame diff --git a/indigo/docs/quickstart/project-templates.md b/indigo/docs/01-quickstart/project-templates.md similarity index 88% rename from indigo/docs/quickstart/project-templates.md rename to indigo/docs/01-quickstart/project-templates.md index 2dd2099f8..509e65670 100644 --- a/indigo/docs/quickstart/project-templates.md +++ b/indigo/docs/01-quickstart/project-templates.md @@ -1,7 +1,4 @@ ---- -id: project-templates -title: Mill & SBT Game Templates ---- +# Mill & SBT Templates To help you get started quickly, we've put together a minimal project template for both [Mill](http://www.lihaoyi.com/mill/) and [SBT](https://www.scala-sbt.org/). diff --git a/indigo/docs/quickstart/setup-and-configuration.md b/indigo/docs/01-quickstart/quickstart.md similarity index 99% rename from indigo/docs/quickstart/setup-and-configuration.md rename to indigo/docs/01-quickstart/quickstart.md index 555db1573..4a041aef4 100644 --- a/indigo/docs/quickstart/setup-and-configuration.md +++ b/indigo/docs/01-quickstart/quickstart.md @@ -1,9 +1,4 @@ ---- -id: setup-and-configuration -title: Setup & Configuration ---- - -## Quick setup +# Quick start ### Using giter8 / sbt new diff --git a/indigo/docs/02-guides/directory.conf b/indigo/docs/02-guides/directory.conf new file mode 100644 index 000000000..0b2125941 --- /dev/null +++ b/indigo/docs/02-guides/directory.conf @@ -0,0 +1 @@ +laika.title = Guides diff --git a/indigo/docs/guides/howto-custom-entity.md b/indigo/docs/02-guides/howto-custom-entity.md similarity index 99% rename from indigo/docs/guides/howto-custom-entity.md rename to indigo/docs/02-guides/howto-custom-entity.md index 63bae16ad..90da4d895 100644 --- a/indigo/docs/guides/howto-custom-entity.md +++ b/indigo/docs/02-guides/howto-custom-entity.md @@ -1,7 +1,4 @@ ---- -id: howto-custom-entity -title: How to make a custom entity ---- +# How to make a custom entity ## What are custom entities? diff --git a/indigo/docs/guides/howto-fire-shader.md b/indigo/docs/02-guides/howto-fire-shader.md similarity index 99% rename from indigo/docs/guides/howto-fire-shader.md rename to indigo/docs/02-guides/howto-fire-shader.md index 99e8cf9ad..ef5909ac1 100644 --- a/indigo/docs/guides/howto-fire-shader.md +++ b/indigo/docs/02-guides/howto-fire-shader.md @@ -1,7 +1,4 @@ ---- -id: howto-fire-shader -title: How to write a fire shader ---- +# How to write a fire shader In this how-to guide, we're going to look at one approach to writing a little shader that produces procedural flames. Here's one I made earlier: @@ -48,7 +45,7 @@ final case class Fire( ShaderData( Fire.shaderId, UniformBlock( - "FireData", + UniformBlockName("FireData"), Batch( Uniform("OFFSET") -> float(offset), Uniform("COLOR_OUTER") -> vec3(outer.r, outer.g, outer.b), @@ -172,7 +169,7 @@ def toShaderData: ShaderData = ShaderData( Fire.shaderId, UniformBlock( - "FireData", + UniformBlockName("FireData"), Batch( Uniform("OFFSET") -> float(offset), Uniform("COLOR_OUTER") -> vec3(outer.r, outer.g, outer.b), @@ -194,7 +191,7 @@ layout (std140) uniform FireData { }; ``` -At some point in the future it would be good to improve the type safety around the relationship across this interface, but for now, please take care. More information on how this works including the **all important packing rules** can be found in the [Shaders Overview](shaders/shader-overview.md). +At some point in the future it would be good to improve the type safety around the relationship across this interface, but for now, please take care. More information on how this works including the **all important packing rules** can be found in the [Shaders Overview](/07-shaders/shaders-overview.md). ### UVs diff --git a/indigo/docs/guides/howto-hello-indigo-tyrian.md b/indigo/docs/02-guides/howto-hello-indigo-tyrian.md similarity index 98% rename from indigo/docs/guides/howto-hello-indigo-tyrian.md rename to indigo/docs/02-guides/howto-hello-indigo-tyrian.md index 75fe32b0d..348520dd7 100644 --- a/indigo/docs/guides/howto-hello-indigo-tyrian.md +++ b/indigo/docs/02-guides/howto-hello-indigo-tyrian.md @@ -1,7 +1,4 @@ ---- -id: howto-responsive-ui-with-tyrian -title: How to make a responsive UI using Tyrian ---- +# How to make a responsive UI using Tyrian ## Responsive UI Using Tyrian @@ -36,7 +33,7 @@ These are the steps we're going to take: * [Set up the environment](#setting-up-the-environment) - e.g. clone `hello-indigo` and set up ParcelJS * [Modify our build files](#setting-up-the-build) - e.g. update our `build.sbt` or `build.sc` files * [Create our static files](#setting-up-the-html-and-parceljs) - e.ge create our html, js, css and other static content -* [Update Indigo with a new subsystem](#update-helloindigoscala) and [Initialise our Tyrian app](#create-a-tyrian-app) +* [Update Indigo with a new subsystem](#update-helloindigo-scala) and [Initialise our Tyrian app](#create-a-tyrian-app) * [Get Tyrian publishing messages to Indigo](#tyrian-to-indigo-communication) (and Indigo to subscribe to them) * [Get Indigo publishing messages to Tyrian](#indigo-to-tyrian-communication) (and Tyrian to subscribe to them) * And finally [creating a responsive UI in CSS](#responsive-ui) @@ -57,7 +54,7 @@ follow [this guide](howto-indigo-game.md) or replace `HelloIndigo.scala` with [this](https://gist.github.com/hobnob/c24f00936e91a7b7e5d644d19e4f1b32) -```scala mdoc:js:shared:invisible +```scala import indigo.* import indigo.scenes.* import tyrian.TyrianSubSystem @@ -373,7 +370,7 @@ Create a new file called `HelloTyrian.scala` inside the `helloindigo/src` folder and add the following contents found below, or [here](https://gist.github.com/hobnob/436318b3ae5eed5891ba2b18bb8c264b). -```scala mdoc:js +```scala import cats.effect.IO import tyrian.* import tyrian.Html.* diff --git a/indigo/docs/guides/howto-indigo-game.md b/indigo/docs/02-guides/howto-indigo-game.md similarity index 98% rename from indigo/docs/guides/howto-indigo-game.md rename to indigo/docs/02-guides/howto-indigo-game.md index 219c485d8..b82a811d3 100644 --- a/indigo/docs/guides/howto-indigo-game.md +++ b/indigo/docs/02-guides/howto-indigo-game.md @@ -1,7 +1,4 @@ ---- -id: howto-indigo-game -title: Converting `IndigoSandbox` to `IndigoGame` ---- +# Converting `IndigoSandbox` to `IndigoGame` ## Basic Concepts diff --git a/indigo/docs/03-gameloop/directory.conf b/indigo/docs/03-gameloop/directory.conf new file mode 100644 index 000000000..880502913 --- /dev/null +++ b/indigo/docs/03-gameloop/directory.conf @@ -0,0 +1 @@ +laika.title = Gameloop diff --git a/indigo/docs/gameloop/events.md b/indigo/docs/03-gameloop/events.md similarity index 97% rename from indigo/docs/gameloop/events.md rename to indigo/docs/03-gameloop/events.md index da39a15c7..34838e4fc 100644 --- a/indigo/docs/gameloop/events.md +++ b/indigo/docs/03-gameloop/events.md @@ -1,7 +1,4 @@ ---- -id: events -title: Events ---- +# Events ## The event loop @@ -71,7 +68,7 @@ of the site, and will also fire when the application loses or gains focus. ### `InputEvent`s -Handling `InputEvent`s can be a bit tricky in some situations, so Indigo includes `Mouse` and `Keyboard` classes that can be accessed from the [frame context](gameloop/frame-context.md), providing a rich interface to gather more complex information from those input devices. +Handling `InputEvent`s can be a bit tricky in some situations, so Indigo includes `Mouse` and `Keyboard` classes that can be accessed from the [frame context](/03-gameloop/frame-context.md), providing a rich interface to gather more complex information from those input devices. #### `MouseEvent`s @@ -137,7 +134,7 @@ the internet or indeed a single resource on the internet is available. - `HttpError` - Unspecified error - `HttpResponse(status, headers, body)` -### `StorageEvent`s +### StorageEvents Used to load and save data from local storage. @@ -155,7 +152,7 @@ be raised as a separate event. - `FeatureNotAvailable(key, actionType)` - The storage feature is not available - `Unspecified(key, actionType, message)` - An unknown error -### `AssetEvent`s +### AssetEvents These are the low level events used to load additional assets at runtime. If you want a slightly more sophisticated loading experience, please look at the asset bundle loader sub system. diff --git a/indigo/docs/gameloop/frame-context.md b/indigo/docs/03-gameloop/frame-context.md similarity index 91% rename from indigo/docs/gameloop/frame-context.md rename to indigo/docs/03-gameloop/frame-context.md index 141b40e34..be1a3e9c4 100644 --- a/indigo/docs/gameloop/frame-context.md +++ b/indigo/docs/03-gameloop/frame-context.md @@ -1,7 +1,4 @@ ---- -id: frame-context -title: Frame context ---- +# Frame context Updating a frame in Indigo is principally about doing two things: @@ -39,7 +36,7 @@ The problem is that `Random` goes against our referential transparency principle > Side note: Testing this kind of behavior with property based testing techniques works very well and often neatly side steps the issue of unknown values. -Similar problems occur if you attempt to implement [frame independence](/docs/information/glossary#frame-independence) based on the elapsed time. You could add a last updated field to Bob's model and use `System.currentTimeMillis` to get the delta, but again, how would you write a test for that. +Similar problems occur if you attempt to implement [frame independence](/10-information/glossary.md) based on the elapsed time. You could add a last updated field to Bob's model and use `System.currentTimeMillis` to get the delta, but again, how would you write a test for that. The problem is that `Random` and `System.currentTimeMillis` are side effecting and that makes them hard to test. diff --git a/indigo/docs/gameloop/outcome.md b/indigo/docs/03-gameloop/outcome.md similarity index 99% rename from indigo/docs/gameloop/outcome.md rename to indigo/docs/03-gameloop/outcome.md index 604b35660..4453a81a0 100644 --- a/indigo/docs/gameloop/outcome.md +++ b/indigo/docs/03-gameloop/outcome.md @@ -1,7 +1,4 @@ ---- -id: outcome -title: Outcome Type ---- +# Outcome Type ## What is an Outcome? diff --git a/indigo/docs/organisation/boot-and-start-up.md b/indigo/docs/04-organisation/boot-and-start-up.md similarity index 98% rename from indigo/docs/organisation/boot-and-start-up.md rename to indigo/docs/04-organisation/boot-and-start-up.md index 58f58dd63..ec33ed045 100644 --- a/indigo/docs/organisation/boot-and-start-up.md +++ b/indigo/docs/04-organisation/boot-and-start-up.md @@ -1,7 +1,4 @@ ---- -id: boot-and-start-up -title: Boot & Start Up ---- +# Boot & Start Up > Please note that the terms "start up" and "setup" are used interchangeably here. "Startup" is the name of the data type, while "setup" is the name of the method. This naming should probably be revisited... @@ -10,7 +7,7 @@ In order to get your game up and running, it needs to go through an initializati 1. Boot - which only ever happens once; 2. Start up - which occurs on first run, and then whenever new assets are loaded dynamically. -A lot of what this process relates to is the loading and processing of assets, so it's worth [reading up on that too](platform/assets.md). +A lot of what this process relates to is the loading and processing of assets, so it's worth [reading up on that too](/05-platform/assets.md). ## Booting your game @@ -83,7 +80,7 @@ IndigoGame.halt(); Calling `halt` does not clean up your page in any way, the assumption is that you will remove the relevant HTML dom nodes. -#### BootResult[_] +#### BootResult In a simple game, all of your animations, fonts, subsystems, shaders, and assets can be declared during the boot stage. For more complex games, such as ones that have a pre-loader, you should only include the elements you need for the preloader scene here. diff --git a/indigo/docs/04-organisation/directory.conf b/indigo/docs/04-organisation/directory.conf new file mode 100644 index 000000000..2b1bc5a51 --- /dev/null +++ b/indigo/docs/04-organisation/directory.conf @@ -0,0 +1 @@ +laika.title = Organisation diff --git a/indigo/docs/organisation/game-entry-points.md b/indigo/docs/04-organisation/game-entry-points.md similarity index 97% rename from indigo/docs/organisation/game-entry-points.md rename to indigo/docs/04-organisation/game-entry-points.md index 97d527304..74189fab6 100644 --- a/indigo/docs/organisation/game-entry-points.md +++ b/indigo/docs/04-organisation/game-entry-points.md @@ -1,7 +1,4 @@ ---- -id: game-entry-points -title: Game Entry Points ---- +# Game Entry Points Entry points are typically traits that you extend in order to write your game, and they provide the basic structure that you need to adhere to, to make a game that Indigo understands. What they actually do underneath is provide a user friendly way to build the frame processor and start the engine that does all of the work. diff --git a/indigo/docs/organisation/scene-management.md b/indigo/docs/04-organisation/scene-management.md similarity index 100% rename from indigo/docs/organisation/scene-management.md rename to indigo/docs/04-organisation/scene-management.md diff --git a/indigo/docs/organisation/subsystems.md b/indigo/docs/04-organisation/subsystems.md similarity index 98% rename from indigo/docs/organisation/subsystems.md rename to indigo/docs/04-organisation/subsystems.md index e815703e4..790d3d87c 100644 --- a/indigo/docs/organisation/subsystems.md +++ b/indigo/docs/04-organisation/subsystems.md @@ -23,8 +23,8 @@ final case class PointsTrackerExample(startingPoints: Int) extends SubSystem: val id: SubSystemId = SubSystemId("points tracker") val eventFilter: GlobalEvent => Option[PointsTrackerEvent] = { - case e: PointsTrackerEvent => Option(e) - case _ => None + case e: PointsTrackerEvent @unchecked => Option(e) + case _ => None } def initialModel: Outcome[Int] = diff --git a/indigo/docs/platform/assets.md b/indigo/docs/05-platform/assets.md similarity index 99% rename from indigo/docs/platform/assets.md rename to indigo/docs/05-platform/assets.md index ec6fabee8..e35352b90 100644 --- a/indigo/docs/platform/assets.md +++ b/indigo/docs/05-platform/assets.md @@ -1,7 +1,4 @@ ---- -id: assets -title: Assets & Asset Loading ---- +# Assets & Asset Loading ## Asset Types diff --git a/indigo/docs/platform/cross-platform-publishing.md b/indigo/docs/05-platform/cross-platform-publishing.md similarity index 98% rename from indigo/docs/platform/cross-platform-publishing.md rename to indigo/docs/05-platform/cross-platform-publishing.md index e0500487b..8c9d41db3 100644 --- a/indigo/docs/platform/cross-platform-publishing.md +++ b/indigo/docs/05-platform/cross-platform-publishing.md @@ -1,7 +1,4 @@ ---- -id: cross-platform-publishing -title: Cross Platform Publishing ---- +# Cross Platform Publishing Indigo supports basic publishing to/building for the following platforms: diff --git a/indigo/docs/05-platform/directory.conf b/indigo/docs/05-platform/directory.conf new file mode 100644 index 000000000..fc37445bb --- /dev/null +++ b/indigo/docs/05-platform/directory.conf @@ -0,0 +1 @@ +laika.title = "Platform & IO" diff --git a/indigo/docs/platform/importers.md b/indigo/docs/05-platform/importers.md similarity index 98% rename from indigo/docs/platform/importers.md rename to indigo/docs/05-platform/importers.md index 1b1d05702..04d906252 100644 --- a/indigo/docs/platform/importers.md +++ b/indigo/docs/05-platform/importers.md @@ -1,7 +1,4 @@ ---- -id: importers -title: File Format Importers ---- +# File Importers At the time of writing, Indigo has limited support for importing data from Aseprite and Tiled. The support that has been added was built on an "as needed" basis, and is far from complete. diff --git a/indigo/docs/platform/input-handling.md b/indigo/docs/05-platform/input-handling.md similarity index 96% rename from indigo/docs/platform/input-handling.md rename to indigo/docs/05-platform/input-handling.md index 8691f4fdb..3cad7dbe7 100644 --- a/indigo/docs/platform/input-handling.md +++ b/indigo/docs/05-platform/input-handling.md @@ -1,7 +1,4 @@ ---- -id: input-handling -title: User Input Handling ---- +# Input Handling At the time of writing, Indigo understands three input device types: Mouse, Keyboard, and Gamepad. @@ -20,7 +17,7 @@ There are input actions that are best represented as events, a mouse click for e Input events only (currently) cover Mouse and Keyboard events, _not gamepads_, and can be detected during the model or view model update functions as you would any other event. -For more information, please see the [events](gameloop/events.md) page. +For more information, please see the [events](/03-gameloop/events.md) page. ## InputState (Continuous signals) @@ -28,7 +25,7 @@ There are other types of input that don't make as much sense as events. It is possible in Indigo to listen to every distinct mouse move event for example, but that is almost certainly not what you actually want to do. Most likely, what you really want is the cumulative position at the point that this frame is being processed. -Indigo does this by sampling the input states of the mouse, keyboard and gamepad and allowing you to access it through the [frame context](gameloop/frame-context.md). +Indigo does this by sampling the input states of the mouse, keyboard and gamepad and allowing you to access it through the [frame context](/03-gameloop/frame-context.md). > Note that this is how gamepads are usually modeled and at the moment Indigo is no exception. Adding discrete events for specific button presses to emulate mouse-like behavior is under consideration. diff --git a/indigo/docs/platform/loading-and-saving-data.md b/indigo/docs/05-platform/loading-and-saving-data.md similarity index 79% rename from indigo/docs/platform/loading-and-saving-data.md rename to indigo/docs/05-platform/loading-and-saving-data.md index 0a09def64..32c54c804 100644 --- a/indigo/docs/platform/loading-and-saving-data.md +++ b/indigo/docs/05-platform/loading-and-saving-data.md @@ -1,7 +1,4 @@ ---- -id: loading-and-saving-data -title: Loading & Saving Data ---- +# Loading & Saving Data Sooner or later, you're probably going to need to load data into your game or save user data. @@ -9,7 +6,7 @@ Sooner or later, you're probably going to need to load data into your game or sa When you think of loading and saving, probably the first thing that comes to mind is save games. -Currently Indigo's local storage options are a bit limited, but what you can do is [storage events](/docs/gameloop/events#storageevents). +Currently Indigo's local storage options are a bit limited, but what you can do is [storage events](/03-gameloop/events.md#storageevents). Storage events use your browsers local storage, which you can think of like a key value store. You process might be: @@ -22,11 +19,11 @@ Storage events use your browsers local storage, which you can think of like a ke ### Loading local data -You can always load data in plain text format (that could be JSON or CSV for example), by using making use of the [asset loading](/docs/platform/assets#asset-loading) functionality. This allows you to dynamically load a data file at any time, process it, and apply it to you model. +You can always load data in plain text format (that could be JSON or CSV for example), by using making use of the [asset loading](/05-platform/assets.md#asset-loading) functionality. This allows you to dynamically load a data file at any time, process it, and apply it to you model. ### Loading and saving over a network -The other way to load and save data might be over a network, please see the [networking page for details](platform/networking.md). +The other way to load and save data might be over a network, please see the [networking page for details](/05-platform/networking.md). Similar to the save game flow, you might do something like: diff --git a/indigo/docs/platform/logging.md b/indigo/docs/05-platform/logging.md similarity index 97% rename from indigo/docs/platform/logging.md rename to indigo/docs/05-platform/logging.md index 1ba4e9deb..866b5a3ca 100644 --- a/indigo/docs/platform/logging.md +++ b/indigo/docs/05-platform/logging.md @@ -1,7 +1,4 @@ ---- -id: logging -title: Logging ---- +# Logging Sometimes you need a log message to help you debug something, and to help you do that Indigo comes with a very simple / border-line dumb logger. diff --git a/indigo/docs/platform/networking.md b/indigo/docs/05-platform/networking.md similarity index 92% rename from indigo/docs/platform/networking.md rename to indigo/docs/05-platform/networking.md index 6d079385d..170992d9e 100644 --- a/indigo/docs/platform/networking.md +++ b/indigo/docs/05-platform/networking.md @@ -1,7 +1,4 @@ ---- -id: networking -title: Networking ---- +# Networking Indigo supports basic networking via HTTP or WebSockets. You can also get a rudimentary indication as to whether the local machine has an active network @@ -16,8 +13,8 @@ JavaScript handles network calls via callbacks and promises, but that doesn't fi Therefore, what we have is a side-effecting networking system inside Indigo which you communicate with via the normal event loop. If you want to send an HTTP request you emit a `GET(url, params, headers)` event, and at the beginning of some future frame, hopefully you'll get an `HttpResponse(status, headers, body)`. WebSockets work in a similar way but are complicated by having more states. -For a complete list of network events, please head over the the [events documentation](gameloop/events.md). +For a complete list of network events, please head over the the [events documentation](/03-gameloop/events.md). We have examples of networking in our indigo-examples repo, of both [HTTP](https://github.com/PurpleKingdomGames/indigo-examples/blob/master/examples/http/src/main/scala/indigoexamples/HttpExample.scala) and [WebSockets](https://github.com/PurpleKingdomGames/indigo-examples/blob/master/examples/websocket/src/main/scala/indigoexamples/WebSocketExample.scala). -The examples make use of buttons which you can find out about on the [UI Components](presentation/ui-components.md) page. +The examples make use of buttons which you can find out about on the [UI Components](/09-uicomponents/ui-components.md) page. diff --git a/indigo/docs/presentation/animation.md b/indigo/docs/06-presentation/animation.md similarity index 99% rename from indigo/docs/presentation/animation.md rename to indigo/docs/06-presentation/animation.md index 5bdd6f819..0f3841bc7 100644 --- a/indigo/docs/presentation/animation.md +++ b/indigo/docs/06-presentation/animation.md @@ -1,7 +1,4 @@ ---- -id: animation -title: Animation ---- +# Animation There are two types of animations found in Indigo. diff --git a/indigo/docs/presentation/audio.md b/indigo/docs/06-presentation/audio.md similarity index 96% rename from indigo/docs/presentation/audio.md rename to indigo/docs/06-presentation/audio.md index 4b9e0abb1..2de1fbeff 100644 --- a/indigo/docs/presentation/audio.md +++ b/indigo/docs/06-presentation/audio.md @@ -1,7 +1,4 @@ ---- -id: audio -title: Audio ---- +# Audio Indigo's audio support is fairly unsophisticated, but probably good enough for the kind of games Indigo was designed for. The authors are not audio experts, please feel free to raise issues if you have any suggestions for improvements. @@ -14,7 +11,7 @@ There are two kinds of audio support in Indigo: Indigo uses web technologies, so you should refer to current recommended practices for audio formats. That being said, anything a browser will play Indigo will play, and most of the existing demos and examples just use MP3 files, but that is a fairly dated format these days. -Please refer to the assets documentation for information on [how to load audio files](platform/assets.md). +Please refer to the assets documentation for information on [how to load audio files](/05-platform/assets.md). ## Sound effects diff --git a/indigo/docs/presentation/boundaries.md b/indigo/docs/06-presentation/boundaries.md similarity index 98% rename from indigo/docs/presentation/boundaries.md rename to indigo/docs/06-presentation/boundaries.md index b45d167a8..a6e12b726 100644 --- a/indigo/docs/presentation/boundaries.md +++ b/indigo/docs/06-presentation/boundaries.md @@ -1,7 +1,4 @@ ---- -id: boundaries -title: Boundaries ---- +# Boundaries A curious quirk of the way Indigo works is that it seems unusual to need to find the boundary / bounding box of a rendered element. Usually you are telling something how big it needs to be rather than asking it how big or small it actually is. diff --git a/indigo/docs/presentation/cameras.md b/indigo/docs/06-presentation/cameras.md similarity index 99% rename from indigo/docs/presentation/cameras.md rename to indigo/docs/06-presentation/cameras.md index 73552e631..5535a5f5e 100644 --- a/indigo/docs/presentation/cameras.md +++ b/indigo/docs/06-presentation/cameras.md @@ -1,7 +1,4 @@ ---- -id: cameras -title: Cameras ---- +# Cameras When you look at a scene rendered by Indigo, you are looking through a default camera. diff --git a/indigo/docs/presentation/clones-and-mutants.md b/indigo/docs/06-presentation/clones-and-mutants.md similarity index 94% rename from indigo/docs/presentation/clones-and-mutants.md rename to indigo/docs/06-presentation/clones-and-mutants.md index 6816525f7..166312996 100644 --- a/indigo/docs/presentation/clones-and-mutants.md +++ b/indigo/docs/06-presentation/clones-and-mutants.md @@ -1,9 +1,4 @@ ---- -id: clones-and-mutants -title: Clones & Mutants ---- - -> Available in the forthcoming Indigo 0.10.0 only. There were earlier versions of Clones but they were never documented properly and they've all been superseded. +# Clones & Mutants Sometimes you really need to draw a lot of things. Thousands and thousands of things. @@ -127,7 +122,7 @@ Mutants( Array( Batch( UniformBlock( - "MutantData", + UniformBlockName("MutantData"), Batch( Uniform("MOVE_TO") -> vec2(10.0, 10.0), Uniform("SCALE_TO") -> vec2(2.0, 2.0), @@ -139,7 +134,7 @@ Mutants( ) ``` -The idea here is that you have [created a custom entity](guides/howto-custom-entity.md) and for each instance, you want to set it's UBO data, which here contains a position, a scale and an alpha value. +The idea here is that you have [created a custom entity](/02-guides/howto-custom-entity.md) and for each instance, you want to set it's UBO data, which here contains a position, a scale and an alpha value. In many ways the important part of this example is the alpha. If you only wanted to position the entities you be far better off with one of the clone types. The whole point is that you also plan to programmatically influence the visual rendering of the entity in some way. @@ -197,4 +192,4 @@ void fragment(){ // ``` -The fragment shader takes the default texture channel and applies the supplied alpha to it. Note the use of [premultiplied alpha](shaders/premultiplied-alpha.md). +The fragment shader takes the default texture channel and applies the supplied alpha to it. Note the use of [premultiplied alpha](/07-shaders/premultiplied-alpha.md). diff --git a/indigo/docs/presentation/depth.md b/indigo/docs/06-presentation/depth.md similarity index 97% rename from indigo/docs/presentation/depth.md rename to indigo/docs/06-presentation/depth.md index 93483b9b7..e5e15e466 100644 --- a/indigo/docs/presentation/depth.md +++ b/indigo/docs/06-presentation/depth.md @@ -1,12 +1,7 @@ ---- -id: depth -title: Depth ---- +# Depth One thing you will need to consider when building your game, is the order that visual elements are drawn in. -## Depth - Depth is quite straight forward. All visual elements can be given a `Depth`, which is just a number. Zero is right in front of the camera, and bigger numbers are further away. It makes sense if you think in terms of "I am the camera and it's further away from me, so it's a bigger number". diff --git a/indigo/docs/06-presentation/directory.conf b/indigo/docs/06-presentation/directory.conf new file mode 100644 index 000000000..86f651ed3 --- /dev/null +++ b/indigo/docs/06-presentation/directory.conf @@ -0,0 +1 @@ +laika.title = Presentation diff --git a/indigo/docs/presentation/layers.md b/indigo/docs/06-presentation/layers.md similarity index 97% rename from indigo/docs/presentation/layers.md rename to indigo/docs/06-presentation/layers.md index c7c804e08..103952d31 100644 --- a/indigo/docs/presentation/layers.md +++ b/indigo/docs/06-presentation/layers.md @@ -1,7 +1,4 @@ ---- -id: layers -title: Layers ---- +# Layers Layers are used to help "layer up" and group the visual elements of your scene. @@ -132,7 +129,7 @@ There are some properties that layers have that can be used to override game or If you've ever used a photo editing software you're probably aware that layers can be used to alter the appearance of the image, say by sucking the colour out and turning it black and white. Indigo layers can do the same sorts of thing, however there are only a few built in Blending options currently, and for anything more advanced you'll need to roll up your sleeves and write your own blending functions! -You can read more about this subject in the [blending section of the docs](shaders/blending.md), but in a nutshell a `Blending` instance is comprised of two things: +You can read more about this subject in the [blending section of the docs](/07-shaders/blending.md), but in a nutshell a `Blending` instance is comprised of two things: 1. `BlendMode` - this is the hardware blend function 2. `BlendMaterial` - which is a material backed by a special shader specifically for blending. diff --git a/indigo/docs/presentation/lighting.md b/indigo/docs/06-presentation/lighting.md similarity index 93% rename from indigo/docs/presentation/lighting.md rename to indigo/docs/06-presentation/lighting.md index 50cbd41f6..a42d25e1a 100644 --- a/indigo/docs/presentation/lighting.md +++ b/indigo/docs/06-presentation/lighting.md @@ -1,7 +1,4 @@ ---- -id: lighting -title: Lighting ---- +# Lighting Lighting in Indigo is in every sense of the word, fake. It was not designed to try and mimic real light, but to be useful and understandable to 2D game builders who were trying to add some interest to their games through lighting. @@ -30,7 +27,7 @@ This sort of effect is very useful for drawing things like the light from a stre Indigo comes bundled with shaders you can use to produce image based lighting. These shaders do not make use of any special machinery, and so you can always write your own versions if you like! -Imaged based lighting in Indigo is all about the [blending](shaders/blending.md). +Imaged based lighting in Indigo is all about the [blending](/07-shaders/blending.md). There are two blending jobs to do: @@ -109,7 +106,7 @@ AmbientLight(RGBA.White.withAlpha(0.2)) ### Materials for Dynamic Lighting -Dynamic lighting only affects [materials](presentation/materials.md) that can be lit, i.e. have a lighting model, and the material properties affect what happens when the light hits them. +Dynamic lighting only affects [materials](/06-presentation/materials.md) that can be lit, i.e. have a lighting model, and the material properties affect what happens when the light hits them. Lighting models are either: `Unlit` or `Lit`, and if they are either textured or 'flat'. For example a `Shape` can be lit, but is always flat since there are no textures. @@ -127,4 +124,4 @@ A note on emissive materials: 1. In a real 3D engine, an emissive material might also affect the colors of surrounding surfaces. Indigo does not do that. 2. Emissive materials are ignored by image based lighting. -More information on the main [materials](presentation/materials.md) page. +More information on the main [materials](/06-presentation/materials.md) page. diff --git a/indigo/docs/presentation/materials.md b/indigo/docs/06-presentation/materials.md similarity index 99% rename from indigo/docs/presentation/materials.md rename to indigo/docs/06-presentation/materials.md index 3b60b8473..84c0cb6cb 100644 --- a/indigo/docs/presentation/materials.md +++ b/indigo/docs/06-presentation/materials.md @@ -1,7 +1,4 @@ ---- -id: materials -title: Materials ---- +# Materials Indigo is intended to be a pixel art based game engine, and that means drawing pixels! diff --git a/indigo/docs/presentation/primitives.md b/indigo/docs/06-presentation/primitives.md similarity index 98% rename from indigo/docs/presentation/primitives.md rename to indigo/docs/06-presentation/primitives.md index dc35c746d..c14fc01f3 100644 --- a/indigo/docs/presentation/primitives.md +++ b/indigo/docs/06-presentation/primitives.md @@ -1,7 +1,4 @@ ---- -id: primitives -title: Primitives & Building Blocks ---- +# Primitives & Building Blocks Indigo is made of several projects, but two of particular note are Indigo itself, and "Indigo Extras". diff --git a/indigo/docs/presentation/scene-update-fragment.md b/indigo/docs/06-presentation/scene-update-fragment.md similarity index 94% rename from indigo/docs/presentation/scene-update-fragment.md rename to indigo/docs/06-presentation/scene-update-fragment.md index e465142dc..8d113b178 100644 --- a/indigo/docs/presentation/scene-update-fragment.md +++ b/indigo/docs/06-presentation/scene-update-fragment.md @@ -1,7 +1,4 @@ ---- -id: scene-update-fragment -title: SceneUpdateFragment ---- +# SceneUpdateFragment The `SceneUpdateFragment` is one of the most important types in Indigo, as it is the type that describes everything you want your player to experience. @@ -90,6 +87,6 @@ The `SceneUpdateFragment` has a fairly rich API that you can explore, but at a h - **Layers**: A list of [layers](layers.md) to help structure your visuals and how they are presented. - **Lights**: A list of dynamic [lights](lighting.md) that affect nodes with the right materials. - **Audio**: Background [audio](audio.md) tracks and volume mixing. -- **A scene blend material**: Used in [blending](shaders/blending.md), unlike layers you cannot change the blend mode, only the blend material. +- **A scene blend material**: Used in [blending](/07-shaders/blending.md), unlike layers you cannot change the blend mode, only the blend material. - **Clone blanks**: A list of nodes used as look up reference for Cloning. -- **Scene Camera**: A default [camera](camera.md). +- **Scene Camera**: A default [camera](cameras.md). diff --git a/indigo/docs/presentation/shapes.md b/indigo/docs/06-presentation/shapes.md similarity index 88% rename from indigo/docs/presentation/shapes.md rename to indigo/docs/06-presentation/shapes.md index 841e03b32..a59ddbbea 100644 --- a/indigo/docs/presentation/shapes.md +++ b/indigo/docs/06-presentation/shapes.md @@ -1,16 +1,13 @@ ---- -id: shapes -title: Shapes ---- +# Shapes Shapes allow you to draw simple graphics without needing images. There are four `Shape` types that come shipped with Indigo at the time of writing, although we may add more in the future: 1. `Shape.Box` - Any rectangle -1. `Shape.Circle` - A circle centered around a point -1. `Shape.Line` - A straight line made of two points -1. `Shape.Polygon` - An arbitrary shape with up to 16 vertices. +2. `Shape.Circle` - A circle centered around a point +3. `Shape.Line` - A straight line made of two points +4. `Shape.Polygon` - An arbitrary shape with up to 16 vertices. They all share similar properties: diff --git a/indigo/docs/presentation/text-and-fonts.md b/indigo/docs/06-presentation/text-and-fonts.md similarity index 98% rename from indigo/docs/presentation/text-and-fonts.md rename to indigo/docs/06-presentation/text-and-fonts.md index 6ed1c1541..2d343c729 100644 --- a/indigo/docs/presentation/text-and-fonts.md +++ b/indigo/docs/06-presentation/text-and-fonts.md @@ -1,12 +1,9 @@ ---- -id: text-and-fonts -title: Text & Fonts ---- +# Text & Fonts There are two way to add text in Indigo, each with their own set of trade offs. 1. `TextBox` - is text as you'd expect it, easy to use and with full font support, but is generally lower quality. -1. `Text` - is a graphical primitive that gives high rendering fidelity but requires a lot of set up. +2. `Text` - is a graphical primitive that gives high rendering fidelity but requires a lot of set up. If you're new to Indigo and just want to get some text on the screen quickly, you are strongly advised to use a `TextBox`. diff --git a/indigo/docs/shaders/blending.md b/indigo/docs/07-shaders/blending.md similarity index 96% rename from indigo/docs/shaders/blending.md rename to indigo/docs/07-shaders/blending.md index 682ee40cd..17a137f72 100644 --- a/indigo/docs/shaders/blending.md +++ b/indigo/docs/07-shaders/blending.md @@ -1,7 +1,4 @@ ---- -id: blending -title: Blending ---- +# Blending Once you've told Indigo what you'd like your entity to look like, perhaps with a standard material or a custom shader, you then need to tell Indigo how to blend it into you game's scene. This allows you to describe scene level effects. @@ -20,7 +17,7 @@ The two main building blocks of the blending process are: Blend modes are hardware level functions with limited but important options. They instruct the graphics card on fundamentally how to combine two pixels together. -Explaining blend modes is beyond the scope of this guide, and there are many tutorials available, but as an example, we can compare Indigo's standard entity blend mode with it's entity lighting blend mode (used in image based [lighting](presentation/lighting.md)): +Explaining blend modes is beyond the scope of this guide, and there are many tutorials available, but as an example, we can compare Indigo's standard entity blend mode with it's entity lighting blend mode (used in image based [lighting](/06-presentation/lighting.md)): ```scala mdoc:js:shared import indigo.* @@ -67,7 +64,7 @@ Blending the final scene is less fine grained, and a `SceneUpdateFragment` can o ## Example: Lighting -Here is the `Blending` description for Indigo's image based [lighting](presentation/lighting.md). +Here is the `Blending` description for Indigo's image based [lighting](/06-presentation/lighting.md). ```scala mdoc:js val ambientLightColor = RGBA.White.withAlpha(0.25) diff --git a/indigo/docs/shaders/constants.md b/indigo/docs/07-shaders/constants.md similarity index 99% rename from indigo/docs/shaders/constants.md rename to indigo/docs/07-shaders/constants.md index 53958bbc3..6ce748278 100644 --- a/indigo/docs/shaders/constants.md +++ b/indigo/docs/07-shaders/constants.md @@ -1,7 +1,4 @@ ---- -id: constants -title: Shader Constants, Variables, and Outputs ---- +# Shader Constants, Variables, and Outputs Below are tables of shader constants and variables that are available to you, provided by Indigo, when writing shaders for the WebGL 2.0 renderer. diff --git a/indigo/docs/07-shaders/directory.conf b/indigo/docs/07-shaders/directory.conf new file mode 100644 index 000000000..a32e4d6a8 --- /dev/null +++ b/indigo/docs/07-shaders/directory.conf @@ -0,0 +1 @@ +laika.title = Shaders diff --git a/indigo/docs/shaders/premultiplied-alpha.md b/indigo/docs/07-shaders/premultiplied-alpha.md similarity index 95% rename from indigo/docs/shaders/premultiplied-alpha.md rename to indigo/docs/07-shaders/premultiplied-alpha.md index 64c59cbc5..62df47550 100644 --- a/indigo/docs/shaders/premultiplied-alpha.md +++ b/indigo/docs/07-shaders/premultiplied-alpha.md @@ -1,7 +1,4 @@ ---- -id: premultiplied-alpha -title: Premultiplied Alpha ---- +# Premultiplied Alpha A small but essential piece of information to know when writing shaders in Indigo, is that Indigo uses premultiplied alpha almost everywhere, with the notable exception of Shapes. diff --git a/indigo/docs/shaders/shader-overview.md b/indigo/docs/07-shaders/shaders-overview.md similarity index 81% rename from indigo/docs/shaders/shader-overview.md rename to indigo/docs/07-shaders/shaders-overview.md index f740cd8bf..246873ea1 100644 --- a/indigo/docs/shaders/shader-overview.md +++ b/indigo/docs/07-shaders/shaders-overview.md @@ -1,7 +1,6 @@ ---- -id: shader-overview -title: Shaders Overview ---- +# Shaders Overview + +> Please be aware that these docs are out of date, as they do not yet include information about Ultraviolet, our shader library. ## What is a shader? @@ -15,15 +14,15 @@ Shaders are a big subject and beyond the scope of this documentation site, the a ## How to get started with Shaders -There is a brief introduction to using shaders in your project as part of the ["how to create a custom entity"](guides/howto-custom-entity.md) guide that we recommend you read first, which also has an accompanying [example repo](https://github.com/PurpleKingdomGames/indigo-examples/tree/master/howto/custom-entity). +There is a brief introduction to using shaders in your project as part of the ["how to create a custom entity"](/02-guides/howto-custom-entity.md) guide that we recommend you read first, which also has an accompanying [example repo](https://github.com/PurpleKingdomGames/indigo-examples/tree/master/howto/custom-entity). -There is a follow on tutorial to the one above than explains [how to make a fire shader](guides/howto-fire-shader.md) that you may also find useful. +There is a follow on tutorial to the one above than explains [how to make a fire shader](/02-guides/howto-fire-shader.md) that you may also find useful. ## Entity vs Blend Shaders Indigo has two distinct flavours of shader. -1. [Entity shaders](entity-shaders.md) are used to draw individual items / entities on the screen. +1. `Entity shaders` are used to draw individual items / entities on the screen. 2. Blend shaders are used in the [blending process](blending.md) to tell Indigo how to merge layers together. They both work in a similar way, but there are differences. @@ -53,13 +52,13 @@ void fragment(){} **Function uses** -Name|Sequential order|description ----|---|--- -`vertex`|1|Used to modify the space on the screen the entity occupies, and to pass data to the fragment shader. -`fragment`|2|Tells Indigo what color each pixel needs to be. -`prepare`|3|Called before `light`, prepare gives you an opportunity to set up any data or functions needed for the lighting process. -`light`|4..4n|Called before `composite`, `light` is called once per light in the scene, and is used to build up per pixel lighting data separate from the colour data that results from `fragment`. -`composite`|5|Called last, `composite` is used to override how lighting information is combined with unlit pixel color data. +| Name | Sequential order | description | +| ----------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `vertex` | 1 | Used to modify the space on the screen the entity occupies, and to pass data to the fragment shader. | +| `fragment` | 2 | Tells Indigo what color each pixel needs to be. | +| `prepare` | 3 | Called before `light`, prepare gives you an opportunity to set up any data or functions needed for the lighting process. | +| `light` | 4..4n | Called before `composite`, `light` is called once per light in the scene, and is used to build up per pixel lighting data separate from the colour data that results from `fragment`. | +| `composite` | 5 | Called last, `composite` is used to override how lighting information is combined with unlit pixel color data. | To override a function you simply need to declare it. In an `Source` shader type, this could be done as follows: @@ -168,7 +167,7 @@ Finally we need to tell Indigo about these shaders, or we won't be able to use t ## Using shaders in your scene -Custom shaders are generally expected to be used in conjunction with custom entities, please see the [guide](guides/howto-custom-entity.md) for examples. +Custom shaders are generally expected to be used in conjunction with custom entities, please see the [guide](/02-guides/howto-custom-entity.md) for examples. You can also use custom shaders to override the behavior of built-in materials. Technically this is as easy as replacing the `shaderId: Option[ShaderId]` field on the material with the id of your own shader, but you will need to look into the source code to determine data that material provides to the shader. @@ -176,7 +175,7 @@ You can also use custom shaders to override the behavior of built-in materials. Shaders without any data can still be useful if you have a known effect, and not sending data is less costly than sending it! However, sometimes you need to tell your shader about what you need it to do, and for that we use `UniformBlock`s (know as UBO's technically, Uniform Buffer Objects). -In the [guide](guides/howto-custom-entity.md), we create a custom entity that fills it's self with a solid color: +In the [guide](/02-guides/howto-custom-entity.md), we create a custom entity that fills it's self with a solid color: ```scala mdoc:js final case class MyColoredEntity(position: Point, depth: Depth) extends EntityNode[MyColoredEntity]: @@ -230,7 +229,7 @@ final case class MyColoredEntity(position: Point, depth: Depth, color: RGBA) ext ShaderData( MyColoredEntity.shader.id, UniformBlock( - "MyCustomData", + UniformBlockName("MyCustomData"), Batch(Uniform("MY_COLOR") -> vec4(color.r, color.g, color.b, color.a)) ) ) @@ -290,3 +289,4 @@ You also can't straddle byte boundries. So if you're trying to pack this: Float- This is valid: F0VV But this isn't: FVV0 ``` + diff --git a/indigo/docs/08-time/directory.conf b/indigo/docs/08-time/directory.conf new file mode 100644 index 000000000..c86c4567d --- /dev/null +++ b/indigo/docs/08-time/directory.conf @@ -0,0 +1 @@ +laika.title = Time diff --git a/indigo/docs/08-time/gametime.md b/indigo/docs/08-time/gametime.md new file mode 100644 index 000000000..eb42554b7 --- /dev/null +++ b/indigo/docs/08-time/gametime.md @@ -0,0 +1,11 @@ +# GameTime + +The most important thing to know is what time it is now! This can by found on the [frame context](/03-gameloop/frame-context.md), which provides two important different time representations: + +1. `running` - which is the time the game has been running for in total. +2. `delta` - which is how long has passed since the last update, which is important for smooth updates and animations. + +Both are represented as `Second`s. + +The `Scene` version of frame context objects additionally provide information about the running time of the particular scene you are in, and when the scene was last changed. + diff --git a/indigo/docs/time/signals.md b/indigo/docs/08-time/signals.md similarity index 99% rename from indigo/docs/time/signals.md rename to indigo/docs/08-time/signals.md index c27dad765..5854afd0a 100644 --- a/indigo/docs/time/signals.md +++ b/indigo/docs/08-time/signals.md @@ -1,7 +1,4 @@ ---- -id: signals -title: Signals & Signal Functions ---- +# Signals & Signal Functions ## Motivation diff --git a/indigo/docs/time/time-varying-values.md b/indigo/docs/08-time/time-varying-values.md similarity index 97% rename from indigo/docs/time/time-varying-values.md rename to indigo/docs/08-time/time-varying-values.md index e4f5cb9e5..89993ef64 100644 --- a/indigo/docs/time/time-varying-values.md +++ b/indigo/docs/08-time/time-varying-values.md @@ -1,7 +1,4 @@ ---- -id: time-varying-values -title: Time Varying Values ---- +# Time Varying Values Time varying values describe numeric values (`Double`s) that will change over time. They are supposed to live in your game model to help you do simple time based updates. diff --git a/indigo/docs/uicomponents/button.md b/indigo/docs/09-uicomponents/button.md similarity index 89% rename from indigo/docs/uicomponents/button.md rename to indigo/docs/09-uicomponents/button.md index 418d629d9..2905cf90f 100644 --- a/indigo/docs/uicomponents/button.md +++ b/indigo/docs/09-uicomponents/button.md @@ -1,7 +1,4 @@ ---- -id: button -title: Buttons ---- +# Buttons The out-of-the-box button is created out of three graphics that represent the up, over, and down states. Aside from handling the button's state, the main advantage of using the button component is that it's easier to to define interactions. Rather than pattern matching on a click event at the top of your update function, and then deciding whether the click happened inside the button or not, you can just define you button as follows and it will do the rest for you, once it has been wired in: @@ -72,7 +69,7 @@ for { } yield updatedViewModel ``` -First we have to update the button, which is done by calling the buttons's built in update method and supplying the current state of the mouse on this frame. The button update returns an [`Outcome`](gameloop/outcome.md) because as well as containing a freshly updated button, it can also return events that will need to be collected at the end of the frame. Since we need to return an outcome containing an updated view model at the end of the frame, we then need to map over the outcome, and insert the button in the view model. +First we have to update the button, which is done by calling the buttons's built in update method and supplying the current state of the mouse on this frame. The button update returns an [`Outcome`](/03-gameloop/outcome.md) because as well as containing a freshly updated button, it can also return events that will need to be collected at the end of the frame. Since we need to return an outcome containing an updated view model at the end of the frame, we then need to map over the outcome, and insert the button in the view model. ***A word of caution***, you might be tempted to do this instead, which appears to work and compiles just fine: diff --git a/indigo/docs/09-uicomponents/directory.conf b/indigo/docs/09-uicomponents/directory.conf new file mode 100644 index 000000000..69ad03a57 --- /dev/null +++ b/indigo/docs/09-uicomponents/directory.conf @@ -0,0 +1 @@ +laika.title = UI Components diff --git a/indigo/docs/uicomponents/hit-area.md b/indigo/docs/09-uicomponents/hit-area.md similarity index 97% rename from indigo/docs/uicomponents/hit-area.md rename to indigo/docs/09-uicomponents/hit-area.md index 011b837f0..3157a3ab1 100644 --- a/indigo/docs/uicomponents/hit-area.md +++ b/indigo/docs/09-uicomponents/hit-area.md @@ -1,7 +1,4 @@ ---- -id: hit-area -title: Hit Area ---- +# Hit Areas Hit areas are different to the other UI components. diff --git a/indigo/docs/uicomponents/input-field.md b/indigo/docs/09-uicomponents/input-field.md similarity index 97% rename from indigo/docs/uicomponents/input-field.md rename to indigo/docs/09-uicomponents/input-field.md index 23035ac55..1019acb91 100644 --- a/indigo/docs/uicomponents/input-field.md +++ b/indigo/docs/09-uicomponents/input-field.md @@ -1,7 +1,4 @@ ---- -id: input-field -title: Input Field ---- +# Input Fields Input fields are text boxes that all users to type values into them. As with button, you need to provide some assets, specifically font information and a graphic to use as the cursor while a user is inputing values. Indigo's input field is quite basic, but input fields are a bit fiddly to implement. Hopefully it will either save someone some time or be useful as a reference to someone who'd like to do make something more sophisticated. diff --git a/indigo/docs/uicomponents/radio-button.md b/indigo/docs/09-uicomponents/radio-button.md similarity index 98% rename from indigo/docs/uicomponents/radio-button.md rename to indigo/docs/09-uicomponents/radio-button.md index 7dae06041..89fbd30dd 100644 --- a/indigo/docs/uicomponents/radio-button.md +++ b/indigo/docs/09-uicomponents/radio-button.md @@ -1,7 +1,4 @@ ---- -id: radio-button -title: Radio Button ---- +# Radio Buttons Radio buttons are a collection of buttons where only one of them can be in a selected state at any given time, and one must always be selected once an initial selection has been made. No doubt you've seen them on multiple choice forms. diff --git a/indigo/docs/uicomponents/ui-components.md b/indigo/docs/09-uicomponents/ui-components.md similarity index 95% rename from indigo/docs/uicomponents/ui-components.md rename to indigo/docs/09-uicomponents/ui-components.md index 9fca244aa..75c69865c 100644 --- a/indigo/docs/uicomponents/ui-components.md +++ b/indigo/docs/09-uicomponents/ui-components.md @@ -1,7 +1,4 @@ ---- -id: ui-components -title: Overview ---- +# UI Components > UI Components live in the "Indigo Extras" library, since they are built on top of Indigo itself and require no special machinery to work. @@ -9,7 +6,7 @@ UI components are generally the kinds of elements your expect to see in any web Indigo does not provide a large suite of UI Components out of the box although we hope to expand, [see issue for progress](https://github.com/PurpleKingdomGames/indigo/issues/41). This is because _basic_ UI components are not terribly complicated to build on top of Indigo by aspiring game devs, and so have been pushed down the priority list in favor of more fundamental / specialized pieces of functionality. Help is welcome! -> A word of caution about UI components depending on mouse actions: currently, only the left mouse button is supported for the sake of simplicity. But you can always create another UI component allowing the usage of other mouse actions like the right mouse button up or down, as Indigo supports it, along with other mouse buttons actions, as you can see at the [events](gamelooop/events.md) page. +> A word of caution about UI components depending on mouse actions: currently, only the left mouse button is supported for the sake of simplicity. But you can always create another UI component allowing the usage of other mouse actions like the right mouse button up or down, as Indigo supports it, along with other mouse buttons actions, as you can see at the [events](/03-gameloop/events.md) page. ## The Pattern diff --git a/indigo/docs/information/alternatives.md b/indigo/docs/10-information/alternatives.md similarity index 95% rename from indigo/docs/information/alternatives.md rename to indigo/docs/10-information/alternatives.md index d64a7297e..0dfaff533 100644 --- a/indigo/docs/information/alternatives.md +++ b/indigo/docs/10-information/alternatives.md @@ -1,7 +1,4 @@ ---- -id: alternatives -title: Alternatives to Indigo ---- +# Alternatives to Indigo If Indigo isn't quite working out for you - we quite understand! Here are some possible alternatives to help you get your game dev fix. Each of these suggestions has something in common with Indigo, there are of course lots of other engines out there! diff --git a/indigo/docs/information/antipatterns.md b/indigo/docs/10-information/antipatterns.md similarity index 99% rename from indigo/docs/information/antipatterns.md rename to indigo/docs/10-information/antipatterns.md index ab5c11b4e..e0ad1e6d0 100644 --- a/indigo/docs/information/antipatterns.md +++ b/indigo/docs/10-information/antipatterns.md @@ -1,7 +1,4 @@ ---- -id: antipatterns -title: Anti-Patterns ---- +# Anti-Patterns This page is an attempt to flag any anti-patterns, bad practices or traps that the authors have seen in the wild or have themselves fallen into! The hope is that but not repeating these mistakes your game dev'ving will be more fun and fruitful. diff --git a/indigo/docs/10-information/directory.conf b/indigo/docs/10-information/directory.conf new file mode 100644 index 000000000..6b08ee4b4 --- /dev/null +++ b/indigo/docs/10-information/directory.conf @@ -0,0 +1 @@ +laika.title = Misc diff --git a/indigo/docs/information/glossary.md b/indigo/docs/10-information/glossary.md similarity index 93% rename from indigo/docs/information/glossary.md rename to indigo/docs/10-information/glossary.md index 1e2559aa9..8f88517c7 100644 --- a/indigo/docs/information/glossary.md +++ b/indigo/docs/10-information/glossary.md @@ -1,25 +1,22 @@ ---- -id: glossary -title: Glossary ---- +# Glossary -# A +## A ### Automata A type of subsystem used to manage simple autonomous particles. -# B +## B -# C +## C -# D +## D ### Dice A pseudo-random number generator seeded on the current frames running time to facilitate testing and issue reproduction. -# E +## E ### Entry point @@ -29,53 +26,53 @@ The main interface an Indigo game developer is exposed to when trying to write a A description of an action that is emitted during a frame and made available to the subsequent frame, such as a keyboard event. -# F +## F ### Frame Independence Movement that is adjusted to account for the time elapsed between frames in order to proceed at a consistent rate. -# G +## G ### GameTime A sample of the current time provided to every frame. All computations are assumed to happen instantly at the time given. -# H +## H -# I +## I ### InputState The current state of input devices like the keyboard, mouse or game pad. -# J +## J -# K +## K -# L +## L -# M +## M -# N +## N -# O +## O ### Outcome Used to gather state and events that were the result of a frame update. -# P +## P -# Q +## Q -# R +## R ### Referential Transparency The ability to reliably replace a function call and arguments, with the result type and observe no change. -# S +## S ### Scene @@ -101,20 +98,20 @@ A combinator used to manipulate, process, and compose Signals. A small, well encapsulated game that can be combined with the main game. Used to organise sections of you game and to manages tasks and processes in the background. -# T +## T ### Time Varying Value A value that is updated automatically based on some behavior and the time delta between frames. -# U +## U -# V +## V -# W +## W -# X +## X -# Y +## Y -# Z +## Z diff --git a/indigo/docs/information/key-concepts.md b/indigo/docs/10-information/key-concepts.md similarity index 99% rename from indigo/docs/information/key-concepts.md rename to indigo/docs/10-information/key-concepts.md index 77c5f1508..06d1030fe 100644 --- a/indigo/docs/information/key-concepts.md +++ b/indigo/docs/10-information/key-concepts.md @@ -1,7 +1,4 @@ ---- -id: key-concepts -title: Key Concepts ---- +# Key Concepts ## Making a game testable diff --git a/indigo/docs/information/model-viewmodel-view.md b/indigo/docs/10-information/model-viewmodel-view.md similarity index 98% rename from indigo/docs/information/model-viewmodel-view.md rename to indigo/docs/10-information/model-viewmodel-view.md index 013b1cb04..cc5f4fa92 100644 --- a/indigo/docs/information/model-viewmodel-view.md +++ b/indigo/docs/10-information/model-viewmodel-view.md @@ -1,7 +1,4 @@ ---- -id: model-viewmodel-view -title: Model, ViewModel, & View ---- +# Model, ViewModel, & View The standard entry point traits define functions that talk about a `Model`, a `ViewModel`, and a "view" (in the form of a `present` function that returns a `SceneUpdateFragment`). diff --git a/indigo/docs/information/motivation-and-constraints.md b/indigo/docs/10-information/motivation-and-constraints.md similarity index 98% rename from indigo/docs/information/motivation-and-constraints.md rename to indigo/docs/10-information/motivation-and-constraints.md index ff5bb88df..f504efd9d 100644 --- a/indigo/docs/information/motivation-and-constraints.md +++ b/indigo/docs/10-information/motivation-and-constraints.md @@ -1,7 +1,4 @@ ---- -id: motivation-and-constraints -title: Motivation & Constraints ---- +# Motivation & Constraints ## Motivation diff --git a/indigo/docs/information/performance.md b/indigo/docs/10-information/performance.md similarity index 99% rename from indigo/docs/information/performance.md rename to indigo/docs/10-information/performance.md index 6ecb4301a..5fdd2e064 100644 --- a/indigo/docs/information/performance.md +++ b/indigo/docs/10-information/performance.md @@ -1,7 +1,4 @@ ---- -id: performance -title: Performance ---- +# Performance ## What is performance? diff --git a/indigo/docs/information/prior-art.md b/indigo/docs/10-information/prior-art.md similarity index 99% rename from indigo/docs/information/prior-art.md rename to indigo/docs/10-information/prior-art.md index 94a333d1e..9b5c1a148 100644 --- a/indigo/docs/information/prior-art.md +++ b/indigo/docs/10-information/prior-art.md @@ -1,7 +1,4 @@ ---- -id: prior-art -title: Prior Art ---- +# Prior Art Indigo was not built in a vacuum, it's the conflation of lots of different borrowed ideas, mostly from the places listed below. There are lots of good references on each of these subjects, but here they are briefly enumerated as areas you can dig into if you're interested. diff --git a/indigo/docs/information/rendering-technology.md b/indigo/docs/10-information/rendering-technology.md similarity index 96% rename from indigo/docs/information/rendering-technology.md rename to indigo/docs/10-information/rendering-technology.md index 81182719d..c48e840d8 100644 --- a/indigo/docs/information/rendering-technology.md +++ b/indigo/docs/10-information/rendering-technology.md @@ -1,7 +1,4 @@ ---- -id: rendering-technology -title: Rendering Technology ---- +# Rendering Technology At the time of writing, there are five options for rendering 2D graphics into a browser page, if you are so inclined: diff --git a/website/static/CNAME b/indigo/docs/CNAME similarity index 100% rename from website/static/CNAME rename to indigo/docs/CNAME diff --git a/indigo/docs/development-status.md b/indigo/docs/README.md similarity index 76% rename from indigo/docs/development-status.md rename to indigo/docs/README.md index 9361adb3f..26c6398b7 100644 --- a/indigo/docs/development-status.md +++ b/indigo/docs/README.md @@ -1,11 +1,10 @@ ---- -id: development-status -title: Indigo's Development Status ---- +# Indigo -## Indigo's Status is Alpha +Indigo is a pixel art Scala 2D game engine that encourages functional programming, and broadly follows the Elm architecture. -Indigo will be consider in an alpha release state until a game of any significant depth is shown to have been built using it. The implication being that by successfully building at releasing a game - web or desktop - enough features and structure must have been written in order to have made that happen. +## Indigo's Development Status + +Indigo is pretty stable, but will be consider in an alpha release state until a game of any significant depth is shown to have been built using it. The implication being that by successfully building and releasing a game - web or desktop - enough features and structure must have been written in order to have made that happen. If you have a game you are building and plan to release, or are building for a game jam or something, get in touch on Discord or Gitter and we _will_ help you with any technical problems if we possibly can! @@ -19,7 +18,7 @@ We'd love you to try building your game in Indigo and let us know how you get on What we know that we don't know yet, are Indigo's limits. -We have a fair idea about things like general graphics [performance and how to squeeze more rendering juice out of it](information/performance.md), but we don't yet have a full view on what issues will emerge on titles that aren't necessarily graphically complex, but include a serious amount of gameplay logic or content. +We have a fair idea about things like general graphics [performance and how to squeeze more rendering juice out of it](10-information/performance.md), but we don't yet have a full view on what issues will emerge on titles that aren't necessarily graphically complex, but include a serious amount of gameplay logic or content. A gentle word of caution then: We expect that things will need to change as people start to use it in anger. No doubt we've missed things, and the APIs are not as clear or consistent as we'd like them to be. Certainly the documentation needs expansion. There's bound to be the odd quirk we haven't noticed yet, or performance issues in scenarios we haven't considered. diff --git a/indigo/docs/css/custom.css b/indigo/docs/css/custom.css new file mode 100644 index 000000000..b5e35e3ac --- /dev/null +++ b/indigo/docs/css/custom.css @@ -0,0 +1,12 @@ +header { + height: 50px; + background-color: #29016a; +} + +header .row a { + color: #ffffff; +} + +#sidebar { + padding-top: 1em; +} diff --git a/indigo/docs/guides.md b/indigo/docs/guides.md deleted file mode 100644 index f4abd639d..000000000 --- a/indigo/docs/guides.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -id: guides -title: About these guides ---- - -In contrast to the docs, these guides are intended to be practical "how to" examples that work through specific use cases. - -As with all of Indigo's documentation, this section is a work in progress! diff --git a/website/static/img/aseprite_export.png b/indigo/docs/img/aseprite_export.png similarity index 100% rename from website/static/img/aseprite_export.png rename to indigo/docs/img/aseprite_export.png diff --git a/website/static/img/favicon.ico b/indigo/docs/img/favicon.ico similarity index 100% rename from website/static/img/favicon.ico rename to indigo/docs/img/favicon.ico diff --git a/website/static/img/font-example.png b/indigo/docs/img/font-example.png similarity index 100% rename from website/static/img/font-example.png rename to indigo/docs/img/font-example.png diff --git a/website/static/img/howtos/animated-noise-circle.gif b/indigo/docs/img/howtos/animated-noise-circle.gif similarity index 100% rename from website/static/img/howtos/animated-noise-circle.gif rename to indigo/docs/img/howtos/animated-noise-circle.gif diff --git a/website/static/img/howtos/animated-noise-circle2.gif b/indigo/docs/img/howtos/animated-noise-circle2.gif similarity index 100% rename from website/static/img/howtos/animated-noise-circle2.gif rename to indigo/docs/img/howtos/animated-noise-circle2.gif diff --git a/website/static/img/howtos/animated-noise.gif b/indigo/docs/img/howtos/animated-noise.gif similarity index 100% rename from website/static/img/howtos/animated-noise.gif rename to indigo/docs/img/howtos/animated-noise.gif diff --git a/website/static/img/howtos/campfire.gif b/indigo/docs/img/howtos/campfire.gif similarity index 100% rename from website/static/img/howtos/campfire.gif rename to indigo/docs/img/howtos/campfire.gif diff --git a/website/static/img/howtos/colours.gif b/indigo/docs/img/howtos/colours.gif similarity index 100% rename from website/static/img/howtos/colours.gif rename to indigo/docs/img/howtos/colours.gif diff --git a/website/static/img/howtos/fire.gif b/indigo/docs/img/howtos/fire.gif similarity index 100% rename from website/static/img/howtos/fire.gif rename to indigo/docs/img/howtos/fire.gif diff --git a/website/static/img/howtos/flame-colors.png b/indigo/docs/img/howtos/flame-colors.png similarity index 100% rename from website/static/img/howtos/flame-colors.png rename to indigo/docs/img/howtos/flame-colors.png diff --git a/website/static/img/howtos/flame.gif b/indigo/docs/img/howtos/flame.gif similarity index 100% rename from website/static/img/howtos/flame.gif rename to indigo/docs/img/howtos/flame.gif diff --git a/website/static/img/howtos/flames.gif b/indigo/docs/img/howtos/flames.gif similarity index 100% rename from website/static/img/howtos/flames.gif rename to indigo/docs/img/howtos/flames.gif diff --git a/website/static/img/howtos/gradient.png b/indigo/docs/img/howtos/gradient.png similarity index 100% rename from website/static/img/howtos/gradient.png rename to indigo/docs/img/howtos/gradient.png diff --git a/website/static/img/howtos/green-square.png b/indigo/docs/img/howtos/green-square.png similarity index 100% rename from website/static/img/howtos/green-square.png rename to indigo/docs/img/howtos/green-square.png diff --git a/website/static/img/howtos/sdf-circle.png b/indigo/docs/img/howtos/sdf-circle.png similarity index 100% rename from website/static/img/howtos/sdf-circle.png rename to indigo/docs/img/howtos/sdf-circle.png diff --git a/website/static/img/howtos/sdf.png b/indigo/docs/img/howtos/sdf.png similarity index 100% rename from website/static/img/howtos/sdf.png rename to indigo/docs/img/howtos/sdf.png diff --git a/website/static/img/howtos/shader_uvs.png b/indigo/docs/img/howtos/shader_uvs.png similarity index 100% rename from website/static/img/howtos/shader_uvs.png rename to indigo/docs/img/howtos/shader_uvs.png diff --git a/website/static/img/howtos/slow-flame.gif b/indigo/docs/img/howtos/slow-flame.gif similarity index 100% rename from website/static/img/howtos/slow-flame.gif rename to indigo/docs/img/howtos/slow-flame.gif diff --git a/website/static/img/howtos/uv-square.png b/indigo/docs/img/howtos/uv-square.png similarity index 100% rename from website/static/img/howtos/uv-square.png rename to indigo/docs/img/howtos/uv-square.png diff --git a/website/static/img/indigo_logo.svg b/indigo/docs/img/indigo_logo.svg similarity index 100% rename from website/static/img/indigo_logo.svg rename to indigo/docs/img/indigo_logo.svg diff --git a/website/static/img/indigo_logo_bg.svg b/indigo/docs/img/indigo_logo_bg.svg similarity index 100% rename from website/static/img/indigo_logo_bg.svg rename to indigo/docs/img/indigo_logo_bg.svg diff --git a/website/static/img/indigo_logo_full.svg b/indigo/docs/img/indigo_logo_full.svg similarity index 100% rename from website/static/img/indigo_logo_full.svg rename to indigo/docs/img/indigo_logo_full.svg diff --git a/website/static/img/indigo_logo_solid.svg b/indigo/docs/img/indigo_logo_solid.svg similarity index 100% rename from website/static/img/indigo_logo_solid.svg rename to indigo/docs/img/indigo_logo_solid.svg diff --git a/website/static/img/indigo_logo_solid_text.svg b/indigo/docs/img/indigo_logo_solid_text.svg similarity index 100% rename from website/static/img/indigo_logo_solid_text.svg rename to indigo/docs/img/indigo_logo_solid_text.svg diff --git a/website/static/img/oss_logo.png b/indigo/docs/img/oss_logo.png similarity index 100% rename from website/static/img/oss_logo.png rename to indigo/docs/img/oss_logo.png diff --git a/website/static/img/refractions.png b/indigo/docs/img/refractions.png similarity index 100% rename from website/static/img/refractions.png rename to indigo/docs/img/refractions.png diff --git a/website/static/img/renderer-comparison.png b/indigo/docs/img/renderer-comparison.png similarity index 100% rename from website/static/img/renderer-comparison.png rename to indigo/docs/img/renderer-comparison.png diff --git a/website/static/img/scala-lang.svg b/indigo/docs/img/scala-lang.svg similarity index 100% rename from website/static/img/scala-lang.svg rename to indigo/docs/img/scala-lang.svg diff --git a/website/static/img/site_consoles.png b/indigo/docs/img/site_consoles.png similarity index 100% rename from website/static/img/site_consoles.png rename to indigo/docs/img/site_consoles.png diff --git a/website/static/img/site_pirate.png b/indigo/docs/img/site_pirate.png similarity index 100% rename from website/static/img/site_pirate.png rename to indigo/docs/img/site_pirate.png diff --git a/website/static/img/site_scala_logo.png b/indigo/docs/img/site_scala_logo.png similarity index 100% rename from website/static/img/site_scala_logo.png rename to indigo/docs/img/site_scala_logo.png diff --git a/website/static/img/snake_bg.gif b/indigo/docs/img/snake_bg.gif similarity index 100% rename from website/static/img/snake_bg.gif rename to indigo/docs/img/snake_bg.gif diff --git a/website/static/img/undraw_code_review.svg b/indigo/docs/img/undraw_code_review.svg similarity index 100% rename from website/static/img/undraw_code_review.svg rename to indigo/docs/img/undraw_code_review.svg diff --git a/website/static/img/undraw_monitor.svg b/indigo/docs/img/undraw_monitor.svg similarity index 100% rename from website/static/img/undraw_monitor.svg rename to indigo/docs/img/undraw_monitor.svg diff --git a/website/static/img/undraw_note_list.svg b/indigo/docs/img/undraw_note_list.svg similarity index 100% rename from website/static/img/undraw_note_list.svg rename to indigo/docs/img/undraw_note_list.svg diff --git a/website/static/img/undraw_online.svg b/indigo/docs/img/undraw_online.svg similarity index 100% rename from website/static/img/undraw_online.svg rename to indigo/docs/img/undraw_online.svg diff --git a/website/static/img/undraw_open_source.svg b/indigo/docs/img/undraw_open_source.svg similarity index 100% rename from website/static/img/undraw_open_source.svg rename to indigo/docs/img/undraw_open_source.svg diff --git a/website/static/img/undraw_operating_system.svg b/indigo/docs/img/undraw_operating_system.svg similarity index 100% rename from website/static/img/undraw_operating_system.svg rename to indigo/docs/img/undraw_operating_system.svg diff --git a/website/static/img/undraw_react.svg b/indigo/docs/img/undraw_react.svg similarity index 100% rename from website/static/img/undraw_react.svg rename to indigo/docs/img/undraw_react.svg diff --git a/website/static/img/undraw_tweetstorm.svg b/indigo/docs/img/undraw_tweetstorm.svg similarity index 100% rename from website/static/img/undraw_tweetstorm.svg rename to indigo/docs/img/undraw_tweetstorm.svg diff --git a/website/static/img/undraw_youtube_tutorial.svg b/indigo/docs/img/undraw_youtube_tutorial.svg similarity index 100% rename from website/static/img/undraw_youtube_tutorial.svg rename to indigo/docs/img/undraw_youtube_tutorial.svg diff --git a/indigo/docs/unused/computations.md b/indigo/docs/unused/computations.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/indigo/docs/unused/jobs.md b/indigo/docs/unused/jobs.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/indigo/project/plugins.sbt b/indigo/project/plugins.sbt index 0cb5f69fb..075181de0 100644 --- a/indigo/project/plugins.sbt +++ b/indigo/project/plugins.sbt @@ -4,7 +4,7 @@ addSbtPlugin("org.xerial.sbt" %% "sbt-sonatype" % "3.9.7") addSbtPlugin("com.jsuereth" %% "sbt-pgp" % "2.0.1") addSbtPlugin("io.github.davidgregory084" % "sbt-tpolecat" % "0.3.0") addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.31") -addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.3.4") +addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.3.7") addSbtPlugin("com.github.sbt" % "sbt-unidoc" % "0.5.0") addSbtPlugin("org.scala-js" % "sbt-jsdependencies" % "1.0.2") addSbtPlugin("com.github.reibitto" % "sbt-welcome" % "0.3.1") diff --git a/website/README.md b/website/README.md deleted file mode 100644 index 6477a55a5..000000000 --- a/website/README.md +++ /dev/null @@ -1,198 +0,0 @@ -This website was created with [Docusaurus](https://docusaurus.io/). - -# What's In This Document - -- [Get Started in 5 Minutes](#get-started-in-5-minutes) -- [Directory Structure](#directory-structure) -- [Editing Content](#editing-content) -- [Adding Content](#adding-content) -- [Full Documentation](#full-documentation) - -# Get Started in 5 Minutes - -1. Make sure all the dependencies for the website are installed: - -```sh -# Install dependencies -$ yarn -``` - -2. Run your dev server: - -```sh -# Start the site -$ yarn start -``` - -## Directory Structure - -Your project file structure should look something like this - -``` -my-docusaurus/ - docs/ - doc-1.md - doc-2.md - doc-3.md - website/ - blog/ - 2016-3-11-oldest-post.md - 2017-10-24-newest-post.md - core/ - node_modules/ - pages/ - static/ - css/ - img/ - package.json - sidebars.json - siteConfig.js -``` - -# Editing Content - -## Editing an existing docs page - -Edit docs by navigating to `docs/` and editing the corresponding document: - -`docs/doc-to-be-edited.md` - -```markdown ---- -id: page-needs-edit -title: This Doc Needs To Be Edited ---- - -Edit me... -``` - -For more information about docs, click [here](https://docusaurus.io/docs/en/navigation) - -## Editing an existing blog post - -Edit blog posts by navigating to `website/blog` and editing the corresponding post: - -`website/blog/post-to-be-edited.md` - -```markdown ---- -id: post-needs-edit -title: This Blog Post Needs To Be Edited ---- - -Edit me... -``` - -For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog) - -# Adding Content - -## Adding a new docs page to an existing sidebar - -1. Create the doc as a new markdown file in `/docs`, example `docs/newly-created-doc.md`: - -```md ---- -id: newly-created-doc -title: This Doc Needs To Be Edited ---- - -My new content here.. -``` - -1. Refer to that doc's ID in an existing sidebar in `website/sidebars.json`: - -```javascript -// Add newly-created-doc to the Getting Started category of docs -{ - "docs": { - "Getting Started": [ - "quick-start", - "newly-created-doc" // new doc here - ], - ... - }, - ... -} -``` - -For more information about adding new docs, click [here](https://docusaurus.io/docs/en/navigation) - -## Adding a new blog post - -1. Make sure there is a header link to your blog in `website/siteConfig.js`: - -`website/siteConfig.js` - -```javascript -headerLinks: [ - ... - { blog: true, label: 'Blog' }, - ... -] -``` - -2. Create the blog post with the format `YYYY-MM-DD-My-Blog-Post-Title.md` in `website/blog`: - -`website/blog/2018-05-21-New-Blog-Post.md` - -```markdown ---- -author: Frank Li -authorURL: https://twitter.com/foobarbaz -authorFBID: 503283835 -title: New Blog Post ---- - -Lorem Ipsum... -``` - -For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog) - -## Adding items to your site's top navigation bar - -1. Add links to docs, custom pages or external links by editing the headerLinks field of `website/siteConfig.js`: - -`website/siteConfig.js` - -```javascript -{ - headerLinks: [ - ... - /* you can add docs */ - { doc: 'my-examples', label: 'Examples' }, - /* you can add custom pages */ - { page: 'help', label: 'Help' }, - /* you can add external links */ - { href: 'https://github.com/facebook/docusaurus', label: 'GitHub' }, - ... - ], - ... -} -``` - -For more information about the navigation bar, click [here](https://docusaurus.io/docs/en/navigation) - -## Adding custom pages - -1. Docusaurus uses React components to build pages. The components are saved as .js files in `website/pages/en`: -1. If you want your page to show up in your navigation header, you will need to update `website/siteConfig.js` to add to the `headerLinks` element: - -`website/siteConfig.js` - -```javascript -{ - headerLinks: [ - ... - { page: 'my-new-custom-page', label: 'My New Custom Page' }, - ... - ], - ... -} -``` - -For more information about custom pages, click [here](https://docusaurus.io/docs/en/custom-pages). - -# Full Documentation - -Full documentation can be found on the [website](https://docusaurus.io/). diff --git a/website/blog/2021-02-18-devlog-1.md b/website/blog/2021-02-18-devlog-1.md deleted file mode 100644 index df6026b02..000000000 --- a/website/blog/2021-02-18-devlog-1.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Indigo Dev Log 1: Rethinking Indigo's Renderer -author: Dave Smith -authorURL: http://twitter.com/davidjamessmith ---- - -The current work in progress is to re-think Indigo’s rendering pipeline. This isn’t the first time I’ve gone back to the drawing board, but it is the first time since Indigo’s launch. Since this is going to mean a bit of a longer wait between releases than usual, I thought I ought to explain what’s happening and report on my progress so far.. - - - -## A brief history of Indigo’s renderer - -I don’t know how interesting this is but I feel like the context is important. - -Back in 2016 I wasn’t even sure if it was possible to make a usable game engine in Scala, but I was confident that there was a minimal feature set that I would enjoy that might be achievable, as long as I kept it small. Really small. - -Pixel-art only, something that approximated [blitting](https://en.wikipedia.org/wiki/Bit_blit) operations. No arbitrary shapes, scenes, real fonts, special effects or shaders or anything, not even rotation. Something you could just about build the original Mario with. - -Graphics rendering is complicated, but the great thing about a super minimal set of rendering requirements is that the pipeline can be specialised and focused, which is easier than building something more general purpose. Indigo was not as fast as it could have been I’m sure, but it was/is able to draw decent numbers of on screen elements while retaining a pretty solid performance profile. - -Reliable performance for low effort felt important to me because, I reasoned, most people coming from Scala were likely to be new to game building, and I didn’t want them to be too worried about performance tuning. - -The problem is that at the point of Indigo’s initial launch, this renderer design was basically maxed out in terms of how many graphical features I had the ability (as an amateur) to push through such a constrained pipeline. - -## Indigo’s roadmap - -I don’t like to nail down roadmaps too firmly as a rule. I work on the principle of having a mirage on the horizon that I can use to give me a bearing in case I think I’m losing my way, but I don’t worry too much about the exact destination or the route I‘m going to take to get there. The only real detail in the plan is of the work I’m doing right now, the next step on the journey. - -I try not to look up from my feet too often in case I find the length of the road ahead off-putting. - -What does the vague impression in the distance look like at the moment? Well, I think it looks a bit like a GUI editor for Indigo. What kind of editor? What features will it have? How will it work? Will we ever reach that goal? Who knows! ...and it doesn’t matter, it’s just a direction to head in. - -To move in the direction of that goal there are a few obvious and chunky things that Indigo needs, like the ability to draw arbitrary shapes, a more flexible layers system, and possibly better/real font support to name but a few. - -To do any of those things means having a more sophisticated rendering pipeline that can cope with things like custom shaders, and that in turn means a rethink of the renderer. - -So that’s what I’m doing. - -## Progress report - -What I have already is the foundations: - -- An infinite number of non-specialised layers (no more fixed named layers) -- New syntax to describe layer blend modes -- The ability to write completely custom scene entities -- The ability to write custom shaders -- Some prebuilt entities and shaders that work similarly to the existing primitives -- The tentative beginnings of work on shape primitives - -Safe to say that the next release will feature many breaking changes, but I’m planning to write migration notes of some kind. - -One of the major philosophical differences that the next release will introduce, is that the game developer will be much more in control of performance. Fewer rendering requirements will result in faster performance, but if you wish, you’ll also be able to trade off raw speed for much more sophisticated rendering. - -My aim is to keep the new renderer as beginner friendly as I can, but also to allow people to explore more advanced rendering techniques. - -## Questions without answers (yet) - -1. The next release will include new features Indigo has never had before, will it also have all of the features of the previous versions? - -Undecided. I think I shall aim for feature parity but some things may not make the cut. - -2. Will Indigo continue to support Scala 2? - -Scala 2 is still important because the dev tooling around Scala 3 hasn’t (unsurprisingly since it hasn’t been released yet) caught up with the Scala 2 experience yet. But once the tooling is better, could Scala 2 just be dropped? Since there is no-one depending on Indigo for their business or livelihood, the usual library support / backwards compatibility considerations don’t really apply here, so it might be reasonable. - -However unless Scala 3’s tooling is much better before the next release (possible...), it’s likely that the next release will support Scala 2, just not guaranteed. - -3. Will Indigo continue to support WebGL 1.0? - -Maintaining WebGL 1.0 and 2.0 is effectively maintaining two completely different renderers, which is a lot of work for one person. Also worth noting that sooner or later I’ll need to look into supporting WebGPU too. - -At the time of writing all the new work is happening in the WebGL 2.0 renderer, and I don’t know how feasible back porting it will be. - -The performance of WebGL 1.0 is far worse than WebGL 2.0, but it’s market/browser penetration is near 100%, where WebGL 2.0 is closer to 75% with big names like Safari conspicuously missing (Safari tech preview version does add support). However, WebGL 2.0 is probably available everywhere that you’re likely to find a gamer that wants to play your game, so does the other 25% matter? Hard to say. - -One option, rather than removing WebGL 1.0 support altogether is to reduce it to a bare minimum, so that it’s just about good enough to inform your players to try a different browser or platform. Would that be acceptable? Your guess is as good as mine. - -## Thanks! - -Thanks for taking the time to read this update. If you have any questions or would like to discuss any of it I can usually be found on our Discord channel. - -Dave diff --git a/website/blog/2021-03-24-devlog-2.md b/website/blog/2021-03-24-devlog-2.md deleted file mode 100644 index f9eabbe45..000000000 --- a/website/blog/2021-03-24-devlog-2.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Indigo Dev Log 2: It's all about the shaders... -author: Dave Smith -authorURL: http://twitter.com/davidjamessmith ---- - -!["pixel art being refracted through a normal map to give the illusion of a lens."](/img/refractions.png) - -Thought I’d try a different format this time to see if I can make it easier to write these things. Hopefully it will encourage me to do it more often. Aiming for a sort of agile / stand-up / update format. - -## TL;DR - -Next version is coming along nicely, lots of new exciting stuff going into it. The only technical hurdle ahead of me is to reimplement dynamic lighting, and hopefully make it better! After that I’ll begin prepping the next release. - - - -### What has happened since the last update? - -**Scala 3.0.0-RC1 & Scala 2.13.5** - Many thanks to [auman](https://github.com/aumann) for upgrading Indigo to the latest Scala 3 version! - -**Shapes!** - A first version of shapes is now included as standard. There’s A LOT you can do with shapes conceptually, this first version is a limited functionality release to test the water. It contains Circles, Boxes, and Polygon’s that support borders of arbitrary thickness and can be filled with solid colours or linear / radial gradients. Worth noting that these shapes were initially implemented with the new custom shader mechanism - so if you know GLSL there’s nothing stopping you going the [full Freya](https://acegikmo.com/shapes/)! (Note: If you do, I’d love a PR!! :-)) - -**Custom Shader Data** - Ability to supply custom data to your shaders. - -**Blending and BlendMaterials** - As well as entity shaders, you can now write shaders that control how layers blend together, enabling things like simple post processing effects. You can also control hardware blend functions. This arrangement has been used in combination with entity shaders to re-implement the old image based lighting layer functionality, but now you can have as many lighting layers as you like. - -**Reimplemented screen effects as layer effects** - The current Indigo version allows you some basic fixed post-processing effects. This has been reimplemented and expanded using the BlendMaterials mentioned above. One big difference is that the effects are layer level, as opposed to screen level, and you can optionally apply the effects to only the current layer or to the merged layer stack (below the current layer). - -**Reimplemented legacy effects** - The old border and glow effects, which are quite cheap and I suspect of limited use, have been reimplemented just in case anyone is depending on them. However they aren’t built into Indigo by default any more, you need to add them from the extras library. - -**Reimplemented Distortion layers as Refractions** - Not only reimplemented but also slightly improved. In the same vein as effects, I’m not convinced this is up to scratch quality wise and so I’ve moved it into the extras project. The implementation is achieved using entity and blend materials. - -### What is being worked on at the moment? - -The current work in progress is to reimplement and improve dynamic lighting. The two improvements specifically are (hopefully): - -1. Rethink how specular lighting is handled, a mistake was made during the original implementation that I’d like to correct. - -2. Ambient lighting will no longer rely on image based ambient lighting. - -There is also an unresolved question about whether lights will be global, layer based, or both. As it’s a forward renderer, there will be a light count limit in the next version (which shouldn’t be a problem for most use cases), so if you had global + layer lights that went over the limit, which should take priority? I’m sure I’ll think of something. - -It’s unclear how much effort this will be as Indigo has moved from being an inflexible [deferred renderer](https://en.wikipedia.org/wiki/Deferred_shading) to a programmable forward renderer. But I’m hopeful it will be in the order of days rather than weeks. - -### What is expected to happen next? - -Essentially release prep, however, a lot has changed in terms of the APIs and how Indigo works. So the plan is the work through the various demos and example projects, and while I upgrade them, take down migration notes, and re-assess the API choices I’ve made to see if I can make them clearer or reduce the impact of change. - -## Thanks! - -Thanks for taking the time to read this little update. Looking forward to getting the next version out and seeing what people make of it. I'd also like to say thank you the expanding cast of people supporting the project. Whether you are helping financially, contributing code and documentation improvements, or just being around to help discuss ideas: It's all very much appreciated! - -Dave diff --git a/website/blog/2021-04-11-indigo-0-7-0-released.md b/website/blog/2021-04-11-indigo-0-7-0-released.md deleted file mode 100644 index f8caddc0b..000000000 --- a/website/blog/2021-04-11-indigo-0-7-0-released.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Indigo 0.7.0 Released -author: Dave Smith -authorURL: http://twitter.com/davidjamessmith ---- - -This release is a total rewrite of Indigo’s rendering process to make it flexible and customisable. - -[Full details of this release with migration notes can be found on github.](https://github.com/PurpleKingdomGames/indigo/releases/tag/v0.7.0) - -!["Comparison of the old and new rendering pipelines."](/img/renderer-comparison.png) - -*(The diagram above attempts to show how this release has changed the rendering process.)* diff --git a/website/blog/2021-05-17-indigo-0-8-0-released.md b/website/blog/2021-05-17-indigo-0-8-0-released.md deleted file mode 100644 index 687339058..000000000 --- a/website/blog/2021-05-17-indigo-0-8-0-released.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Indigo 0.8.0 Released -author: Dave Smith -authorURL: http://twitter.com/davidjamessmith ---- - -This release is the first Scala 3.0.0 release, and drops support for Scala 2. - -Aside from a number of important bug fixes, this release also includes an early version of a new `TextBox` primitive and support for font assets. - -[Full details of this release can be found on github.](https://github.com/PurpleKingdomGames/indigo/releases/tag/v0.8.0) diff --git a/website/blog/2021-05-20-indigo-0-8-1-released.md b/website/blog/2021-05-20-indigo-0-8-1-released.md deleted file mode 100644 index 9dc7308d8..000000000 --- a/website/blog/2021-05-20-indigo-0-8-1-released.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Indigo 0.8.1 Released -author: Dave Smith -authorURL: http://twitter.com/davidjamessmith ---- - -This is an important bug fix release that resolves rendering problems on Windows machines (including browsers on Windows). - -[Full details of this release can be found on github.](https://github.com/PurpleKingdomGames/indigo/releases/tag/v0.8.1) diff --git a/website/blog/2021-05-30-indigo-0-8-2-released.md b/website/blog/2021-05-30-indigo-0-8-2-released.md deleted file mode 100644 index 16c125199..000000000 --- a/website/blog/2021-05-30-indigo-0-8-2-released.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Indigo 0.8.2 Released -author: Dave Smith -authorURL: http://twitter.com/davidjamessmith ---- - -This is a bug fix release that resolves an issue with entity nodes incorrectly rendering textures. - -[Full details of this release can be found on github.](https://github.com/PurpleKingdomGames/indigo/releases/tag/v0.8.2) diff --git a/website/blog/2021-07-06-indigo-0-9-0-released.md b/website/blog/2021-07-06-indigo-0-9-0-released.md deleted file mode 100644 index 79217685d..000000000 --- a/website/blog/2021-07-06-indigo-0-9-0-released.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Indigo 0.9.0 Released -author: Dave Smith -authorURL: http://twitter.com/davidjamessmith ---- - -Details of the major changes found in Indigo 0.9.0: - -- New! Scene Camera (Early preview, feedback welcome) -- Dynamic shader loading -- Improved texture support in shaders -- Built-in primitives have Material type parameter -- Caching of custom packed UBO data - -[Full details of this release can be found on github.](https://github.com/PurpleKingdomGames/indigo/releases/tag/v0.9.0) diff --git a/website/blog/2021-08-17-roguelike-post-mortem.md b/website/blog/2021-08-17-roguelike-post-mortem.md deleted file mode 100644 index 3a9db33d1..000000000 --- a/website/blog/2021-08-17-roguelike-post-mortem.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Post-Mortem: "RoguelikeDev Does The Complete Roguelike Tutorial" in Scala -author: Dave Smith -authorURL: http://twitter.com/davidjamessmith ---- - -!["A early screenshot of a roguelike made with Indigo"](https://raw.githubusercontent.com/davesmith00000/roguelike-tutorial/main/part3/roguelike-part3_2.gif) - -**This is a brief post-mortem of my attempt to do the ["RoguelikeDev Does The Complete Roguelike Tutorial"](https://www.reddit.com/r/roguelikedev/comments/o5x585/roguelikedev_does_the_complete_roguelike_tutorial/) in Scala.** - -I've been asked on several occasions if it would be possible to build a roguelike using Indigo? - -My answer has always been that it should be possible, but that it would probably be challenging because Indigo isn't built for rendering lots of text. - -About a month before this year's annual "RoguelikeDev Does The Complete Roguelike Tutorial" I was asked again, and decided it was time to find out if it really was possible or not! - - - -## What are roguelikes? - -[Roguelike](https://en.wikipedia.org/wiki/Roguelike)'s are a type of game that get their name because they are ...wait for it ..._like_ an 80s game called _Rogue_! - -They typically use ASCII art for graphics, generated levels / dungeons and feature things like perma-death. - -## Starting at the finish - -### Where can I play it? - -[All completed parts of the roguelike tutorials](http://rogueliketutorials.com/tutorials/tcod/v2/) can be found in the following repo, along with playable links so that you can try out it's progression for yourself: - -[https://github.com/davesmith00000/roguelike-tutorial](https://github.com/davesmith00000/roguelike-tutorial) - -### What should I expect? - -[The final playable version of the "game"](https://davesmith00000.github.io/roguelike-tutorial/part13/) is surprisingly playable.. for a while at least. :-) - -Sure, the lack of game balance is quickly apparent and after about level 6 or 7 you'll run out of new things to do, but I'm really quite pleased with it. There's exploration, discovery, spells, potions, equipment, monsters, levels, an inventory, and menus - all the things in the tutorial, in fact! And considering I spent _no time at all_ selecting colors or which tileset to go with, it actually looks quite nice! - -The code quality is ok. - -When I began the project I had some lofty ideas about writing lovely clean code that would be easy to follow, but as you can see if you look at the later stages of the code base, by the end I was just pleased to be crossing the finishing line at the end of the marathon. - -Maybe I'll refactor it next year.. - -## The tutorial - -The tutorial is very well written and the "RoguelikeDev Does The Complete Roguelike Tutorial" follow-along is well paced, taking me two to three evenings a week. - -The difficulty with the tutorial is that it is aimed at Python developers, and as they say in the follow-along's description, if you're not using Python the expectation is that you'll blaze your own trail. - -There are two problems with not using Python. - -The first is simply distilling the tutorial parts into the intended deliverables. The tutorials are written for Python developers, and they have a lovely conversational style, building a narrative as they go along. The authors take great care to go over code from previous chapters - refactoring code to be ready for the next section. Of course, if you're not a Python developer then the result is - in places - _a lot_ of text / code to sift through to find the information you need. Luckily, the screenshots the authors included were a massive help. In the chapter on saving and loading I basically just looked at the screenshots and reverse engineered suitable requirements. This was because most of the tutorial chapter was involved in disk IO while my solution ran in a browser, and is side effect free! - -The second problem is the lack of ready-made tooling. - -## DIY Tooling - -The Python version uses a library called [tcod](https://python-tcod.readthedocs.io/en/latest/) which essentially gives you all of the functionality you need to build a roguelike, and your job in the tutorial is to build the game logic and data structures. - -Choosing to follow along in another language means that you need to fend for yourself. In my case I ended up building a [roguelike starter kit](https://github.com/PurpleKingdomGames/indigo-roguelike-starterkit) to fill in some of the critical gaps. - -The [README](https://github.com/PurpleKingdomGames/indigo-roguelike-starterkit/blob/main/README.md) on the starter kit's repo explains most of the functionality that the starter kit provides in a fair amount of detail, but the main things it does is: - -1. Give you easy access to Dwarf Fortress assets. -2. Provide two ways of rendering coloured terminal-like text. - -Dwarf Fortress is a very famous roguelike with [many different tilesets available](https://dwarffortresswiki.org/Tileset_repository). They are all based on the "IBM Code Page 437" or "Extended ASCII" table, and what you get is an image of a grid of characters and symbols. The starter kit uses a little compile time script to convert the tileset of your choice, into pre-baked classes containing all of the character information for use with either Indigo's `Text` primitive using the `TerminalText` material, or the `TerminalEntity`/`TerminalEmulator`. - -It wasn't terribly difficult, but this little bit of tool sharpening was very satisfying to do and made the rest of the build much more fun. - -## Lessons Learned - -### What went well? - -Taking the time to build the starter kit paid itself back many times over. Once I got into the game building proper, I basically never had to think about how to do the rendering again. - -Converting the tutorial to pure functions and Indigo's uni-directional data flow was challenging at times, but made following the code easy, and in the few places where I really needed tests it was easy to set them up. I didn't write very many tests however, because most of the game was just plumbing that required little checking beyond making the compiler happy. Testing came into it's own wherever something non-trivial needed to be verified, such as the path finding code. - -The tutorial descriptions of topics like procedural dungeon generation were really great and easy to follow. - -### Where did I get lucky? - -For reasons best known to someone else, early in the development of the starter kit I set it up to work with [Parcel.js](https://parceljs.org/). This turned out to be a great idea because it made publishing the playable tutorial parts to github pages a piece of cake! - -### What went wrong? - -I repeatedly underestimated the size of the tutorial! - -Each chapter often does more than one thing and I was regularly halfway through a section when I realised I was going to have to do something much more complicated than I anticipated, or that I was fundamentally missing some piece of functionality / tooling. - -Another unexpected problem was that the tutorials rely on a feature of game engines that Indigo considers a defect, and fixes by default. In Indigo you cannot (easily / idiomatically) modify the state of another actor / entity during the current frame. To put it another way, there is no "first mover" advantage to having the good fortune of being the first entity updated. Consider the following: - -1. The Player attacks an Orc -2. The Orc is killed -3. The Orc cannot attack the Player because it is dead. - -Seems reasonable. - -In Python this translates easily: - -1. On update, the Player attacks an Orc, directly calling it's damage method. -2. The Orc's health is reduced below zero and it is killed. -3. ... that's it. - -This works because the Player's actions are always evaluated first and carried out immediately. In a fair fight with two evenly matched players, the first player would always win. - -In Indigo things are not so simple because Indigo hugely discourages first-mover advantage by decoupling action from outcome. In reality the combatants effectively both attacked at the same time in the same instant! Like this: - -1. On update, the Player attacks the Orc, _emitting an event with the amount of damage to be inflicted_. -2. The Orc's health has not yet been reduced, so the Orc is still alive during this update. -3. The Orc attacks! It doesn't know it's dead yet! It gets one last gasping attempt at killing the Player! _The Orc also emits an event saying the Player has been damaged_. -4. On the next frame, the relevant damage is inflicted on both parties. -5. The Orc is killed as before... but the Player has been unexpectedly injured or killed too! - -The solution is to separate the players turn from the enemies turn, creating a turn based game. This effectively mimics the original behavior but it's now part of the game's design rather than a happy accident. - -### What would I do differently next time? - -My main regret is that the terminal emulator is rather heavy and can't be refreshed at 60 fps. For the purposes of the tutorial this isn't a problem since you only have to update on key press, but if you wanted to do any smoother effects it wouldn't be able to keep up. The other way this problem rears it's head is if someone is running a low power system of some kind, since it requires the ability to allocate some fairly chunky arrays on to the GPU as UBO data (uniform buffer object). - -There are lots of ways to resolve this problem, I would have liked to have had the time to make it better, maybe next time. - -Additionally I'd like to have wrapped up the starter kit into a library of some sort for ease of use by others. - -Finally, a small thing, but I wish I'd spent a little bit longer on the build process. When you build for web you have to emit a different module kind than if you're running locally, and that's a manual change in the `build.sbt` file. It would have been nice to do that properly. ([The process is described in the starter kit's README.](https://github.com/PurpleKingdomGames/indigo-roguelike-starterkit#how-to-run-and-package-up-this-game)) - -## Final thoughts - -Following the tutorial in a language other than Python added a lot of complexity. Converting the tutorial to a purely functional language / approach on top of that often meant completely ignoring what the tutorial was saying, and trying to achieve the same outcome by totally different means. This would be very difficult if you didn't know your engine well in advance. - -That said, following the tutorial was great fun and I would highly recommend it. Hopefully I'll be able to have another crack at it next year! In the meantime, perhaps the version I've pulled together (along with the starter kit) will help the next adventurous Scala soul that decides to delve into the depths of a roguelike! diff --git a/website/blog/2021-09-07-indigo-0-9-1-released.md b/website/blog/2021-09-07-indigo-0-9-1-released.md deleted file mode 100644 index fb0bed443..000000000 --- a/website/blog/2021-09-07-indigo-0-9-1-released.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Indigo 0.9.1 Released -author: Dave Smith -authorURL: http://twitter.com/davidjamessmith ---- - -Details of the major changes found in Indigo 0.9.1: - -- Updated! Cameras... -- New `HitArea` UI Component -- Standard Materials can tile and stretch to fit -- `ShaderPrimitive` Improvements - -[Full details of this release can be found on github.](https://github.com/PurpleKingdomGames/indigo/releases/tag/v0.9.1) diff --git a/website/blog/2021-09-09-indigo-0-9-2-released.md b/website/blog/2021-09-09-indigo-0-9-2-released.md deleted file mode 100644 index f4877439b..000000000 --- a/website/blog/2021-09-09-indigo-0-9-2-released.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Indigo 0.9.2 Released -author: Dave Smith -authorURL: http://twitter.com/davidjamessmith ---- - -This release contains two seemingly small bug fixes / corrections that could significantly change the look of your game. As luck would have it, they have been around for several versions and have gone unnoticed until the day _after_ the previous release. - -- Loaded images are now correctly unpacked with premultiplied alpha. -- Shape fill colours have had premultiplication removed. - -[Full details of this release can be found on github.](https://github.com/PurpleKingdomGames/indigo/releases/tag/v0.9.2) diff --git a/website/build.sbt b/website/build.sbt index f6de46289..b4d0c3d1d 100644 --- a/website/build.sbt +++ b/website/build.sbt @@ -1,21 +1,128 @@ +import laika.markdown.github.GitHubFlavor +import laika.parse.code.SyntaxHighlighting +import laika.rewrite.nav.PrettyURLs +import laika.helium.Helium +import laika.theme.config.Color +import laika.theme.config.Color._ +import laika.helium.config.ColorQuintet +import laika.helium.config._ +import laika.ast.Path.Root +import laika.ast.Image +import laika.ast.Length +import laika.ast.LengthUnit +import com.comcast.ip4s._ +import scala.concurrent.duration.DurationInt +import laika.sbt.LaikaPreviewConfig + +ThisBuild / scalaVersion := "3.3.0" + +enablePlugins(LaikaPlugin, GhpagesPlugin) + Global / onChangedBuildSource := ReloadOnSourceChanges -val scala3Version = "3.3.0" - -lazy val indigoSite = - (project in file(".")) - .enablePlugins(GhpagesPlugin) - .settings( - name := "indigo site publisher", - version := "0.0.1", - scalaVersion := scala3Version, - organization := "io.indigo", - siteSourceDirectory := target.value / ".." / "build" / "indigo-site", - makeSite / includeFilter := "*", - makeSite / excludeFilter := ".DS_Store", - git.remoteRepo := "git@github.com:PurpleKingdomGames/indigo.git", - ghpagesNoJekyll := true +Laika / sourceDirectories := Seq( + baseDirectory.value / "../indigo/indigo-docs/target/mdoc" +) + +laikaExtensions := Seq(GitHubFlavor, SyntaxHighlighting, PrettyURLs) + +/* +Dark purple - #29016a +hot pink - #ae2be2 / less hot: 9003c8 +light pink - #efc6ff +Purpleish - 6237a7 +Light grey - e4e4e4 +Light purple - a888db + */ + +laikaTheme := + Helium.defaults.all + .metadata( + title = Some("Indigo"), + language = Some("en") + ) + .all + .themeColors( + primary = Color.hex("29016a"), + secondary = Color.hex("9003c8"), + primaryMedium = Color.hex("a888db"), + primaryLight = Color.hex("e4e4e4"), + text = Color.hex("5f5f5f"), + background = Color.hex("ffffff"), + bgGradient = (Color.hex("095269"), Color.hex("007c99")) ) + .site + .darkMode + .themeColors( + primary = Color.hex("29016a"), + secondary = Color.hex("9003c8"), + primaryMedium = Color.hex("a888db"), + primaryLight = Color.hex("e4e4e4"), + text = Color.hex("5f5f5f"), + background = Color.hex("ffffff"), + bgGradient = (Color.hex("29016a"), Color.hex("ffffff")) + ) + .all + .syntaxHighlightingColors( + base = ColorQuintet( + hex("2a3236"), + hex("8c878e"), + hex("b2adb4"), + hex("bddcee"), + hex("e8e8e8") + ), + wheel = ColorQuintet( + hex("e28e93"), + hex("ef9725"), + hex("ffc66d"), + hex("7fb971"), + hex("4dbed4") + ) + ) + .site + .topNavigationBar( + homeLink = ImageLink.internal( + Root / "README.md", + Image.internal( + Root / "img" / "indigo_logo_solid_text.svg", + alt = Some("Homepage"), + title = Some("Indigo"), + width = Some(Length(150.0, LengthUnit.px)), + height = Some(Length(50.0, LengthUnit.px)) + ) + ), + navLinks = Seq( + ButtonLink.external("https://discord.gg/b5CD47g", "Discord"), + ButtonLink.external("/api", "API"), + ButtonLink.external( + "https://github.com/PurpleKingdomGames/indigo", + "Github" + ) + ) + ) + .site + .tableOfContent(title = "Contents", depth = 2) + .site + .autoLinkCSS(Root / "css" / "custom.css") + .site.favIcons( + Favicon.internal(Root / "img" / "indigo_logo_solid.svg", sizes = "32x32"), + Favicon.internal(Root / "img" / "indigo_logo_solid.svg", sizes = "64x64") + ) + .build + +// Helium.defaults + +laikaPreviewConfig := + LaikaPreviewConfig.defaults + .withPort(port"8080") + +// Make site + +siteSourceDirectory := target.value / "docs" / "site" +makeSite / includeFilter := "*" +makeSite / excludeFilter := ".DS_Store" +git.remoteRepo := "git@github.com:PurpleKingdomGames/indigo.git" +ghpagesNoJekyll := true addCommandAlias( "publishIndigoSite", diff --git a/website/build.sh b/website/build.sh index afbb4a14a..6b98f35ec 100644 --- a/website/build.sh +++ b/website/build.sh @@ -1,8 +1,5 @@ #!/bin/bash -# TODO -# Auto update the demos? - set -e WEBSITE_DIR=$(pwd) @@ -18,10 +15,11 @@ sbt gendocs cd $WEBSITE_DIR # ----- -# build the site -yarn run build +# build the site // $WEBSITE_DIR/target/docs/site +sbt clean laikaSite # ----- # Publish -cp -R $INDIGO_ENGINE_DIR/target/scala-3.*/unidoc/. $WEBSITE_DIR/build/indigo-site/api/ -sbt clean makeSite ghpagesPushSite +mkdir -p target/docs/site/api/ +cp -R $INDIGO_ENGINE_DIR/target/scala-3.*/unidoc/. $WEBSITE_DIR/target/docs/site/api/ +sbt makeSite ghpagesPushSite diff --git a/website/core/Copyright.js b/website/core/Copyright.js deleted file mode 100644 index 91b4e5b90..000000000 --- a/website/core/Copyright.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2017-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -const React = require('react'); - -class Copyright extends React.Component { - docUrl(doc, language) { - const baseUrl = this.props.config.baseUrl; - const docsUrl = this.props.config.docsUrl; - const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`; - const langPart = `${language ? `${language}/` : ''}`; - return `${baseUrl}${docsPart}${langPart}${doc}`; - } - - pageUrl(doc, language) { - const baseUrl = this.props.config.baseUrl; - return baseUrl + (language ? `${language}/` : '') + doc; - } - - render() { - return ( - - ); - } -} - -module.exports = Copyright; diff --git a/website/core/Footer.js b/website/core/Footer.js deleted file mode 100644 index 4e9c9d4e5..000000000 --- a/website/core/Footer.js +++ /dev/null @@ -1,122 +0,0 @@ -/** - * Copyright (c) 2017-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -const React = require('react'); - -class Footer extends React.Component { - docUrl(doc, language) { - const baseUrl = this.props.config.baseUrl; - const docsUrl = this.props.config.docsUrl; - const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`; - const langPart = `${language ? `${language}/` : ''}`; - return `${baseUrl}${docsPart}${langPart}${doc}`; - } - - pageUrl(doc, language) { - const baseUrl = this.props.config.baseUrl; - return baseUrl + (language ? `${language}/` : '') + doc; - } - - render() { - return ( - - ); - } -} - -module.exports = Footer; diff --git a/website/i18n/en.json b/website/i18n/en.json deleted file mode 100644 index 7ad2cee78..000000000 --- a/website/i18n/en.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "_comment": "This file is auto-generated by write-translations.js", - "localized-strings": { - "next": "Next", - "previous": "Previous", - "tagline": "A game engine for functional programmers.", - "docs": { - "development-status": { - "title": "Indigo's Development Status" - }, - "gameloop/events": { - "title": "Events" - }, - "gameloop/frame-context": { - "title": "Frame context" - }, - "gameloop/outcome": { - "title": "Outcome Type" - }, - "guides": { - "title": "About these guides" - }, - "guides/howto-custom-entity": { - "title": "How to make a custom entity" - }, - "guides/howto-fire-shader": { - "title": "How to write a fire shader" - }, - "guides/howto-responsive-ui-with-tyrian": { - "title": "How to make a responsive UI using Tyrian" - }, - "guides/howto-indigo-game": { - "title": "Converting `IndigoSandbox` to `IndigoGame`" - }, - "information/alternatives": { - "title": "Alternatives to Indigo" - }, - "information/antipatterns": { - "title": "Anti-Patterns" - }, - "information/glossary": { - "title": "Glossary" - }, - "information/key-concepts": { - "title": "Key Concepts" - }, - "information/model-viewmodel-view": { - "title": "Model, ViewModel, & View" - }, - "information/motivation-and-constraints": { - "title": "Motivation & Constraints" - }, - "information/performance": { - "title": "Performance" - }, - "information/prior-art": { - "title": "Prior Art" - }, - "information/rendering-technology": { - "title": "Rendering Technology" - }, - "organisation/boot-and-start-up": { - "title": "Boot & Start Up" - }, - "organisation/game-entry-points": { - "title": "Game Entry Points" - }, - "organisation/scene-management": { - "title": "Scenes & Scene Management" - }, - "organisation/subsystems": { - "title": "SubSystems" - }, - "platform/assets": { - "title": "Assets & Asset Loading" - }, - "platform/cross-platform-publishing": { - "title": "Cross Platform Publishing" - }, - "platform/importers": { - "title": "File Format Importers" - }, - "platform/input-handling": { - "title": "User Input Handling" - }, - "platform/loading-and-saving-data": { - "title": "Loading & Saving Data" - }, - "platform/logging": { - "title": "Logging" - }, - "platform/networking": { - "title": "Networking" - }, - "presentation/animation": { - "title": "Animation" - }, - "presentation/audio": { - "title": "Audio" - }, - "presentation/boundaries": { - "title": "Boundaries" - }, - "presentation/cameras": { - "title": "Cameras" - }, - "presentation/clones-and-mutants": { - "title": "Clones & Mutants" - }, - "presentation/depth": { - "title": "Depth" - }, - "presentation/layers": { - "title": "Layers" - }, - "presentation/lighting": { - "title": "Lighting" - }, - "presentation/materials": { - "title": "Materials" - }, - "presentation/primitives": { - "title": "Primitives & Building Blocks" - }, - "presentation/scene-update-fragment": { - "title": "SceneUpdateFragment" - }, - "presentation/shapes": { - "title": "Shapes" - }, - "presentation/text-and-fonts": { - "title": "Text & Fonts" - }, - "quickstart/examples": { - "title": "Examples" - }, - "quickstart/hello-indigo": { - "title": "Hello, Indigo!" - }, - "quickstart/project-templates": { - "title": "Mill & SBT Game Templates" - }, - "quickstart/setup-and-configuration": { - "title": "Setup & Configuration" - }, - "shaders/blending": { - "title": "Blending" - }, - "shaders/constants": { - "title": "Shader Constants, Variables, and Outputs" - }, - "shaders/premultiplied-alpha": { - "title": "Premultiplied Alpha" - }, - "shaders/shader-overview": { - "title": "Shaders Overview" - }, - "time/signals": { - "title": "Signals & Signal Functions" - }, - "time/time-varying-values": { - "title": "Time Varying Values" - }, - "uicomponents/button": { - "title": "Buttons" - }, - "uicomponents/hit-area": { - "title": "Hit Area" - }, - "uicomponents/input-field": { - "title": "Input Field" - }, - "uicomponents/radio-button": { - "title": "Radio Button" - }, - "uicomponents/ui-components": { - "title": "Overview" - }, - "unused/computations": { - "title": "unused/computations" - }, - "unused/jobs": { - "title": "unused/jobs" - } - }, - "links": { - "Blog": "Blog", - "Guides": "Guides", - "Docs": "Docs", - "APIs": "APIs", - "Tools": "Tools", - "GitHub": "GitHub" - }, - "categories": { - "How To's": "How To's", - "Gamedev": "Gamedev", - "Indigo": "Indigo", - "Getting started": "Getting started", - "Organising your game": "Organising your game", - "The game loop": "The game loop", - "Presentation": "Presentation", - "UI Components": "UI Components", - "Shaders": "Shaders", - "Working with Time": "Working with Time", - "Platform & Publishing": "Platform & Publishing", - "Other information": "Other information" - } - }, - "pages-strings": { - "Help Translate|recruit community translators for your project": "Help Translate", - "Edit this Doc|recruitment message asking to edit the doc source": "Edit", - "Translate this Doc|recruitment message asking to translate the docs": "Translate" - } -} diff --git a/website/package.json b/website/package.json deleted file mode 100644 index 28c38e758..000000000 --- a/website/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "scripts": { - "examples": "docusaurus-examples", - "start": "docusaurus-start", - "build": "docusaurus-build", - "publish-gh-pages": "docusaurus-publish", - "write-translations": "docusaurus-write-translations", - "version": "docusaurus-version", - "rename-version": "docusaurus-rename-version" - }, - "devDependencies": { - "docusaurus": "^1.14.7" - } -} diff --git a/website/pages/en/index.js b/website/pages/en/index.js deleted file mode 100644 index c941ebe33..000000000 --- a/website/pages/en/index.js +++ /dev/null @@ -1,205 +0,0 @@ -/** - * Copyright (c) 2017-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -const React = require('react'); - -const CompLibrary = require('../../core/CompLibrary.js'); - -const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */ -const Container = CompLibrary.Container; -const GridBlock = CompLibrary.GridBlock; - -class HomeSplash extends React.Component { - render() { - const {siteConfig, language = ''} = this.props; - const {baseUrl, docsUrl} = siteConfig; - const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`; - const langPart = `${language ? `${language}/` : ''}`; - const docUrl = doc => `${baseUrl}${docsPart}${langPart}${doc}`; - - const SplashContainer = props => ( -
This project is maintained by a dedicated group of people.
-//This project is used by many folks
-//Are you using this project?
-// -// Add your company -// -//