packages feed

mischief-0.1.0.0: src/Mischief.hs

module Mischief
  ( -- * What is Mischief?
    -- $whatis

    -- * Our Values
    -- $values

    -- * "AI" Disclaimer
    -- $ai

    -- * What do I Need to Know?
    -- $know

    -- * Setting up
    -- $setup

    -- * Where to Start
    -- $howtouse

    -- * Libraries
    -- $libs

    -- * Community
    -- $community

    -- * Contributing
    -- $contributing
  )
where

import Prelude ()

-- $whatis
-- Mischief is a free, open-source, ECS Game Engine written in Haskell. It is a unique blend of
-- data-oriented design and functional programming.

-- $values
-- Mischief is all about creativity and human expression and having fun. Is is a celebration of programming,
-- art, and the creation of unique games and projects.
--
-- It is not an engine meant to fit everyone, to be the "best game engine ever" or to make money. It is
-- a project born of passion for data-oriented design, functional programming, and the art of crafting video games.
--
-- You can read more about our values [here](https://codeberg.org/mischief/mischief/src/commit/321bfb3058b91f985c5149d88cb93618ae104c7f/Values.md).

-- $ai
-- Mischief uses no "generative AI" (in code or otherwise) and strives to be a space that fosters creativity and wholesome human interaction.

-- $know
-- You should generally be able to read through the official books and understand most logic without needing to have written Haskell before.
-- However, you'll have a way better time if you have at least a basic knowledge of Haskell syntax, so it is recommended that you first follow a beginner
-- tutorial for Haskell if you are not familiar with the language.
--
-- The official books try not to assume any prior knowledge of ECS or game engines in general.

-- $setup
-- In order to use Mischief, you'll first need to install @GHC@ and @cabal@. We recommend doing so through the [ghcup](https://www.haskell.org/ghcup/) installer.
--
-- After you have set up a project, add @mischief-ecs@ under @build-depends@ in you @.cabal@ file.
--
-- We recommend using @GHC2024@ as the language standard (set in your @.cabal@ file).
--
-- == Language Extensions
-- We generally recommend using the following language extensions in a Mischief project:
--
-- @
-- DeriveAnyClass
-- DuplicateRecordFields
-- NoFieldSelectors
-- DerivingStrategies
-- OverloadedRecordDot
-- MultiWayIf
-- OverloadedStrings
-- QuasiQuotes
-- TypeFamilyDependencies
-- ImportQualifiedPost
-- @
--
-- @QuasiQuotes@ and @OverloadedStrings@ are especially important because some Mischief features are not available without them (namely quasi-queries and logging).
-- The rest of the extensions are optional.
--
-- You can paste these extensions in the @default-extensions@ field of your @.cabal@ file.
--
-- == Text
-- Mischief uses @Text@ instead of @String@ where possible, including in its logging system.
--
-- You'll often see functions from @Data.Text@ being used, such as @T.show@, so it's recommended to add @text@ as a dependency to your project and to qualify it when you want to use it:
--
-- @
-- import "Data.Text" qualified as T
-- @

-- $howtouse
-- Mischief is made up of a fully decentralized ecosystem of libraries built on top of [mischief-ecs]("Mischief.ECS").
--
-- Most of the them are indeed made by the same people who also make the core ECS. But plugging libraries in and out is highly encouraged
-- and one of the main focuses of the engine. So feel free to experiment with various libs to find what suits your game, or even make your own
-- plugins to share with others!
--
-- To get started, check out the [startup guide]("Mischief.ECS.Startup") from the [Learn You and ECS for Great Mischief!]("Mischief.ECS") book. You can
-- also click on each of the links in the next section to see their documentation / book and learn to use them! You don't need to read any one book to completion before moving on,
-- feel free to switch between them depending on what you wish to learn about.
--
-- If you want to skip ahead past the introductory stuff and get a feel for what Mischief can do, check out the [Rendering Book]("Mischief.Render").
--
-- Note that this library that you're reading right now, @mischief@, isn't meant to be added as a dependency or to be used directly.
-- It exists just for centralizing documentation and helping keep the version of each library in check.

-- $libs
-- This is a list of the current libraries that exist within the ecosystem:
--
-- * [mischief-ecs]("Mischief.ECS"). The core ECS library.
-- * [mischief-assets]("Mischief.Assets"). Load and play with assets.
-- * [mischief-input]("Mischief.Input"). Read input from the player.
-- * [mischief-math]("Mischief.Math"). Transforms and algebra.
-- * [mischief-render]("Mischief.Render"). Render stuff and write shaders.
--
-- Feel free to open an issue or PR in the [official repo](https://codeberg.org/mischief/mischief) if you want your library to be added to this list.
-- The ["AI" policy](https://codeberg.org/mischief/mischief/src/branch/main/AI_Policy.md) applies.

-- $community
-- You can keep in touch with the maintainers and the rest of the community by joining the official [discord server](https://discord.gg/WcpPqrwpuk).

-- $contributing
-- You can contribute to the official Mischief repository by opening issues to request features or report bugs. PRs may also be accepeted.