From af6e207c6d185ed66125e85e18c02c63bea597f9 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 22 十月 2025 14:25:56 +0800
Subject: [PATCH] 0312 mainwin的内部显示

---
 Main/System/Battle/BattleObject/BattleObject.cs |  125 ++++++++++++++++++++++++++---------------
 1 files changed, 78 insertions(+), 47 deletions(-)

diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index d086b64..3c0bb25 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -32,13 +32,13 @@
 
     public BattleObjectBuffMgr buffMgr;
 
+    public BattleObjectLayerMgr layerMgr;
+
     public int ObjID { get; set; }
 
     public BattleCamp Camp { get; protected set; }
 
     public TeamHero teamHero { get; protected set; }
-
-    // public BuffMgr buffMgr;
 
     public MotionBase motionBase;
 
@@ -65,8 +65,6 @@
         }
     }
 
-    public int sortingOrder = 0;
-
     protected Action onDeathAnimationComplete;
 
     protected Renderer[] renderers;
@@ -85,9 +83,12 @@
         teamHero = _teamHero;
         Camp = _camp;
         motionBase = new MotionBase();
-        motionBase.Init(heroGo.GetComponentInChildren<SkeletonGraphic>(true));
+        motionBase.Init(heroGo.GetComponentInChildren<SkeletonAnimation>(true));
         buffMgr = new BattleObjectBuffMgr();
         buffMgr.Init(this);
+
+        layerMgr = new BattleObjectLayerMgr();
+        layerMgr.Init(this);
 
         renderers = heroGo.GetComponentsInChildren<Renderer>(true);
 
@@ -100,7 +101,7 @@
         heroInfoBar.transform.localScale = heroInfoBarScale;
 
         heroInfoBar.SetActive(true);
-        SetToFront();
+        SetFront();
     }
 
 
@@ -108,6 +109,7 @@
     {
         motionBase.Run();
         heroInfoBar.Run();
+        buffMgr.Run();
     }
 
     public virtual void Pause()
@@ -125,6 +127,8 @@
 
         motionBase.Release();
         motionBase = null;
+        buffMgr.Release();
+        buffMgr = null;
         teamHero = null;
         ObjID = 0;
 
@@ -266,33 +270,77 @@
         return true;
     }
 
-    public virtual void Hurt(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
+    public virtual void Hurt(List<long> damageValues, long _totalDamage,
+        HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, int hitIndex,
+        BattleDrops battleDrops, HB422_tagMCTurnFightObjDead deadPack)
     {
-        BattleDmgInfo dmgInfo = PopDamage(damageValues, _totalDamage, hurt, skillConfig);
+        bool isLastHit = hitIndex >= skillConfig.DamageDivide.Length - 1;
+        bool firstHit = hitIndex == 0;
+        BattleDmgInfo dmgInfo = PopDamage(damageValues, _totalDamage, hurt, skillConfig, isLastHit);
 
-        if (dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage())
+
+        //  杩欓噷
+        if (dmgInfo.IsType(DamageType.Dodge))
         {
-            motionBase.PlayAnimation(MotionName.hit, false);
+            if (isLastHit)
+            {
+                DodgeFinishAction dodgeFinish = new DodgeFinishAction(battleField, this);
+                battleField.recordPlayer.InsertRecord(dodgeFinish);
+            }
+
+            if (firstHit)
+            {
+                OnDodgeBegin();
+            }
         }
+
+        bool isFatalAttack = (null != deadPack) && isLastHit;
+
+        if (isFatalAttack)
+        {
+            if (null != battleDrops)
+            {
+                PushDropItems(battleDrops);
+            }
+            battleField.OnObjsDead(new List<HB422_tagMCTurnFightObjDead>() { deadPack });
+            
+        }
+        else
+        {
+            if ((dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage()))
+            {
+                motionBase.PlayAnimation(MotionName.hit, false);
+            }
+        }
+
+
     }
 
     public void SuckHp(uint suckHP, SkillConfig skillConfig)
     {
-
+        teamHero.curHp = Math.Min(teamHero.maxHp, teamHero.curHp + (int)suckHP);
     }
 
     public void HurtByReflect(uint bounceHP, SkillConfig skillConfig)
     {
-
+        teamHero.curHp = Math.Max(0, teamHero.curHp - (int)bounceHP);
     }
 
+
+    const float pingpongTime = 0.4f;
     //  闂伩寮�濮�
     public virtual void OnDodgeBegin()
     {
-        float pingpongTime = 0.2f;
         RectTransform rectTrans = heroRectTrans;
         var tween = rectTrans.DOAnchorPos(new Vector3(-30, 0, 0), pingpongTime)
             .SetEase(Ease.OutCubic);
+
+        motionBase.ShowIllusionShadow(true);
+
+        tween.onComplete += () =>
+        {
+            motionBase.ShowIllusionShadow(false);
+        };
 
         battleField.battleTweenMgr.OnPlayTween(tween);
     }
@@ -300,7 +348,6 @@
     //  闂伩缁撴潫
     public virtual void OnDodgeEnd(Action _complete = null)
     {
-        float pingpongTime = 0.2f;
         RectTransform rectTrans = heroRectTrans;
 
         var tween = rectTrans.DOAnchorPos(Vector3.zero, pingpongTime)
@@ -328,6 +375,8 @@
     {
         //  鎴栬鐪嬬湅婧惰В鐗规晥锛� YYL TODO
         heroGo.SetActive(false);
+
+        buffMgr.RemoveAllBuff();
     }
 
     public void OnReborn(HB423_tagMCTurnFightObjReborn vNetData)
@@ -339,16 +388,9 @@
     }
 
     // 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
-    protected virtual BattleDmgInfo PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
+    protected virtual BattleDmgInfo PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, bool isLastHit)
     {
-        BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, damageValues, this, hurt, skillConfig);
-
-        if (battleDmgInfo.IsType(DamageType.Dodge))
-        {
-            OnDodgeBegin();
-            DodgeFinishAction dodgeFinish = new DodgeFinishAction(battleField, this);
-            battleField.recordPlayer.InsertRecord(dodgeFinish);
-        }
+        BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, damageValues, this, hurt, skillConfig, isLastHit);
 
         int currentHurtHp = 0;
         for (int i = 0; i < damageValues.Count; i++)
@@ -356,8 +398,12 @@
             currentHurtHp += (int)damageValues[i];
         }
 
-        heroInfoBar.UpdateHP(teamHero.curHp, Math.Max(0, teamHero.curHp - currentHurtHp), teamHero.maxHp);
-        teamHero.curHp = Math.Max(0, teamHero.curHp - currentHurtHp);
+        bool isRecovery = battleDmgInfo.IsType(DamageType.Recovery);
+
+        long toHp = Math.Max(0, teamHero.curHp + (isRecovery ? currentHurtHp : -currentHurtHp));
+
+        heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp);
+        teamHero.curHp = toHp;
 
         // YYL TODO 鏄惁闇�瑕佹寕鍦ㄥ湪鑷韩鐨刦ollow鐐逛笂
         EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
@@ -389,7 +435,7 @@
         heroRectTrans.anchoredPosition = Vector2.zero;
 
         heroInfoBar.SetActive(false);
-        SetToFront();
+        SetFront();
     }
 
     public void PushDropItems(BattleDrops _battleDrops)
@@ -411,34 +457,19 @@
         battleDrops = null;
     }
 
-    public void SetToBack()
+    public void SetBack()
     {
-        sortingOrder = BattleConst.UnactiveHeroSortingOrder;
-        UpdateSortingOrder();
+        layerMgr.SetBack();
     }
 
-    public void SetToFront()
+    public void SetFront()
     {
-        sortingOrder = BattleConst.ActiveHeroSortingOrder;
-        UpdateSortingOrder();
+        layerMgr.SetFront();
     }
 
-    private void UpdateSortingOrder()
+    public void SetSpeedRatio(float ratio)
     {
-        if (null == renderers) return;
-
-        foreach (var renderer in renderers)
-        {
-            if (renderer != null)
-            {
-                renderer.sortingOrder = sortingOrder;
-            }
-        }
-    }
-
-    public int GetSortingOrder()
-    {
-        return sortingOrder;
+        motionBase.SetSpeedRatio(ratio);
     }
 
 

--
Gitblit v1.8.0