mischief-ecs
Safe HaskellNone
LanguageGHC2024

Mischief.ECS.Components

Synopsis

Component

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

The Component typeclass.

Minimal complete definition

Nothing

Associated Types

type RelExclusivity c :: Exclusivity 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"

hooks :: Hooks c Source #

Instances

Instances details
Component ScheduleLabel Source # 
Instance details

Defined in Mischief.ECS.App.Schedules

Associated Types

type RelExclusivity ScheduleLabel 
Instance details

Defined in Mischief.ECS.App.Schedules

Component Schedules Source # 
Instance details

Defined in Mischief.ECS.App.Schedules

Associated Types

type RelExclusivity Schedules 
Instance details

Defined in Mischief.ECS.App.Schedules

Component StartupSchedule Source # 
Instance details

Defined in Mischief.ECS.App.Schedules

Associated Types

type RelExclusivity StartupSchedule 
Instance details

Defined in Mischief.ECS.App.Schedules

Component UpdateSchedule Source # 
Instance details

Defined in Mischief.ECS.App.Schedules

Associated Types

type RelExclusivity UpdateSchedule 
Instance details

Defined in Mischief.ECS.App.Schedules

Component LastSystemTick Source # 
Instance details

Defined in Mischief.ECS.App.SystemDef

Associated Types

type RelExclusivity LastSystemTick 
Instance details

Defined in Mischief.ECS.App.SystemDef

Component SystemTick Source # 
Instance details

Defined in Mischief.ECS.App.SystemDef

Associated Types

type RelExclusivity SystemTick 
Instance details

Defined in Mischief.ECS.App.SystemDef

Component ScheduledIn Source # 
Instance details

Defined in Mischief.ECS.App.Systems

Associated Types

type RelExclusivity ScheduledIn 
Instance details

Defined in Mischief.ECS.App.Systems

Component SystemFunction Source # 
Instance details

Defined in Mischief.ECS.App.Systems

Associated Types

type RelExclusivity SystemFunction 
Instance details

Defined in Mischief.ECS.App.Systems

Component Systems Source # 
Instance details

Defined in Mischief.ECS.App.Systems

Associated Types

type RelExclusivity Systems 
Instance details

Defined in Mischief.ECS.App.Systems

Component ComponentArchetypes Source # 
Instance details

Defined in Mischief.ECS.Components

Component ComponentPairs Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type RelExclusivity ComponentPairs 
Instance details

Defined in Mischief.ECS.Components

Component ComponentType Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type RelExclusivity ComponentType 
Instance details

Defined in Mischief.ECS.Components

Component DefaultValue Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type RelExclusivity DefaultValue 
Instance details

Defined in Mischief.ECS.Components

Component RequiredBy Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type RelExclusivity RequiredBy 
Instance details

Defined in Mischief.ECS.Components

Component Requires Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type RelExclusivity Requires 
Instance details

Defined in Mischief.ECS.Components

Component Name Source # 
Instance details

Defined in Mischief.ECS.Components.Common

Associated Types

type RelExclusivity Name 
Instance details

Defined in Mischief.ECS.Components.Common

Component ObserverOrder Source # 
Instance details

Defined in Mischief.ECS.Observer

Associated Types

type RelExclusivity ObserverOrder 
Instance details

Defined in Mischief.ECS.Observer

Component IsExclusiveRelationship Source # 
Instance details

Defined in Mischief.ECS.Relationships

Component ChildOf Source # 
Instance details

Defined in Mischief.ECS.Relationships.ChildOf

Associated Types

type RelExclusivity ChildOf 
Instance details

Defined in Mischief.ECS.Relationships.ChildOf

Component Before Source # 
Instance details

Defined in Mischief.ECS.Relationships.Order

Associated Types

type RelExclusivity Before 
Instance details

Defined in Mischief.ECS.Relationships.Order

Component Visited Source # 
Instance details

Defined in Mischief.ECS.Relationships.Order

Associated Types

type RelExclusivity Visited 
Instance details

Defined in Mischief.ECS.Relationships.Order

Component Time Source # 
Instance details

Defined in Mischief.ECS.Time

Associated Types

type RelExclusivity Time 
Instance details

Defined in Mischief.ECS.Time

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

Defined in Mischief.ECS.Observer

Associated Types

type RelExclusivity (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 RelExclusivity (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 RelExclusivity (TestG a b) 
Instance details

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

data ComponentId Source #

Unique id for components and component pairs.

Constructors

ComponentId (# Word#, Maybe Entity #) 

Meta

newtype ComponentArchetypes Source #

Meta component with a set of all archetypes that a components is part of.

Constructors

ComponentArchetypes 

Fields

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.0.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 RelExclusivity 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.0.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 RelExclusivity 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 Requires Source #

Meta relationship.

Constructors

Requires 

Instances

Instances details
Component Requires Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type RelExclusivity Requires 
Instance details

Defined in Mischief.ECS.Components

type RelExclusivity Requires Source # 
Instance details

Defined in Mischief.ECS.Components

data RequiredBy Source #

Meta relationship.

Constructors

RequiredBy 

Instances

Instances details
Component RequiredBy Source # 
Instance details

Defined in Mischief.ECS.Components

Associated Types

type RelExclusivity RequiredBy 
Instance details

Defined in Mischief.ECS.Components

type RelExclusivity RequiredBy Source # 
Instance details

Defined in Mischief.ECS.Components

data ComponentType where Source #

Constructors

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

Erasure

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

newtype BundleData e Source #

Data extracted from a Bundle.

Constructors

BundleData 

Fields

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

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

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
Component c => Updateable' 'False (Result (Rel c)) Source # 
Instance details

Defined in Mischief.ECS.World.Insert

Methods

updateInner' :: Result (Rel c) -> System (Maybe (Result (Rel c))) Source #

Component c => GetResultComponentId' 'False (Result (Rel c)) Source # 
Instance details

Defined in Mischief.ECS.World.Query

DeepValue' 'False (Result (Rel c)) c Source # 
Instance details

Defined in Mischief.ECS.Tables

Methods

deepValue' :: Result (Rel c) -> c Source #

Component c => Settable' 'False (Result (Rel c)) c Source # 
Instance details

Defined in Mischief.ECS.World.Insert

Methods

setInner' :: Result (Rel c) -> c -> System () Source #

setIfNeqInner' :: Result (Rel c) -> c -> System () Source #

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

Defined in Mischief.ECS.World.Query.Queryable

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

Defined in Mischief.ECS.World.Query.Queryable

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

Defined in Mischief.ECS.World.Query.Queryable

Component c => RelQuery 'Inclusive (R c Any) [Result (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 #

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 (Result (Rel c))) Source # 
Instance details

Defined in Mischief.ECS.World.Query.Queryable

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

Defined in Mischief.ECS.World.Query.Queryable

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 #

data ErasedComponentEq where Source #

Constructors

ErasedComponentEq :: forall c. (Component c, Eq c) => c -> ErasedComponentEq 

Instances

Instances details
(Component c, Eq c) => EraseIntoStorage c (BundleData ErasedComponentEq) 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

class IsExclusive (e :: Exclusivity) where Source #

Instances

Instances details
IsExclusive 'Exclusive Source # 
Instance details

Defined in Mischief.ECS.Components

IsExclusive 'Inclusive Source # 
Instance details

Defined in Mischief.ECS.Components