38 lines
812 B
Haskell
38 lines
812 B
Haskell
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
|
|
|
module Game ( Bullet(..)
|
|
, bulletX
|
|
, bulletY
|
|
, GameState(..)
|
|
) where
|
|
|
|
import Level
|
|
import Tank
|
|
import Transformable
|
|
import Vector
|
|
|
|
|
|
data Bullet = Bullet
|
|
{ bulletPos :: !Vertex
|
|
, bulletDir :: !Vector
|
|
, 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
|
|
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)
|