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