Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / Component.cs
  1.  
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// 组件基类
  6. /// </summary>
  7. public abstract class Component : IProcess, IDestroy
  8. {
  9. public ActivityObject ActivityObject { get; private set; }
  10.  
  11. public Vector2 Position
  12. {
  13. get => ActivityObject.Position;
  14. set => ActivityObject.Position = value;
  15. }
  16.  
  17. public Vector2 GlobalPosition
  18. {
  19. get => ActivityObject.GlobalPosition;
  20. set => ActivityObject.GlobalPosition = value;
  21. }
  22.  
  23. public bool Visible
  24. {
  25. get => ActivityObject.Visible;
  26. set => ActivityObject.Visible = value;
  27. }
  28.  
  29. public AnimatedSprite AnimatedSprite => ActivityObject.AnimatedSprite;
  30. public Sprite ShadowSprite => ActivityObject.ShadowSprite;
  31. public CollisionShape2D Collision => ActivityObject.Collision;
  32.  
  33. public bool Enable { get; set; } = true;
  34.  
  35. public bool IsDestroyed { get; private set; }
  36.  
  37. private bool _isReady = false;
  38.  
  39. public Component()
  40. {
  41. }
  42.  
  43. /// <summary>
  44. /// 第一次调用 Process 或 PhysicsProcess 之前调用
  45. /// </summary>
  46. public virtual void Ready()
  47. {
  48. }
  49.  
  50. public virtual void Process(float delta)
  51. {
  52. }
  53.  
  54. public virtual void PhysicsProcess(float delta)
  55. {
  56. }
  57.  
  58. public virtual void OnDestroy()
  59. {
  60. }
  61.  
  62. /// <summary>
  63. /// 当该组件挂载到GameObject上时调用
  64. /// </summary>
  65. public virtual void OnMount()
  66. {
  67. }
  68.  
  69. /// <summary>
  70. /// 当该组件被取消挂载时调用
  71. /// </summary>
  72. public virtual void OnUnMount()
  73. {
  74. }
  75.  
  76. /// <summary>
  77. /// 当组件销毁
  78. /// </summary>
  79. public new void Destroy()
  80. {
  81. if (IsDestroyed)
  82. {
  83. return;
  84. }
  85.  
  86. IsDestroyed = true;
  87. if (ActivityObject != null)
  88. {
  89. ActivityObject.RemoveComponent(this);
  90. }
  91.  
  92. OnDestroy();
  93. }
  94.  
  95. internal void _TriggerProcess(float delta)
  96. {
  97. if (!_isReady)
  98. {
  99. _isReady = true;
  100. Ready();
  101. }
  102.  
  103. Process(delta);
  104. }
  105.  
  106. internal void _TriggerPhysicsProcess(float delta)
  107. {
  108. if (!_isReady)
  109. {
  110. _isReady = true;
  111. Ready();
  112. }
  113.  
  114. PhysicsProcess(delta);
  115. }
  116.  
  117. internal void _SetActivityObject(ActivityObject activityObject)
  118. {
  119. ActivityObject = activityObject;
  120. }
  121. }