#4 Conditions
This commit is contained in:
parent
9addf1ed07
commit
72b460788d
3 changed files with 34 additions and 16 deletions
|
@ -5,8 +5,8 @@ where
|
|||
import GHC.IO (unsafePerformIO)
|
||||
import System.Directory (getDirectoryContents)
|
||||
import RPGEngine.Input.Core (ListSelector(..))
|
||||
import RPGEngine.Data (Action(..), Level (..), Physical (..), Direction (..), Entity (..), Game (..), Item (..), Player (..), State (..), X, Y, Layout, Condition (InventoryFull, InventoryContains, Not, AlwaysFalse))
|
||||
import RPGEngine.Config (levelFolder)
|
||||
import RPGEngine.Data (Action(..), Level (..), Physical (..), Direction (..), Entity (..), Game (..), Item (..), Player (..), State (..), X, Y, Layout, Condition (InventoryFull, InventoryContains, Not, AlwaysFalse), ItemId)
|
||||
import RPGEngine.Config (levelFolder, inventorySize)
|
||||
import Data.Foldable (find)
|
||||
|
||||
------------------------------ Exported ------------------------------
|
||||
|
@ -53,21 +53,33 @@ getActions (Left item) = itemActions item
|
|||
getActions (Right entity) = entityActions entity
|
||||
|
||||
getActionText :: Action -> String
|
||||
getActionText Leave = "Leave"
|
||||
getActionText (RetrieveItem _) = "Pick up"
|
||||
getActionText (UseItem _) = "Use item"
|
||||
getActionText Leave = "Leave"
|
||||
getActionText (RetrieveItem _) = "Pick up"
|
||||
getActionText (UseItem _) = "Use item"
|
||||
getActionText (IncreasePlayerHp _) = "Take a healing potion"
|
||||
getActionText (DecreaseHp _ used) = "Attack using " ++ used
|
||||
getActionText _ = "ERROR"
|
||||
|
||||
-- TODO Check conditions
|
||||
-- Filter based on the conditions, keep only the actions of which the
|
||||
-- conditions are met.
|
||||
filterActions :: [([Condition], Action)] -> [Action]
|
||||
filterActions [] = []
|
||||
filterActions ((conditions, action):others) = action:filterActions others
|
||||
-- Should receive a Playing state
|
||||
filterActions :: State -> [([Condition], Action)] -> [Action]
|
||||
filterActions _ [] = []
|
||||
filterActions s (entry:others) = met entry $ filterActions s others
|
||||
where met (conditions, action) l | all (meetsCondition s) conditions = action:l
|
||||
| otherwise = l
|
||||
|
||||
-- Check if a condition is met or not.
|
||||
meetsCondition :: Condition -> Bool
|
||||
meetsCondition InventoryFull = False -- TODO
|
||||
meetsCondition (InventoryContains id) = True -- TODO
|
||||
meetsCondition (Not condition) = not $ meetsCondition condition
|
||||
meetsCondition AlwaysFalse = False
|
||||
meetsCondition :: State -> Condition -> Bool
|
||||
meetsCondition s InventoryFull = isInventoryFull $ player s
|
||||
meetsCondition s (InventoryContains id) = inventoryContains id $ player s
|
||||
meetsCondition s (Not condition) = not $ meetsCondition s condition
|
||||
meetsCondition _ AlwaysFalse = False
|
||||
|
||||
-- Check if the inventory of the player is full.
|
||||
isInventoryFull :: Player -> Bool
|
||||
isInventoryFull p = inventorySize <= length (inventory p)
|
||||
|
||||
-- Check if the inventory of the player contains an item.
|
||||
inventoryContains :: ItemId -> Player -> Bool
|
||||
inventoryContains id p = any ((== id) . itemId) $ inventory p
|
Reference in a new issue