Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / Component.cs
@小李xl 小李xl on 12 Nov 2022 5 KB 添加敌人视野
  1.  
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// 组件基类, 用于挂载到游戏物体上, 相比于原生 Node 更加轻量化, 实例化 Component 不会创建额外的 Node, 可以大量添加组件
  6. /// </summary>
  7. public abstract class Component : IProcess, IDestroy
  8. {
  9. /// <summary>
  10. /// 当前组件所挂载的游戏对象
  11. /// </summary>
  12. public ActivityObject ActivityObject { get; private set; }
  13.  
  14. /// <summary>
  15. /// 当前组件所挂载的物体的坐标
  16. /// </summary>
  17. public Vector2 Position
  18. {
  19. get => ActivityObject.Position;
  20. set => ActivityObject.Position = value;
  21. }
  22.  
  23. /// <summary>
  24. /// 当前组件所挂载物体的全局坐标
  25. /// </summary>
  26. public Vector2 GlobalPosition
  27. {
  28. get => ActivityObject.GlobalPosition;
  29. set => ActivityObject.GlobalPosition = value;
  30. }
  31.  
  32. /// <summary>
  33. /// 当前组件所挂载物体的缩放
  34. /// </summary>
  35. public Vector2 Scale
  36. {
  37. get => ActivityObject.Scale;
  38. set => ActivityObject.Scale = value;
  39. }
  40. /// <summary>
  41. /// 当前组件所挂载物体的全局缩放
  42. /// </summary>
  43. public Vector2 GlobalScale
  44. {
  45. get => ActivityObject.GlobalScale;
  46. set => ActivityObject.GlobalScale = value;
  47. }
  48.  
  49. /// <summary>
  50. /// 当前组件所挂载物体的旋转角度
  51. /// </summary>
  52. public float Rotation
  53. {
  54. get => ActivityObject.Rotation;
  55. set => ActivityObject.Rotation = value;
  56. }
  57. /// <summary>
  58. /// 当前组件所挂载物体的全局旋转角度
  59. /// </summary>
  60. public float GlobalRotation
  61. {
  62. get => ActivityObject.GlobalRotation;
  63. set => ActivityObject.GlobalRotation = value;
  64. }
  65.  
  66. /// <summary>
  67. /// 当前组件所挂载物体的角度制旋转角度
  68. /// </summary>
  69. public float RotationDegrees
  70. {
  71. get => ActivityObject.RotationDegrees;
  72. set => ActivityObject.RotationDegrees = value;
  73. }
  74. /// <summary>
  75. /// 当前组件所挂载物体的全局角度制旋转角度
  76. /// </summary>
  77. public float GlobalRotationDegrees
  78. {
  79. get => ActivityObject.GlobalRotationDegrees;
  80. set => ActivityObject.GlobalRotationDegrees = value;
  81. }
  82. /// <summary>
  83. /// 当前组件所挂载物体的ZIndex
  84. /// </summary>
  85. public int ZIndex
  86. {
  87. get => ActivityObject.ZIndex;
  88. set => ActivityObject.ZIndex = value;
  89. }
  90. /// <summary>
  91. /// 当前组件是否显示
  92. /// </summary>
  93. public bool Visible
  94. {
  95. get => ActivityObject.Visible;
  96. set => ActivityObject.Visible = value;
  97. }
  98.  
  99. /// <summary>
  100. /// 挂载物体的动画节点
  101. /// </summary>
  102. public AnimatedSprite AnimatedSprite => ActivityObject.AnimatedSprite;
  103. /// <summary>
  104. /// 挂载物体的阴影节点
  105. /// </summary>
  106. public Sprite ShadowSprite => ActivityObject.ShadowSprite;
  107. /// <summary>
  108. /// 挂载物体的碰撞器节点
  109. /// </summary>
  110. public CollisionShape2D Collision => ActivityObject.Collision;
  111.  
  112. /// <summary>
  113. /// 是否启用当前组件, 如果禁用, 则不会调用 Process 和 PhysicsProcess
  114. /// </summary>
  115. public bool Enable
  116. {
  117. get => _enable;
  118. set
  119. {
  120. if (!_enable && value)
  121. {
  122. OnEnable();
  123. }
  124. else if (_enable && !value)
  125. {
  126. OnDisable();
  127. }
  128.  
  129. _enable = value;
  130. }
  131. }
  132.  
  133. private bool _enable = true;
  134.  
  135. /// <summary>
  136. /// 是否被销毁
  137. /// </summary>
  138. public bool IsDestroyed { get; private set; }
  139.  
  140. //是否调用过 start 函数
  141. internal bool IsStart = false;
  142.  
  143. /// <summary>
  144. /// 第一次调用 Process 或 PhysicsProcess 之前调用
  145. /// </summary>
  146. public virtual void Ready()
  147. {
  148. }
  149.  
  150. /// <summary>
  151. /// 如果启用了组件, 则每帧会调用一次 Process
  152. /// </summary>
  153. /// <param name="delta"></param>
  154. public virtual void Process(float delta)
  155. {
  156. }
  157.  
  158. /// <summary>
  159. /// 如果启用了组件, 则每物理帧会调用一次 PhysicsProcess
  160. /// </summary>
  161. /// <param name="delta"></param>
  162. public virtual void PhysicsProcess(float delta)
  163. {
  164. }
  165.  
  166. /// <summary>
  167. /// 当组件被销毁时调用
  168. /// </summary>
  169. public virtual void OnDestroy()
  170. {
  171. }
  172.  
  173. /// <summary>
  174. /// 当该组件挂载到GameObject上时调用
  175. /// </summary>
  176. public virtual void OnMount()
  177. {
  178. }
  179.  
  180. /// <summary>
  181. /// 当该组件被取消挂载时调用
  182. /// </summary>
  183. public virtual void OnUnMount()
  184. {
  185. }
  186.  
  187. /// <summary>
  188. /// 当组件启用时调用
  189. /// </summary>
  190. public virtual void OnEnable()
  191. {
  192. }
  193.  
  194. /// <summary>
  195. /// 当组件禁用时调用
  196. /// </summary>
  197. public virtual void OnDisable()
  198. {
  199. }
  200. /// <summary>
  201. /// 当组件销毁
  202. /// </summary>
  203. public void Destroy()
  204. {
  205. if (IsDestroyed)
  206. {
  207. return;
  208. }
  209.  
  210. IsDestroyed = true;
  211. if (ActivityObject != null)
  212. {
  213. ActivityObject.RemoveComponent(this);
  214. }
  215.  
  216. OnDestroy();
  217. }
  218. internal void _SetActivityObject(ActivityObject activityObject)
  219. {
  220. ActivityObject = activityObject;
  221. }
  222. }