module Mischief.ECS.Components.Common where

import Mischief.ECS.Components

-- | Special component inserted automatically on most entities.
--
-- Can be inserted manually to give each entity a custom name.
newtype Name = Name String
  deriving anyclass (Typeable Name
[HookRel Name]
[Hook Name]
Set DefaultComponentType
IsExclusive (IsExclusiveRel Name)
(Typeable Name, IsExclusive (IsExclusiveRel Name)) =>
Set DefaultComponentType
-> [Hook Name]
-> [Hook Name]
-> [Hook Name]
-> [HookRel Name]
-> [HookRel Name]
-> [HookRel Name]
-> Component Name
forall c.
(Typeable c, IsExclusive (IsExclusiveRel c)) =>
Set DefaultComponentType
-> [Hook c]
-> [Hook c]
-> [Hook c]
-> [HookRel c]
-> [HookRel c]
-> [HookRel c]
-> Component c
$crequired :: Set DefaultComponentType
required :: Set DefaultComponentType
$conAdd :: [Hook Name]
onAdd :: [Hook Name]
$conSet :: [Hook Name]
onSet :: [Hook Name]
$conRemove :: [Hook Name]
onRemove :: [Hook Name]
$conAddRel :: [HookRel Name]
onAddRel :: [HookRel Name]
$conSetRel :: [HookRel Name]
onSetRel :: [HookRel Name]
$conRemoveRel :: [HookRel Name]
onRemoveRel :: [HookRel Name]
Component)
  deriving newtype (Name -> Name -> Bool
(Name -> Name -> Bool) -> (Name -> Name -> Bool) -> Eq Name
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Name -> Name -> Bool
== :: Name -> Name -> Bool
$c/= :: Name -> Name -> Bool
/= :: Name -> Name -> Bool
Eq)

instance Show Name where
  show :: Name -> String
  show :: Name -> String
show (Name String
name) = String
name