Prechádzať zdrojové kódy

实现新一版木岩20➕20的技能

HY-LSZNWIN10\Administrator 1 mesiac pred
rodič
commit
90d2525486

+ 0 - 8
ActionTowerDefense/Assets/Scripts/Characters/Demonic.cs

@@ -788,14 +788,6 @@ public class Demonic : MoveCharacter
                         GameUI.instance.summonNum.text = player.nextSummonNum.ToString();
                     }
                 }
-                if (GameManager.instance.isWoodRockEnable)
-                {
-                    int randomInt = Random.Range(0, 100);
-                    if (randomInt < GameManager.instance.woodRockProbability)
-                    {
-                        player.CheckReborn(this);
-                    }
-                }
                 summonEndToDie = false;
                 canSizeChange = false;
                 bigSoldier.enabled = false;

+ 3 - 4
ActionTowerDefense/Assets/Scripts/Characters/Enemy.cs

@@ -673,8 +673,8 @@ public class Enemy : MoveCharacter
                     int randomInt = Random.Range(0, 100);
                     if (randomInt < GameManager.instance.rockProbability)
                     {
-                        RebornSkill rebornSkill = PoolManager.Instantiate(Resources.Load<GameObject>("Prefab/StoneStatue"), transform.position).GetComponentInChildren<RebornSkill>();
-                        GameManager.instance.player.rebornSkills.Add(rebornSkill);
+                        StoneStatue stoneStatue = PoolManager.Instantiate(Resources.Load<GameObject>("Prefab/StoneStatue"), transform.position).GetComponentInChildren<StoneStatue>();
+                        GameManager.instance.player.rebornSkills.Add(stoneStatue);
                     }
                 }
                 if (GameManager.instance.isWoodEnable)
@@ -682,8 +682,7 @@ public class Enemy : MoveCharacter
                     int randomInt = Random.Range(0, 100);
                     if (randomInt < GameManager.instance.woodProbability)
                     {
-                        RebornSkill rebornSkill = PoolManager.Instantiate(Resources.Load<GameObject>("Prefab/SoulFlower"), transform.position).GetComponent<RebornSkill>();
-                        GameManager.instance.player.rebornSkills.Add(rebornSkill);
+                        PoolManager.Instantiate(Resources.Load<GameObject>("Prefab/SoulFlower"), transform.position);
                     }
                 }
                 break;

+ 14 - 5
ActionTowerDefense/Assets/Scripts/Characters/PlayerController.cs

@@ -160,7 +160,8 @@ public class PlayerController : MoveCharacter
     //怨气弹
     public GameObject angryBulletObj;
     [Header("怨气弹数量基数")] public int angryBulletNum;
-    [Header("士兵复活点位")] [ShowInInspector] public List<RebornSkill> rebornSkills = new List<RebornSkill>();
+    [Header("士兵复活点位")] [ShowInInspector] public List<StoneStatue> rebornSkills = new List<StoneStatue>();
+    [Header("死亡士兵统计")] [ShowInInspector] public List<DeadDemonicInformation> deadDemonicList;
 
     public bool btnJumpPress
     {
@@ -364,6 +365,7 @@ public class PlayerController : MoveCharacter
                 break;
         }
         demonicDic = new Dictionary<int, List<Demonic>>();
+        deadDemonicList = new List<DeadDemonicInformation>();
         for (int i = 0; i < 5; i++)
         {
             demonicDic.Add(i, new List<Demonic>());
@@ -1193,6 +1195,9 @@ public class PlayerController : MoveCharacter
         rb.constraints = RigidbodyConstraints.FreezePositionZ | RigidbodyConstraints.FreezeRotation;
         Vector3 towerPos = TowerMap.myTowers[0].transform.position;
         transform.position = new Vector3(towerPos.x + refreshPos.x , towerPos.y+refreshPos.y, 0);
+        nextSummonNum = 1;
+        GameUI.instance.summonNum.text = nextSummonNum.ToString();
+        deadDemonicList = new List<DeadDemonicInformation>();
         switch (playerId)
         {
             case 0:
@@ -1697,6 +1702,7 @@ public class PlayerController : MoveCharacter
             return;
         }
         demonicDic[demonic.id].Remove(demonic);
+        deadDemonicList.Add(new DeadDemonicInformation(demonic.id));
         if (demonic.id <= 2)
         {
             demonicNums[demonic.id].text = demonicDic[demonic.id].Count.ToString();
@@ -1798,10 +1804,13 @@ public class PlayerController : MoveCharacter
         }
         GameUI.instance.HurtMask((hp *1f)/totalHp);
     }
-
-    public void CheckReborn(Demonic demonic)
+}
+public class DeadDemonicInformation
+{
+    public int id;
+    public DeadDemonicInformation(int _id)
     {
-        if (rebornSkills.Count == 0) return;
-        rebornSkills[0].Reborn(this, demonic.id);
+        id = _id;
     }
 }
+

+ 15 - 10
ActionTowerDefense/Assets/Scripts/Characters/StoneStatue.cs

@@ -3,7 +3,7 @@ using System.Collections.Generic;
 using UnityEngine;
 using Sirenix.OdinInspector;
 
-public class StoneStatue:MonoBehaviour,RebornSkill
+public class StoneStatue:MonoBehaviour
 {
     public GameObject bulletPrefab;
     public GameObject parent;
@@ -62,6 +62,20 @@ public class StoneStatue:MonoBehaviour,RebornSkill
                             {
                                 vec3.x = -vec3.x;
                             }
+                            if (GameManager.instance.isWoodRockEnable)
+                            {
+                                int randomInt = Random.Range(0, 100);
+                                if (randomInt < GameManager.instance.woodRockProbability && GameManager.instance.player.deadDemonicList.Count > 0)
+                                {
+                                    randomInt = Random.Range(0, GameManager.instance.player.deadDemonicList.Count);
+                                    DeadDemonicInformation deadDemonicInformation = GameManager.instance.player.deadDemonicList[randomInt];
+                                    Demonic demonic = GameManager.instance.player.CreateDemonic(deadDemonicInformation.id);
+                                    demonic.attackController.attackSummonId = 0;
+                                    demonic.Attack_summon();
+                                    GameManager.instance.player.deadDemonicList.Remove(deadDemonicInformation);
+                                    PoolManager.Instantiate(Resources.Load<GameObject>("Prefab/SoulFlower"), demonic.transform.position + Vector3.up * 2, Quaternion.identity, demonic.transform).GetComponent<SoulFlower>().Init(true);
+                                }
+                            }
                             Shoot(vec3, attackFrom);
                         }
                     }
@@ -131,15 +145,6 @@ public class StoneStatue:MonoBehaviour,RebornSkill
         //Debug.Log($"发射子弹,方向:{direction},速度:{velocity.magnitude}");
     }
 
-    public void Reborn(PlayerController player, int id)
-    {
-        Demonic demonic = player.CreateDemonic(id);
-        demonic.transform.position = transform.position;
-        demonic.attackController.attackSummonId = 0;
-        demonic.Attack_summon();
-        Shoot(new Vector3(-1, 0, 0), demonic);
-    }
-
     private void OnDisable()
     {
         GameManager.instance.player.rebornSkills.Remove(this);

+ 0 - 8
ActionTowerDefense/Assets/Scripts/RebornSkill.cs

@@ -1,8 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public interface RebornSkill
-{
-    public abstract void Reborn(PlayerController player, int id);
-}

+ 0 - 11
ActionTowerDefense/Assets/Scripts/RebornSkill.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: d1eeee66243567a42a347001e505ec7d
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 10 - 12
ActionTowerDefense/Assets/Scripts/SoulFlower.cs

@@ -2,7 +2,7 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
-public class SoulFlower : MonoBehaviour,RebornSkill
+public class SoulFlower : MonoBehaviour
 {
     public GameObject soulPrefab;
     public float soulStartSpeed = 1f;
@@ -16,6 +16,8 @@ public class SoulFlower : MonoBehaviour,RebornSkill
     public float dropInterval = 10f;
     private float dropTimer;
 
+    private bool isDistoryOnDisable = false;
+
     private void OnEnable()
     {
         exitTimer = Time.time;
@@ -24,7 +26,13 @@ public class SoulFlower : MonoBehaviour,RebornSkill
 
     private void OnDisable()
     {
-        GameManager.instance.player.rebornSkills.Remove(this);
+        if (isDistoryOnDisable) Destroy(gameObject);
+    }
+
+    public void Init(bool _isDistoryOnDisable)
+    {
+        isDistoryOnDisable = _isDistoryOnDisable;
+        Destroy(GetComponent<Rigidbody>());
     }
 
     private void Update()
@@ -65,14 +73,4 @@ public class SoulFlower : MonoBehaviour,RebornSkill
             soul.Burst(dir * soulStartSpeed);
         }
     }
-
-    public void Reborn(PlayerController player,int id)
-    {
-        DropSouls();
-        Demonic demonic = player.CreateDemonic(id);
-        demonic.transform.position = transform.position;
-        demonic.attackController.attackSummonId = 0;
-        demonic.Attack_summon();
-        gameObject.SetActive(false);
-    }
 }