Skip to content

Commit 3c2d757

Browse files
committed
start implementation
1 parent f16a429 commit 3c2d757

File tree

6 files changed

+128
-85
lines changed

6 files changed

+128
-85
lines changed

src/main/java/bwapi/BWClient.java

Lines changed: 3 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,15 @@
11
package bwapi;
22

33
import JavaBWAPIBackend.Client;
4-
54
import java.util.Objects;
6-
import java.util.Set;
7-
import java.util.TreeSet;
8-
9-
class EventHandler implements Client.EventHandler {
10-
private final BWEventListener eventListener;
11-
private Set<Integer> visibleUnits = new TreeSet<>();
12-
13-
14-
public EventHandler(final BWEventListener eventListener) {
15-
this.eventListener = eventListener;
16-
}
17-
18-
/*
19-
MatchStart(0),
20-
MatchEnd(1),
21-
MatchFrame(2),
22-
MenuFrame(3),
23-
SendText(4),
24-
ReceiveText(5),
25-
PlayerLeft(6),
26-
NukeDetect(7),
27-
UnitDiscover(8),
28-
UnitEvade(9),
29-
UnitShow(10),
30-
UnitHide(11),
31-
UnitCreate(12),
32-
UnitDestroy(13),
33-
UnitMorph(14),
34-
UnitRenegade(15),
35-
SaveGame(16),
36-
UnitComplete(17);
37-
*/
38-
public void operation(Client.GameData.Event event) {
39-
switch (event.type()) {
40-
case 0: //MatchStart
41-
eventListener.onStart();
42-
break;
43-
case 1: //MatchEnd
44-
eventListener.onEnd(event.v1() != 0);
45-
break;
46-
case 2: //MatchFrame
47-
eventListener.onFrame();
48-
break;
49-
50-
//TODO add the remaining events
51-
case 10: // UnitShow
52-
visibleUnits.add(event.v1());
53-
//eventListener.onUnitShow();
54-
break;
555

56-
case 11: // UnitHide
57-
visibleUnits.add(event.v1());
58-
//eventListener.onUnitHide();
59-
break;
60-
}
61-
}
62-
}
636

647

658
public class BWClient {
669
private BWEventListener eventListener;
6710

6811
private Client client;
69-
private Game game;
12+
private EventHandler handler;
7013

7114

7215
public BWClient(final BWEventListener eventListener) {
@@ -75,7 +18,7 @@ public BWClient(final BWEventListener eventListener) {
7518
}
7619

7720
public Game getGame() {
78-
return game;
21+
return handler == null ? null : handler.getGame();
7922
}
8023

8124
public void startGame() {
@@ -91,10 +34,9 @@ public void startGame() {
9134
catch (Throwable ignored) { } }
9235
}
9336

94-
final EventHandler handler = new EventHandler(eventListener);
37+
handler = new EventHandler(eventListener, client.data());
9538

9639
try {
97-
game = new Game(client.data());
9840
while(!client.data().isInGame()) {
9941
client.update(handler);
10042
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package bwapi;
2+
3+
4+
import JavaBWAPIBackend.Client;
5+
import bwapi.point.Position;
6+
7+
class EventHandler implements Client.EventHandler {
8+
private final BWEventListener eventListener;
9+
private final Client.GameData data;
10+
private Game game;
11+
12+
public EventHandler(final BWEventListener eventListener, final Client.GameData data) {
13+
this.eventListener = eventListener;
14+
this.data = data;
15+
}
16+
17+
public void operation(Client.GameData.Event event) {
18+
switch (event.type()) {
19+
case 0: //MatchStart
20+
//recreate a new game instance every onStart instead of a "clear" method
21+
game = new Game(data);
22+
eventListener.onStart();
23+
break;
24+
case 1: //MatchEnd
25+
eventListener.onEnd(event.v1() != 0);
26+
break;
27+
case 2: //MatchFrame
28+
eventListener.onFrame();
29+
break;
30+
//case 3: //MenuFrame
31+
case 4: //SendText
32+
//TODO eventListener.onSendText();
33+
break;
34+
case 5: //ReceiveText
35+
//TODO eventListener.onReceiveText();
36+
break;
37+
case 6: //PlayerLeft
38+
eventListener.onPlayerLeft(game.getPlayer(event.v1()));
39+
break;
40+
case 7: //NukeDetect
41+
eventListener.onNukeDetect(new Position(event.v1(), event.v2()));
42+
break;
43+
case 8: //UnitDiscover
44+
eventListener.onUnitDiscover(game.getUnit(event.v1()));
45+
break;
46+
case 9: //UnitEvade
47+
eventListener.onUnitEvade(game.getUnit(event.v1()));
48+
break;
49+
case 10: // UnitShow
50+
eventListener.onUnitShow(game.getUnit(event.v1()));
51+
break;
52+
case 11: //UnitHide
53+
eventListener.onUnitHide(game.getUnit(event.v1()));
54+
break;
55+
case 12: //UnitCreate
56+
eventListener.onUnitCreate(game.getUnit(event.v1()));
57+
break;
58+
case 13: //UnitDestroy
59+
eventListener.onUnitDestroy(game.getUnit(event.v1()));
60+
break;
61+
case 14: //UnitMorph
62+
eventListener.onUnitMorph(game.getUnit(event.v1()));
63+
break;
64+
case 15: //UnitRenegade
65+
eventListener.onUnitRenegade(game.getUnit((event.v1())));
66+
break;
67+
case 16: //SaveGame
68+
//TODO eventListener.onSaveGame();
69+
break;
70+
case 17: //UnitComplete
71+
eventListener.onUnitComplete(game.getUnit((event.v1())));
72+
break;
73+
}
74+
}
75+
76+
public Game getGame() {
77+
return game;
78+
}
79+
}

src/main/java/bwapi/Force.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66

77
public class Force {
88
private final ForceData forceData;
9+
private final Game game;
910

10-
Force(ForceData forceData) {
11+
Force(final ForceData forceData, final Game game) {
1112
this.forceData = forceData;
13+
this.game = game;
1214
}
1315

1416
public int getID() {

src/main/java/bwapi/Game.java

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,43 @@
1010
import bwapi.types.UpgradeType;
1111
import bwapi.values.*;
1212

13-
import java.util.ArrayList;
14-
import java.util.List;
13+
import java.util.*;
1514

1615
public class Game {
1716
final GameData gameData;
17+
final Map<Integer, Unit> units = new HashMap<>();
18+
final Map<Integer, Player> players = new HashMap<>();
19+
final Map<Integer, Force> forces = new HashMap<>();
20+
final Map<Integer, Bullet> bullets = new HashMap<>();
1821

1922
public Game(GameData gameData) {
2023
this.gameData = gameData;
24+
init();
2125
}
2226

27+
private void init() {
28+
for (int id=0; id < gameData.getForceCount(); id++) {
29+
forces.put(id, new Force(gameData.getForce(id), this));
30+
}
31+
for (int id=0; id < gameData.getPlayerCount(); id++) {
32+
players.put(id, new Player(gameData.getPlayer(id), this));
33+
}
34+
}
2335

24-
25-
public List<Force> getForces() {
26-
List<Force> forces = new ArrayList<>();
27-
for (int i=0; i < gameData.getForceCount(); i++)
28-
forces.add(new Force(gameData.getForce(i)));
29-
return forces;
36+
public Collection<Force> getForces() {
37+
return forces.values();
3038
}
3139

32-
public List<Player> getPlayers() {
33-
List<Player> players = new ArrayList<>();
34-
for (int i=0; i < gameData.getPlayerCount(); i++)
35-
players.add(new Player(gameData.getPlayer(i)));
36-
return players;
40+
public Collection<Player> getPlayers() {
41+
return players.values();
3742
}
3843

39-
/**
40-
public List<Unit> getAllUnits();
4144

45+
public Collection<Unit> getAllUnits() {
46+
return units.values();
47+
}
48+
49+
/*
4250
public List<Unit> getMinerals();
4351
4452
public List<Unit> getGeysers();
@@ -54,12 +62,20 @@ public List<Player> getPlayers() {
5462
public List<Bullet> getBullets();
5563
5664
public List<Position> getNukeDots();
65+
*/
5766

58-
public Force getForce(int forceID);
67+
public Force getForce(int forceID) {
68+
return forces.get(forceID);
69+
}
5970

60-
public Player getPlayer(int playerID);
71+
public Player getPlayer(int playerID) {
72+
return players.get(playerID);
73+
}
6174

62-
public Unit getUnit(int unitID);
75+
public Unit getUnit(int unitID) {
76+
return units.get(unitID);
77+
}
78+
/*
6379
6480
public Unit indexToUnit(int unitIndex);
6581
@@ -229,16 +245,16 @@ public List<Player> getPlayers() {
229245
*/
230246

231247
public Player self() {
232-
return new Player(gameData.getPlayer(gameData.self()));
248+
return players.get(gameData.self());
233249
}
234250

235251

236252
public Player enemy() {
237-
return new Player(gameData.getPlayer(gameData.enemy()));
253+
return players.get(gameData.enemy());
238254
}
239255

240256
public Player neutral() {
241-
return new Player(gameData.getPlayer(gameData.neutral()));
257+
return players.get(gameData.neutral());
242258
}
243259

244260
/*

src/main/java/bwapi/Player.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@
1010

1111
public class Player {
1212
private final PlayerData playerData;
13+
private final Game game;
1314

14-
Player(PlayerData playerData) {
15+
Player(final PlayerData playerData, final Game game) {
1516
this.playerData = playerData;
17+
this.game = game;
1618
}
1719

1820
public int getID() {

src/main/java/bwapi/Unit.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88

99
public class Unit {
1010
private final int id;
11+
private final Game game;
1112

12-
Unit(int id) {
13+
Unit(final int id, final Game game) {
1314
this.id = id;
15+
this.game = game;
1416
}
1517

1618
public int getID() {

0 commit comments

Comments
 (0)