packages feed

layers-game-0.4.1: src/LayersArgs.hs

{-# LANGUAGE DeriveDataTypeable #-}

module LayersArgs where
import System.Console.CmdArgs
import System.IO.Unsafe (unsafePerformIO)
import qualified Ressources as RES

#ifdef CABAL
import Data.Version (showVersion)
import Paths_layers_game (version)
#endif

data LayersArgs = LayersArgs {
   editMode       :: Bool,
   loadLevelsFrom :: FilePath,
   saveLevelsTo   :: FilePath
   } deriving (Data, Typeable, Show, Eq)

initLayersArgs = LayersArgs {
   editMode       = False &= help "Start layers in edit mode",
   loadLevelsFrom = defaultLoadFrom &= help ("Load levels from file (default='" ++ defaultLoadFrom ++ "')") &= typFile,
   saveLevelsTo   = defaultSaveTo   &= help ("Save levels to file (default='" ++ defaultSaveTo ++ "')") &= typFile
   }
   &= program "layers"
   &= summary ""
   &= help "A prototypical 2d platform game."
   &= helpArg [explicit, name "help", name "h"]
   &= versionArg [explicit, name "version", name "v", summary versionInfo ]
   &= details detailsText

detailsText = [
   "Player Controls:",
   "  left/right arrow key = moving left/right",
   "  space/up arrow key   = jumping",
   "  tab key              = switch layer",
   "  q/escape key         = exit game",
   "",
   "Edit Mode:",
   "  a key = add new level after the current one and switch to it",
   "  A key = add new level before the current one and switch to it",
   "  n key = goto next level",
   "  N key = goto previous level",
   "  m key = move current level after the next one",
   "  M key = move current level before the previous one",
   "  l key = reload current level",
   "  s key = save levels to file specified by '-s'",
   "  r key = remove game object under mouse cursor",
   "  p key = place a star at mouse cursor position",
   "  e key = place an enemy at mouse cursor position",
   "  u key = start changing path of platform/enemy under mouse cursor,",
   "          define path points by moving the mouse and clicking",
   "          left mouse button, press 'u' again to end path definition",
   "",
   "  left mouse button + ctrl  = move game object under mouse cursor ",
   "                              (hold mouse button pressed)",
   "  left mouse button + shift = resize platform under mouse cursor ",
   "                              (hold mouse button pressed)",
   "  left mouse button         = define new platform by holding the",
   "                              button pressed and moving the mouse",
   "  mouse wheel               = change scale of orthographic projection"]

defaultSaveTo = "LayersData.hs"
defaultLoadFrom = unsafePerformIO $ RES.getDataFileName "Ressources/Levels.hs"

versionInfo :: String
versionInfo =
#ifdef CABAL
   "layers version " ++ showVersion version
#else
   "layers version unknown (not built with cabal)"
#endif

getLayersArgs :: IO LayersArgs
getLayersArgs = cmdArgs initLayersArgs