Pārlūkot izejas kodu

修改复活机制

DESKTOP-FB72PO8\Administrator 6 mēneši atpakaļ
vecāks
revīzija
3757cd2fc9
30 mainītis faili ar 234 papildinājumiem un 110 dzēšanām
  1. BIN
      Assets/Plugins/CTool.exp
  2. 0 7
      Assets/Plugins/CTool.exp.meta
  3. BIN
      Assets/Plugins/CTool.lib
  4. 0 27
      Assets/Plugins/CTool.lib.meta
  5. BIN
      Assets/Plugins/CTool.pdb
  6. 0 7
      Assets/Plugins/CTool.pdb.meta
  7. 0 11
      Assets/Plugins/New Avatar Mask 1.mask
  8. 0 8
      Assets/Plugins/New Avatar Mask 1.mask.meta
  9. 0 11
      Assets/Plugins/New Avatar Mask.mask
  10. 0 8
      Assets/Plugins/New Avatar Mask.mask.meta
  11. 7 7
      Assets/Res/UI/ShowItemMoveToTargetPanel.prefab
  12. 8 8
      Assets/Scenes/testCombat.scene
  13. 1 0
      Assets/Scripts/Core/State/IState.cs
  14. 5 0
      Assets/Scripts/Core/State/StateBasic.cs
  15. 5 0
      Assets/Scripts/Core/State/StateControl.cs
  16. 5 0
      Assets/Scripts/GameLogic/Combat/CombatState/CombatStateBasic.cs
  17. 11 1
      Assets/Scripts/GameLogic/Combat/CombatTool/CombatHeroController.cs
  18. 7 2
      Assets/Scripts/GameLogic/Combat/CombatType/CombatTypeBasic.cs
  19. 70 6
      Assets/Scripts/GameLogic/Combat/CombatType/LevelBattleCombatType.cs
  20. 1 1
      Assets/Scripts/GameLogic/Combat/CombatType/TestCombatType.cs
  21. 1 0
      Assets/Scripts/GameLogic/Combat/Hero/CombatAIBasic.cs
  22. 5 0
      Assets/Scripts/GameLogic/Combat/Hero/CombatHeroEntity.cs
  23. 1 0
      Assets/Scripts/GameLogic/Combat/Hero/CombatHeroInfo.cs
  24. 2 0
      Assets/Scripts/GameLogic/Combat/Hero/CombatHeroStateType.cs
  25. 48 2
      Assets/Scripts/GameLogic/Combat/Hero/State/CombatHeroDieState.cs
  26. 7 1
      Assets/Scripts/GameLogic/Combat/Hero/State/CombatHeroIdleState.cs
  27. 8 1
      Assets/Scripts/GameLogic/Combat/Hero/State/CombatHeroMoveState.cs
  28. 7 2
      Assets/Scripts/GameLogic/Combat/Hero/State/CombatHeroStateBasic.cs
  29. 32 0
      Assets/Scripts/GameLogic/Combat/Hero/State/CombatResurrectionState.cs
  30. 3 0
      Assets/Scripts/GameLogic/Combat/Hero/State/CombatResurrectionState.cs.meta

BIN
Assets/Plugins/CTool.exp


+ 0 - 7
Assets/Plugins/CTool.exp.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: CX1JtSr4Wy+CT6nH2a1kHb71LbU0nDtT7ZYG+uQaf0z4p+hyfIrYzx0=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/Plugins/CTool.lib


+ 0 - 27
Assets/Plugins/CTool.lib.meta

@@ -1,27 +0,0 @@
-fileFormatVersion: 2
-guid: CHkbtCL7An09OxBlO/Beq8K/jBdn3CcXUsh3fYEmgzRgI2Hm2Vvvtwk=
-PluginImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  iconMap: {}
-  executionOrder: {}
-  defineConstraints: []
-  isPreloaded: 0
-  isOverridable: 0
-  isExplicitlyReferenced: 0
-  validateReferences: 1
-  platformData:
-  - first:
-      Any: 
-    second:
-      enabled: 1
-      settings: {}
-  - first:
-      Editor: Editor
-    second:
-      enabled: 0
-      settings:
-        DefaultValueInitialized: true
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

BIN
Assets/Plugins/CTool.pdb


+ 0 - 7
Assets/Plugins/CTool.pdb.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: CyhJsiuuAn884W4jDoszSqGDBlG6ecWfJB0e7BP4iB1fraWZI5nId20=
-DefaultImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 11
Assets/Plugins/New Avatar Mask 1.mask

@@ -1,11 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:yousandi.cn,2023:
---- !u!319 &31900000
-AvatarMask:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_Name: New Avatar Mask 1
-  m_Mask: 00000000010000000100000000000000000000000100000001000000010000000100000001000000010000000100000001000000
-  m_Elements: []

+ 0 - 8
Assets/Plugins/New Avatar Mask 1.mask.meta

@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: DXhLvCmsUyiX/XyDNkIjnz8bTM8pvM/y8tlSbJFvHGjPGEXNG+Db4ew=
-NativeFormatImporter:
-  externalObjects: {}
-  mainObjectFileID: 31900000
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 0 - 11
Assets/Plugins/New Avatar Mask.mask

@@ -1,11 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:yousandi.cn,2023:
---- !u!319 &31900000
-AvatarMask:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_Name: New Avatar Mask
-  m_Mask: 01000000000000000000000001000000010000000000000000000000000000000000000001000000010000000100000001000000
-  m_Elements: []

+ 0 - 8
Assets/Plugins/New Avatar Mask.mask.meta

@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: Bi4csX//UXrrRk6RBove8G+axXbJ/ze/p7af2icsVWyqnzvFZtcmIC8=
-NativeFormatImporter:
-  externalObjects: {}
-  mainObjectFileID: 31900000
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 7 - 7
Assets/Res/UI/ShowItemMoveToTargetPanel.prefab

@@ -74,7 +74,7 @@ RectTransform:
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 750, y: 1624}
+  m_SizeDelta: {x: 1125, y: 2436}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &7368292285738498687
 MonoBehaviour:
@@ -292,7 +292,7 @@ MonoBehaviour:
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: e3a3f6e5da08f46c895f632eccceb676, type: 3}
+  m_Sprite: {fileID: 0}
   m_Type: 0
   m_PreserveAspect: 0
   m_FillCenter: 1
@@ -304,9 +304,9 @@ MonoBehaviour:
   m_PixelsPerUnitMultiplier: 1
   _icon_name: 
   isNotLoadDeftIcon: 1
-  CurrSpriteAtlas: {fileID: 0}
+  CurrSpriteAtlas: {fileID: 100100200, guid: 7b02f32fa59cd4e3085208946b112537, type: 3}
   packInfo:
-    packName: 
-    packgJsonPath: 
-    packgSpritePath: 
-    lasetJsonGUID: 
+    packName: all
+    packgJsonPath: /Art/UIAssets/TextrueJson/all.txt
+    packgSpritePath: Assets/Res/UIAtlas/all.spriteatlasv2
+    lasetJsonGUID: ace5466faa841bb7b9046587aae54d38

+ 8 - 8
Assets/Scenes/testCombat.scene

@@ -612,29 +612,29 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   myHeroInfo:
   - modelName: Hero01
-    hp: 10000
-    att: 100
+    hp: 100
+    att: 1
     attSpeed: 1
     attDis: 2
     isGpu: 0
     skillId: 1b270000ab860100
   - modelName: Hero02
-    hp: 10000
-    att: 100
+    hp: 100
+    att: 1
     attSpeed: 1
     attDis: 4
     isGpu: 0
     skillId: 1b2700004b0d0300
   - modelName: Hero03
-    hp: 10000
-    att: 100
+    hp: 100
+    att: 1
     attSpeed: 1
     attDis: 5
     isGpu: 0
     skillId: 1b270000eb930400
   - modelName: Hero04
-    hp: 10000
-    att: 100
+    hp: 100
+    att: 1
     attSpeed: 1
     attDis: 6
     isGpu: 0

+ 1 - 0
Assets/Scripts/Core/State/IState.cs

@@ -9,4 +9,5 @@ public interface IState: IDisposable
     void Enter(IStateEnterData iStateEnterData);
     void Update(float t);
     void Exit();
+    bool IsSwitch(IState nextState);
 }

+ 5 - 0
Assets/Scripts/Core/State/StateBasic.cs

@@ -24,4 +24,9 @@ public class StateBasic : IState
     {
         
     }
+
+    public bool IsSwitch(IState nextState)
+    {
+        return true;
+    }
 }

+ 5 - 0
Assets/Scripts/Core/State/StateControl.cs

@@ -47,6 +47,11 @@ namespace Core.State
 
             if (_currIState != null)
             {
+                if (!_currIState.IsSwitch(state))
+                {
+                    return;
+                }
+
                 _currIState.Exit();
             }
 

+ 5 - 0
Assets/Scripts/GameLogic/Combat/CombatState/CombatStateBasic.cs

@@ -27,6 +27,11 @@ namespace GameLogic.Combat.CombatState
             ProExit();
         }
 
+        public bool IsSwitch(IState nextState)
+        {
+            return true;
+        }
+
         public void Dispose()
         {
             ProDispose();

+ 11 - 1
Assets/Scripts/GameLogic/Combat/CombatTool/CombatHeroController.cs

@@ -44,6 +44,16 @@ namespace GameLogic.Combat.CombatTool
             }
         }
 
+        /// <summary>
+        /// 复活死亡的英雄
+        /// </summary>
+        public void ResurrectionDieHero(CombatHeroEntity combatHeroEntity)
+        {
+            heroDie.Remove(combatHeroEntity);
+            combatHeroEntity.CurrCombatHeroInfo.hp = combatHeroEntity.MaxCombatHeroInfo.hp;
+            AddHero(combatHeroEntity);
+        }
+
         public void Update(float t)
         {
             for (int i = 0; i < myHero.Count; i++)
@@ -178,7 +188,7 @@ namespace GameLogic.Combat.CombatTool
         public Vector3 GetFollowPos(CombatHeroEntity combatHeroEntity)
         {
             int index = combatHeroEntity.number - followTarget.number;
-         return   followTarget.combatHeroGameObject.transform.TransformPoint((followMovePos[index]));
+            return followTarget.combatHeroGameObject.transform.TransformPoint((followMovePos[index]));
             // return followMovePos[index] + .dotPos;
         }
 

+ 7 - 2
Assets/Scripts/GameLogic/Combat/CombatType/CombatTypeBasic.cs

@@ -11,6 +11,10 @@ namespace GameLogic.Combat.CombatType
 {
     public class CombatTypeBasic : IDisposable
     {
+        /// <summary>
+        /// 全部胜利的节点数量
+        /// </summary>
+        public int allWinNodeCount;
         protected CombatController combatController;
         protected int _currIndex = 0;
         protected CombatScenesConfig _combatScenesConfig;
@@ -38,15 +42,16 @@ namespace GameLogic.Combat.CombatType
             HeroDieEventData data = iEventData as HeroDieEventData;
             combatController.CombatHeroController.RemoveHero(data.combatHeroEntity);
             combatController.CombatHeroController.AddHeroDie(data.combatHeroEntity);
-            ProHeroDie(data.combatHeroEntity);
+            ProHeroDie(data.combatHeroEntity,data.HarmReturnInfo);
         }
 
-        protected virtual void ProHeroDie(CombatHeroEntity combatHeroEntity)
+        protected virtual void ProHeroDie(CombatHeroEntity combatHeroEntity,HarmReturnInfo harmReturnInfo)
         {
         }
 
         protected void FindNextConfig()
         {
+            allWinNodeCount++;
             isActiveCombat = false;
             _currIndex %= _combatScenesConfig.allNodeConfig.Length;
             nextConfig = _combatScenesConfig.allNodeConfig[_currIndex];

+ 70 - 6
Assets/Scripts/GameLogic/Combat/CombatType/LevelBattleCombatType.cs

@@ -13,6 +13,11 @@ namespace GameLogic.Combat.CombatType
     {
         private TestCombatHeroConfig testCombatHeroConfig;
 
+        /// <summary>
+        /// 等待复活
+        /// </summary>
+        protected bool _isAwaitResurrection;
+
         // protected TestCombatHeroConfig.EnemyGroup currEnemyGroup;
         /// <summary>
         /// 当前关卡战斗的波次节点
@@ -30,8 +35,19 @@ namespace GameLogic.Combat.CombatType
         /// </summary>
         protected int _currNodeWavesIndex;
 
-        public int exp;
+        public int exp
+        {
+            get { return _exp; }
+            set
+            {
+                _exp = value;
+                OnExpAlter?.Invoke();
+            }
+        }
+
+        private int _exp;
         public bool isBossCombat;
+        public System.Action OnExpAlter;
 
         protected List<string> equipName = new List<string>()
         {
@@ -48,19 +64,57 @@ namespace GameLogic.Combat.CombatType
             _currLevelBattleNodeIndex = 0;
         }
 
-        protected override void ProHeroDie(CombatHeroEntity combatHeroEntity)
+        protected override void ProHeroDie(CombatHeroEntity combatHeroEntity, HarmReturnInfo harmReturnInfo)
         {
-            if (!isBossCombat)
+            if (harmReturnInfo.harmType == HarmType.SystemKo)
             {
-                MiniMonsterDie(combatHeroEntity);
+                return;
+            }
+
+            if (combatHeroEntity.IsEnemy) //怪死了
+            {
+                if (!isBossCombat)
+                {
+                    MiniMonsterDie(combatHeroEntity);
+                }
+                else if (combatHeroEntity.CurrCombatHeroInfo.heroType == 4) ///boss死了
+                {
+                    exp = 0;
+                    BossKo();
+                }
             }
-            else if (combatHeroEntity.CurrCombatHeroInfo.heroType == 4) ///boss死了
+            else //英雄死了
             {
-                BossKo();
+                CombatHeroEntity[] myHero = combatController.CombatHeroController.GetHero(false);
+                if (myHero == null || myHero.Length <= 0) //死完了
+                {
+                    HarmReturnInfo newharm = new HarmReturnInfo();
+                    newharm.harmType = HarmType.SystemKo;
+                    CombatHeroEntity[] allHero = combatController.CombatHeroController.GetHero(true);
+                    List<CombatHeroEntity> heroEntities = new List<CombatHeroEntity>();
+                    heroEntities.AddRange(allHero);
+                    for (int i = 0; i < heroEntities.Count; i++)
+                    {
+                        heroEntities[i].HeroDie(newharm);
+                    }
+
+                    Debug.Log("英雄死完了,等待全部英雄复活");
+                    isActiveCombat = false;
+                    _isAwaitResurrection = true;
+                }
             }
         }
 
 
+        private void ResurrectionFinish()
+        {
+            
+            _isAwaitResurrection = false;
+            _currLevelBattleNodeIndex = 0;
+            InitNewMonsterConfig();
+            isActiveCombat = true;
+        }
+
         private void MiniMonsterDie(CombatHeroEntity combatHeroEntity)
         {
             if (isBossCombat)
@@ -241,6 +295,16 @@ namespace GameLogic.Combat.CombatType
 
         protected override void ProUpdate(float t)
         {
+            if (_isAwaitResurrection)
+            {
+                CombatHeroEntity[] myHero = combatController.CombatHeroController.GetHero(false);
+                if (myHero!=null&&myHero.Length >= 4)
+                {
+                    ResurrectionFinish();
+                }
+                return;
+            }
+
             if (!isActiveCombat)
             {
                 return;

+ 1 - 1
Assets/Scripts/GameLogic/Combat/CombatType/TestCombatType.cs

@@ -27,7 +27,7 @@ namespace GameLogic.Combat.CombatType
             "fx_down_zb_purple",
         };
 
-        protected override void ProHeroDie(CombatHeroEntity combatHeroEntity)
+        protected override void ProHeroDie(CombatHeroEntity combatHeroEntity, HarmReturnInfo harmReturnInfo)
         {
             CombatItemShowEventData combatItemShowEventData = CombatItemShowEventData.Create();
             combatItemShowEventData.count = Random.Range(3, 5);

+ 1 - 0
Assets/Scripts/GameLogic/Combat/Hero/CombatAIBasic.cs

@@ -122,6 +122,7 @@ public class CombatAIBasic : IDisposable
 
         stateControl.AddState(CombatHeroStateType.Active, new CombatHeroActiveState(_combatHeroEntity));
         stateControl.AddState(CombatHeroStateType.XiuMian, new CombatHeroXiuMianState(_combatHeroEntity));
+        stateControl.AddState(CombatHeroStateType.Resurrection, new CombatResurrectionState(_combatHeroEntity));
     }
 
     public void ChangeState(string name)

+ 5 - 0
Assets/Scripts/GameLogic/Combat/Hero/CombatHeroEntity.cs

@@ -14,6 +14,10 @@ using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
 
 public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAnimtion, ITimeLineGetAttSpeed, IHero
 {
+    /// <summary>
+    /// 死亡时的节点ID
+    /// </summary>
+    public int heroDieNodeId;
     public bool IsEnemy { get; set; }
     public bool isDie { get; set; }
     public int number;
@@ -166,6 +170,7 @@ public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAni
 
     public void HeroDie(HarmReturnInfo harmReturnInfo)
     {
+        heroDieNodeId = CombatController.currActiveCombat.CombatTypeBasic.allWinNodeCount;
         isDie = true;
         HeroDieEventData heroDieEventData = HeroDieEventData.Create();
         heroDieEventData.combatHeroEntity = this;

+ 1 - 0
Assets/Scripts/GameLogic/Combat/Hero/CombatHeroInfo.cs

@@ -91,6 +91,7 @@ public class CombatHeroInfo
         isGpu = modelConfig.isUseGpu;
         maxDis = modelConfig.range_atk;
         maxDisTo = maxDis * maxDis;
+        heroType = modelConfig.heroType;
     }
 
     protected void SetDataConfig(int id,int level, int star)

+ 2 - 0
Assets/Scripts/GameLogic/Combat/Hero/CombatHeroStateType.cs

@@ -12,5 +12,7 @@ namespace GameLogic.Combat.Hero
         public static readonly string NullState= "nullState";
         public static readonly string Active= "jihuo";
         public static readonly string XiuMian= "xiumian";
+        public static readonly string Resurrection= "resurrection";//复活
+        
     }
 }

+ 48 - 2
Assets/Scripts/GameLogic/Combat/Hero/State/CombatHeroDieState.cs

@@ -5,12 +5,26 @@ namespace GameLogic.Combat.Hero.State
 {
     public class CombatHeroDieState : CombatHeroStateBasic
     {
+        public float resurrectionTime;
+        protected bool isStartResurrection;
+
+        protected bool isSwitch = false;
+ 
         public CombatHeroDieState(CombatHeroEntity combatHeroEntity) : base(combatHeroEntity)
         {
+            
+        }
+
+        public override bool IsSwitch(IState nextState)
+        {
+            return isSwitch;
         }
 
         protected override void ProEnter()
         {
+
+            isSwitch = false;
+            resurrectionTime = 0;
             TimeLineEventLogicGroupBasic timeLineEventLogicGroup =
                 combatHeroEntity.combatHeroTimeLineControl.TimeLineData
                     .GetTimeLineEventLogicGroup<TimeLineEventLogicGroupBasic>("die", null);
@@ -19,17 +33,49 @@ namespace GameLogic.Combat.Hero.State
                 timeLineEventLogicGroup.SetCombatInfo(combatHeroEntity, null, null, new TriggerData(), null);
                 timeLineEventLogicGroup.TimeLineUpdateEnd = delegate
                 {
-                    CombatController.currActiveCombat.CombatHeroController.RemoveDieHero(combatHeroEntity);
+                    if (combatHeroEntity.IsEnemy)
+                    {
+                        CombatController.currActiveCombat.CombatHeroController.RemoveDieHero(combatHeroEntity);
+                    }
+                    else
+                    {
+                        isStartResurrection = true;
+                    }
+
                 };
                 combatHeroEntity.combatHeroTimeLineControl.AddEventLogicGroup(timeLineEventLogicGroup);
             }
             else
             {
-                CombatController.currActiveCombat.CombatHeroController.RemoveDieHero(combatHeroEntity);
+                if (combatHeroEntity.IsEnemy)
+                {
+                    CombatController.currActiveCombat.CombatHeroController.RemoveDieHero(combatHeroEntity);
+                }
+                else
+                {
+                    isStartResurrection = true;
+                }
             }
 
            
             // combatHeroEntity.Dispose();
         }
+
+        protected override void ProUpdate(float t)
+        {
+            if (isStartResurrection)
+            {
+                resurrectionTime += t;
+                if (resurrectionTime > 10)
+                {
+                    isSwitch = true;
+                    isStartResurrection = false;
+                    resurrectionTime = 0;
+                    combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.Resurrection);
+                }
+            }
+
+          
+        }
     }
 }

+ 7 - 1
Assets/Scripts/GameLogic/Combat/Hero/State/CombatHeroIdleState.cs

@@ -23,7 +23,13 @@ namespace GameLogic.Combat.Hero.State
 
             Vector3 targetPos = combatHeroEntity.CombatAIBasic.currFocusTarget.dotPos;
             Vector3 myPos = combatHeroEntity.dotPos;
-            if (Vector3.SqrMagnitude(targetPos - myPos) > combatHeroEntity.CurrCombatHeroInfo.maxDisTo)
+            float dis = combatHeroEntity.CurrCombatHeroInfo.maxDisTo;
+            if (combatHeroEntity.CombatAIBasic.currFocusTarget is BannerHero)
+            {
+                dis = 1;
+            }
+
+            if (Vector3.SqrMagnitude(targetPos - myPos) >dis)
             {
                 combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.move);
             }

+ 8 - 1
Assets/Scripts/GameLogic/Combat/Hero/State/CombatHeroMoveState.cs

@@ -53,8 +53,15 @@ namespace GameLogic.Combat.Hero.State
 
             Vector3 targetPos = combatHeroEntity.CombatAIBasic.currFocusTarget.dotPos;
             Vector3 myPos = combatHeroEntity.dotPos;
+            
+            float dis = combatHeroEntity.CurrCombatHeroInfo.maxDisTo;
+            if (combatHeroEntity.CombatAIBasic.currFocusTarget is BannerHero)
+            {
+                dis = 1;
+            }
+            
             if (Vector3.SqrMagnitude(targetPos - myPos) >
-                combatHeroEntity.CurrCombatHeroInfo.maxDisTo)
+                dis)
             {
                 if (Vector3.SqrMagnitude(lasetTaregtPoint - targetPos) > 1)
                 {

+ 7 - 2
Assets/Scripts/GameLogic/Combat/Hero/State/CombatHeroStateBasic.cs

@@ -7,6 +7,7 @@ namespace GameLogic.Combat.Hero.State
         public CombatHeroEntity combatHeroEntity;
 
         private IStateEnterData iStateEnterData;
+
         public CombatHeroStateBasic(CombatHeroEntity combatHeroEntity)
         {
             this.combatHeroEntity = combatHeroEntity;
@@ -28,6 +29,11 @@ namespace GameLogic.Combat.Hero.State
             ProExit();
         }
 
+        public virtual bool IsSwitch(IState nextState)
+        {
+            return true;
+        }
+
         protected virtual void ProEnter()
         {
         }
@@ -39,6 +45,7 @@ namespace GameLogic.Combat.Hero.State
         protected virtual void ProExit()
         {
         }
+
         protected virtual void ProDispose()
         {
         }
@@ -48,7 +55,5 @@ namespace GameLogic.Combat.Hero.State
             ProDispose();
             combatHeroEntity = null;
         }
-
-       
     }
 }

+ 32 - 0
Assets/Scripts/GameLogic/Combat/Hero/State/CombatResurrectionState.cs

@@ -0,0 +1,32 @@
+using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
+using GameLogic.Combat.CombatTool;
+using UnityEngine;
+
+namespace GameLogic.Combat.Hero.State
+{
+    /// <summary>
+    /// 英雄复活状态
+    /// </summary>
+    public class CombatResurrectionState : CombatHeroStateBasic
+    {
+        public CombatResurrectionState(CombatHeroEntity combatHeroEntity) : base(combatHeroEntity)
+        {
+            
+        }
+
+        protected override void ProEnter()
+        {
+            if (combatHeroEntity.heroDieNodeId != CombatController.currActiveCombat.CombatTypeBasic.allWinNodeCount&&CombatController.currActiveCombat.CombatHeroController.followTarget!=null)
+            {
+                combatHeroEntity.combatHeroGameObject.SetPosition(CombatController.currActiveCombat.CombatHeroController.followTarget.dotPos+new Vector3(1,0,0));
+            }
+
+            CombatController.currActiveCombat.CombatHeroController.ResurrectionDieHero(combatHeroEntity);
+            combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.idle);
+        }
+
+        protected override void ProUpdate(float t)
+        {
+        }
+    }
+}

+ 3 - 0
Assets/Scripts/GameLogic/Combat/Hero/State/CombatResurrectionState.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f4fbaf21edb7425ebbe6898bf6be560b
+timeCreated: 1732678204