packages feed

edge-0.8.20: edge.hs

import Data.WrapAround
import Graphics.Gloss.Interface.IO.Game
import Lance
import Resources
import Input
import Universe
import Display
import Step
import Unit
import Unit.Simple.Turret (Turret)
import qualified Unit.Simple.Turret as Turret
import ResourceTracker
import Sound.ALUT
import Data.Maybe
import System.IO
import Data.List ( intersperse )
import Animation
import System.Console.CmdTheLine
import Control.Applicative
import qualified Paths_edge as P
import Data.Version ( showVersion )

displayMode a = InWindow "The Edge" a (0, 0)

sizePassed = value (opt "default"
                     ((optInfo [ "size", "s" ])
                       { optDoc = "assumed screen size, used\
                                  \ in layout of game visuals" }
                     ))

data EdgeOpts = EdgeOpts { size :: Maybe AWS }
  deriving Show

switchboard a = EdgeOpts { size = case a of
                                    "default" -> Just W1024
                                    "1024x768" -> Just W1024
                                    "1280x1024" -> Just W1280
                                    otherwise -> Nothing
                         } 

term = switchboard <$> sizePassed

termInfo = defTI { termName = "edge", version = showVersion P.version }

main = withProgNameAndArgs runALUT $ \progName args ->
         do a <- eval args (term, termInfo)
            case size a of
              Nothing -> ioError (userError
                           "Only 1024x768 and 1280x1024 are acceptable\
                           \ size arguments at this time.")
              Just b -> edge b

edge a = do universe <- initUniverse a
            distanceModel $= audioDistanceModel
   --         listenerPosition $= (Vertex3 0 0 0)
            errs <- get alErrors
            if not (null errs)
              then hPutStrLn
                     stderr
                     (concat
                     (intersperse "," [ d | ALError _ d <- errs ]))
              else return ()
            playMusic (resourceTracker universe)
            playIO
               (displayMode (case a of W1024 -> (1024, 768); W1280 -> (1280, 1024)))
               black 20 universe displayUniverse handleInput stepUniverse

initUniverse b =
  do rt <- initResources
     rLevels <- initLevels rt
     let sArena = head rLevels
     let wmap = Universe.wrapMap sArena
     return Universe { arena = sArena

                         { lance = Just (Lance.new rt wmap
                                          (wrappoint wmap (0, 0)))
                         }

                     , level = 0
                     , Universe.levels = rLevels
                     , lives = 3
                     , delayRemaining = 2.0
                     , resourceTracker = rt
                     , skipLevel = False
                     , levelMessageTimer = Nothing
                     , panelActivationTimer = 0.0
                     , startGameTimer = 0.0
                     , queueBlipSound = True
                     , blipSoundSource = Nothing
                     , aws = b
                     }

playMusic rt =
  do [source] <- genObjectNames 1
     buffer source $= getSound rt "music.wav"
     sourceGain source $= 0.4
     loopingMode source $= Looping
     play [source]