{-| Module : Universe Description : Defines the game state Copyright : (c) Christopher Howard, 2016 License : GPL-3 Maintainer : ch.howard@zoho.com -} module Universe where import Prelude (Double, Bool(..), Maybe(..), Integer, Int) import Data.WrapAround ( WP, WM, wrappoint, wrapmap ) import Sound.ALUT ( Source ) import Lance import Star import SpaceJunk import Combat import AfterEffect import Unit import ResourceTracker import Item import Common import AWS data Arena = Arena { lance :: Maybe Lance , focus :: WP , wrapMap :: WM , asteroids :: [SpaceJunk] , lanceProjectiles :: [Projectile] , afterFX :: [AfterEffect] , simpleUnits :: [SimpleUnit] , smartUnits :: [SmartUnit] , unitProjectiles :: [Projectile] , items :: [Item] } data Universe = Universe { arena :: Arena , level :: Int , levels :: [Arena] , lives :: Integer , delayRemaining :: Double , resourceTracker :: ResourceTracker , skipLevel :: Bool , levelMessageTimer :: Maybe Time , panelActivationTimer :: Time , startGameTimer :: Time , queueBlipSound :: Bool , blipSoundSource :: Maybe Source , aws :: AWS } blankArena width height = let wmap = wrapmap width height in Arena { lance = Nothing , focus = wrappoint wmap (0, 0) , Universe.wrapMap = wmap , asteroids = [] , lanceProjectiles = [] , afterFX = [] , simpleUnits = [] , smartUnits = [] , unitProjectiles = [] , items = [] }