Prechádzať zdrojové kódy

变身法师后L键使漂浮单位下落并眩晕5s

SZAND\msx_2 1 rok pred
rodič
commit
3e1406cdcf

+ 19 - 4
ActionTowerDefense/Assets/Scripts/Demonic.cs

@@ -203,7 +203,7 @@ public class Demonic : MoveCharacter
 
     public void AdjustHeight()
     {
-        if (canFly)
+        if (canFly && !isBeDropped)
         {
             if (transform.position.y - flyHeight > 0.1f)
             {
@@ -333,7 +333,10 @@ public class Demonic : MoveCharacter
             case CharacterState.Fall:
                 if (foot.TrigGround || canFly)
                 {
-                    ChangeState(CharacterState.Idle);
+                    if (!isBeDropped)
+                    {
+                        ChangeState(CharacterState.Idle);
+                    }
                     break;
                 }
                 //if (foot.canStepPlayers.Count > 0)
@@ -379,6 +382,14 @@ public class Demonic : MoveCharacter
                 rb.velocity = vel;
                 break;
             case CharacterState.Coma:
+                if (!isCaughtByCook)
+                {
+                    pastComaTime += Time.deltaTime;
+                    if (pastComaTime >= comaTime)
+                    {
+                        ChangeState(CharacterState.Idle);
+                    }
+                }
                 break;
             case CharacterState.Attack:
                 if (attackTime <= 0)
@@ -482,10 +493,14 @@ public class Demonic : MoveCharacter
                 //ani.Play("Coma", 0, 0);
                 ani.Play("idle", 0, 0);
                 aniCollider.Play("Idle", 0, 0);
-                foreach (GameObject i in HitCols)
+                if (isCaughtByCook)
                 {
-                    i.SetActive(false);
+                    foreach (GameObject i in HitCols)
+                    {
+                        i.SetActive(false);
+                    }
                 }
+                pastComaTime = 0;
                 rb.velocity = Vector3.zero;
                 break;
             case CharacterState.Attack:

+ 24 - 10
ActionTowerDefense/Assets/Scripts/Enemy.cs

@@ -180,7 +180,7 @@ public class Enemy : MoveCharacter
 
     public void AdjustHeight()
     {
-        if (canFly)
+        if (canFly && !isBeDropped)
         {
             if (transform.position.y - flyHeight > 0.1f)
             {
@@ -362,15 +362,17 @@ public class Enemy : MoveCharacter
             case CharacterState.Fall:
                 if (foot.TrigGround || canFly)
                 {
-                    if (isFindingPlayer)
+                    if (!isBeDropped)
                     {
-                        ChangeState(CharacterState.FindPlayer);
-                    }
-                    else
-                    {
-                        ChangeState(CharacterState.Idle);
+                        if (isFindingPlayer)
+                        {
+                            ChangeState(CharacterState.FindPlayer);
+                        }
+                        else
+                        {
+                            ChangeState(CharacterState.Idle);
+                        }
                     }
-
                     break;
                 }
                 //if (foot.canStepPlayers.Count > 0)
@@ -437,6 +439,14 @@ public class Enemy : MoveCharacter
                 }
                 break;
             case CharacterState.Coma:
+                if (!isCaughtByCook)
+                {
+                    pastComaTime += Time.deltaTime;
+                    if (pastComaTime >= comaTime)
+                    {
+                        ChangeState(CharacterState.Idle);
+                    }
+                }
                 break;
             case CharacterState.FindPlayer:
                 if (!isFindPlayer)
@@ -685,10 +695,14 @@ public class Enemy : MoveCharacter
                 ani.Play("idle", 0, 0);
                 aniCollider.Play("Idle", 0, 0);
                 rb.velocity = Vector3.zero;
-                foreach (GameObject i in HitCols)
+                if (isCaughtByCook)
                 {
-                    i.SetActive(false);
+                    foreach (GameObject i in HitCols)
+                    {
+                        i.SetActive(false);
+                    }
                 }
+                pastComaTime = 0;
                 break;
             case CharacterState.Attack:
                 break;

+ 17 - 2
ActionTowerDefense/Assets/Scripts/MoveCharacter.cs

@@ -25,6 +25,12 @@ public class MoveCharacter : Character
     public float hurtKeepTime = 0;
     public float hurtChangeVelocity = 1;
 
+    [Header("新增眩晕参数")]
+    public float comaTime = 5;
+    public float pastComaTime;
+    public bool isCaughtByCook;
+    public bool isBeDropped;
+
     [Header("新增漂浮效果参数")]
     public float maxTime = 0; //上升最大耗时
     public float minTime = 6;  //上升最小耗时
@@ -151,6 +157,7 @@ public class MoveCharacter : Character
 
     public void FloatDrop()
     {
+        isBeDropped = true;
         transform.localEulerAngles = new Vector3(0, 0, 0);
         ChangeState(CharacterState.Fall);
         floatState = 3;
@@ -202,8 +209,16 @@ public class MoveCharacter : Character
             }
             else if (foot.TrigGround || curHeight <= origY + 0.05f)
             {
-                transform.position = origPos;
-                ChangeState(CharacterState.Idle);
+                if (!isBeDropped)
+                {
+                    transform.position = origPos;
+                    ChangeState(CharacterState.Idle);
+                }
+                else
+                {
+                    ChangeState(CharacterState.Coma);
+                    isBeDropped = false;
+                }
                 ChangeMat(1);
                 foreach (Material m in mats)
                 {

+ 20 - 2
ActionTowerDefense/Assets/Scripts/Spirits/ESpirits_Cook.cs

@@ -87,6 +87,20 @@ public class ESpirits_Cook : MonoBehaviour
         return x;
     }
 
+    public void ReleaseFood()
+    {
+        if (food.layer == 7)
+        {
+            Demonic dem = food.GetComponent<Demonic>();
+            dem.isCaughtByCook = false;
+        }
+        else if (food.layer == 6)
+        {
+            PlayerController pc = food.GetComponent<PlayerController>();
+            pc.isCaughtByCook = false;
+        }
+    }
+
     private void ToRush()
     {
         ChangeState(cookState.run);
@@ -128,14 +142,18 @@ public class ESpirits_Cook : MonoBehaviour
                     food = target.gameObject;
                     if (food.layer == 7 && !target.isDie)
                     {
-                        food.GetComponent<Demonic>().ChangeState(CharacterState.Coma);
+                        Demonic fDem = food.GetComponent<Demonic>();
+                        fDem.isCaughtByCook = true;
+                        fDem.ChangeState(CharacterState.Coma);
                         //food.GetComponent<Demonic>().ChangeState(CharacterState.Die);
                         //cookKillEffect.SetActive(true);
                         ChangeState(cookState.seize);
                     }
                     else if (food.layer == 6 && !target.isDie)
                     {
-                        food.GetComponent<PlayerController>().ChangeState(CharacterState.Coma);
+                        PlayerController fPC = food.GetComponent<PlayerController>();
+                        fPC.isCaughtByCook = true;
+                        fPC.ChangeState(CharacterState.Coma);
                         //food.GetComponent<PlayerController>().ChangeState(CharacterState.Die);
                         //cookKillEffect.SetActive(true);
                         ChangeState(cookState.seize);