Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / Component.cs
@小李xl 小李xl on 18 Oct 2022 3 KB 重构throwNode, 目前还有点bug
  1.  
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// 组件基类, 用于挂载到游戏物体上, 相比于原生 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 bool Visible
  36. {
  37. get => ActivityObject.Visible;
  38. set => ActivityObject.Visible = value;
  39. }
  40.  
  41. /// <summary>
  42. /// 挂载物体的动画节点
  43. /// </summary>
  44. public AnimatedSprite AnimatedSprite => ActivityObject.AnimatedSprite;
  45. /// <summary>
  46. /// 挂载物体的阴影节点
  47. /// </summary>
  48. public Sprite ShadowSprite => ActivityObject.ShadowSprite;
  49. /// <summary>
  50. /// 挂载物体的碰撞器节点
  51. /// </summary>
  52. public CollisionShape2D Collision => ActivityObject.Collision;
  53.  
  54. /// <summary>
  55. /// 是否启用当前组件
  56. /// </summary>
  57. public bool Enable { get; set; } = true;
  58.  
  59. /// <summary>
  60. /// 是否被销毁
  61. /// </summary>
  62. public bool IsDestroyed { get; private set; }
  63.  
  64. //是否调用过 start 函数
  65. internal bool IsStart = false;
  66.  
  67. /// <summary>
  68. /// 第一次调用 Update 或 PhysicsUpdate 之前调用
  69. /// </summary>
  70. public virtual void Start()
  71. {
  72. }
  73.  
  74. /// <summary>
  75. /// 如果启用了组件, 则每帧会调用一次 Update
  76. /// </summary>
  77. /// <param name="delta"></param>
  78. public virtual void Update(float delta)
  79. {
  80. }
  81.  
  82. /// <summary>
  83. /// 如果启用了组件, 则每物理帧会调用一次 PhysicsUpdate
  84. /// </summary>
  85. /// <param name="delta"></param>
  86. public virtual void PhysicsUpdate(float delta)
  87. {
  88. }
  89.  
  90. /// <summary>
  91. /// 当组件被销毁时调用
  92. /// </summary>
  93. public virtual void OnDestroy()
  94. {
  95. }
  96.  
  97. /// <summary>
  98. /// 当该组件挂载到GameObject上时调用
  99. /// </summary>
  100. public virtual void OnMount()
  101. {
  102. }
  103.  
  104. /// <summary>
  105. /// 当该组件被取消挂载时调用
  106. /// </summary>
  107. public virtual void OnUnMount()
  108. {
  109. }
  110.  
  111. /// <summary>
  112. /// 当组件销毁
  113. /// </summary>
  114. public void Destroy()
  115. {
  116. if (IsDestroyed)
  117. {
  118. return;
  119. }
  120.  
  121. IsDestroyed = true;
  122. if (ActivityObject != null)
  123. {
  124. ActivityObject.RemoveComponent(this);
  125. }
  126.  
  127. OnDestroy();
  128. }
  129. internal void _SetActivityObject(ActivityObject activityObject)
  130. {
  131. ActivityObject = activityObject;
  132. }
  133. }