Untitled

 avatar
unknown
csharp
a year ago
1.6 kB
4
Indexable
public override _Ready()
{
    _cancellationTokenSource = new CancellationTokenSource();
    Task.Run(() => ProcessFloatingTextQueue(_cancellationTokenSource.Token));
}
private async Task ProcessFloatingTextQueue(CancellationToken cancellationToken)
{
    while (!cancellationToken.IsCancellationRequested)
    {
        if (_floatingTextQueue.Count > 0 && !_isFloatingTextBeingDisplayed)
        {
            var (text, color, type) = _floatingTextQueue.Dequeue();
            var floatingText = (FloatingText)_floatingTextScene.Instantiate();
            var startPosition = new Vector2(_floatingTextSpawner.GlobalPosition.X, _floatingTextSpawner.GlobalPosition.Y - ModuleController.Owner.Sprite.GetRect().Size.Y / 2);

            AddChild(floatingText);
            floatingText.Initialize(text, color, startPosition, type);

            _isFloatingTextBeingDisplayed = true;

            float duration = floatingText.GetAnimationDuration();
            await ToSignal(GetTree().CreateTimer(duration), "timeout");

            _isFloatingTextBeingDisplayed = false;
        }
        else
        {
            await ToSignal(GetTree().CreateTimer(0.1f), "timeout");
        }
    }
}

private void ShowFloatingText(string text, Color color, FloatingTextType type = FloatingTextType.Pop)
{
    _floatingTextQueue.Enqueue((text, color, type));

    // Uncomment the following line if you want to start processing immediately,
    // otherwise, the background task will pick up the queue in the next iteration.
    // ProcessFloatingTextQueue(_cancellationTokenSource.Token);
}