mischief-ecs
Safe HaskellNone
LanguageGHC2024

Mischief.ECS.Components

Synopsis

Component

class (Typeable c, IsExclusive (IsExclusiveRel c)) => Component c where Source #

The Component typeclass.

Minimal complete definition

Nothing

Associated Types

type IsExclusiveRel c :: Bool Source #

Methods

required :: Set DefaultComponentType Source #

List of components required by this one. All required components must be Default

Example

data A = A
instance Component A where
  required = require @(B, C)

data B = B Int deriving (Component, Generic, Default)

data C = C String deriving (Component)
instance Default C where
  def = C "Default String"

onAdd :: [Hook c] Source #

onSet :: [Hook c] Source #

onRemove :: [Hook c] Source #

onAddRel :: [HookRel c] Source #

onSetRel :: [HookRel c] Source #

onRemoveRel :: [HookRel c] Source #

Instances

Instances details
Component ScheduleLabel Source # 
Instance details

Defined in Mischief.ECS.App.Schedules

Associated Types

type IsExclusiveRel ScheduleLabel 
Instance details

Defined in Mischief.ECS.App.Schedules

Component Schedules Source # 
Instance details

Defined in Mischief.ECS.App.Schedules

Associated Types

type IsExclusiveRel Schedules 
Instance details

Defined in Mischief.ECS.App.Schedules

Component StartupSchedule Source # 
Instance details

Defined in Mischief.ECS.App.Schedules

Associated Types

type IsExclusiveRel StartupSchedule 
Instance details

Defined in Mischief.ECS.App.Schedules

Component UpdateSchedule Source # 
Instance details

Defined in Mischief.ECS.App.Schedules

Associated Types

type IsExclusiveRel UpdateSchedule 
Instance details

Defined in Mischief.ECS.App.Schedules

Component LastSystemTick Source # 
Instance details

Defined in Mischief.ECS.App.SystemDef

Associated Types

type IsExclusiveRel LastSystemTick 
Instance details

Defined in Mischief.ECS.App.SystemDef

Component SystemTick Source # 
Instance details

Defined in Mischief.ECS.App.SystemDef

Associated Types

type IsExclusiveRel SystemTick 
Instance details

Defined in Mischief.ECS.App.SystemDef

Component ScheduledIn Source # 
Instance details

Defined in Mischief.ECS.App.Systems

Associated Types

type IsExclusiveRel ScheduledIn 
Instance details

Defined in Mischief.ECS.App.Systems

Component SystemFunction Source # 
Instance details

Defined in Mischief.ECS.App.Systems

Associated Types

type IsExclusiveRel SystemFunction 
Instance details

Defined in Mischief.ECS.App.Systems

Component Systems Source # 
Instance details

Defined in Mischief.ECS.App.Systems

Associated Types

type IsExclusiveRel Systems 
Instance details

Defined in Mischief.ECS.App.Systems

Component ComponentArchetypes Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type IsExclusiveRel ComponentArchetypes 
Instance details

Defined in Mischief.ECS.Components

Component ComponentPairs Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type IsExclusiveRel ComponentPairs 
Instance details

Defined in Mischief.ECS.Components

Component ComponentType Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type IsExclusiveRel ComponentType 
Instance details

Defined in Mischief.ECS.Components

Component DefaultValue Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type IsExclusiveRel DefaultValue 
Instance details

Defined in Mischief.ECS.Components

Component IsExclusiveRelationship Source # 
Instance details

Defined in Mischief.ECS.Components

Component RequiredBy Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type IsExclusiveRel RequiredBy 
Instance details

Defined in Mischief.ECS.Components

Component Requires Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type IsExclusiveRel Requires 
Instance details

Defined in Mischief.ECS.Components

Component Name Source # 
Instance details

Defined in Mischief.ECS.Components.Common

Associated Types

type IsExclusiveRel Name 
Instance details

Defined in Mischief.ECS.Components.Common

Component ComponentAddHooks Source # 
Instance details

Defined in Mischief.ECS.Components.Spawn

Component ComponentAddHooksRel Source # 
Instance details

Defined in Mischief.ECS.Components.Spawn

Component ComponentRemoveHooks Source # 
Instance details

Defined in Mischief.ECS.Components.Spawn

Component ComponentRemoveHooksRel Source # 
Instance details

Defined in Mischief.ECS.Components.Spawn

Component ComponentSetHooks Source # 
Instance details

Defined in Mischief.ECS.Components.Spawn

Component ComponentSetHooksRel Source # 
Instance details

Defined in Mischief.ECS.Components.Spawn

Component ObserverOrder Source # 
Instance details

Defined in Mischief.ECS.Observer

Associated Types

type IsExclusiveRel ObserverOrder 
Instance details

Defined in Mischief.ECS.Observer

Component ChildOf Source # 
Instance details

Defined in Mischief.ECS.Relationships.ChildOf

Associated Types

type IsExclusiveRel ChildOf 
Instance details

Defined in Mischief.ECS.Relationships.ChildOf

Component Before Source # 
Instance details

Defined in Mischief.ECS.Relationships.Order

Associated Types

type IsExclusiveRel Before 
Instance details

Defined in Mischief.ECS.Relationships.Order

Component Visited Source # 
Instance details

Defined in Mischief.ECS.Relationships.Order

Associated Types

type IsExclusiveRel Visited 
Instance details

Defined in Mischief.ECS.Relationships.Order

Component VirtualTime Source # 
Instance details

Defined in Mischief.ECS.Time

Associated Types

type IsExclusiveRel VirtualTime 
Instance details

Defined in Mischief.ECS.Time

Typeable e => Component (Observer e) Source # 
Instance details

Defined in Mischief.ECS.Observer

Associated Types

type IsExclusiveRel (Observer e) 
Instance details

Defined in Mischief.ECS.Observer

(Typeable e, Typeable k) => Component (EventProxy e) Source # 
Instance details

Defined in Mischief.ECS.Observer

Associated Types

type IsExclusiveRel (EventProxy e) 
Instance details

Defined in Mischief.ECS.Observer

(Typeable a, Typeable b, Typeable k1, Typeable k2) => Component (TestG a b) Source # 
Instance details

Defined in Mischief.ECS.World.Query.TH.QD

Associated Types

type IsExclusiveRel (TestG a b) 
Instance details

Defined in Mischief.ECS.World.Query.TH.QD

type IsExclusiveRel (TestG a b) = 'False

data ComponentId Source #

Unique id for components and component pairs.

Constructors

ComponentId (# Word#, Maybe Entity #) 

Meta

data ComponentPairs Source #

Meta component with a set of all archetypes containing pairs made with this component.

Constructors

ComponentPairs 

Fields

Instances

Instances details
Default ComponentPairs Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

def :: ComponentPairs #

Generic ComponentPairs Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type Rep ComponentPairs 
Instance details

Defined in Mischief.ECS.Components

type Rep ComponentPairs = D1 ('MetaData "ComponentPairs" "Mischief.ECS.Components" "mischief-ecs-0.2.0.0-inplace" 'False) (C1 ('MetaCons "ComponentPairs" 'PrefixI 'True) (S1 ('MetaSel ('Just "any") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set ArchetypeId)) :*: S1 ('MetaSel ('Just "pairs") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map Entity (Set ArchetypeId)))))
Show ComponentPairs Source # 
Instance details

Defined in Mischief.ECS.Components

Component ComponentPairs Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type IsExclusiveRel ComponentPairs 
Instance details

Defined in Mischief.ECS.Components

type Rep ComponentPairs Source # 
Instance details

Defined in Mischief.ECS.Components

type Rep ComponentPairs = D1 ('MetaData "ComponentPairs" "Mischief.ECS.Components" "mischief-ecs-0.2.0.0-inplace" 'False) (C1 ('MetaCons "ComponentPairs" 'PrefixI 'True) (S1 ('MetaSel ('Just "any") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set ArchetypeId)) :*: S1 ('MetaSel ('Just "pairs") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map Entity (Set ArchetypeId)))))
type IsExclusiveRel ComponentPairs Source # 
Instance details

Defined in Mischief.ECS.Components

newtype DefaultValue Source #

Meta component with the erased default value of this component. Added to components required by other components.

data ComponentType where Source #

Constructors

ComponentType :: forall c. Component c => Proxy c -> ComponentType 

Instances

Instances details
Show ComponentType Source # 
Instance details

Defined in Mischief.ECS.Components

Eq ComponentType Source # 
Instance details

Defined in Mischief.ECS.Components

Ord ComponentType Source # 
Instance details

Defined in Mischief.ECS.Components

Component ComponentType Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type IsExclusiveRel ComponentType 
Instance details

Defined in Mischief.ECS.Components

GetRep ComponentType Source # 
Instance details

Defined in Mischief.ECS.Components

type IsExclusiveRel ComponentType Source # 
Instance details

Defined in Mischief.ECS.Components

Erasure

data ErasedComponent where Source #

Type for component erasure.

Constructors

ErasedComponent :: forall c. Component c => c -> ErasedComponent 

Instances

Instances details
GetRep ErasedComponent Source # 
Instance details

Defined in Mischief.ECS.Components

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

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

Defined in Mischief.ECS.Components

Collectable c (BundleData ErasedComponent) => EraseIntoStorage (From c) (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 => EraseIntoStorage (Res c) (BundleData ErasedComponent) Source # 
Instance details

Defined in Mischief.ECS.Components

Collectable c (BundleData ErasedComponent) => EraseIntoStorage [c] (BundleData ErasedComponent) Source # 
Instance details

Defined in Mischief.ECS.Components

tryGetComponent :: Component c => ErasedComponent -> Maybe c Source #

Try to get the inner data of a ErasedComponent.

Archetypes

newtype ArchetypeId Source #

Unique id corresponding to an archetype.

Constructors

ArchetypeId 

Fields

Bundles

data BundleData e Source #

Data extracted from a Bundle.

Instances

Instances details
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

Semigroup (BundleData e) Source # 
Instance details

Defined in Mischief.ECS.Components

Show (BundleData e) Source # 
Instance details

Defined in Mischief.ECS.Components

Eq (BundleData e) Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

(==) :: BundleData e -> BundleData e -> Bool #

(/=) :: BundleData e -> BundleData e -> Bool #

Ord (BundleData e) Source # 
Instance details

Defined in Mischief.ECS.Components

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

Defined in Mischief.ECS.Components

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

Defined in Mischief.ECS.Components

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

Defined in Mischief.ECS.Components

Collectable c (BundleData ErasedComponentEq) => EraseIntoStorage (From c) (BundleData ErasedComponentEq) 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

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

Defined in Mischief.ECS.Components

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

Defined in Mischief.ECS.Components

Collectable c (BundleData ErasedComponent) => EraseIntoStorage [c] (BundleData ErasedComponent) Source # 
Instance details

Defined in Mischief.ECS.Components

Collectable c (BundleData ErasedComponentEq) => EraseIntoStorage [c] (BundleData ErasedComponentEq) Source # 
Instance details

Defined in Mischief.ECS.Components

data BundleElement e Source #

Element of a 'BundleData e'.

Constructors

BundleElement 

Fields

Tables

data ComponentTicks Source #

Change ticks for a specific component.

Constructors

ComponentTicks 

Fields

Instances

Instances details
Show ComponentTicks Source # 
Instance details

Defined in Mischief.ECS.Components

data ComponentData Source #

Data for a component that's stored in a table.

Storage

newtype Components Source #

Contains data and methods for assigning ComponentIds to new components (via their TypeRep).

Constructors

Components 

Fields

getComponentId :: TypeRep -> Components -> IO (Maybe ComponentId) Source #

Get the id of a component through IO.

Utils

newtype Pair Source #

Constructors

Pair (ComponentType, Entity) 

data Rel c Source #

Type used for querying and inserting relationships.

Constructors

Rel 

Fields

Instances

Instances details
Functor Rel Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

fmap :: (a -> b) -> Rel a -> Rel b #

(<$) :: a -> Rel b -> Rel a #

Component c => RelQuery 'False (MR c Any) (Maybe [Rel c]) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Component c => RelQuery 'False (R c Any) [Rel c] Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Component c => RelQuery 'True (MR c Any) (Maybe (Rel c)) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Component c => RelQuery 'True (R c Any) (Rel c) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Show c => Show (Rel c) Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

showsPrec :: Int -> Rel c -> ShowS #

show :: Rel c -> String #

showList :: [Rel c] -> ShowS #

Eq c => Eq (Rel c) Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

(==) :: Rel c -> Rel c -> Bool #

(/=) :: Rel c -> Rel c -> Bool #

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

Component c => Queryable (MR c Entity) (Maybe (Rel c)) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Component c => Queryable (R c Entity) (Rel c) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

data From c Source #

Constructors

From 

Fields

Instances

Instances details
Functor From Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

fmap :: (a -> b) -> From a -> From b #

(<$) :: a -> From b -> From a #

(Component c, Queryable q out) => RelQuery 'False (MR c (Q q)) (Maybe [From out]) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Methods

relRunQueryEntity :: MR c (Q q) -> World -> Entity -> IO (Maybe (Maybe [From out])) Source #

relRunQueryInternal :: MR c (Q q) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Maybe [From out])] Source #

relQueryTypes :: MR c (Q q) -> Set (TypeRep, TypeQuery) Source #

(Component c, Queryable q out) => RelQuery 'False (MR c (Q' q (QueryFilter 'ArchetypeFilter))) (Maybe [From out]) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

(Component c, Queryable q out) => RelQuery 'False (R c (Q q)) [From out] Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Methods

relRunQueryEntity :: R c (Q q) -> World -> Entity -> IO (Maybe [From out]) Source #

relRunQueryInternal :: R c (Q q) -> [ArchetypeId] -> World -> IO [(Entity, Bool, [From out])] Source #

relQueryTypes :: R c (Q q) -> Set (TypeRep, TypeQuery) Source #

(Component c, Queryable q out) => RelQuery 'False (R c (Q' q (QueryFilter 'ArchetypeFilter))) [From out] Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

(Component c, Queryable q out) => RelQuery 'True (MR c (Q q)) (Maybe (From out)) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Methods

relRunQueryEntity :: MR c (Q q) -> World -> Entity -> IO (Maybe (Maybe (From out))) Source #

relRunQueryInternal :: MR c (Q q) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Maybe (From out))] Source #

relQueryTypes :: MR c (Q q) -> Set (TypeRep, TypeQuery) Source #

(Component c, Queryable q out) => RelQuery 'True (MR c (Q' q (QueryFilter 'ArchetypeFilter))) (Maybe (From out)) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

(Component c, Queryable q out) => RelQuery 'True (R c (Q q)) (From out) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Methods

relRunQueryEntity :: R c (Q q) -> World -> Entity -> IO (Maybe (From out)) Source #

relRunQueryInternal :: R c (Q q) -> [ArchetypeId] -> World -> IO [(Entity, Bool, From out)] Source #

relQueryTypes :: R c (Q q) -> Set (TypeRep, TypeQuery) Source #

(Component c, Queryable q out) => RelQuery 'True (R c (Q' q (QueryFilter 'ArchetypeFilter))) (From out) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Show c => Show (From c) Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

showsPrec :: Int -> From c -> ShowS #

show :: From c -> String #

showList :: [From c] -> ShowS #

Eq c => Eq (From c) Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

(==) :: From c -> From c -> Bool #

(/=) :: From c -> From c -> Bool #

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

Defined in Mischief.ECS.Components

Collectable c (BundleData ErasedComponentEq) => EraseIntoStorage (From c) (BundleData ErasedComponentEq) Source # 
Instance details

Defined in Mischief.ECS.Components

newtype Res c Source #

Constructors

Res 

Fields

Instances

Instances details
Functor Res Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

fmap :: (a -> b) -> Res a -> Res b #

(<$) :: a -> Res b -> Res a #

Show c => Show (Res c) Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

showsPrec :: Int -> Res c -> ShowS #

show :: Res c -> String #

showList :: [Res c] -> ShowS #

Eq c => Eq (Res c) Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

(==) :: Res c -> Res c -> Bool #

(/=) :: Res c -> Res c -> Bool #

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

Defined in Mischief.ECS.Components

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

Defined in Mischief.ECS.Components

Component c => Queryable (MRes c) (Maybe (Res c)) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Component c => Queryable (c -> Res c) (Res c) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

Methods

runQueryEntity :: (c -> Res c) -> World -> Entity -> IO (Maybe (Res c)) Source #

runQueryInternal :: (c -> Res c) -> [ArchetypeId] -> World -> IO [(Entity, Bool, Res c)] Source #

queryTypes :: (c -> Res c) -> Set (TypeRep, TypeQuery) Source #

newtype Tick Source #

Constructors

Tick (Int, Int) 

Instances

Instances details
Default Tick Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

def :: Tick #

Show Tick Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

showsPrec :: Int -> Tick -> ShowS #

show :: Tick -> String #

showList :: [Tick] -> ShowS #

Eq Tick Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

(==) :: Tick -> Tick -> Bool #

(/=) :: Tick -> Tick -> Bool #

Ord Tick Source # 
Instance details

Defined in Mischief.ECS.Components

Methods

compare :: Tick -> Tick -> Ordering #

(<) :: Tick -> Tick -> Bool #

(<=) :: Tick -> Tick -> Bool #

(>) :: Tick -> Tick -> Bool #

(>=) :: Tick -> Tick -> Bool #

max :: Tick -> Tick -> Tick #

min :: Tick -> Tick -> Tick #

class IsExclusive (e :: Bool) where Source #

Instances

Instances details
IsExclusive 'False Source # 
Instance details

Defined in Mischief.ECS.Components

IsExclusive 'True Source # 
Instance details

Defined in Mischief.ECS.Components