Skip to content

Commit f8d613b

Browse files
committed
dont keep track of frames in eventhandler and make getPosition lazy
1 parent 466c13b commit f8d613b

File tree

3 files changed

+29
-35
lines changed

3 files changed

+29
-35
lines changed

src/main/java/bwapi/EventHandler.java

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ class EventHandler implements Client.EventHandler {
55
private final BWEventListener eventListener;
66
private final Game game;
77
private final Client client;
8-
private int frames;
98

109
public EventHandler(final BWEventListener eventListener, final Client client) {
1110
this.eventListener = eventListener;
@@ -18,7 +17,6 @@ public void operation(final ClientData.Event event) {
1817
final Unit u;
1918
switch (event.getType()) {
2019
case MatchStart:
21-
frames = 0;
2220
game.init();
2321
game.setLatCom(false);
2422
eventListener.onStart();
@@ -27,11 +25,10 @@ public void operation(final ClientData.Event event) {
2725
eventListener.onEnd(event.getV1() != 0);
2826
break;
2927
case MatchFrame:
30-
game.onFrame(frames);
28+
game.onFrame();
3129
eventListener.onFrame();
32-
frames += 1;
3330
break;
34-
//case 3: //MenuFrame
31+
//case MenuFrame:
3532
case SendText:
3633
eventListener.onSendText(client.eventString(event.getV1()));
3734
break;
@@ -50,22 +47,19 @@ public void operation(final ClientData.Event event) {
5047
case UnitDiscover:
5148
game.unitCreate(event.getV1());
5249
u = game.getUnit(event.getV1());
53-
u.updatePosition(frames);
54-
u.updateType(frames);
55-
u.updatePlayer(frames);
50+
u.updateType();
51+
u.updatePlayer();
5652
eventListener.onUnitDiscover(u);
5753
break;
5854
case UnitEvade:
5955
u = game.getUnit(event.getV1());
60-
u.updatePosition(frames);
6156
eventListener.onUnitEvade(u);
6257
break;
6358
case UnitShow:
6459
game.unitShow(event.getV1());
6560
u = game.getUnit(event.getV1());
66-
u.updatePosition(frames);
67-
u.updateType(frames);
68-
u.updatePlayer(frames);
61+
u.updateType();
62+
u.updatePlayer();
6963
eventListener.onUnitShow(u);
7064
break;
7165
case UnitHide:
@@ -76,9 +70,8 @@ public void operation(final ClientData.Event event) {
7670
case UnitCreate:
7771
game.unitCreate(event.getV1());
7872
u = game.getUnit(event.getV1());
79-
u.updatePosition(frames);
80-
u.updateType(frames);
81-
u.updatePlayer(frames);
73+
u.updateType();
74+
u.updatePlayer();
8275
eventListener.onUnitCreate(u);
8376
break;
8477
case UnitDestroy:
@@ -88,19 +81,18 @@ public void operation(final ClientData.Event event) {
8881
break;
8982
case UnitMorph:
9083
u = game.getUnit(event.getV1());
91-
u.updatePosition(frames);
92-
u.updateType(frames);
84+
u.updateType();
9385
eventListener.onUnitMorph(u);
9486
break;
9587
case UnitRenegade:
9688
u = game.getUnit(event.getV1());
97-
u.updatePlayer(frames);
89+
u.updatePlayer();
9890
eventListener.onUnitRenegade(u);
9991
break;
10092
case UnitComplete:
10193
game.unitCreate(event.getV1());
10294
u = game.getUnit(event.getV1());
103-
u.updatePlayer(frames);
95+
u.updatePlayer();
10496
eventListener.onUnitComplete(u);
10597
break;
10698
}

src/main/java/bwapi/Game.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ public class Game {
5858
private List<Region> regionSet;
5959
// CHANGING
6060
private Unit[] units;
61+
private int frameCount = 0;
62+
6163
//CACHED
6264
private int randomSeed;
6365
private int revision;
@@ -261,13 +263,14 @@ void unitHide(final int id) {
261263
visibleUnits.remove(id);
262264
}
263265

264-
void onFrame(final int frame) {
265-
if (frame > 0) {
266+
void onFrame() {
267+
this.frameCount = gameData.getFrameCount();
268+
269+
if (getFrameCount() > 0) {
266270
allUnits = Collections.unmodifiableList(visibleUnits.stream()
267271
.map(i -> units[i])
268272
.collect(Collectors.toList()));
269273
}
270-
getAllUnits().forEach(u -> u.updatePosition(frame));
271274
}
272275

273276
void addUnitCommand(final int type, final int unit, final int target, final int x, final int y, final int extra) {
@@ -383,7 +386,7 @@ public int getLatency() {
383386
}
384387

385388
public int getFrameCount() {
386-
return gameData.getFrameCount();
389+
return frameCount;
387390
}
388391

389392
public int getReplayFrameCount() {

src/main/java/bwapi/Unit.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,8 @@ public class Unit {
4242
this.unitData = unitData;
4343
this.game = game;
4444

45-
updateType(0);
46-
updatePlayer(0);
47-
updatePosition(0);
45+
updateType();
46+
updatePlayer();
4847

4948
initialType = getType();
5049
initialResources = getResources();
@@ -87,6 +86,11 @@ public UnitType getType() {
8786
}
8887

8988
public Position getPosition() {
89+
final int frame = game.getFrameCount();
90+
if (frame > lastPositionUpdate) {
91+
lastPositionUpdate = frame;
92+
position = new Position(unitData.getPositionX(), unitData.getPositionY());
93+
}
9094
return position;
9195
}
9296

@@ -4126,25 +4130,20 @@ public int hashCode() {
41264130
return getID();
41274131
}
41284132

4129-
void updateType(final int frame) {
4133+
void updateType() {
4134+
final int frame = game.getFrameCount();
41304135
if (frame > lastTypeUpdate) {
41314136
lastTypeUpdate = frame;
41324137
position = new Position(unitData.getPositionX(), unitData.getPositionY());
41334138
}
41344139
unitType = UnitType.idToEnum[unitData.getType()];
41354140
}
41364141

4137-
void updatePlayer(final int frame) {
4142+
void updatePlayer() {
4143+
final int frame = game.getFrameCount();
41384144
if (frame > lastPlayerUpdate) {
41394145
lastPlayerUpdate = frame;
41404146
player = game.getPlayer(unitData.getPlayer());
41414147
}
41424148
}
4143-
4144-
void updatePosition(final int frame) {
4145-
if (frame > lastPositionUpdate) {
4146-
lastPositionUpdate = frame;
4147-
position = new Position(unitData.getPositionX(), unitData.getPositionY());
4148-
}
4149-
}
41504149
}

0 commit comments

Comments
 (0)