{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Game ( Bullet(..) , bulletX , bulletY , GameState(..) ) where import Level import Tank import Vector data Bullet = Bullet { bulletPos :: !Vertex , bulletDir :: !Rotation , bulletSpeed :: !Coord , bulletBouncesLeft :: !Int , bulletTank :: !Int } deriving (Eq, Show) bulletX :: Bullet -> Coord bulletX = vertexX . bulletPos bulletY :: Bullet -> Coord bulletY = vertexY . bulletPos instance Transformable Bullet where transform t b = b { bulletPos = pos, bulletDir = dir } where pos = t >< bulletPos b dir = t >< bulletDir b data GameState = GameState { level :: !Level , tanks :: ![Tank] , bullets :: ![Bullet] } deriving (Show)