Untitled
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); }
Editor is loading...