module Game.Entities.Types ( Dir (..), Type (..), Collision, IsBlocked, Entities (..), Spawn (..), Entity (..), ) where import Data.IORef import qualified Game.Sprites as S import qualified Game.State as GS data Dir = DirRight | DirLeft deriving (Eq) data Type = TypePlayer | TypePickup | TypeEffect | TypeEnemy type Collision = Entity -> IO Bool type IsBlocked = Int -> Int -> Bool data Entities = Entities { sprites :: S.SpriteSheet, player :: IORef Entity, state :: IORef GS.State, entities :: [Entity] } data Spawn = DustEffectSpawn Int Int data Entity = Entity { typ :: Type, x :: Int, y :: Int, delay :: Int, frame :: Int, jumping :: Bool, gravity :: Int, dir :: Dir, sprite :: S.Sprite, update :: Entity -> IO Entity, destroy :: Bool, spawns :: [Spawn] }