From 84d286e2c5964ee30cf42f2bbc1596389b0a35be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Sun, 21 Sep 2025 14:47:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=BB=84=E4=BB=B6=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E7=BB=84=E4=BB=B6=E5=8A=A0=E8=BD=BD=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=B9=B6=E6=B7=BB=E5=8A=A0=E4=BC=98=E5=85=88=E7=BA=A7?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构ComponentManager的get方法,使用MathTool.priority函数实现资源加载的优先级逻辑 将Wave类中的entity类型从PackedScene改为String,延迟加载角色资源 添加MathTool.priority静态方法用于处理空值情况 --- scripts/Contents/Wave.gd | 22 ++++++++-------- scripts/Tools/Managers/ComponentManager.gd | 30 ++++++++++++---------- scripts/Tools/MathTool.gd | 2 ++ 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/scripts/Contents/Wave.gd b/scripts/Contents/Wave.gd index d97cfe9..c87b5fc 100644 --- a/scripts/Contents/Wave.gd +++ b/scripts/Contents/Wave.gd @@ -1,6 +1,6 @@ class_name Wave -var entity: PackedScene +var entity: String var minCount: int = 1 var maxCount: int = 1 var isBoss: bool = false @@ -10,18 +10,18 @@ var per: int = 0 static var current: int = 0 static var WAVE_NORMAL = [ - Wave.create(ComponentManager.getCharacter("Hen"), 1, 5, false, 0, INF, 1), - Wave.create(ComponentManager.getCharacter("Chick"), 0, 0, true, 9, INF, 15), - Wave.create(ComponentManager.getCharacter("Bear"), 0, 0, true, 19, INF, 10), - Wave.create(ComponentManager.getCharacter("KukeMC"), 0, 0, true, 14, INF, 20), + Wave.create("Hen", 1, 5, false, 0, INF, 1), + Wave.create("Chick", 0, 0, true, 9, INF, 15), + Wave.create("Bear", 0, 0, true, 19, INF, 10), + Wave.create("KukeMC", 0, 0, true, 14, INF, 20), ] static var WAVE_TESTBOSS_ALL = [ - Wave.create(ComponentManager.getCharacter("Chick"), 0, 0, true, 0, INF, 10), - Wave.create(ComponentManager.getCharacter("KukeMC"), 0, 0, true, 1, INF, 10), - Wave.create(ComponentManager.getCharacter("Bear"), 0, 0, true, 2, INF, 10), + Wave.create("Chick", 0, 0, true, 0, INF, 10), + Wave.create("KukeMC", 0, 0, true, 1, INF, 10), + Wave.create("Bear", 0, 0, true, 2, INF, 10), ] static var WAVE_TESTBOSS_KUKE = [ - Wave.create(ComponentManager.getCharacter("KukeMC"), 0, 0, true, 0, INF, 10), + Wave.create("KukeMC", 0, 0, true, 0, INF, 10), ] static var WAVE_EMPTY = [] static var data = WAVE_NORMAL @@ -33,7 +33,7 @@ static func customStart(): furryr.currentFocusedBoss = kukemc kukemc.currentFocusedBoss = furryr static func create( - entity_: PackedScene, + entity_: String, minCount_: int = 1, maxCount_: int = 1, isBoss_: bool = false, @@ -61,7 +61,7 @@ static func spawn(): for i in range(len(data)): var wave = data[i] for j in range(entityCountOf(wave)): - EntityBase.generate(wave.entity, MathTool.randv2_range(500), true, wave.isBoss) + EntityBase.generate(ComponentManager.getCharacter(wave.entity), MathTool.randv2_range(500), true, wave.isBoss) static func next(): if current == 0: customStart() diff --git a/scripts/Tools/Managers/ComponentManager.gd b/scripts/Tools/Managers/ComponentManager.gd index d3672fc..7846182 100644 --- a/scripts/Tools/Managers/ComponentManager.gd +++ b/scripts/Tools/Managers/ComponentManager.gd @@ -28,17 +28,19 @@ static func init(): themes[DirTool.getBasenameWithoutExtension(i)] = load(i) for i in DirTool.listdir("res://resources/items"): itemTextures[DirTool.getBasenameWithoutExtension(i)] = load(i) -static func getBullet(t: String): - return bullets[t] -static func getCharacter(t: String): - return characters[t] -static func getEffect(t: String): - return effects[t] -static func getFeed(i: int): - return feeds[i] -static func getUIComponent(t: String): - return uiComponents[t] -static func getTheme(t: String): - return themes[t] -static func getItemTexture(t: String): - return itemTextures[t] +static func getBullet(t: String) -> PackedScene: + return MathTool.priority(bullets.get(t, false), load("res://components/Bullets/%s.tscn" % t)) +static func getCharacter(t: String) -> PackedScene: + return MathTool.priority(characters.get(t, false), load("res://components/Characters/%s.tscn" % t)) +static func getEffect(t: String) -> PackedScene: + return MathTool.priority(effects.get(t, false), load("res://components/Effects/%s.tscn" % t)) +static func getFeed(i: int) -> PackedScene: + if i >= 0 and i < feeds.size(): + return feeds[i] + return null +static func getUIComponent(t: String) -> PackedScene: + return MathTool.priority(uiComponents.get(t, false), load("res://components/UI/%s.tscn" % t)) +static func getTheme(t: String) -> Theme: + return MathTool.priority(themes.get(t, false), load("res://themes/%s.tscn" % t)) +static func getItemTexture(t: String) -> Texture2D: + return MathTool.priority(itemTextures.get(t, false), load("res://resources/items/%s.svg" % t)) diff --git a/scripts/Tools/MathTool.gd b/scripts/Tools/MathTool.gd index d5084d5..dbc5219 100644 --- a/scripts/Tools/MathTool.gd +++ b/scripts/Tools/MathTool.gd @@ -34,3 +34,5 @@ static func getClosestIntersection(a: Vector2, b: Vector2, r: float) -> Vector2: return b var intersection = a + abNormalized * r return intersection +static func priority(a, b): + return a if a else b