Skip to content

Commit 80d5b5b

Browse files
committed
actually fix ghost units & fix checking for neutral player
1 parent f3807b3 commit 80d5b5b

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

src/main/java/bwapi/EventHandler.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public void operation(final Client.GameData.Event event) {
4646
eventListener.onSaveGame(data.eventString(event.v1()));
4747
break;
4848
case 8: //UnitDiscover
49+
game.unitCreate(event.v1());
4950
u = game.getUnit(event.v1());
5051
u.updatePosition(frames);
5152
u.updateType(frames);
@@ -71,13 +72,15 @@ public void operation(final Client.GameData.Event event) {
7172
eventListener.onUnitHide(u);
7273
break;
7374
case 12: //UnitCreate
75+
game.unitCreate(event.v1());
7476
u = game.getUnit(event.v1());
7577
u.updatePosition(frames);
7678
u.updateType(frames);
7779
u.updatePlayer(frames);
7880
eventListener.onUnitCreate(u);
7981
break;
8082
case 13: //UnitDestroy
83+
game.unitHide(event.v1());
8184
u = game.getUnit(event.v1());
8285
eventListener.onUnitDestroy(u);
8386
break;
@@ -93,6 +96,7 @@ public void operation(final Client.GameData.Event event) {
9396
eventListener.onUnitRenegade(u);
9497
break;
9598
case 17: //UnitComplete
99+
game.unitCreate(event.v1());
96100
u = game.getUnit(event.v1());
97101
u.updatePlayer(frames);
98102
eventListener.onUnitComplete(u);

src/main/java/bwapi/Game.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,13 @@ void init() {
151151

152152
regionSet = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(regions)));
153153

154-
units = new Unit[1000];
154+
units = new Unit[10000];
155155
for (int id = 0; id < gameData.getInitialUnitCount(); id++) {
156156
final Unit unit = new Unit(gameData.getUnit(id), this);
157-
157+
//skip ghost units
158+
if (unit.getInitialType() == UnitType.Terran_Marine && unit.getInitialHitPoints() == 0) {
159+
continue;
160+
}
158161
units[id] = unit;
159162

160163
if (unit.getType().isMineralField()) {
@@ -217,16 +220,22 @@ void init() {
217220
mapPixelHeight = mapHeight * TilePosition.SIZE_IN_PIXELS;
218221
}
219222

220-
void unitShow(final int id) {
223+
void unitCreate(final int id) {
221224
if (id > units.length) {
222225
//rescale unit array if needed
223226
final Unit[] largerUnitsArray = new Unit[2 * units.length];
224227
System.arraycopy(units, 0, largerUnitsArray, 0, units.length);
225228
units = largerUnitsArray;
226229
}
230+
227231
if (units[id] == null) {
228-
units[id] = new Unit(gameData.getUnit(id), this);
232+
final Unit u = new Unit(gameData.getUnit(id), this);
233+
units[id] = u;
229234
}
235+
}
236+
237+
void unitShow(final int id) {
238+
unitCreate(id);
230239
visibleUnits.add(id);
231240
}
232241

src/main/java/bwapi/Player.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,16 @@ public class Player {
1616
private final Race race;
1717
private final PlayerType playerType;
1818
private final Force force;
19-
private final boolean neutral;
2019
private final TilePosition startLocation;
2120

2221
Player(final Client.GameData.PlayerData playerData, final Game game) {
2322
this.playerData = playerData;
2423
this.game = game;
25-
2624
this.id = playerData.id();
2725
this.name = playerData.name();
2826
this.race = Race.races[playerData.race()];
2927
this.playerType = PlayerType.playerTypes[playerData.type()];
3028
this.force = game.getForce(playerData.force());
31-
this.neutral = equals(game.neutral());
3229
this.startLocation = new TilePosition(playerData.startLocationX(), playerData.startLocationY());
3330
}
3431

@@ -68,7 +65,7 @@ public boolean isEnemy(final Player player) {
6865
}
6966

7067
public boolean isNeutral() {
71-
return neutral;
68+
return equals(game.neutral());
7269
}
7370

7471
public TilePosition getStartLocation() {

0 commit comments

Comments
 (0)