feat: extend level with Level:entityById and Level:shrineAt
This commit is contained in:
1 parent
9a647af6e3
commit
d273ea8e32
1 file changed
+148
+148
@@ -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,
|
||||||
|
|||||||
Reference in new issue
Block a user