- using Godot;
- /// <summary>
- /// 组件基类
- /// </summary>
- public abstract class Component : IProcess, IDestroy
- {
- public ActivityObject ActivityObject { get; private set; }
- public Vector2 Position
- {
- get => ActivityObject.Position;
- set => ActivityObject.Position = value;
- }
- public Vector2 GlobalPosition
- {
- get => ActivityObject.GlobalPosition;
- set => ActivityObject.GlobalPosition = value;
- }
- public bool Visible
- {
- get => ActivityObject.Visible;
- set => ActivityObject.Visible = value;
- }
- public AnimatedSprite AnimatedSprite => ActivityObject.AnimatedSprite;
- public Sprite ShadowSprite => ActivityObject.ShadowSprite;
- public CollisionShape2D Collision => ActivityObject.Collision;
- public bool Enable { get; set; } = true;
- public bool IsDestroyed { get; private set; }
- private bool _isReady = false;
- public Component()
- {
- }
- /// <summary>
- /// 第一次调用 Process 或 PhysicsProcess 之前调用
- /// </summary>
- public virtual void Ready()
- {
- }
- public virtual void Process(float delta)
- {
- }
- public virtual void PhysicsProcess(float delta)
- {
- }
- public virtual void OnDestroy()
- {
- }
- /// <summary>
- /// 当该组件挂载到GameObject上时调用
- /// </summary>
- public virtual void OnMount()
- {
- }
- /// <summary>
- /// 当该组件被取消挂载时调用
- /// </summary>
- public virtual void OnUnMount()
- {
- }
- /// <summary>
- /// 当组件销毁
- /// </summary>
- public new void Destroy()
- {
- if (IsDestroyed)
- {
- return;
- }
- IsDestroyed = true;
- if (ActivityObject != null)
- {
- ActivityObject.RemoveComponent(this);
- }
- OnDestroy();
- }
- internal void _TriggerProcess(float delta)
- {
- if (!_isReady)
- {
- _isReady = true;
- Ready();
- }
- Process(delta);
- }
- internal void _TriggerPhysicsProcess(float delta)
- {
- if (!_isReady)
- {
- _isReady = true;
- Ready();
- }
- PhysicsProcess(delta);
- }
- internal void _SetActivityObject(ActivityObject activityObject)
- {
- ActivityObject = activityObject;
- }
- }