forked from RLBot/RLBotJavaExample
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBotManager.java
More file actions
72 lines (55 loc) · 1.64 KB
/
BotManager.java
File metadata and controls
72 lines (55 loc) · 1.64 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package rlbot;
import com.google.protobuf.InvalidProtocolBufferException;
import rlbot.api.GameData;
import rlbot.interop.RLBotDll;
import java.util.HashMap;
import java.util.Map;
public class BotManager {
private static final Map<Integer, Bot> initializedBots = new HashMap<>();
private boolean keepRunning;
private Thread looper;
public static GameData.GameTickPacket latestPacket;
public void registerBot(final int index, final String botType) {
if (initializedBots.containsKey(index)) {
return;
}
initializedBots.computeIfAbsent(index, (idx) -> {
Bot bot = this.createBot(idx, botType);
bot.start();
return bot;
});
}
private void retireBots() {
initializedBots.values().forEach(Bot::retire);
initializedBots.clear();
}
private Bot createBot(int playerIndex, String botType) {
return new Bot(playerIndex);
}
public void start() {
if (keepRunning) {
return; // Already started
}
keepRunning = true;
looper = new Thread(this::doLoop);
looper.start();
}
private void doLoop() {
while (keepRunning) {
try {
latestPacket = RLBotDll.getProtoPacket();
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
try {
Thread.sleep(16);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
public void retire() {
keepRunning = false;
retireBots();
}
}