packages feed

layers-game-0.3: src/Entity/Position.hs

module Entity.Position where
import qualified Data.List as L
import qualified GameData.Entity as E
import qualified GameData.Animation as A
import qualified Gamgine.Math.Vect as V


currentPosition :: E.Entity -> V.Vect
currentPosition E.Player   {E.playerPosition   =       pos} = pos
currentPosition E.Enemy    {E.enemyPosition    = Left  pos} = pos
currentPosition E.Enemy    {E.enemyPosition    = Right ani} = A.currentPosition ani
currentPosition E.Star     {E.starPosition     =       pos} = pos
currentPosition E.Platform {E.platformPosition = Left  pos} = pos
currentPosition E.Platform {E.platformPosition = Right ani} = A.currentPosition ani


setCurrentPosition :: E.Entity -> V.Vect -> E.Entity
setCurrentPosition p@E.Player {} newPos = p {E.playerPosition = newPos}

setCurrentPosition e@E.Enemy {E.enemyPosition = Left _} newPos =
   e {E.enemyPosition = Left newPos}

setCurrentPosition e@E.Enemy {E.enemyPosition = Right ani} newPos =
   e {E.enemyPosition = Right ani {A.currentPosition = newPos}}

setCurrentPosition s@E.Star   {} newPos = s {E.starPosition   = newPos}

setCurrentPosition p@E.Platform {E.platformPosition = Left _} newPos =
   p {E.platformPosition = Left newPos}

setCurrentPosition p@E.Platform {E.platformPosition = Right ani} newPos =
   p {E.platformPosition = Right ani {A.currentPosition = newPos}}


position :: E.Entity -> V.Vect
position E.Enemy    {E.enemyPosition    = Right ani} = A.basePosition ani
position E.Platform {E.platformPosition = Right ani} = A.basePosition ani
position entity                                      = currentPosition entity


setPosition :: E.Entity -> V.Vect -> E.Entity
setPosition p@E.Player {} newPos = p {E.playerInitialPos = newPos, E.playerPosition = newPos}

setPosition e@E.Enemy {E.enemyPosition = Right ani} newPos =
   e {E.enemyPosition = Right $ A.setBasePosition ani newPos}

setPosition p@E.Platform {E.platformPosition = Right ani} newPos =
   p {E.platformPosition = Right $ A.setBasePosition ani newPos}

setPosition entity newPos = setCurrentPosition entity newPos