//------------------------------------------------------------ // Game Framework // Copyright © 2013-2021 Jiang Yin. All rights reserved. // Homepage: https://gameframework.cn/ // Feedback: mailto:ellan@gameframework.cn //------------------------------------------------------------ using GameFramework.DataTable; using System; using System.Collections.Generic; using UnityEngine; namespace MetaClient { [Serializable] public abstract class AircraftData : TargetableObjectData { [SerializeField] private ThrusterData m_ThrusterData = null; [SerializeField] private List m_WeaponDatas = new List(); [SerializeField] private List m_ArmorDatas = new List(); [SerializeField] private int m_MaxHP = 0; [SerializeField] private int m_Defense = 0; [SerializeField] private int m_DeadEffectId = 0; [SerializeField] private int m_DeadSoundId = 0; public AircraftData(int entityId, int typeId, CampType camp) : base(entityId, typeId, camp) { IDataTable dtAircraft = GameEntry.DataTable.GetDataTable(); DRAircraft drAircraft = dtAircraft.GetDataRow(TypeId); if (drAircraft == null) { return; } m_ThrusterData = new ThrusterData(GameEntry.Entity.GenerateSerialId(), drAircraft.ThrusterId, Id, Camp); for (int index = 0, weaponId = 0; (weaponId = drAircraft.GetWeaponIdAt(index)) > 0; index++) { AttachWeaponData(new WeaponData(GameEntry.Entity.GenerateSerialId(), weaponId, Id, Camp)); } for (int index = 0, armorId = 0; (armorId = drAircraft.GetArmorIdAt(index)) > 0; index++) { AttachArmorData(new ArmorData(GameEntry.Entity.GenerateSerialId(), armorId, Id, Camp)); } m_DeadEffectId = drAircraft.DeadEffectId; m_DeadSoundId = drAircraft.DeadSoundId; HP = m_MaxHP; } /// /// 最大生命。 /// public override int MaxHP { get { return m_MaxHP; } } /// /// 防御。 /// public int Defense { get { return m_Defense; } } /// /// 速度。 /// public float Speed { get { return m_ThrusterData.Speed; } } public int DeadEffectId { get { return m_DeadEffectId; } } public int DeadSoundId { get { return m_DeadSoundId; } } public ThrusterData GetThrusterData() { return m_ThrusterData; } public List GetAllWeaponDatas() { return m_WeaponDatas; } public void AttachWeaponData(WeaponData weaponData) { if (weaponData == null) { return; } if (m_WeaponDatas.Contains(weaponData)) { return; } m_WeaponDatas.Add(weaponData); } public void DetachWeaponData(WeaponData weaponData) { if (weaponData == null) { return; } m_WeaponDatas.Remove(weaponData); } public List GetAllArmorDatas() { return m_ArmorDatas; } public void AttachArmorData(ArmorData armorData) { if (armorData == null) { return; } if (m_ArmorDatas.Contains(armorData)) { return; } m_ArmorDatas.Add(armorData); RefreshData(); } public void DetachArmorData(ArmorData armorData) { if (armorData == null) { return; } m_ArmorDatas.Remove(armorData); RefreshData(); } private void RefreshData() { m_MaxHP = 0; m_Defense = 0; for (int i = 0; i < m_ArmorDatas.Count; i++) { m_MaxHP += m_ArmorDatas[i].MaxHP; m_Defense += m_ArmorDatas[i].Defense; } if (HP > m_MaxHP) { HP = m_MaxHP; } } } }