Restructuring, #9
This commit is contained in:
parent
2055ef234e
commit
dab6fadad4
41 changed files with 941 additions and 680 deletions
36
lib/RPGEngine/Data/Level.hs
Normal file
36
lib/RPGEngine/Data/Level.hs
Normal file
|
@ -0,0 +1,36 @@
|
|||
module RPGEngine.Data.Level
|
||||
-- Everything is exported
|
||||
where
|
||||
|
||||
import GHC.IO (unsafePerformIO)
|
||||
import System.Directory (getDirectoryContents)
|
||||
import RPGEngine.Input.Core (ListSelector(..))
|
||||
import RPGEngine.Data (Level (..), Physical (..), Direction (..), Entity (..), Game (..), Item (..), Player (..), StateBase (..), State (..), X, Y, Layout)
|
||||
import RPGEngine.Config (levelFolder)
|
||||
|
||||
------------------------------ Exported ------------------------------
|
||||
|
||||
-- Find first position of a Physical
|
||||
-- Graceful exit by giving Nothing if there is nothing found.
|
||||
findFirstOf :: Level -> Physical -> Maybe (X, Y)
|
||||
findFirstOf l@Level{ index = index } physical = try
|
||||
where matches = filter (\(x, y, v) -> v == physical) index
|
||||
try | not (null matches) = Just $ (\(x, y, _) -> (x, y)) $ head matches
|
||||
| otherwise = Nothing
|
||||
|
||||
-- What is located at a given position in the level?
|
||||
findAt :: (X, Y) -> Level -> Physical
|
||||
findAt pos lvl@Level{ index = index } = try
|
||||
where matches = map (\(_, _, v) -> v) $ filter (\(x, y, v) -> (x, y) == pos) index
|
||||
try | not (null matches) = head matches
|
||||
| otherwise = Void
|
||||
|
||||
directionOffsets :: Direction -> (X, Y)
|
||||
directionOffsets North = ( 0, 1)
|
||||
directionOffsets East = ( 1, 0)
|
||||
directionOffsets South = ( 0, -1)
|
||||
directionOffsets West = (-1, 0)
|
||||
directionOffsets Stay = ( 0, 0)
|
||||
|
||||
getLevelList :: [FilePath]
|
||||
getLevelList = drop 2 $ unsafePerformIO $ getDirectoryContents levelFolder
|
Reference in a new issue