| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Mischief.ECS
Description
This library contains the ECS used by the Mischief Game Engine.
Synopsis
- module Mischief.ECS.App
- module Mischief.ECS.App.Plugins
- module Mischief.ECS.App.Schedules
- module Mischief.ECS.App.SystemConfig
- module Mischief.ECS.App.Systems
- module Mischief.ECS.Archetypes
- module Mischief.ECS.Archetypes.Graph
- class Collectable v storage where
- collect :: v -> storage
- class Semigroup s => EraseIntoStorage v s where
- erase :: v -> s
- module Mischief.ECS.Components
- module Mischief.ECS.Components.Bundle
- module Mischief.ECS.Components.BundleTypes
- module Mischief.ECS.Components.Common
- module Mischief.ECS.Components.Hooks
- module Mischief.ECS.Components.Required
- module Mischief.ECS.Components.Runnable
- module Mischief.ECS.Components.Spawn
- module Mischief.ECS.Entities
- module Mischief.ECS.Events
- module Mischief.ECS.Hooks
- module Mischief.ECS.Log
- module Mischief.ECS.Mappable
- class Typeable m => Message (m :: k)
- module Mischief.ECS.Prelude
- module Mischief.ECS.Relationships
- module Mischief.ECS.Relationships.ChildOf
- module Mischief.ECS.Relationships.Graph
- module Mischief.ECS.Relationships.Order
- module Mischief.ECS.Relationships.Tree
- module Mischief.ECS.Tables
- module Mischief.ECS.Time
- module Mischief.ECS.Utils
- module Mischief.ECS.World
- module Mischief.ECS.World.Change
- module Mischief.ECS.World.Defer
- module Mischief.ECS.World.Insert
- module Mischief.ECS.World.Modify
- module Mischief.ECS.World.Par
- module Mischief.ECS.World.Prefs
- module Mischief.ECS.Resources
- module Mischief.ECS.World.Query
- module Mischief.ECS.World.Query.Queryable
- module Mischief.ECS.World.Query.QueryFilter
- module Mischief.ECS.EventDef
- module Mischief.ECS.World.Query.TH
- module Mischief.ECS.World.Remove
- module Mischief.ECS.World.Spawn
- module Mischief.ECS.World.Utils
- data TestTest = TestTest
Pre-Release
This version of Mischief isn't meant for public use. It's just a pre-release published mostly to showcase the documentation.
What is Mischief?
Mischief has various meanings. It can be a group of rats. Or it can refer to being naughty and playful.
This Mischief, however, is an ECS Game Engine! In other words...
Mischief :: Entity -> Component c => System ()
Mischief takes great inspiration from Bevy and Flecs, and
was written in 100% Haskell, taking advantage of its great ergonomics and strong type system.
It is a refreshing spin on the functional and data-driven paradigms.
Package
This package contains only mischief-ecs, the ECS at the core of Mischief. Other packages, such as mischief-input, mischief-assets,
mischief-render are planned, but haven't yet been developed to the same level as the ECS itself.
Design Goals
There are the main design goals of Mischief:
- Ergonomics. Mischief's main purpose is to provide a very clean, intuitive, high-level API. This is the main way we differentiate ourselves from other ECS's.
- Functional. While the core logic of Mischief is highly mutable and dynamic for the sake of performance, the high-level API is tailored to be immutable and encourage the functional programming paradigm.
- Modularity. Mischief is meant to be modular, allowing you to plug packages in and out, whether they are made by us or a third party.
Performance
Performance-wise, Mischief still has a long way to go; there are many easy performance gains that we have just been too busy to implement, as we've
been mostly focusing on ergonomics, modularity, and ease-of-use.
This is a pretty strong Archetype ECS however, and it is possible to bring it to about the same asymptotic performance as Bevy or Flecs, although
there will probably always be a layer of indirection (or 20) that makes it a bit slower, due to the high-level, boxed, nature of Haskell.
Learn You an ECS for Great Mischief!
In order to learn how to use Mischief, you can read through the official book:
module Mischief.ECS.App
module Mischief.ECS.App.Plugins
module Mischief.ECS.App.Schedules
module Mischief.ECS.App.Systems
module Mischief.ECS.Archetypes
class Collectable v storage where Source #
Instances
class Semigroup s => EraseIntoStorage v s where Source #
Instances
module Mischief.ECS.Components
module Mischief.ECS.Entities
module Mischief.ECS.Events
module Mischief.ECS.Hooks
module Mischief.ECS.Log
module Mischief.ECS.Mappable
module Mischief.ECS.Prelude
module Mischief.ECS.Relationships
module Mischief.ECS.Tables
module Mischief.ECS.Time
module Mischief.ECS.Utils
module Mischief.ECS.World
module Mischief.ECS.World.Change
module Mischief.ECS.World.Defer
module Mischief.ECS.World.Insert
module Mischief.ECS.World.Modify
module Mischief.ECS.World.Par
module Mischief.ECS.World.Prefs
module Mischief.ECS.Resources
module Mischief.ECS.World.Query
module Mischief.ECS.EventDef
module Mischief.ECS.World.Query.TH
module Mischief.ECS.World.Remove
module Mischief.ECS.World.Spawn
module Mischief.ECS.World.Utils