| 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.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.World.Query.Markers
- 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
LLM Disclaimer
No LLM / AI was used in making Mischief. Now and forever.
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 open-source 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
These are the main design goals of Mischief:
- Ergonomic and Accessible. Mischief's main purpose is to provide a very clean, intuitive, inherently opinionated, high-level API. This is the main way we differentiate ourselves from other ECS's. Learning to use Mischief should be a painless and intuitive process.
- Functional and Data Driven. We strive to find a balance between functional programming and data-driven design. These are two concepts that don't interact very often, but that both stand at the core of Msichief.
- Modular. Mischief is meant to be modular, allowing you to plug packages in and out, whether they are made by us or a third party.
Highlights
Here are some highlights of Mischief:
- Highly Dynamic . Want to disable a system? Despawn it!
- Fancy Queries. Complete with transitive queries and filters.
- Quasi-Queries. Scripting language for writing queries.
- Rich Systems. Monadic Systems? Yes please.
- Book. Mischief has its very own book! See below.
- Relationships. Bob Likes Charlie.
- Events.
- And much much more..
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