Aircraft.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 Jiang Yin. All rights reserved.
  4. // Homepage: https://gameframework.cn/
  5. // Feedback: mailto:ellan@gameframework.cn
  6. //------------------------------------------------------------
  7. using GameFramework;
  8. using System.Collections.Generic;
  9. using UnityEngine;
  10. using UnityGameFramework.Runtime;
  11. namespace MetaClient
  12. {
  13. /// <summary>
  14. /// 战机类。
  15. /// </summary>
  16. public abstract class Aircraft : TargetableObject
  17. {
  18. [SerializeField]
  19. private AircraftData m_AircraftData = null;
  20. [SerializeField]
  21. protected Thruster m_Thruster = null;
  22. [SerializeField]
  23. protected List<Weapon> m_Weapons = new List<Weapon>();
  24. [SerializeField]
  25. protected List<Armor> m_Armors = new List<Armor>();
  26. #if UNITY_2017_3_OR_NEWER
  27. protected override void OnShow(object userData)
  28. #else
  29. protected internal override void OnShow(object userData)
  30. #endif
  31. {
  32. base.OnShow(userData);
  33. m_AircraftData = userData as AircraftData;
  34. if (m_AircraftData == null)
  35. {
  36. Log.Error("Aircraft data is invalid.");
  37. return;
  38. }
  39. Name = Utility.Text.Format("Aircraft ({0})", Id);
  40. GameEntry.Entity.ShowThruster(m_AircraftData.GetThrusterData());
  41. List<WeaponData> weaponDatas = m_AircraftData.GetAllWeaponDatas();
  42. for (int i = 0; i < weaponDatas.Count; i++)
  43. {
  44. GameEntry.Entity.ShowWeapon(weaponDatas[i]);
  45. }
  46. List<ArmorData> armorDatas = m_AircraftData.GetAllArmorDatas();
  47. for (int i = 0; i < armorDatas.Count; i++)
  48. {
  49. GameEntry.Entity.ShowArmor(armorDatas[i]);
  50. }
  51. }
  52. #if UNITY_2017_3_OR_NEWER
  53. protected override void OnHide(bool isShutdown, object userData)
  54. #else
  55. protected internal override void OnHide(bool isShutdown, object userData)
  56. #endif
  57. {
  58. base.OnHide(isShutdown, userData);
  59. }
  60. #if UNITY_2017_3_OR_NEWER
  61. protected override void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData)
  62. #else
  63. protected internal override void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData)
  64. #endif
  65. {
  66. base.OnAttached(childEntity, parentTransform, userData);
  67. if (childEntity is Thruster)
  68. {
  69. m_Thruster = (Thruster)childEntity;
  70. return;
  71. }
  72. if (childEntity is Weapon)
  73. {
  74. m_Weapons.Add((Weapon)childEntity);
  75. return;
  76. }
  77. if (childEntity is Armor)
  78. {
  79. m_Armors.Add((Armor)childEntity);
  80. return;
  81. }
  82. }
  83. #if UNITY_2017_3_OR_NEWER
  84. protected override void OnDetached(EntityLogic childEntity, object userData)
  85. #else
  86. protected internal override void OnDetached(EntityLogic childEntity, object userData)
  87. #endif
  88. {
  89. base.OnDetached(childEntity, userData);
  90. if (childEntity is Thruster)
  91. {
  92. m_Thruster = null;
  93. return;
  94. }
  95. if (childEntity is Weapon)
  96. {
  97. m_Weapons.Remove((Weapon)childEntity);
  98. return;
  99. }
  100. if (childEntity is Armor)
  101. {
  102. m_Armors.Remove((Armor)childEntity);
  103. return;
  104. }
  105. }
  106. protected override void OnDead(Entity attacker)
  107. {
  108. base.OnDead(attacker);
  109. GameEntry.Entity.ShowEffect(new EffectData(GameEntry.Entity.GenerateSerialId(), m_AircraftData.DeadEffectId)
  110. {
  111. Position = CachedTransform.localPosition,
  112. });
  113. GameEntry.Sound.PlaySound(m_AircraftData.DeadSoundId);
  114. }
  115. public override ImpactData GetImpactData()
  116. {
  117. return new ImpactData(m_AircraftData.Camp, m_AircraftData.HP, 0, m_AircraftData.Defense);
  118. }
  119. }
  120. }