feat(core): add tile registry and terrain properties
This commit is contained in:
1 parent
b36c304505
commit
23ea7ff67f
1 file changed
+53
@@ -0,0 +1,53 @@
|
||||
-- Central registry of tile glyphs and their terrain properties. Every module
|
||||
-- that needs to know whether a cell can be stood on, blocks sight, or is a door
|
||||
-- consults this table instead of hardcoding glyph comparisons.
|
||||
|
||||
local Tiles = {}
|
||||
|
||||
Tiles.WALL = "#"
|
||||
Tiles.FLOOR = "."
|
||||
Tiles.STAIRS_DOWN = ">"
|
||||
Tiles.STAIRS_UP = "<"
|
||||
Tiles.DOOR_CLOSED = "+"
|
||||
Tiles.DOOR_OPEN = "'"
|
||||
Tiles.DOOR_LOCKED = "x"
|
||||
Tiles.TRAP = "^"
|
||||
Tiles.WATER = "~"
|
||||
Tiles.RUBBLE = ":"
|
||||
|
||||
local props = {
|
||||
[Tiles.WALL] = { walkable = false, blocksSight = true, door = false },
|
||||
[Tiles.FLOOR] = { walkable = true, blocksSight = false, door = false },
|
||||
[Tiles.STAIRS_DOWN] = { walkable = true, blocksSight = false, door = false },
|
||||
[Tiles.STAIRS_UP] = { walkable = true, blocksSight = false, door = false },
|
||||
[Tiles.DOOR_CLOSED] = { walkable = false, blocksSight = true, door = true },
|
||||
[Tiles.DOOR_LOCKED] = { walkable = false, blocksSight = true, door = true, locked = true },
|
||||
[Tiles.DOOR_OPEN] = { walkable = true, blocksSight = false, door = true },
|
||||
[Tiles.TRAP] = { walkable = true, blocksSight = false, door = false },
|
||||
[Tiles.WATER] = { walkable = true, blocksSight = false, door = false },
|
||||
[Tiles.RUBBLE] = { walkable = true, blocksSight = false, door = false },
|
||||
}
|
||||
|
||||
local wallProps = props[Tiles.WALL]
|
||||
|
||||
function Tiles.of(glyph)
|
||||
return props[glyph] or wallProps
|
||||
end
|
||||
|
||||
function Tiles.isWalkable(glyph)
|
||||
return Tiles.of(glyph).walkable
|
||||
end
|
||||
|
||||
function Tiles.blocksSight(glyph)
|
||||
return Tiles.of(glyph).blocksSight
|
||||
end
|
||||
|
||||
function Tiles.isDoor(glyph)
|
||||
return Tiles.of(glyph).door
|
||||
end
|
||||
|
||||
function Tiles.isClosedDoor(glyph)
|
||||
return glyph == Tiles.DOOR_CLOSED or glyph == Tiles.DOOR_LOCKED
|
||||
end
|
||||
|
||||
return Tiles
|
||||
Reference in new issue
Block a user