feat: extend level with Level:entityById and Level:shrineAt

This commit is contained in:
dualfroz committed 2026-09-07 12:08:31 +02:00
1 parent 9a647af6e3
commit d273ea8e32
1 file changed
+148
+148
View File
@@ -18,6 +18,25 @@ function Level.new(fields)
floorItems = fields.floorItems or {}, floorItems = fields.floorItems or {},
traps = fields.traps or {}, traps = fields.traps or {},
lights = fields.lights or {}, lights = fields.lights or {},
hazards = fields.hazards or {},
shrines = fields.shrines or {},
questBoards = fields.questBoards or {},
cauldrons = fields.cauldrons or {},
nodes = fields.nodes or {},
corpses = fields.corpses or {},
chests = fields.chests or {},
captives = fields.captives or {},
vaultLevers = fields.vaultLevers or {},
vaultDoors = fields.vaultDoors or {},
secretDoors = fields.secretDoors or {},
blocks = fields.blocks or {},
plates = fields.plates or {},
gates = fields.gates or {},
prefabVaults = fields.prefabVaults or {},
rifts = fields.rifts or {},
weather = fields.weather,
biome = fields.biome,
event = fields.event,
dark = fields.dark or false, dark = fields.dark or false,
explored = fields.explored or {}, explored = fields.explored or {},
upX = fields.upX, upY = fields.upY, upX = fields.upX, upY = fields.upY,
@@ -34,6 +53,13 @@ function Level:entityAt(x, y)
return nil return nil
end end
function Level:entityById(id)
for _, entity in ipairs(self.entities) do
if entity.id == id then return entity end
end
return nil
end
function Level:trapAt(x, y) function Level:trapAt(x, y)
for _, trap in ipairs(self.traps) do for _, trap in ipairs(self.traps) do
if trap.x == x and trap.y == y then return trap end if trap.x == x and trap.y == y then return trap end
@@ -41,6 +67,90 @@ function Level:trapAt(x, y)
return nil return nil
end end
function Level:shrineAt(x, y)
for _, shrine in ipairs(self.shrines) do
if shrine.x == x and shrine.y == y then return shrine end
end
return nil
end
function Level:questBoardAt(x, y)
for _, board in ipairs(self.questBoards) do
if board.x == x and board.y == y then return board end
end
return nil
end
function Level:cauldronAt(x, y)
for _, cauldron in ipairs(self.cauldrons) do
if cauldron.x == x and cauldron.y == y then return cauldron end
end
return nil
end
function Level:nodeAt(x, y)
for _, node in ipairs(self.nodes) do
if node.x == x and node.y == y then return node end
end
return nil
end
function Level:corpseAt(x, y)
for _, corpse in ipairs(self.corpses) do
if corpse.x == x and corpse.y == y then return corpse end
end
return nil
end
function Level:chestAt(x, y)
for _, chest in ipairs(self.chests) do
if chest.x == x and chest.y == y then return chest end
end
return nil
end
function Level:captiveAt(x, y)
for _, captive in ipairs(self.captives) do
if captive.x == x and captive.y == y then return captive end
end
return nil
end
function Level:vaultLeverAt(x, y)
for _, lever in ipairs(self.vaultLevers) do
if lever.x == x and lever.y == y then return lever end
end
return nil
end
function Level:blockAt(x, y)
for _, block in ipairs(self.blocks) do
if block.x == x and block.y == y then return block end
end
return nil
end
function Level:plateAt(x, y)
for _, plate in ipairs(self.plates) do
if plate.x == x and plate.y == y then return plate end
end
return nil
end
function Level:gateAt(x, y)
for _, gate in ipairs(self.gates) do
if gate.x == x and gate.y == y then return gate end
end
return nil
end
function Level:riftAt(x, y)
for _, rift in ipairs(self.rifts) do
if rift.x == x and rift.y == y then return rift end
end
return nil
end
function Level:itemsAt(x, y) function Level:itemsAt(x, y)
local here = {} local here = {}
for _, ground in ipairs(self.floorItems) do for _, ground in ipairs(self.floorItems) do
@@ -79,6 +189,25 @@ function Level:toData()
floorItems = self.floorItems, floorItems = self.floorItems,
traps = self.traps, traps = self.traps,
lights = self.lights, lights = self.lights,
hazards = self.hazards,
shrines = self.shrines,
questBoards = self.questBoards,
cauldrons = self.cauldrons,
nodes = self.nodes,
corpses = self.corpses,
chests = self.chests,
captives = self.captives,
vaultLevers = self.vaultLevers,
vaultDoors = self.vaultDoors,
secretDoors = self.secretDoors,
blocks = self.blocks,
plates = self.plates,
gates = self.gates,
prefabVaults = self.prefabVaults,
rifts = self.rifts,
weather = self.weather,
biome = self.biome,
event = self.event,
dark = self.dark, dark = self.dark,
explored = explored, explored = explored,
upX = self.upX, upY = self.upY, upX = self.upX, upY = self.upY,
@@ -103,6 +232,25 @@ function Level.fromData(snapshot)
floorItems = snapshot.floorItems, floorItems = snapshot.floorItems,
traps = snapshot.traps, traps = snapshot.traps,
lights = snapshot.lights, lights = snapshot.lights,
hazards = snapshot.hazards,
shrines = snapshot.shrines,
questBoards = snapshot.questBoards,
cauldrons = snapshot.cauldrons,
nodes = snapshot.nodes,
corpses = snapshot.corpses,
chests = snapshot.chests,
captives = snapshot.captives,
vaultLevers = snapshot.vaultLevers,
vaultDoors = snapshot.vaultDoors,
secretDoors = snapshot.secretDoors,
blocks = snapshot.blocks,
plates = snapshot.plates,
gates = snapshot.gates,
prefabVaults = snapshot.prefabVaults,
rifts = snapshot.rifts,
weather = snapshot.weather,
biome = snapshot.biome,
event = snapshot.event,
dark = snapshot.dark, dark = snapshot.dark,
explored = explored, explored = explored,
upX = snapshot.upX, upY = snapshot.upY, upX = snapshot.upX, upY = snapshot.upY,