fixed cue issue and setup proper waves
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user