Skip to content

Commit a56c077

Browse files
committed
implement techtype
1 parent 3c2d757 commit a56c077

File tree

2 files changed

+152
-30
lines changed

2 files changed

+152
-30
lines changed

src/main/java/bwapi/EventHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public EventHandler(final BWEventListener eventListener, final Client.GameData d
1717
public void operation(Client.GameData.Event event) {
1818
switch (event.type()) {
1919
case 0: //MatchStart
20-
//recreate a new game instance every onStart instead of a "clear" method
20+
//recreate a new game instance every onStart instead of a "clear" method in Game
2121
game = new Game(data);
2222
eventListener.onStart();
2323
break;
@@ -36,6 +36,7 @@ public void operation(Client.GameData.Event event) {
3636
break;
3737
case 6: //PlayerLeft
3838
eventListener.onPlayerLeft(game.getPlayer(event.v1()));
39+
//TODO remove the player from the Game?
3940
break;
4041
case 7: //NukeDetect
4142
eventListener.onNukeDetect(new Position(event.v1(), event.v2()));

src/main/java/bwapi/types/TechType.java

Lines changed: 150 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
package bwapi.types;
22

3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.HashSet;
6+
import java.util.Set;
7+
import java.util.stream.Collectors;
8+
9+
import static bwapi.types.Order.*;
10+
import static bwapi.types.Race.*;
11+
import static bwapi.types.UnitType.*;
12+
13+
314
public enum TechType {
415
Stim_Packs(0),
516
Lockdown(1),
@@ -41,58 +52,58 @@ public enum TechType {
4152
Nuclear_Strike(45),
4253
Unknown(46);
4354

44-
private int value;
55+
private int id;
4556

46-
public int getValue(){
47-
return value;
48-
}
49-
50-
TechType(int value) {
51-
this.value = value;
57+
TechType(int id) {
58+
this.id = id;
5259
}
5360

5461
public Race getRace() {
55-
return null;
62+
return techRaces[id];
5663
}
5764

5865
public int mineralPrice() {
59-
return -1;
66+
return defaultOreCost[id];
6067
}
6168

6269
public int gasPrice() {
63-
return -1;
70+
return mineralPrice();
6471
}
6572

6673
public int researchTime() {
67-
return -1;
74+
return defaultTimeCost[id];
6875
}
6976

7077
public int energyCost() {
71-
return -1;
78+
return defaultEnergyCost[id];
7279
}
7380

7481
public UnitType whatResearches() {
75-
return null;
82+
return whatResearches[id];
7683
}
7784

7885
public WeaponType getWeapon() {
79-
return null;
86+
return techWeapons[id];
8087
}
8188

8289
public boolean targetsUnit() {
83-
return false;
90+
return techTypeFlags[id] == 1 || techTypeFlags[id] == 3;
8491
}
8592

8693
public boolean targetsPosition() {
87-
return false;
94+
return techTypeFlags[id] == 2 || techTypeFlags[id] == 3;
95+
}
96+
97+
public Set<UnitType> whatsUses() {
98+
return Arrays.stream(techWhatUses[id]).collect(Collectors.toSet());
8899
}
89100

90101
public Order getOrder() {
91-
return null;
102+
return techOrders[id];
92103
}
93104

94105
public UnitType requiredUnit() {
95-
return null;
106+
return this == Lurker_Aspect ? Zerg_Lair : UnitType.None;
96107
}
97108

98109
/// IMPLEMENTATION
@@ -103,15 +114,125 @@ public UnitType requiredUnit() {
103114
private static int defaultEnergyCost[] =
104115
{ 0, 100, 100, 0, 50, 0, 100, 75, 150, 25, 25, 0, 0, 150, 100, 150, 0, 75, 75, 75, 100, 150, 100, 0, 50, 125, 0, 150, 0, 50, 75, 100, 0, 0, 1 };
105116

106-
// static const int whatResearches[] =
107-
// { Terran_Academy, Terran_Covert_Ops, Terran_Science_Facility, Terran_Machine_Shop,
108-
// None, Terran_Machine_Shop, None, Terran_Science_Facility, Terran_Physics_Lab,
109-
// Terran_Control_Tower, Terran_Covert_Ops, Zerg_Hatchery, None, Zerg_Queens_Nest,
110-
// None, Zerg_Defiler_Mound, Zerg_Defiler_Mound, Zerg_Queens_Nest, None,
111-
// Protoss_Templar_Archives, Protoss_Templar_Archives, Protoss_Arbiter_Tribunal,
112-
// Protoss_Arbiter_Tribunal, None, Terran_Academy, Protoss_Fleet_Beacon, None,
113-
// Protoss_Templar_Archives, None, None, Terran_Academy, Protoss_Templar_Archives,
114-
// Zerg_Hydralisk_Den, None, None, None, None, None, None, None, None, None, None, None,
115-
// None, None, Unknown
116-
// };
117+
private static UnitType whatResearches[] = {
118+
Terran_Academy, Terran_Covert_Ops, Terran_Science_Facility, Terran_Machine_Shop,
119+
UnitType.None, Terran_Machine_Shop, UnitType.None, Terran_Science_Facility, Terran_Physics_Lab,
120+
Terran_Control_Tower, Terran_Covert_Ops, Zerg_Hatchery, UnitType.None, Zerg_Queens_Nest,
121+
UnitType.None, Zerg_Defiler_Mound, Zerg_Defiler_Mound, Zerg_Queens_Nest, UnitType.None,
122+
Protoss_Templar_Archives, Protoss_Templar_Archives, Protoss_Arbiter_Tribunal,
123+
Protoss_Arbiter_Tribunal, UnitType.None, Terran_Academy, Protoss_Fleet_Beacon, UnitType.None,
124+
Protoss_Templar_Archives, UnitType.None, UnitType.None, Terran_Academy, Protoss_Templar_Archives,
125+
Zerg_Hydralisk_Den, UnitType.None, UnitType.None, UnitType.None, UnitType.None, UnitType.None, UnitType.None, UnitType.None, UnitType.None, UnitType.None, UnitType.None, UnitType.None,
126+
UnitType.None, UnitType.None, UnitType.Unknown
127+
};
128+
129+
private static Race techRaces[] = {
130+
Terran, Terran, Terran, Terran, Terran, Terran, Terran, Terran, Terran, Terran, Terran,
131+
Zerg, Zerg, Zerg, Zerg, Zerg, Zerg, Zerg, Zerg,
132+
Protoss, Protoss, Protoss, Protoss, Protoss,
133+
Terran, Protoss, Race.None, Protoss, Protoss, Protoss, Terran, Protoss, Zerg, Race.None, Terran,
134+
Race.None, Race.None, Race.None, Race.None, Race.None, Race.None, Race.None, Race.None, Race.None, Race.None, Terran, Race.Unknown
135+
};
136+
137+
private static WeaponType techWeapons[] = {
138+
WeaponType.None, WeaponType.Lockdown, WeaponType.EMP_Shockwave, WeaponType.Spider_Mines, WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.Irradiate, WeaponType.Yamato_Gun,
139+
WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.Spawn_Broodlings, WeaponType.Dark_Swarm, WeaponType.Plague, WeaponType.Consume, WeaponType.Ensnare, WeaponType.Parasite,
140+
WeaponType.Psionic_Storm, WeaponType.None, WeaponType.None, WeaponType.Stasis_Field, WeaponType.None, WeaponType.Restoration, WeaponType.Disruption_Web, WeaponType.None, WeaponType.Mind_Control,
141+
WeaponType.None, WeaponType.Feedback, WeaponType.Optical_Flare, WeaponType.Maelstrom, WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.None,
142+
WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.None, WeaponType.Nuclear_Strike, WeaponType.Unknown
143+
};
144+
145+
private static int techTypeFlags[] = {
146+
0, 1, 3, 2, 3, 0, 1, 1, 1, 0, 0, 0,
147+
1, 1, 3, 3, 1, 3, 1, 3, 1,
148+
3, 3, 1, 1, 3, 0, 1, 1, 1, 1,
149+
3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3
150+
};
151+
152+
private static Order techOrders[] = {
153+
Order.None, CastLockdown, CastEMPShockwave, PlaceMine, CastScannerSweep, Order.None, CastDefensiveMatrix,
154+
CastIrradiate, FireYamatoGun, Order.None, Order.None, Order.None, CastInfestation, CastSpawnBroodlings,
155+
CastDarkSwarm, CastPlague, CastConsume, CastEnsnare, CastParasite, CastPsionicStorm,
156+
CastHallucination, CastRecall, CastStasisField, Order.None, CastRestoration, CastDisruptionWeb,
157+
Order.None, CastMindControl, Order.None, CastFeedback, CastOpticalFlare, CastMaelstrom, Order.None, Order.None, MedicHeal,
158+
Order.None, Order.None, Order.None, Order.None, Order.None, Order.None, Order.None, Order.None, Order.None, Order.None, NukePaint, Order.Unknown
159+
};
160+
161+
private static UnitType techWhatUses[][] = {
162+
// Stimpacks
163+
{Terran_Marine, Terran_Firebat, Hero_Jim_Raynor_Marine, Hero_Gui_Montag},
164+
// Lockdown
165+
{ Terran_Ghost, Hero_Alexei_Stukov, Hero_Infested_Duran, Hero_Samir_Duran, Hero_Sarah_Kerrigan },
166+
// EMP
167+
{ Terran_Science_Vessel, Hero_Magellan },
168+
// Spider Mine
169+
{ Terran_Vulture, Hero_Jim_Raynor_Vulture },
170+
// Scanner Sweep
171+
{ Terran_Comsat_Station },
172+
// Siege Mode
173+
{ Terran_Siege_Tank_Tank_Mode, Terran_Siege_Tank_Siege_Mode, Hero_Edmund_Duke_Tank_Mode, Hero_Edmund_Duke_Siege_Mode },
174+
// Defensive Matrix
175+
{ Terran_Science_Vessel, Hero_Magellan },
176+
// Irradiate
177+
{ Terran_Science_Vessel, Hero_Magellan },
178+
// Yamato Cannon
179+
{ Terran_Battlecruiser, Hero_Gerard_DuGalle, Hero_Hyperion, Hero_Norad_II },
180+
// Cloaking Field
181+
{ Terran_Wraith, Hero_Tom_Kazansky },
182+
// Personnel Cloaking
183+
{ Terran_Ghost, Hero_Alexei_Stukov, Hero_Infested_Duran, Hero_Samir_Duran, Hero_Sarah_Kerrigan, Hero_Infested_Kerrigan },
184+
// Burrow
185+
{ Zerg_Zergling, Zerg_Hydralisk, Zerg_Drone, Zerg_Defiler, Zerg_Infested_Terran, Hero_Unclean_One, Hero_Hunter_Killer, Hero_Devouring_One, Zerg_Lurker },
186+
// Infestation
187+
{ Zerg_Queen, Hero_Matriarch },
188+
// Spawn Broodlings
189+
{ Zerg_Queen, Hero_Matriarch },
190+
// Dark Swarm
191+
{ Zerg_Defiler, Hero_Unclean_One },
192+
// Plague
193+
{ Zerg_Defiler, Hero_Unclean_One },
194+
// Consume
195+
{ Zerg_Defiler, Hero_Unclean_One, Hero_Infested_Kerrigan, Hero_Infested_Duran },
196+
// Ensnare
197+
{ Zerg_Queen, Hero_Matriarch, Hero_Infested_Kerrigan },
198+
// Parasite
199+
{ Zerg_Queen, Hero_Matriarch },
200+
// Psi Storm
201+
{ Protoss_High_Templar, Hero_Tassadar, Hero_Infested_Kerrigan },
202+
// Hallucination
203+
{ Protoss_High_Templar, Hero_Tassadar },
204+
// Recall
205+
{ Protoss_Arbiter, Hero_Danimoth },
206+
// Stasis Field
207+
{ Protoss_Arbiter, Hero_Danimoth },
208+
// Archon Warp
209+
{ Protoss_High_Templar },
210+
// Restoration
211+
{ Terran_Medic },
212+
// Disruption Web
213+
{ Protoss_Corsair, Hero_Raszagal },
214+
// Unused
215+
{},
216+
// Mind Control
217+
{ Protoss_Dark_Archon },
218+
// Dark Archon Meld
219+
{ Protoss_Dark_Templar },
220+
// Feedback
221+
{ Protoss_Dark_Archon },
222+
// Optical Flare
223+
{ Terran_Medic },
224+
// Maelstrom
225+
{ Protoss_Dark_Archon },
226+
// Lurker Aspect
227+
{ Zerg_Hydralisk },
228+
// Unused
229+
{},
230+
// Healing
231+
{ Terran_Medic },
232+
// Unused
233+
{}, {}, {}, {}, {}, {}, {}, {}, {}, {},
234+
// Extra (Nuke)
235+
{ Terran_Ghost },
236+
{}
237+
};
117238
}

0 commit comments

Comments
 (0)