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);
}
}
}
}
}