summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEltrac <hi@guhub.cn>2025-03-14 14:44:17 +0800
committerEltrac <hi@guhub.cn>2025-03-14 14:44:17 +0800
commitf0472a953b2e3222600f91ed003208278f44dea4 (patch)
tree8ecc2bb14e98c6fc3770a9acc6b4341fa6bf84d7
parent28275c7d8b841e66fd641dbd7f7ad45844ecf394 (diff)
refactor: move beforeClear actions
-rw-r--r--logic/map.lua13
-rw-r--r--objects/room.lua31
2 files changed, 9 insertions, 35 deletions
diff --git a/logic/map.lua b/logic/map.lua
index 5da6a43..1a546be 100644
--- a/logic/map.lua
+++ b/logic/map.lua
@@ -3,6 +3,7 @@ local mapGen = require "logic.MapGenerator"
local roomType = require "data.roomType"
local translator = require "i18n.translator"
local audio = require "utils.audio"
+local MobSpawn = require "logic.MobSpawn"
local map = {}
@@ -39,16 +40,18 @@ end
function map.update()
local room = G.currentRoom
- -- check if room is cleared
- if #G.currentRoom.objects.enemies==0 and not room.isCleared then
+ -- if room's cleared once or in a wave currently
+ -- try to summon mob waves
+ local waveGoingOn = room.currentWave and room.currentWave <= MobSpawn.waveNumber(room)
+ if (#room.objects.enemies==0 or waveGoingOn) and not room.isCleared then
-- do not clear room if beforeClear event is not finished
- if G.currentRoom.type == roomType.COMBAT
- and not G.currentRoom:beforeClear() then
+ if room.type == roomType.COMBAT
+ and not MobSpawn.waves(G.currentRoom) then
return
end
-- if after beforeClear event, there no enemy left_x
-- then consider room cleared
- if #G.currentRoom.objects.enemies==0 then
+ if #room.objects.enemies==0 and not room.currentWave then
room.isCleared = true
-- handle post-clear actions
if room.type ~= roomType.INITIAL then
diff --git a/objects/room.lua b/objects/room.lua
index aacbe30..96d6438 100644
--- a/objects/room.lua
+++ b/objects/room.lua
@@ -3,7 +3,7 @@ local roomData = require "data.roomData"
local roomNames = require "data.roomNames"
local roomType = require "data.roomType"
local Door = require "objects.door"
-local Enemy = require "objects.enemy"
+local MobSpawn = require "logic.MobSpawn"
local audio = require "utils.audio"
local mapHelper = require "utils.mapHelper"
local translator = require "i18n.translator"
@@ -227,35 +227,6 @@ function Room:addWalls()
return walls
end
-function Room:spawnWave(wave)
- for _, enemyName in ipairs(wave) do
- local enemy = Enemy:new(enemyName, "anyDoor")
- table.insert(self.objects.enemies, enemy)
- enemy:placeInRoom(self)
- end
-end
-
-function Room:beforeClear()
- local data = roomData[self.dataName]
- -- if waves are set, handle waves
- if data.waves then
- if not self.currentWave then
- self.currentWave = 1
- -- spawn next wave
- elseif self.currentWave <= #data.waves then
- local waveData = data.waves[self.currentWave]
- speaker.speak(translator.T(waveData.message or "waveStart"))
- self:spawnWave(waveData.mobs)
- self.currentWave = self.currentWave + 1
- else
- self.currentWave = nil
- return true -- return true if all waves are cleared
- end
- return false
- end
-
- return true
-end
function Room:init()
-- handle objects that need to be placed