-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInputQueue.cs
More file actions
50 lines (45 loc) · 1.26 KB
/
InputQueue.cs
File metadata and controls
50 lines (45 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System.Collections.Generic;
using UnityEngine;
public class InputQueue {
readonly Queue<UserAction> queue = new();
readonly float lifeTime;
public InputQueue(float lifeTime) {
this.lifeTime = lifeTime;
}
public void AddAction(ActionType actionType) {
UserAction action = new(actionType, lifeTime);
queue.Enqueue(action);
}
// This is C# not Go brother
public (bool empty, UserAction) Peek() {
while (queue.Count > 0 && queue.Peek().Expired) {
queue.Dequeue();
}
if (queue.Count == 0) {
return (true, new());
}
return (false, queue.Peek());
}
public void Pop() {
if (queue.Count > 0) {
queue.Dequeue();
} else {
Debug.LogError("Trying to pop input queue with no items");
}
}
}
public enum ActionType {
Attack,
Dodge
}
public struct UserAction {
public ActionType actionType;
readonly float lifeTime;
readonly float inputTime;
public UserAction(ActionType actionType, float lifeTime) {
this.actionType = actionType;
this.lifeTime = lifeTime;
this.inputTime = Time.time;
}
public readonly bool Expired => (Time.time - inputTime) >= lifeTime;
}