//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------
using GameFramework;
using System.Collections.Generic;
using UnityEngine;
using UnityGameFramework.Runtime;
namespace MetaClient
{
///
/// 战机类。
///
public abstract class Aircraft : TargetableObject
{
[SerializeField]
private AircraftData m_AircraftData = null;
[SerializeField]
protected Thruster m_Thruster = null;
[SerializeField]
protected List m_Weapons = new List();
[SerializeField]
protected List m_Armors = new List();
#if UNITY_2017_3_OR_NEWER
protected override void OnShow(object userData)
#else
protected internal override void OnShow(object userData)
#endif
{
base.OnShow(userData);
m_AircraftData = userData as AircraftData;
if (m_AircraftData == null)
{
Log.Error("Aircraft data is invalid.");
return;
}
Name = Utility.Text.Format("Aircraft ({0})", Id);
GameEntry.Entity.ShowThruster(m_AircraftData.GetThrusterData());
List weaponDatas = m_AircraftData.GetAllWeaponDatas();
for (int i = 0; i < weaponDatas.Count; i++)
{
GameEntry.Entity.ShowWeapon(weaponDatas[i]);
}
List armorDatas = m_AircraftData.GetAllArmorDatas();
for (int i = 0; i < armorDatas.Count; i++)
{
GameEntry.Entity.ShowArmor(armorDatas[i]);
}
}
#if UNITY_2017_3_OR_NEWER
protected override void OnHide(bool isShutdown, object userData)
#else
protected internal override void OnHide(bool isShutdown, object userData)
#endif
{
base.OnHide(isShutdown, userData);
}
#if UNITY_2017_3_OR_NEWER
protected override void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData)
#else
protected internal override void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData)
#endif
{
base.OnAttached(childEntity, parentTransform, userData);
if (childEntity is Thruster)
{
m_Thruster = (Thruster)childEntity;
return;
}
if (childEntity is Weapon)
{
m_Weapons.Add((Weapon)childEntity);
return;
}
if (childEntity is Armor)
{
m_Armors.Add((Armor)childEntity);
return;
}
}
#if UNITY_2017_3_OR_NEWER
protected override void OnDetached(EntityLogic childEntity, object userData)
#else
protected internal override void OnDetached(EntityLogic childEntity, object userData)
#endif
{
base.OnDetached(childEntity, userData);
if (childEntity is Thruster)
{
m_Thruster = null;
return;
}
if (childEntity is Weapon)
{
m_Weapons.Remove((Weapon)childEntity);
return;
}
if (childEntity is Armor)
{
m_Armors.Remove((Armor)childEntity);
return;
}
}
protected override void OnDead(Entity attacker)
{
base.OnDead(attacker);
GameEntry.Entity.ShowEffect(new EffectData(GameEntry.Entity.GenerateSerialId(), m_AircraftData.DeadEffectId)
{
Position = CachedTransform.localPosition,
});
GameEntry.Sound.PlaySound(m_AircraftData.DeadSoundId);
}
public override ImpactData GetImpactData()
{
return new ImpactData(m_AircraftData.Camp, m_AircraftData.HP, 0, m_AircraftData.Defense);
}
}
}