From 91eeeaaeeaca09941daa0af37a459ec9970542bb Mon Sep 17 00:00:00 2001 From: SepComet <2428390463@qq.com> Date: Sat, 7 Mar 2026 14:42:19 +0800 Subject: [PATCH] =?UTF-8?q?refactor=203:=20-=20EnemyManager.cs=20=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E8=AE=A1=E7=AE=97=20droppedCoin=20/=20droppedGold=20/?= =?UTF-8?q?=20baseDamage=EF=BC=8C=E5=8F=AA=E5=9C=A8=E6=95=8C=E4=BA=BA?= =?UTF-8?q?=E9=9A=90=E8=97=8F=E5=AE=8C=E6=88=90=E5=90=8E=E5=8C=BA=E5=88=86?= =?UTF-8?q?=E2=80=9C=E5=87=BB=E6=9D=80=E2=80=9D=E8=BF=98=E6=98=AF=E2=80=9C?= =?UTF-8?q?=E9=9D=9E=E5=87=BB=E6=9D=80=E5=88=B0=E5=AE=B6=E2=80=9D=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E6=8A=8A=20DREnemy=20=E4=B8=8A=E6=8A=A5=E7=BB=99=20Co?= =?UTF-8?q?mbatScheduler=E3=80=82=20-=20CombatScheduler.cs=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E7=BB=9F=E4=B8=80=E5=85=A5=E5=8F=A3=EF=BC=9A=20=20=20?= =?UTF-8?q?-=20OnEnemyDefeated(DREnemy=20enemy)=EF=BC=9A=E9=80=9A=E8=BF=87?= =?UTF-8?q?=20EnemyDropResolver=20=E8=A7=A3=E6=9E=90=E6=8E=89=E8=90=BD?= =?UTF-8?q?=EF=BC=8C=E5=86=8D=E8=B0=83=E7=94=A8=20CombatInRunResourceManag?= =?UTF-8?q?er=20=E5=85=A5=E8=B4=A6=EF=BC=8C=E5=B9=B6=E6=8C=89=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E5=86=B3=E5=AE=9A=E6=98=AF=E5=90=A6=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E5=B1=80=E5=A4=96=E6=8E=89=E8=90=BD=E5=88=A4=E5=AE=9A=E3=80=82?= =?UTF-8?q?=20=20=20-=20OnEnemyReachedBase(DREnemy=20enemy)=EF=BC=9A?= =?UTF-8?q?=E4=BB=8E=20enemy.BaseDamage=20=E8=A7=A3=E6=9E=90=E4=BC=A4?= =?UTF-8?q?=E5=AE=B3=EF=BC=8C=E5=86=8D=E7=BB=9F=E4=B8=80=E6=89=A3=E5=87=8F?= =?UTF-8?q?=E5=9F=BA=E5=9C=B0=E8=A1=80=E9=87=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CombatScheduler/CombatScheduler.cs | 23 +++++++++++----- .../CombatNode/EnemyManager/EnemyManager.cs | 27 +++---------------- .../Scripts/Entity/EntityExtension.cs | 13 +++------ 3 files changed, 24 insertions(+), 39 deletions(-) diff --git a/Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatScheduler.cs b/Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatScheduler.cs index f1e2e7e..d1ff363 100644 --- a/Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatScheduler.cs +++ b/Assets/GameMain/Scripts/CustomComponent/CombatNode/CombatScheduler/CombatScheduler.cs @@ -26,6 +26,7 @@ namespace GeometryTD.CustomComponent private readonly CombatLoadSession _loadSession = new(); private readonly CombatEventBridge _eventBridge = new(); private readonly CombatInRunResourceManager _combatInRunResourceManager = new(); + private readonly EnemyDropResolver _enemyDropResolver = new(); private EntityComponent _entity; private DRLevel _currentLevel; @@ -178,14 +179,14 @@ namespace GeometryTD.CustomComponent return _phaseLoopRuntime.TryRequestEndCombat(); } - public void OnEnemyReachedBase(int baseDamage) + public void OnEnemyReachedBase(DREnemy enemy) { if (!IsRunning) { return; } - int resolvedBaseDamage = Mathf.Max(0, baseDamage); + int resolvedBaseDamage = enemy != null ? Mathf.Max(0, enemy.BaseDamage) : 0; if (resolvedBaseDamage <= 0) { return; @@ -194,18 +195,28 @@ namespace GeometryTD.CustomComponent ApplyBaseDamage(resolvedBaseDamage); } - public void OnEnemyDefeatedRewardResolved(int gainedCoin, int gainedGold) + public void OnEnemyDefeated(DREnemy enemy) { - _combatInRunResourceManager.AddEnemyDefeatedReward(gainedCoin, gainedGold); - if (!IsRunning) { return; } - _combatInRunResourceManager.TryRollOutGameItemDrop( + EnemyDropResolveContext context = new( + enemy, _phaseLoopRuntime.DisplayPhaseIndex, ResolveCurrentThemeType()); + EnemyDropResolveResult result = _enemyDropResolver.Resolve(context); + _combatInRunResourceManager.AddEnemyDefeatedReward(result.Coin, result.Gold); + + if (!result.ShouldRollOutGameItem) + { + return; + } + + _combatInRunResourceManager.TryRollOutGameItemDrop( + context.DisplayPhaseIndex, + context.ThemeType); } public bool OnCombatFinishReturnRequested() diff --git a/Assets/GameMain/Scripts/CustomComponent/CombatNode/EnemyManager/EnemyManager.cs b/Assets/GameMain/Scripts/CustomComponent/CombatNode/EnemyManager/EnemyManager.cs index f240184..29dbd2a 100644 --- a/Assets/GameMain/Scripts/CustomComponent/CombatNode/EnemyManager/EnemyManager.cs +++ b/Assets/GameMain/Scripts/CustomComponent/CombatNode/EnemyManager/EnemyManager.cs @@ -5,7 +5,6 @@ using GeometryTD.Entity; using GeometryTD.Entity.EntityData; using UnityEngine; using UnityGameFramework.Runtime; -using Random = UnityEngine.Random; namespace GeometryTD.CustomComponent { @@ -207,33 +206,15 @@ namespace GeometryTD.CustomComponent bool wasKilled = EnemyEntity.TryConsumeKilledFlag(ne.EntityId); bool isCombatRunning = _combatScheduler != null && _combatScheduler.IsRunning; - int baseDamage = 0; - int droppedCoin = 0; - int droppedGold = 0; - if (enemyConfig != null) - { - baseDamage = Mathf.Max(0, enemyConfig.BaseDamage); - if (wasKilled) - { - droppedCoin = Mathf.Max(0, enemyConfig.DropCoin); - float dropRate = enemyConfig.DropPercent > 1f - ? Mathf.Clamp01(enemyConfig.DropPercent * 0.01f) - : Mathf.Clamp01(enemyConfig.DropPercent); - if (enemyConfig.DropGold > 0 && dropRate > 0f && Random.value <= dropRate) - { - droppedGold = Mathf.Max(0, enemyConfig.DropGold); - } - } - } - if (isCombatRunning && wasKilled) + if (isCombatRunning && wasKilled && enemyConfig != null) { _defeatedEnemyCount++; - _combatScheduler.OnEnemyDefeatedRewardResolved(droppedCoin, droppedGold); + _combatScheduler.OnEnemyDefeated(enemyConfig); } - else if (isCombatRunning && baseDamage > 0) + else if (isCombatRunning && !wasKilled && enemyConfig != null) { - _combatScheduler.OnEnemyReachedBase(baseDamage); + _combatScheduler.OnEnemyReachedBase(enemyConfig); } } } diff --git a/Assets/GameMain/Scripts/Entity/EntityExtension.cs b/Assets/GameMain/Scripts/Entity/EntityExtension.cs index b03515c..933a66f 100644 --- a/Assets/GameMain/Scripts/Entity/EntityExtension.cs +++ b/Assets/GameMain/Scripts/Entity/EntityExtension.cs @@ -1,11 +1,4 @@ -//------------------------------------------------------------ -// Game Framework -// Copyright © 2013-2021 Jiang Yin. All rights reserved. -// Homepage: https://gameframework.cn/ -// Feedback: mailto:ellan@gameframework.cn -//------------------------------------------------------------ - -using GameFramework.DataTable; +using GameFramework.DataTable; using System; using GeometryTD.CustomUtility; using GeometryTD.DataTable; @@ -17,7 +10,7 @@ namespace GeometryTD { public static class EntityExtension { - private static int s_SerialId = 0; + private static int _serialId = 0; public static EntityBase GetGameEntity(this EntityComponent entityComponent, int entityId) { @@ -97,7 +90,7 @@ namespace GeometryTD public static int GenerateSerialId(this EntityComponent entityComponent) { - return --s_SerialId; + return --_serialId; } } }