using Core.Health;
|
using TowerDefense.Agents;
|
using TowerDefense.Level;
|
using UnityEngine;
|
|
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>
|
/// 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;
|
|
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);
|
}
|
}
|
}
|
}
|