Skip to content

Commit f89f248

Browse files
author
Bytekeeper
committed
Builder pattern for Simulator, more stuff might be coming.
1 parent 86463bb commit f89f248

File tree

3 files changed

+49
-49
lines changed

3 files changed

+49
-49
lines changed

src/jmh/java/org/bk/ass/SimulatorBenchmark.java

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.bk.ass.sim.BWAPI4JAgentFactory;
44
import org.bk.ass.sim.Simulator;
5+
import org.bk.ass.sim.Simulator.SimulatorBuilder;
56
import org.openbw.bwapi4j.test.BWDataProvider;
67
import org.openbw.bwapi4j.type.UnitType;
78
import org.openjdk.jmh.annotations.*;
@@ -11,39 +12,24 @@
1112
public class SimulatorBenchmark {
1213

1314
@State(Scope.Thread)
14-
public static class DefaultSetup {
15+
public static class MyState {
1516

1617
Simulator simulator;
18+
Simulator simulatorFS4;
1719
BWAPI4JAgentFactory factory = new BWAPI4JAgentFactory(null);
1820

1921
@Setup(Level.Invocation)
2022
public void setup() {
21-
simulator = new Simulator();
22-
23-
for (int i = 0; i < 30; i++) {
24-
simulator.addAgentA(factory.of(UnitType.Zerg_Mutalisk));
25-
}
26-
for (int i = 0; i < 30; i++) {
27-
simulator.addAgentB(factory.of(UnitType.Zerg_Hydralisk));
28-
}
29-
}
30-
}
31-
32-
@State(Scope.Thread)
33-
public static class WithFrameSkipFour {
34-
35-
Simulator simulator;
36-
BWAPI4JAgentFactory factory = new BWAPI4JAgentFactory(null);
37-
38-
@Setup(Level.Invocation)
39-
public void setup() {
40-
simulator = new Simulator(4);
23+
simulator = new SimulatorBuilder().build();
24+
simulatorFS4 = new SimulatorBuilder().withFrameSkip(4).build();
4125

4226
for (int i = 0; i < 30; i++) {
4327
simulator.addAgentA(factory.of(UnitType.Zerg_Mutalisk));
28+
simulatorFS4.addAgentA(factory.of(UnitType.Zerg_Mutalisk));
4429
}
4530
for (int i = 0; i < 30; i++) {
4631
simulator.addAgentB(factory.of(UnitType.Zerg_Hydralisk));
32+
simulatorFS4.addAgentB(factory.of(UnitType.Zerg_Hydralisk));
4733
}
4834
}
4935
}
@@ -57,17 +43,17 @@ public void setup() {
5743
}
5844

5945
@Benchmark
60-
public int _30MutasVs30Hydras(DefaultSetup state) {
46+
public int _30MutasVs30Hydras(MyState state) {
6147
return state.simulator.simulate(-1);
6248
}
6349

6450
@Benchmark
65-
public int _30MutasVs30Hydras_fs4(WithFrameSkipFour state) {
66-
return state.simulator.simulate(-1);
51+
public int _30MutasVs30Hydras_fs4(MyState state) {
52+
return state.simulatorFS4.simulate(-1);
6753
}
6854

6955
@Benchmark
70-
public int clearCollisionMaps(DefaultSetup state) {
56+
public int clearCollisionMaps(MyState state) {
7157
state.simulator.reset();
7258
return state.simulator.getAgentsA().size() + state.simulator.getAgentsB().size();
7359
}

src/main/java/org/bk/ass/sim/Simulator.java

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,7 @@ public class Simulator {
4545
private final Behavior playerBBehavior;
4646
private final int frameSkip;
4747

48-
public Simulator() {
49-
this(1);
50-
}
51-
52-
public Simulator(Behavior playerABehavior, Behavior playerBBehavior) {
53-
this(1, playerABehavior, playerBBehavior);
54-
}
55-
56-
public Simulator(int frameSkip) {
57-
this(frameSkip, new RoleBasedBehavior(), new RoleBasedBehavior());
58-
}
59-
60-
public Simulator(int frameSkip, Behavior playerABehavior, Behavior playerBBehavior) {
48+
private Simulator(int frameSkip, Behavior playerABehavior, Behavior playerBBehavior) {
6149
if (frameSkip < 1) throw new IllegalArgumentException("frameSkip must be >= 1");
6250
Objects.requireNonNull(playerABehavior, "Behavior of player A must be set");
6351
Objects.requireNonNull(playerBBehavior, "Behavior of player B must be set");
@@ -226,8 +214,7 @@ private void updateStats(UnorderedCollection<Agent> agents) {
226214
if (agent.plagueDamagePerFrameShifted * frameSkip < agent.healthShifted)
227215
agent.healthShifted -= agent.plagueDamagePerFrameShifted * frameSkip;
228216
agent.remainingStimFrames -= frameSkip;
229-
if (agent.regeneratesHealth)
230-
agent.healthShifted += 4 * frameSkip;
217+
if (agent.regeneratesHealth) agent.healthShifted += 4 * frameSkip;
231218
agent.energyShifted += 8 * frameSkip;
232219
}
233220
}
@@ -354,4 +341,31 @@ public IntEvaluation subtract(IntEvaluation other) {
354341
return new IntEvaluation(evalA - other.evalA, evalB - other.evalB);
355342
}
356343
}
344+
345+
public static final class SimulatorBuilder {
346+
private Behavior playerABehavior = new RoleBasedBehavior();
347+
private Behavior playerBBehavior = new RoleBasedBehavior();
348+
private int frameSkip = 1;
349+
350+
public SimulatorBuilder() {}
351+
352+
public SimulatorBuilder withPlayerABehavior(Behavior playerABehavior) {
353+
this.playerABehavior = playerABehavior;
354+
return this;
355+
}
356+
357+
public SimulatorBuilder withPlayerBBehavior(Behavior playerBBehavior) {
358+
this.playerBBehavior = playerBBehavior;
359+
return this;
360+
}
361+
362+
public SimulatorBuilder withFrameSkip(int frameSkip) {
363+
this.frameSkip = frameSkip;
364+
return this;
365+
}
366+
367+
public Simulator build() {
368+
return new Simulator(frameSkip, playerABehavior, playerBBehavior);
369+
}
370+
}
357371
}

src/test/java/org/bk/ass/sim/SimulatorTest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.bk.ass.sim;
22

33
import org.bk.ass.PositionOutOfBoundsException;
4-
import org.bk.ass.sim.Simulator.RoleBasedBehavior;
4+
import org.bk.ass.sim.Simulator.SimulatorBuilder;
55
import org.junit.jupiter.api.BeforeAll;
66
import org.junit.jupiter.api.Test;
77
import org.openbw.bwapi4j.test.BWDataProvider;
@@ -13,7 +13,7 @@
1313

1414
class SimulatorTest {
1515

16-
private Simulator simulator = new Simulator();
16+
private Simulator simulator = new SimulatorBuilder().build();
1717
private BWAPI4JAgentFactory factory = new BWAPI4JAgentFactory(null);
1818

1919
@BeforeAll
@@ -108,7 +108,7 @@ void MMvsMM() {
108108
@Test
109109
void MMvsMM_FS4() {
110110
// GIVEN
111-
simulator = new Simulator(4);
111+
simulator = new SimulatorBuilder().withFrameSkip(4).build();
112112
simulator.addAgentA(factory.of(UnitType.Terran_Marine));
113113
simulator.addAgentA(factory.of(UnitType.Terran_Marine));
114114
simulator.addAgentA(factory.of(UnitType.Terran_Marine));
@@ -657,7 +657,7 @@ void archonSplashShouldNotAffectOwnUnits() {
657657
@Test
658658
void goonShouldDieWhenRunningAwayFromScout() {
659659
// GIVEN
660-
simulator = new Simulator(new RetreatBehavior(), new RoleBasedBehavior());
660+
simulator = new SimulatorBuilder().withPlayerABehavior(new RetreatBehavior()).build();
661661
simulator.addAgentA(factory.of(UnitType.Protoss_Dragoon).setX(500));
662662
simulator.addAgentB(factory.of(UnitType.Protoss_Scout).setX(495));
663663

@@ -704,7 +704,7 @@ void shouldResetCollisions() {
704704
@Test
705705
void shouldNotAttackStasisedUnitsNorBeAttackedByThem() {
706706
// GIVEN
707-
simulator = new Simulator(new RetreatBehavior(), new RoleBasedBehavior());
707+
simulator = new SimulatorBuilder().build();
708708
simulator.addAgentA(factory.of(UnitType.Terran_Goliath).setX(500).setStasised(true));
709709
simulator.addAgentB(factory.of(UnitType.Terran_Wraith).setX(495));
710710

@@ -719,7 +719,7 @@ void shouldNotAttackStasisedUnitsNorBeAttackedByThem() {
719719
@Test
720720
void shouldAttackLockeddownUnitsButDontBeAttackedByThem() {
721721
// GIVEN
722-
simulator = new Simulator(new RetreatBehavior(), new RoleBasedBehavior());
722+
simulator = new SimulatorBuilder().build();
723723
simulator.addAgentA(factory.of(UnitType.Terran_Goliath).setX(500).setLockeddown(true));
724724
simulator.addAgentB(factory.of(UnitType.Terran_Wraith).setX(495));
725725

@@ -734,7 +734,7 @@ void shouldAttackLockeddownUnitsButDontBeAttackedByThem() {
734734
@Test
735735
void shouldNotRepairStasisedUnit() {
736736
// GIVEN
737-
simulator = new Simulator(new RetreatBehavior(), new RoleBasedBehavior());
737+
simulator = new SimulatorBuilder().build();
738738
simulator.addAgentA(
739739
factory.of(UnitType.Terran_Goliath).setX(500).setStasised(true).setHealth(97));
740740
simulator.addAgentA(factory.of(UnitType.Terran_SCV).setX(500));
@@ -749,7 +749,7 @@ void shouldNotRepairStasisedUnit() {
749749
@Test
750750
void shouldRepairLockeddownUnit() {
751751
// GIVEN
752-
simulator = new Simulator(new RetreatBehavior(), new RoleBasedBehavior());
752+
simulator = new SimulatorBuilder().build();
753753
simulator.addAgentA(
754754
factory.of(UnitType.Terran_Goliath).setX(500).setLockeddown(true).setHealth(97));
755755
simulator.addAgentA(factory.of(UnitType.Terran_SCV).setX(500));
@@ -897,7 +897,7 @@ void reaverVs12Lings() {
897897
@Test
898898
void lingsVsZealots_FS3() {
899899
// GIVEN
900-
simulator = new Simulator(3);
900+
simulator = new SimulatorBuilder().withFrameSkip(3).build();
901901
simulator.addAgentA(factory.of(UnitType.Protoss_Zealot));
902902
simulator.addAgentA(factory.of(UnitType.Protoss_Zealot));
903903

0 commit comments

Comments
 (0)