fixed cue issue and setup proper waves
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 26s
Create tag and build when new code gets to main / Export (push) Has been cancelled

This commit is contained in:
2026-05-16 20:56:20 +02:00
parent 2103832e46
commit dc81796d52
6 changed files with 322 additions and 26 deletions

View File

@@ -17,7 +17,7 @@ public partial class TokenManager : Node
private Dictionary<ulong, Token> Tokens { get; set; } = [];
public int TokenCount => Tokens.Count;
private List<ulong> RequestQueue { get; set; } = [];
private Queue<ulong> RequestQueue { get; set; } = [];
public int MaxTokens { get; set;}
@@ -28,15 +28,27 @@ public partial class TokenManager : Node
public Token? RequestToken(Node owner)
{
if (Tokens.ContainsKey(owner.GetInstanceId())) return null; // Already has a token
if (RequestQueue.Contains(owner.GetInstanceId())) return null; // Already in queue
if (Tokens.ContainsKey(owner.GetInstanceId()))
{
GD.Print("Already has a token");
return null; // Already has a token
}
if (TokenCount >= MaxTokens)
{
GD.Print($"Max tokens reached: {TokenCount}");
return null; // Max tokens reached
}
if (!RequestQueue.Contains(owner.GetInstanceId()))
{
RequestQueue.Enqueue(owner.GetInstanceId());
}
if (RequestQueue.First() != owner.GetInstanceId())
{
GD.Print("Waiting its turn");
return null; // Next in line is not the requester
}
RequestQueue.Add(owner.GetInstanceId());
if (TokenCount >= MaxTokens) return null; // Max tokens reached
if (RequestQueue.First() != owner.GetInstanceId()) return null; // Next in line is not the requester
RequestQueue.RemoveAt(0);
var ownerInstanceId = owner.GetInstanceId();
var ownerInstanceId = RequestQueue.Dequeue();
var token = new Token(ownerInstanceId, () => UseToken(ownerInstanceId));
Tokens.Add(token.InstanceId, token);
return token;