mischief-ecs
Safe HaskellNone
LanguageGHC2024

Mischief.ECS

Description

This library contains the ECS used by the Mischief Game Engine.

Synopsis

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:

  1. Startup Guide
  2. Coding a Dungeon Game
  3. App and Plugins
  4. Components
  5. Relationships
  6. Queries
  7. Systems
  8. Events and Messages

class Collectable v storage where Source #

Methods

collect :: v -> storage Source #

Instances

Instances details
EraseIntoStorage v storage => Collectable v storage Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: v -> storage Source #

(Semigroup s, Collectable a0 s, Collectable a1 s) => Collectable (a0, a1) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s) => Collectable (a0, a1, a2) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s) => Collectable (a0, a1, a2, a3) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s) => Collectable (a0, a1, a2, a3, a4) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s, Collectable a5 s) => Collectable (a0, a1, a2, a3, a4, a5) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4, a5) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s, Collectable a5 s, Collectable a6 s) => Collectable (a0, a1, a2, a3, a4, a5, a6) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4, a5, a6) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s, Collectable a5 s, Collectable a6 s, Collectable a7 s) => Collectable (a0, a1, a2, a3, a4, a5, a6, a7) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4, a5, a6, a7) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s, Collectable a5 s, Collectable a6 s, Collectable a7 s, Collectable a8 s) => Collectable (a0, a1, a2, a3, a4, a5, a6, a7, a8) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4, a5, a6, a7, a8) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s, Collectable a5 s, Collectable a6 s, Collectable a7 s, Collectable a8 s, Collectable a9 s) => Collectable (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s, Collectable a5 s, Collectable a6 s, Collectable a7 s, Collectable a8 s, Collectable a9 s, Collectable a10 s) => Collectable (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s, Collectable a5 s, Collectable a6 s, Collectable a7 s, Collectable a8 s, Collectable a9 s, Collectable a10 s, Collectable a11 s) => Collectable (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s, Collectable a5 s, Collectable a6 s, Collectable a7 s, Collectable a8 s, Collectable a9 s, Collectable a10 s, Collectable a11 s, Collectable a12 s) => Collectable (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s, Collectable a5 s, Collectable a6 s, Collectable a7 s, Collectable a8 s, Collectable a9 s, Collectable a10 s, Collectable a11 s, Collectable a12 s, Collectable a13 s) => Collectable (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) -> s Source #

(Semigroup s, Collectable a0 s, Collectable a1 s, Collectable a2 s, Collectable a3 s, Collectable a4 s, Collectable a5 s, Collectable a6 s, Collectable a7 s, Collectable a8 s, Collectable a9 s, Collectable a10 s, Collectable a11 s, Collectable a12 s, Collectable a13 s, Collectable a14 s) => Collectable (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) s Source # 
Instance details

Defined in Mischief.ECS.Collectable

Methods

collect :: (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) -> s Source #

class Semigroup s => EraseIntoStorage v s where Source #

Methods

erase :: v -> s Source #

Instances

Instances details
EraseIntoStorage QueryFilter QueryFilter Source # 
Instance details

Defined in Mischief.ECS.World.Query.QueryFilter

EraseIntoStorage () Plugins Source # 
Instance details

Defined in Mischief.ECS.App.Plugins

Methods

erase :: () -> Plugins Source #

Plugin p => EraseIntoStorage p Plugins Source # 
Instance details

Defined in Mischief.ECS.App.Plugins

Methods

erase :: p -> Plugins Source #

IntoQueryFilter q => EraseIntoStorage q QueryFilter Source # 
Instance details

Defined in Mischief.ECS.World.Query.QueryFilter

Methods

erase :: q -> QueryFilter Source #

EraseIntoStorage () (BundleData ErasedComponent) Source # 
Instance details

Defined in Mischief.ECS.Components

Component c => EraseIntoStorage c (BundleData ErasedComponent) Source # 
Instance details

Defined in Mischief.ECS.Components

(Component c, Eq c) => EraseIntoStorage c (BundleData ErasedComponentEq) Source # 
Instance details

Defined in Mischief.ECS.Components

EraseIntoStorage (BundleData ErasedComponent) (BundleData ErasedComponent) Source # 
Instance details

Defined in Mischief.ECS.Components

Component c => EraseIntoStorage (Rel c) (BundleData ErasedComponent) Source # 
Instance details

Defined in Mischief.ECS.Components

(Component c, Eq c) => EraseIntoStorage (Rel c) (BundleData ErasedComponentEq) Source # 
Instance details

Defined in Mischief.ECS.Components

EraseIntoStorage (System ()) [System ()] Source # 
Instance details

Defined in Mischief.ECS.World

Methods

erase :: System () -> [System ()] Source #

Component c => EraseIntoStorage (C c) FilterType Source # 
Instance details

Defined in Mischief.ECS.World.Query.QueryFilter

Methods

erase :: C c -> FilterType Source #

Component c => EraseIntoStorage (C c, c -> Bool) CheckFilterType Source # 
Instance details

Defined in Mischief.ECS.World.Query.QueryFilter

Methods

erase :: (C c, c -> Bool) -> CheckFilterType Source #

Component c => EraseIntoStorage (R c Entity, c -> Bool) CheckFilterType Source # 
Instance details

Defined in Mischief.ECS.World.Query.QueryFilter

Methods

erase :: (R c Entity, c -> Bool) -> CheckFilterType Source #

Component c => EraseIntoStorage (R c Any, c -> Bool) CheckFilterType Source # 
Instance details

Defined in Mischief.ECS.World.Query.QueryFilter

Methods

erase :: (R c Any, c -> Bool) -> CheckFilterType Source #

EraseIntoStorage (Hooks c) (Hooks c) Source # 
Instance details

Defined in Mischief.ECS.Hooks

Methods

erase :: Hooks c -> Hooks c Source #

Event (e c) => EraseIntoStorage (e c -> System ()) (Hooks c) Source # 
Instance details

Defined in Mischief.ECS.Hooks

Methods

erase :: (e c -> System ()) -> Hooks c Source #

Component c => EraseIntoStorage (R c Entity) FilterType Source # 
Instance details

Defined in Mischief.ECS.World.Query.QueryFilter

Methods

erase :: R c Entity -> FilterType Source #

Component c => EraseIntoStorage (R c Any) FilterType Source # 
Instance details

Defined in Mischief.ECS.World.Query.QueryFilter

Methods

erase :: R c Any -> FilterType Source #

class Typeable m => Message (m :: k) Source #

Message typeclass.

data TestTest Source #

Constructors

TestTest