Răsfoiți Sursa

修复不同attackInfo之间互相冲突问题

wgl 6 luni în urmă
părinte
comite
88a4f7f498

+ 1 - 0
ActionTowerDefense/Assets/Scripts/Characters/AttackController.cs

@@ -8,6 +8,7 @@ using System.Linq;
 //攻击所附带的状态
 public enum AttackEffect
 {
+    Null = -1,
     //控制
     [LabelText("漂浮")]FloatState = 0,
     [LabelText("击飞")]BlowUp = 1,

+ 83 - 36
ActionTowerDefense/Assets/Scripts/Characters/AttributeStatus.cs

@@ -23,8 +23,6 @@ public class AttributeStatus : MonoBehaviour
     private HitFeedbackSystem hitFeedbackSystem;
 
     //behit参数
-    [DisplayOnly] public bool canChangeHitStun;
-    [DisplayOnly] public bool haveSpecialStates;
     [DisplayOnly] public SpecialState curSpecialStates = SpecialState.Null;
 
     [LabelText("控制时间")] [DisplayOnly] public float attributeTime;
@@ -96,44 +94,99 @@ public class AttributeStatus : MonoBehaviour
 
     public void AddSpecialState(AttackInfo attackInfo, Character attackFrom)
     {
-        if (canChangeHitStun)
+        if (attackInfo.attackEffect != null && attackInfo.attackEffect.Length > 0)
         {
-            canChangeHitStun = false;
-            hitFeedbackSystem.EnterHitStun(attackFrom);
-            return;
-        }
-        if (haveSpecialStates)
-        {
-            haveSpecialStates = false;
-            hitFeedbackSystem.canHitStun = false;
-            switch (curSpecialStates)
+            AttackEffect attackEffect = AttackEffect.Null;
+            foreach (AttackEffect ae in attackInfo.attackEffect)
             {
-                case SpecialState.FloatState:
-                    AddFloat(attackInfo.floatState);
-                    break;
-                case SpecialState.BlownUp:
-                    if (rb.useGravity)
-                    {
+                switch (attackInfo.attackEffect[0])
+                {
+                    /*控制*/
+                    //漂浮
+                    case AttackEffect.FloatState:
+                        if (resistances.Float == 1)
+                        {
+                            break;
+                        }
+                        if (PriorityOrder(SpecialState.FloatState))
+                        {
+                            attackEffect = AttackEffect.FloatState;
+                        }
+                        break;
+                    //击飞
+                    case AttackEffect.BlowUp:
+                        if (resistances.BlowUp == 1)
+                        {
+                            break;
+                        }
+                        if (rb.useGravity)
+                        {
+                            if (PriorityOrder(SpecialState.BlownUp))
+                            {
+                                attackEffect = AttackEffect.BlowUp;
+                            }
+                        }
+                        break;
+                    //击落
+                    case AttackEffect.ShotDown:
+                        if (resistances.ShotDown == 1)
+                        {
+                            break;
+                        }
+                        if (!rb.useGravity)
+                        {
+                            if (PriorityOrder(SpecialState.ShotDown))
+                            {
+                                attackEffect = AttackEffect.ShotDown;
+                            }
+                        }
+                        break;
+                    //击晕
+                    case AttackEffect.Weak:
+                        if (resistances.Weak == 1)
+                        {
+                            break;
+                        }
+                        if (PriorityOrder(SpecialState.Weak))
+                        {
+                            attackEffect = AttackEffect.Weak;
+                        }
+                        break;
+                }
+
+            }
+            if (attackEffect != AttackEffect.Null)
+            {
+                switch (attackEffect)
+                {
+                    /*控制*/
+                    //漂浮
+                    case AttackEffect.FloatState:
+                        AddFloat(attackInfo.floatState);
+                        break;
+                    //击飞
+                    case AttackEffect.BlowUp:
                         AddBlowUp(attackInfo.blowUp, attackFrom.bodyTrans.localScale.x < 0 ? -1 : 1);
                         //虾兵特殊攻击先留着
                         //AddBlowUp(attackInfo.blowUp, attackFrom.transform.position.x < character.transform.position.x ? -1 : 1);
-                    }
-                    break;
-                case SpecialState.ShotDown:
-                    if (!rb.useGravity)
-                    {
+                        break;
+                    //击落
+                    case AttackEffect.ShotDown:
                         AddShotDown(attackInfo.shotDown, attackFrom.bodyTrans.localScale.x < 0 ? -1 : 1);
                         //虾兵特殊攻击先留着
                         //AddShotDown(attackInfo.shotDown, attackFrom.transform.position.x < character.transform.position.x ? -1 : 1);
-                    }
-                    break;
-                case SpecialState.Weak:
-                    AddWeak(attackInfo.weak);
-                    break;
+                        break;
+                    //击晕
+                    case AttackEffect.Weak:
+                        AddWeak(attackInfo.weak);
+                        break;
+                }
+                return;
             }
-        }
 
 
+        }
+        hitFeedbackSystem.EnterHitStun(attackFrom);
     }
 
     //CharacterState为SpecialStatus时调用此函数
@@ -270,7 +323,6 @@ public class AttributeStatus : MonoBehaviour
         if (curSpecialStates == SpecialState.Null)
         {
             curSpecialStates = specialState;
-            haveSpecialStates = true;
             return true;
         }
         else
@@ -278,15 +330,10 @@ public class AttributeStatus : MonoBehaviour
             if (curSpecialStates >= specialState)
             {
                 curSpecialStates = specialState;
-                haveSpecialStates = true;
                 return true;
             }
-            else
-            {
-                canChangeHitStun = true;
-                return false;
-            }
         }
+        return false;
     }
 
     //受到漂浮

+ 2 - 0
ActionTowerDefense/Assets/Scripts/Characters/HitFeedbackSystem.cs

@@ -47,6 +47,8 @@ public class HitFeedbackSystem : MonoBehaviour
                     character.rb.velocity = velocity;
                     character.state = curCharacterState;
                 }
+                Debug.Log(attackInfoData.damage);
+                Debug.Log(attackInfoData.blowUp.time);
                 attributeStatus.AddSpecialState(attackInfoData, attackFromData);
             }
             freezeFrame -= 1;