1+ package bwapi ;
2+
3+ import JavaBWAPIBackend .Client ;
4+
5+ import java .util .Objects ;
6+ import java .util .Set ;
7+ import java .util .TreeSet ;
8+
9+ class EventHandler implements Client .EventHandler {
10+ private final BWEventListener eventListener ;
11+ private Set <Integer > visibleUnits = new TreeSet <>();
12+
13+
14+ public EventHandler (BWEventListener eventListener ) {
15+ this .eventListener = eventListener ;
16+ }
17+
18+ /*
19+ MatchStart(0),
20+ MatchEnd(1),
21+ MatchFrame(2),
22+ MenuFrame(3),
23+ SendText(4),
24+ ReceiveText(5),
25+ PlayerLeft(6),
26+ NukeDetect(7),
27+ UnitDiscover(8),
28+ UnitEvade(9),
29+ UnitShow(10),
30+ UnitHide(11),
31+ UnitCreate(12),
32+ UnitDestroy(13),
33+ UnitMorph(14),
34+ UnitRenegade(15),
35+ SaveGame(16),
36+ UnitComplete(17);
37+ */
38+ public void operation (Client .GameData .Event event ) {
39+ switch (event .type ()) {
40+ case 0 : //MatchStart
41+ eventListener .onStart ();
42+ break ;
43+ case 1 : //MatchEnd
44+ eventListener .onEnd (event .v1 () != 0 );
45+ break ;
46+ case 2 : //MatchFrame
47+
48+ case 10 : // UnitShow
49+ visibleUnits .add (event .v1 ());
50+
51+ //eventListener.onUnitShow();
52+
53+ case 11 : // UnitHide
54+ visibleUnits .add (event .v1 ());
55+ break ;
56+ }
57+ }
58+ }
59+
60+
61+ public class BWClient {
62+ private BWEventListener eventListener ;
63+
64+ private Client client ;
65+ private Game game ;
66+
67+
68+ public BWClient (final BWEventListener eventListener ) {
69+ Objects .requireNonNull (eventListener );
70+ this .eventListener = eventListener ;
71+ }
72+
73+ public Game getGame () {
74+ return game ;
75+ }
76+
77+ public void startGame () {
78+ while (client == null ) {
79+ try {
80+ client = new Client ();
81+ }
82+ catch (Throwable t ) {
83+ System .err .println ("Game table mapping not found." );
84+ try {
85+ Thread .sleep (1000 );
86+ }
87+ catch (Throwable ignored ) { } }
88+ }
89+
90+ final EventHandler handler = new EventHandler (eventListener );
91+
92+ try {
93+ while (!client .data ().isInGame ()) {
94+ System .out .println ("Game started? " + client .data ().isInGame ());
95+ client .update (handler );
96+ }
97+
98+ game = new Game (client .data ());
99+
100+ System .out .println ("Game started!" );
101+
102+ while (client .data ().isInGame ()) {
103+ client .update (handler );
104+ }
105+ }
106+ catch (Throwable exception ) {}
107+ }
108+ }
0 commit comments