#4 Added player and object data types
This commit is contained in:
parent
0257bb8220
commit
4c1f25e49d
3 changed files with 80 additions and 1 deletions
61
lib/data/Internals.hs
Normal file
61
lib/data/Internals.hs
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
-- Represents an item in the game.
|
||||||
|
|
||||||
|
module Internals
|
||||||
|
( Action(..)
|
||||||
|
, Object(..)
|
||||||
|
) where
|
||||||
|
|
||||||
|
----------------------------- Constants ------------------------------
|
||||||
|
|
||||||
|
data Object =
|
||||||
|
Item { -- All fields are required
|
||||||
|
-- Easy way to identify items
|
||||||
|
id :: String,
|
||||||
|
-- Horizontal coördinate in the level
|
||||||
|
x :: Int,
|
||||||
|
-- Vertical coördinate in the level
|
||||||
|
y :: Int,
|
||||||
|
name :: String,
|
||||||
|
-- Short description of the object
|
||||||
|
description :: String,
|
||||||
|
-- Counts how often the object can be used by the player. Either
|
||||||
|
-- infinite or a natural number
|
||||||
|
useTimes :: Maybe Int,
|
||||||
|
-- List of conditional actions when the player is standing on this object
|
||||||
|
actions :: [Action],
|
||||||
|
-- Interpretation depends on action with this object.
|
||||||
|
value :: Maybe Int
|
||||||
|
}
|
||||||
|
| Entity {
|
||||||
|
-- Required fields
|
||||||
|
-- Easy way to identify items
|
||||||
|
id :: String,
|
||||||
|
-- Horizontal coördinate in the level
|
||||||
|
x :: Int,
|
||||||
|
-- Vertical coördinate in the level
|
||||||
|
y :: Int,
|
||||||
|
name :: String,
|
||||||
|
-- Short description of the object
|
||||||
|
description :: String,
|
||||||
|
-- List of conditional actions when the player is standing on this object
|
||||||
|
actions :: [Action],
|
||||||
|
-- Optional fields
|
||||||
|
-- The direction of the item. e.g. a door has a direction.
|
||||||
|
direction :: Maybe Direction,
|
||||||
|
-- Some entities have health points.
|
||||||
|
hp :: Maybe Int,
|
||||||
|
-- Interpretation depends on action with this object.
|
||||||
|
value :: Maybe Int
|
||||||
|
}
|
||||||
|
|
||||||
|
data Direction = North
|
||||||
|
| East
|
||||||
|
| South
|
||||||
|
| West
|
||||||
|
deriving (Show)
|
||||||
|
|
||||||
|
type Action = ([Condition], Event)
|
||||||
|
|
||||||
|
type Condition = Bool
|
||||||
|
|
||||||
|
type Event = *
|
15
lib/data/Player.hs
Normal file
15
lib/data/Player.hs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
-- Represents a player in the game. This player can move around, pick
|
||||||
|
-- up items and interact with the world.
|
||||||
|
|
||||||
|
module Player
|
||||||
|
( Player(..)
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Internals
|
||||||
|
|
||||||
|
----------------------------- Constants ------------------------------
|
||||||
|
|
||||||
|
data Player = Player {
|
||||||
|
hp :: Int,
|
||||||
|
inventory :: [Object]
|
||||||
|
}
|
|
@ -11,8 +11,11 @@ library
|
||||||
gloss >= 1.11 && < 1.14, gloss-juicy >= 0.2.3
|
gloss >= 1.11 && < 1.14, gloss-juicy >= 0.2.3
|
||||||
exposed-modules:
|
exposed-modules:
|
||||||
RPGEngine,
|
RPGEngine,
|
||||||
|
-- Control
|
||||||
Input, InputHandling,
|
Input, InputHandling,
|
||||||
Game, State,
|
-- Data
|
||||||
|
Game, Internals, Player, State,
|
||||||
|
-- Render
|
||||||
Render
|
Render
|
||||||
|
|
||||||
executable rpg-engine
|
executable rpg-engine
|
||||||
|
|
Reference in a new issue