Explorar el Código

攻击新增累伤

WGL hace 3 meses
padre
commit
3720e877e4

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

@@ -18,9 +18,9 @@ public enum AttackEffect
     //非控制
     [LabelText("穿甲")]ArmorPiercing,
     [LabelText("易伤")]Vulnerable,
+    [LabelText("累伤")]StackingWounds,
     ChangeDamage,       //更改攻击力
     SustainedInjury,    //持续伤害
-    Burn = 104,         //灼烧
     //中毒
     //麻痹
 }
@@ -119,6 +119,19 @@ public class AttackInfo
     [ShowIf("ShowVulnerable")][LabelText("易伤参数")]
     public Vulnerable vulnerable;
 
+    //累伤
+    [Serializable]public struct StackingWounds
+    {
+        [LabelText("叠加伤害")]
+        public float damage;
+        [LabelText("持续时间")]
+        public float time;
+    }
+    private bool ShowStackingWounds() => attackEffect.Contains(AttackEffect.StackingWounds);
+    [ShowIf("ShowStackingWounds")]
+    [LabelText("累伤参数")]
+    public StackingWounds stackingWounds;
+
     //增加和减少攻击力
     [Serializable]public struct ChangeDamage
     {
@@ -150,6 +163,7 @@ public class AttackInfo
         ai.armorPiercing = armorPiercing;
         ai.changeDamage = changeDamage;
         ai.sustainedInjury = sustainedInjury;
+        ai.stackingWounds = stackingWounds;
     }
 }
 

+ 27 - 11
ActionTowerDefense/Assets/Scripts/Characters/AttributeStatus.cs

@@ -51,7 +51,9 @@ public class AttributeStatus : MonoBehaviour
     [DisplayOnly] public bool haveVulnerable;
     [TabGroup("易伤")]
     [DisplayOnly] public float vulnerableTime;
-    private float vulnerableRate;
+
+    [TabGroup("累伤")] [DisplayOnly] public float stackingWoudsTime;
+    [TabGroup("累伤")] [DisplayOnly] public int stackingWordsNum;
 
     //抗性
     [Serializable]
@@ -90,10 +92,23 @@ public class AttributeStatus : MonoBehaviour
     public void Update()
     {
         //易伤
-        vulnerableTime -= Time.deltaTime;
-        if (vulnerableTime <= 0)
+        if (haveVulnerable)
         {
-            haveVulnerable = false;
+            vulnerableTime -= Time.deltaTime;
+            if(vulnerableTime <= 0)
+            {
+                haveVulnerable = false;
+            }
+        }
+        
+        //累伤
+        if(stackingWordsNum > 0)
+        {
+            stackingWoudsTime -= Time.deltaTime;
+            if (stackingWoudsTime <= 0)
+            {
+                stackingWordsNum = 0;
+            }
         }
     }
 
@@ -366,11 +381,6 @@ public class AttributeStatus : MonoBehaviour
         character.ChangeState(CharacterState.Idle);
     }
 
-    public int DamageCalculation(int damage)
-    {
-        damage = (int)(damage * (1 + vulnerableRate) + 0.5f);
-        return damage;
-    }
 
     //判断优先级,ture为优先级高于当前控制
     public bool PriorityOrder(SpecialState specialState, int controlOrder)
@@ -525,9 +535,15 @@ public class AttributeStatus : MonoBehaviour
         this.attackInfo = attackInfo;
         AttackInfo.Vulnerable vulnerable = attackInfo.vulnerable;
         vulnerableTime = vulnerable.time;
-        vulnerableRate = vulnerable.rate;
         haveVulnerable = true;
     }
 
-
+    //受到累伤
+    public void AddStackingWouds(AttackInfo attackInfo)
+    {
+        this.attackInfo = attackInfo;
+        AttackInfo.StackingWounds stackingWounds = attackInfo.stackingWounds;
+        stackingWoudsTime = stackingWounds.time;
+        stackingWordsNum++;
+    }
 }

+ 7 - 1
ActionTowerDefense/Assets/Scripts/Characters/MoveCharacter.cs

@@ -263,6 +263,9 @@ public class MoveCharacter : Character
                     case AttackEffect.Vulnerable:
                         attributeStatus.AddVulnerable(attackInfo);
                         break;
+                    case AttackEffect.StackingWounds:
+                        attributeStatus.AddStackingWouds(attackInfo);
+                        break;
                 }
             }
         }
@@ -270,8 +273,11 @@ public class MoveCharacter : Character
         //计算护甲减免
         damageData = (int)(damageData * (100f / (100 + armorRate)) + 0.5f);
 
+        //计算累伤
+        damageData = (int)(damageData + attributeStatus.stackingWordsNum * attackInfo.stackingWounds.damage + 0.5f);
+
         //计算易伤
-        damageData = attributeStatus.DamageCalculation(damageData);
+        damageData = (int)(damageData * (1 + attackInfo.vulnerable.rate) + 0.5f);
 
         //伤害减免,先注释,用到的时候再改
         //if (isDamageReduction)