Skip to content

Commit 7dfe602

Browse files
author
Jasper Geurtz
committed
Use BitSet for Game.visibleUnits
1 parent e362570 commit 7dfe602

1 file changed

Lines changed: 11 additions & 7 deletions

File tree

‎src/main/java/bwapi/Game.java‎

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class Game {
4242

4343
private static final int REGION_DATA_SIZE = 5000;
4444

45-
private final Set<Integer> visibleUnits = new HashSet<>();
45+
private final BitSet visibleUnits = new BitSet();
4646

4747
private List<Unit> allUnits;
4848
private final ClientData clientData;
@@ -320,20 +320,24 @@ void unitCreate(final int id) {
320320

321321
void unitShow(final int id) {
322322
unitCreate(id);
323-
visibleUnits.add(id);
323+
visibleUnits.set(id);
324324
}
325325

326326
void unitHide(final int id) {
327-
visibleUnits.remove(id);
327+
visibleUnits.clear(id);
328328
}
329329

330330
void onFrame(final int frame) {
331331
if (frame > 0) {
332-
allUnits = visibleUnits.stream()
333-
.map(i -> units[i])
334-
.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
332+
final List<Unit> visible = new ArrayList<>(visibleUnits.cardinality());
333+
for (int i = visibleUnits.nextSetBit(0); i >= 0; i = visibleUnits.nextSetBit(i + 1)) {
334+
visible.add(units[i]);
335+
}
336+
allUnits = Collections.unmodifiableList(visible);
337+
}
338+
for (final Unit u : getAllUnits()) {
339+
u.updatePosition(frame);
335340
}
336-
getAllUnits().forEach(u -> u.updatePosition(frame));
337341
updatePlayers();
338342
}
339343

0 commit comments

Comments
 (0)