#4 Added player and object data types

This commit is contained in:
Tibo De Peuter 2022-12-15 18:08:33 +01:00
parent 0257bb8220
commit 4c1f25e49d
3 changed files with 80 additions and 1 deletions

61
lib/data/Internals.hs Normal file
View 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
View 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]
}

View file

@ -11,8 +11,11 @@ library
gloss >= 1.11 && < 1.14, gloss-juicy >= 0.2.3
exposed-modules:
RPGEngine,
-- Control
Input, InputHandling,
Game, State,
-- Data
Game, Internals, Player, State,
-- Render
Render
executable rpg-engine