From f9e512a5e6e2365b5af2645b717f55ff1661fd7b 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: Mon, 4 May 2026 10:52:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(ArrayTool):=20=E6=B7=BB=E5=8A=A0=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E5=A1=AB=E5=85=85=E5=B7=A5=E5=85=B7=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor(OutGameStorage): 重构升级字段初始化逻辑 使用新的ArrayTool.fill方法简化字典初始化,提高代码可读性 fix(EntityBase): 调整boss死亡掉落物品数量 将boss掉落水晶数量上限从20降低到10,钻石掉落数量改为1-3随机 fix(Starter): 修复升级成本计算逻辑 根据新的升级成本数据结构调整升级显示计算方式 --- scripts/Contents/Panels/Starter.gd | 6 ++++-- scripts/Statemachine/EntityBase.gd | 4 ++-- scripts/Tools/ArrayTool.gd | 7 +++++++ scripts/Tools/OutGameStorage.gd | 29 ++++++++--------------------- 4 files changed, 21 insertions(+), 25 deletions(-) diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index 1c59ba5..438b9fb 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -175,8 +175,10 @@ func rebuildInfo(): upgradeFieldsBox.remove_child(child) for field in OutGameStorage.upgradableFieldsAdvance: var fieldShow = ComponentManager.getUIComponent("FieldShow").instantiate() as FieldShow - fieldShow.cost(ItemStore.ItemType.CRYSTAL, OutGameStorage.upgradableFieldsCost[ItemStore.ItemType.CRYSTAL] * (OutGameStorage.upgradableFieldsLevel[field] + 1)) - fieldShow.cost(ItemStore.ItemType.DIAMOND, OutGameStorage.upgradableFieldsCost[ItemStore.ItemType.DIAMOND] * OutGameStorage.upgradableFieldsLevel[field]) + var level = OutGameStorage.upgradableFieldsLevel[field] + for item in OutGameStorage.upgradableFieldsCost: + var count = OutGameStorage.upgradableFieldsCost[item] + fieldShow.cost(item, count[0] * (level + count[1])) fieldShow.upgradable = true fieldShow.upgradeValue = OutGameStorage.upgradableFieldsAdvance[field] fieldShow.field = field diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index d5d14ae..d492991 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -419,7 +419,7 @@ func tryDie(by: BulletBase = null): fields[FieldStore.Entity.MAX_HEALTH] * randf_range(1 - GameRule.beachballOffset, 1 + GameRule.beachballOffset), position + MathTool.sampleInCircle(GameRule.itemDroppedSpawnOffset) ) - for i in randi_range(0, 20 if isBoss else 3): + for i in randi_range(0, 10 if isBoss else 3): ItemDropped.generate( ItemStore.ItemType.CRYSTAL, 5 if isBoss else 1, @@ -428,7 +428,7 @@ func tryDie(by: BulletBase = null): if isBoss: ItemDropped.generate( ItemStore.ItemType.DIAMOND, - 1, + randi_range(1, 3), position + MathTool.sampleInCircle(GameRule.itemDroppedSpawnOffset) ) if isBoss: diff --git a/scripts/Tools/ArrayTool.gd b/scripts/Tools/ArrayTool.gd index bd3c22f..b43225d 100644 --- a/scripts/Tools/ArrayTool.gd +++ b/scripts/Tools/ArrayTool.gd @@ -24,3 +24,10 @@ static func betterMap(arr: Array, executor: Callable) -> Array: for index in len(arr): result.append(executor.call(arr[index], index, arr)) return result +static func fill(origin: Dictionary, filler: Callable) -> Dictionary: + return origin.keys().reduce( + func(accum, key): + accum[key] = filler.call(key) + return accum, + {} + ) diff --git a/scripts/Tools/OutGameStorage.gd b/scripts/Tools/OutGameStorage.gd index 094525f..4202d67 100644 --- a/scripts/Tools/OutGameStorage.gd +++ b/scripts/Tools/OutGameStorage.gd @@ -1,15 +1,8 @@ class_name OutGameStorage -static var maxInitialFeedCount: int = 3 -static var maxInitialWeaponCount: int = 3 -static var inventory = { - ItemStore.ItemType.CRYSTAL: 0, - ItemStore.ItemType.DIAMOND: 0 -} - static var upgradableFieldsCost = { - ItemStore.ItemType.CRYSTAL: 50, - ItemStore.ItemType.DIAMOND: 1, + ItemStore.ItemType.CRYSTAL: [50, 1], # [每级所需,初始等级] + ItemStore.ItemType.DIAMOND: [1, 0], } static var upgradableFieldsAdvance = { FieldStore.Entity.MAX_HEALTH: 10, @@ -17,15 +10,9 @@ static var upgradableFieldsAdvance = { FieldStore.Entity.ATTACK_SPEED: 0.05, FieldStore.Entity.PRICE_REDUCTION: 0.02, } -static var upgradableFieldsValue = { - FieldStore.Entity.MAX_HEALTH: 0, - FieldStore.Entity.DAMAGE_MULTIPILER: 0, - FieldStore.Entity.ATTACK_SPEED: 0, - FieldStore.Entity.PRICE_REDUCTION: 0, -} -static var upgradableFieldsLevel = { - FieldStore.Entity.MAX_HEALTH: 0, - FieldStore.Entity.DAMAGE_MULTIPILER: 0, - FieldStore.Entity.ATTACK_SPEED: 0, - FieldStore.Entity.PRICE_REDUCTION: 0, -} \ No newline at end of file +static var upgradableFieldsValue = ArrayTool.fill(upgradableFieldsAdvance, func(_k): return 0) +static var upgradableFieldsLevel = ArrayTool.fill(upgradableFieldsAdvance, func(_k): return 0) + +static var maxInitialFeedCount: int = 3 +static var maxInitialWeaponCount: int = 3 +static var inventory = ArrayTool.fill(upgradableFieldsCost, func(_k): return 0)