From 23ea7ff67fcd0ba96e5de61809825aa7d628e0ee Mon Sep 17 00:00:00 2001 From: DualFroz Date: Sun, 23 Aug 2026 14:28:00 +0200 Subject: [PATCH] feat(core): add tile registry and terrain properties --- src/tiles.lua | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/tiles.lua diff --git a/src/tiles.lua b/src/tiles.lua new file mode 100644 index 0000000..9a5fa42 --- /dev/null +++ b/src/tiles.lua @@ -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