Files
warren/src/tiles.lua
T

54 lines
1.7 KiB
Lua

-- 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