54 lines
1.7 KiB
Lua
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
|