| | |
| | | using TowerDefense.Agents; |
| | | using TowerDefense.Level; |
| | | using UnityEngine; |
| | | using KTGMGemClient; |
| | | using System.Collections.Generic; |
| | | |
| | | namespace TowerDefense.Economy |
| | | { |
| | | /// <summary> |
| | | /// A class that adds money to the currency when the attached DamagableBehaviour dies |
| | | /// 每一个Agent都会有一个LootDrop类,对应的DamageableBehaviour分别派生自: |
| | | /// Agent--Targetable--DamageableBehaviour |
| | | /// </summary> |
| | | [RequireComponent(typeof(DamageableBehaviour))] |
| | | public class LootDrop : MonoBehaviour |
| | | { |
| | | /// <summary> |
| | | /// The amount of loot/currency dropped when object "dies" |
| | | /// </summary> |
| | | public int lootDropped = 1; |
| | | /// <summary> |
| | | /// A class that adds money to the currency when the attached DamagableBehaviour dies |
| | | /// 每一个Agent都会有一个LootDrop类,对应的DamageableBehaviour分别派生自: |
| | | /// Agent--Targetable--DamageableBehaviour |
| | | /// </summary> |
| | | [RequireComponent(typeof(DamageableBehaviour))] |
| | | public class LootDrop : MonoBehaviour |
| | | { |
| | | /// <summary> |
| | | /// The amount of loot/currency dropped when object "dies" |
| | | /// </summary> |
| | | public int lootDropped = 1; |
| | | |
| | | /// <summary> |
| | | /// The attached DamagableBehaviour |
| | | /// </summary> |
| | | protected DamageableBehaviour m_DamageableBehaviour; |
| | | /// <summary> |
| | | /// The attached DamagableBehaviour |
| | | /// </summary> |
| | | protected DamageableBehaviour m_DamageableBehaviour; |
| | | |
| | | /// <summary> |
| | | /// Caches attached DamageableBehaviour |
| | | /// </summary> |
| | | protected virtual void OnEnable() |
| | | { |
| | | if (m_DamageableBehaviour == null) |
| | | { |
| | | m_DamageableBehaviour = GetComponent<DamageableBehaviour>(); |
| | | } |
| | | m_DamageableBehaviour.configuration.died += OnDeath; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// Unsubscribed from the <see cref="m_DamageableBehaviour"/> died event |
| | | /// </summary> |
| | | protected virtual void OnDisable() |
| | | { |
| | | m_DamageableBehaviour.configuration.died -= OnDeath; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// The callback for when the attached object "dies". |
| | | /// Add <see cref="lootDropped"/> to current currency |
| | | /// </summary> |
| | | protected virtual void OnDeath(HealthChangeInfo info) |
| | | { |
| | | m_DamageableBehaviour.configuration.died -= OnDeath; |
| | | |
| | | // |
| | | // 当前LootDrop所在的Agent死亡后,给全局的CurrencyManager增加金币. |
| | | // 当前Agent死亡之后,需要在对手盘加入新的Agent |
| | | LevelManager levelManager = LevelManager.instance; |
| | | OpponentMgr opmgr = OpponentMgr.instance; |
| | | if (levelManager == null) |
| | | return; |
| | | Agent agent = gameObject.GetComponent<Agent>(); |
| | | if( (agent!=null) && agent.opponentAgent) |
| | | { |
| | | if (opmgr == null) |
| | | { |
| | | return; |
| | | } |
| | | opmgr.currency.AddCurrency(lootDropped); |
| | | /* 修改为不再死亡后发布怪物到对方视野. |
| | | if( agent.bRespawn) |
| | | { |
| | | AgentSetData sd = agent.mAgentData; |
| | | int attid = OpponentMgr.instance.GetTowerAttID(agent.waveLineID); |
| | | levelManager.waveManager.SpawnAgent(agent.waveLineID,sd.hp,sd.speed, attid ); |
| | | }*/ |
| | | } |
| | | else |
| | | /// <summary> |
| | | /// Caches attached DamageableBehaviour |
| | | /// </summary> |
| | | protected virtual void OnEnable() |
| | | { |
| | | if (m_DamageableBehaviour == null) |
| | | { |
| | | levelManager.currency.AddCurrency(lootDropped); |
| | | /* |
| | | if (agent.bRespawn) |
| | | { |
| | | AgentSetData sd = agent.mAgentData; |
| | | int attid = levelManager.GetTowerAttID(agent.waveLineID); |
| | | opmgr.m_WaveManager.SpawnAgent(agent.waveLineID, sd.hp,sd.speed, attid ); |
| | | }*/ |
| | | } |
| | | m_DamageableBehaviour = GetComponent<DamageableBehaviour>(); |
| | | } |
| | | m_DamageableBehaviour.configuration.died += OnDeath; |
| | | } |
| | | |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// Unsubscribed from the <see cref="m_DamageableBehaviour"/> died event |
| | | /// </summary> |
| | | protected virtual void OnDisable() |
| | | { |
| | | m_DamageableBehaviour.configuration.died -= OnDeath; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// The callback for when the attached object "dies". |
| | | /// Add <see cref="lootDropped"/> to current currency |
| | | /// </summary> |
| | | protected virtual void OnDeath(HealthChangeInfo info) |
| | | { |
| | | m_DamageableBehaviour.configuration.died -= OnDeath; |
| | | |
| | | if (LevelManager.instanceExists) |
| | | { |
| | | // 当前LootDrop所在的Agent死亡后,给全局的CurrencyManager增加金币. |
| | | // 当前Agent死亡之后,需要在对手盘加入新的Agent |
| | | LevelManager levelManager = LevelManager.instance; |
| | | OpponentMgr opmgr = OpponentMgr.instance; |
| | | if (levelManager == null) |
| | | return; |
| | | Agent agent = gameObject.GetComponent<Agent>(); |
| | | if ((agent != null) && agent.opponentAgent) |
| | | { |
| | | if (opmgr == null) |
| | | { |
| | | return; |
| | | } |
| | | opmgr.currency.AddCurrency(lootDropped); |
| | | /* 修改为不再死亡后发布怪物到对方视野. |
| | | if( agent.bRespawn) |
| | | { |
| | | AgentSetData sd = agent.mAgentData; |
| | | int attid = OpponentMgr.instance.GetTowerAttID(agent.waveLineID); |
| | | levelManager.waveManager.SpawnAgent(agent.waveLineID,sd.hp,sd.speed, attid ); |
| | | }*/ |
| | | } |
| | | else |
| | | { |
| | | levelManager.currency.AddCurrency(lootDropped); |
| | | /* |
| | | if (agent.bRespawn) |
| | | { |
| | | AgentSetData sd = agent.mAgentData; |
| | | int attid = levelManager.GetTowerAttID(agent.waveLineID); |
| | | opmgr.m_WaveManager.SpawnAgent(agent.waveLineID, sd.hp,sd.speed, attid ); |
| | | }*/ |
| | | } |
| | | } |
| | | else if (EndlessLevelManager.instanceExists) |
| | | { |
| | | Agent agent = gameObject.GetComponent<Agent>(); |
| | | |
| | | if (agent != null) |
| | | { |
| | | EndlessLevelManager.instance.Currency.AddCurrency(lootDropped); |
| | | // 处理掉落 |
| | | int tunel = agent.waveLineID + 1; |
| | | |
| | | List<reward> rewardList = EndlessPortData.GetDropRewardList(EndlessLevelManager.instance.CurrentLevel, |
| | | EndlessLevelManager.instance.WaveManager.CurrentWaveIndex + 1, tunel); |
| | | |
| | | if (rewardList.Count > 0) |
| | | EndlessDropManager.instance.AddDrop(rewardList, gameObject.transform.position); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |