using Core.Health; using TowerDefense.Agents; using TowerDefense.Level; using UnityEngine; using KTGMGemClient; using System.Collections.Generic; namespace TowerDefense.Economy { /// /// A class that adds money to the currency when the attached DamagableBehaviour dies /// 每一个Agent都会有一个LootDrop类,对应的DamageableBehaviour分别派生自: /// Agent--Targetable--DamageableBehaviour /// [RequireComponent(typeof(DamageableBehaviour))] public class LootDrop : MonoBehaviour { /// /// The amount of loot/currency dropped when object "dies" /// public int lootDropped = 1; /// /// The attached DamagableBehaviour /// protected DamageableBehaviour m_DamageableBehaviour; /// /// Caches attached DamageableBehaviour /// protected virtual void OnEnable() { if (m_DamageableBehaviour == null) { m_DamageableBehaviour = GetComponent(); } m_DamageableBehaviour.configuration.died += OnDeath; } /// /// Unsubscribed from the died event /// protected virtual void OnDisable() { m_DamageableBehaviour.configuration.died -= OnDeath; } /// /// The callback for when the attached object "dies". /// Add to current currency /// 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(); 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(); if (agent != null) { EndlessLevelManager.instance.Currency.AddCurrency(lootDropped); // 处理掉落 int tunel = agent.waveLineID + 1; List rewardList = EndlessPortData.GetDropRewardList(EndlessLevelManager.instance.CurrentLevel, EndlessLevelManager.instance.WaveManager.CurrentWaveIndex + 1, tunel); if (rewardList.Count > 0) EndlessDropManager.instance.AddDrop(rewardList, gameObject.transform.position); } } } } }