11package de .peeeq .wurstio .jassinterpreter .providers ;
22
33import de .peeeq .wurstio .objectreader .ObjectHelper ;
4+ import de .peeeq .wurstio .jassinterpreter .mocks .DestructableMock ;
45import de .peeeq .wurstio .jassinterpreter .mocks .UnitMock ;
6+ import de .peeeq .wurstscript .intermediatelang .ILconst ;
57import de .peeeq .wurstscript .intermediatelang .ILconstBool ;
68import de .peeeq .wurstscript .intermediatelang .ILconstInt ;
9+ import de .peeeq .wurstscript .intermediatelang .ILconstNull ;
710import de .peeeq .wurstscript .intermediatelang .ILconstReal ;
811import de .peeeq .wurstscript .intermediatelang .ILconstString ;
912import de .peeeq .wurstscript .intermediatelang .IlConstHandle ;
@@ -22,8 +25,43 @@ public IlConstHandle CreateUnit(IlConstHandle owner, ILconstInt unitid, ILconstR
2225 return new IlConstHandle (NameProvider .getRandomName ("unit" ), new UnitMock (owner , unitid , x , y , face ));
2326 }
2427
28+ public ILconst GetOwningPlayer (IlConstHandle unit ) {
29+ UnitMock unitMock = unitOrNull (unit );
30+ return unitMock == null ? ILconstNull .instance () : unitMock .owner ;
31+ }
32+
2533 public ILconstInt GetUnitTypeId (IlConstHandle unit ) {
26- return ((UnitMock )unit .getObj ()).unitid ;
34+ UnitMock unitMock = unitOrNull (unit );
35+ return unitMock == null ? ILconstInt .create (0 ) : unitMock .unitid ;
36+ }
37+
38+ public ILconstReal GetUnitX (IlConstHandle unit ) {
39+ UnitMock unitMock = unitOrNull (unit );
40+ return unitMock == null ? ILconstReal .create (0 ) : unitMock .x ;
41+ }
42+
43+ public ILconstReal GetUnitY (IlConstHandle unit ) {
44+ UnitMock unitMock = unitOrNull (unit );
45+ return unitMock == null ? ILconstReal .create (0 ) : unitMock .y ;
46+ }
47+
48+ public void SetUnitX (IlConstHandle unit , ILconstReal x ) {
49+ UnitMock unitMock = unitOrNull (unit );
50+ if (unitMock != null ) {
51+ unitMock .x = x ;
52+ }
53+ }
54+
55+ public void SetUnitY (IlConstHandle unit , ILconstReal y ) {
56+ UnitMock unitMock = unitOrNull (unit );
57+ if (unitMock != null ) {
58+ unitMock .y = y ;
59+ }
60+ }
61+
62+ public ILconstReal GetUnitFacing (IlConstHandle unit ) {
63+ UnitMock unitMock = unitOrNull (unit );
64+ return unitMock == null ? ILconstReal .create (0 ) : unitMock .face ;
2765 }
2866
2967 public ILconstString GetUnitName (IlConstHandle unit ) {
@@ -67,9 +105,107 @@ public ILconstBool IsUnitType(IlConstHandle whichUnit, IlConstHandle whichUnitTy
67105 }
68106
69107 public void RemoveUnit (IlConstHandle unit ) {
108+ UnitMock unitMock = unitOrNull (unit );
109+ if (unitMock != null ) {
110+ unitMock .removed = true ;
111+ }
70112 userDataMap .remove (unit );
71113 }
72114
115+ public void KillUnit (IlConstHandle unit ) {
116+ UnitMock unitMock = unitOrNull (unit );
117+ if (unitMock != null ) {
118+ unitMock .states .put ("unitstate0" , ILconstReal .create (0 ));
119+ }
120+ }
121+
122+ public ILconstReal GetUnitState (IlConstHandle unit , IlConstHandle unitstate ) {
123+ UnitMock unitMock = unitOrNull (unit );
124+ if (unitMock == null ) {
125+ return ILconstReal .create (0 );
126+ }
127+ return unitMock .states .getOrDefault (unitStateKey (unitstate ), ILconstReal .create (0 ));
128+ }
129+
130+ public void SetUnitState (IlConstHandle unit , IlConstHandle unitstate , ILconstReal value ) {
131+ UnitMock unitMock = unitOrNull (unit );
132+ if (unitMock != null ) {
133+ unitMock .states .put (unitStateKey (unitstate ), value );
134+ }
135+ }
136+
137+ public ILconstReal GetWidgetLife (IlConstHandle widget ) {
138+ UnitMock unitMock = unitOrNull (widget );
139+ if (unitMock != null ) {
140+ return unitMock .states .getOrDefault ("unitstate0" , ILconstReal .create (0 ));
141+ }
142+ DestructableMock destructableMock = destructableOrNull (widget );
143+ return destructableMock == null ? ILconstReal .create (0 ) : destructableMock .life ;
144+ }
145+
146+ public void SetWidgetLife (IlConstHandle widget , ILconstReal newLife ) {
147+ UnitMock unitMock = unitOrNull (widget );
148+ if (unitMock != null ) {
149+ unitMock .states .put ("unitstate0" , newLife );
150+ return ;
151+ }
152+ DestructableMock destructableMock = destructableOrNull (widget );
153+ if (destructableMock != null ) {
154+ destructableMock .life = newLife ;
155+ }
156+ }
157+
158+ public ILconstBool UnitAddAbility (IlConstHandle unit , ILconstInt abilityId ) {
159+ UnitMock unitMock = unitOrNull (unit );
160+ if (unitMock == null ) {
161+ return ILconstBool .FALSE ;
162+ }
163+ unitMock .abilityLevels .putIfAbsent (abilityId .getVal (), ILconstInt .create (1 ));
164+ return ILconstBool .TRUE ;
165+ }
166+
167+ public ILconstBool UnitRemoveAbility (IlConstHandle unit , ILconstInt abilityId ) {
168+ UnitMock unitMock = unitOrNull (unit );
169+ if (unitMock == null ) {
170+ return ILconstBool .FALSE ;
171+ }
172+ return ILconstBool .instance (unitMock .abilityLevels .remove (abilityId .getVal ()) != null );
173+ }
174+
175+ public ILconstInt GetUnitAbilityLevel (IlConstHandle unit , ILconstInt abilityId ) {
176+ UnitMock unitMock = unitOrNull (unit );
177+ if (unitMock == null ) {
178+ return ILconstInt .create (0 );
179+ }
180+ return unitMock .abilityLevels .getOrDefault (abilityId .getVal (), ILconstInt .create (0 ));
181+ }
182+
183+ public ILconstInt SetUnitAbilityLevel (IlConstHandle unit , ILconstInt abilityId , ILconstInt level ) {
184+ UnitMock unitMock = unitOrNull (unit );
185+ if (unitMock == null ) {
186+ return ILconstInt .create (0 );
187+ }
188+ unitMock .abilityLevels .put (abilityId .getVal (), level );
189+ return level ;
190+ }
191+
192+ public ILconstBool IssueImmediateOrderById (IlConstHandle unit , ILconstInt orderId ) {
193+ return issueOrder (unit , orderId );
194+ }
195+
196+ public ILconstBool IssuePointOrderById (IlConstHandle unit , ILconstInt orderId , ILconstReal x , ILconstReal y ) {
197+ return issueOrder (unit , orderId );
198+ }
199+
200+ public ILconstBool IssueTargetOrderById (IlConstHandle unit , ILconstInt orderId , IlConstHandle target ) {
201+ return issueOrder (unit , orderId );
202+ }
203+
204+ public ILconstInt GetUnitCurrentOrder (IlConstHandle unit ) {
205+ UnitMock unitMock = unitOrNull (unit );
206+ return unitMock == null ? ILconstInt .create (0 ) : unitMock .currentOrder ;
207+ }
208+
73209 public ILconstInt GetUnitUserData (IlConstHandle unit ) {
74210 return unit == null ? ILconstInt .create (0 ) : userDataMap .getOrDefault (unit , ILconstInt .create (0 ));
75211 }
@@ -80,4 +216,31 @@ public void SetUnitUserData(IlConstHandle unit, ILconstInt userData) {
80216 }
81217 userDataMap .put (unit , userData );
82218 }
219+
220+ private ILconstBool issueOrder (IlConstHandle unit , ILconstInt orderId ) {
221+ UnitMock unitMock = unitOrNull (unit );
222+ if (unitMock == null ) {
223+ return ILconstBool .FALSE ;
224+ }
225+ unitMock .currentOrder = orderId ;
226+ return ILconstBool .TRUE ;
227+ }
228+
229+ private UnitMock unitOrNull (IlConstHandle unit ) {
230+ if (unit == null || !(unit .getObj () instanceof UnitMock )) {
231+ return null ;
232+ }
233+ return (UnitMock ) unit .getObj ();
234+ }
235+
236+ private DestructableMock destructableOrNull (IlConstHandle destructable ) {
237+ if (destructable == null || !(destructable .getObj () instanceof DestructableMock )) {
238+ return null ;
239+ }
240+ return (DestructableMock ) destructable .getObj ();
241+ }
242+
243+ private String unitStateKey (IlConstHandle unitstate ) {
244+ return unitstate == null ? "unitstate0" : unitstate .print ();
245+ }
83246}
0 commit comments