Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / effects / SmearingSprite.cs
@小李xl 小李xl on 23 Nov 2023 1 KB 替换翻滚美术素材

using Godot;

/// <summary>
/// 拖影精灵
/// </summary>
public partial class SmearingSprite : Sprite2D, IPoolItem
{
    public bool IsRecycled { get; set; }
    public string Logotype { get; set; }
    public bool IsDestroyed { get; set; }

    private double _timeOut = -1;
    private double _totalTime = 0;

    /// <summary>
    /// 从 ActivityObject 的 AnimatedSprite 中复制动画帧
    /// </summary>
    public void FromActivityObject(ActivityObject activityObject)
    {
        var currentTexture = activityObject.GetCurrentTexture();
        Texture = currentTexture;
        Offset = activityObject.AnimatedSprite.Offset;
        GlobalPosition = activityObject.AnimatedSprite.GlobalPosition;
        GlobalScale = activityObject.AnimatedSprite.GlobalScale;
        GlobalRotation = activityObject.AnimatedSprite.GlobalRotation;
    }

    /// <summary>
    /// 设置显示的时间, 过期会自动回收
    /// </summary>
    public void SetShowTimeout(float time)
    {
        _totalTime = time;
        _timeOut = time;
    }

    public override void _Process(double delta)
    {
        if (_timeOut > 0)
        {
            _timeOut -= delta;
            Modulate = new Color(1, 1, 1, (float)(_timeOut / _totalTime));
            if (_timeOut <= 0)
            {
                ObjectPool.Reclaim(this);
            }
        }
    }

    public void Destroy()
    {
        if (IsDestroyed)
        {
            return;
        }

        IsDestroyed = true;
        QueueFree();
    }
    public void OnReclaim()
    {
        GetParent().RemoveChild(this);
    }

    public void OnLeavePool()
    {
        Modulate = Colors.White;
    }
}