Skip to content

Commit 6075320

Browse files
author
Andrew Brindamour
committed
Temporary workaround for #15. Throttle updates to the Damcon UI to once every 100ms.
1 parent a390fa3 commit 6075320

File tree

1 file changed

+29
-16
lines changed
  • src/com/brindyblitz/artemis/engconsole/ui/damcon

1 file changed

+29
-16
lines changed

src/com/brindyblitz/artemis/engconsole/ui/damcon/Damcon.java

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import java.io.File;
1212
import java.io.FileNotFoundException;
1313
import java.util.*;
14+
import java.util.concurrent.Executors;
15+
import java.util.concurrent.TimeUnit;
1416

1517
import javax.media.j3d.Appearance;
1618
import javax.media.j3d.BranchGroup;
@@ -91,6 +93,8 @@ public class Damcon implements MouseListener, MouseMotionListener, MouseWheelLis
9193

9294
private AudioManager audioManager;
9395

96+
private boolean dirty = false;
97+
9498
public Damcon(EngineeringConsoleManager engineeringConsoleManager, AudioManager audio_manager) {
9599
this.engineeringConsoleManager = engineeringConsoleManager;
96100
this.audioManager = audio_manager;
@@ -147,26 +151,35 @@ private void loadInternalNodesAndDamconTeams() {
147151
this.universe.addBranchGraph(damconBranchGroup);
148152

149153
this.engineeringConsoleManager.onEvent(Events.CHANGE, () -> {
154+
this.dirty = true;
155+
});
156+
157+
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
158+
if (this.dirty) {
159+
this.dirty = false;
160+
this.doUpdate();
161+
}
162+
}, 0, 100, TimeUnit.MILLISECONDS);
163+
}
164+
165+
private void doUpdate() {
166+
for (Map.Entry<GridCoord, Float> entry : engineeringConsoleManager.getGridHealth().entrySet()) {
167+
InternalNode node = internalNodes.get(entry.getKey());
168+
node.updateHealth(entry.getValue());
169+
}
150170

151-
for (Map.Entry<GridCoord, Float> entry : engineeringConsoleManager.getGridHealth().entrySet()) {
152-
InternalNode node = internalNodes.get(entry.getKey());
153-
node.updateHealth(entry.getValue());
154-
}
155-
156-
for (EngineeringConsoleManager.EnhancedDamconStatus damconStatus : engineeringConsoleManager.getDamconTeams()) {
157-
InternalTeam it = internalTeams.get(damconStatus.getTeamNumber());
158-
159-
if (it == null) {
160-
it = new InternalTeam(damconStatus, audioManager);
161-
internalTeams.put(damconStatus.getTeamNumber(), it);
162-
nodesToSelectables.put(it.getShape(), it);
163-
damconBranchGroup.addChild(it.getBranchGroup());
164-
}
171+
for (EngineeringConsoleManager.EnhancedDamconStatus damconStatus : engineeringConsoleManager.getDamconTeams()) {
172+
InternalTeam it = internalTeams.get(damconStatus.getTeamNumber());
165173

166-
it.updatePos(damconStatus.getX(), damconStatus.getY(), damconStatus.getZ());
174+
if (it == null) {
175+
it = new InternalTeam(damconStatus, audioManager);
176+
internalTeams.put(damconStatus.getTeamNumber(), it);
177+
nodesToSelectables.put(it.getShape(), it);
178+
damconBranchGroup.addChild(it.getBranchGroup());
167179
}
168180

169-
});
181+
it.updatePos(damconStatus.getX(), damconStatus.getY(), damconStatus.getZ());
182+
}
170183
}
171184

172185
private void loadCorridors() {

0 commit comments

Comments
 (0)