Skip to content

Commit 74447ef

Browse files
committed
merge develop
2 parents 5c2212d + b3d8eb7 commit 74447ef

File tree

5 files changed

+379
-8
lines changed

5 files changed

+379
-8
lines changed

src/main/java/bwapi/Game.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,7 @@ public List<Unit> getUnitsOnTile(final int tileX, final int tileY) {
705705
public List<Unit> getUnitsOnTile(final int tileX, final int tileY, final UnitFilter pred) {
706706
return getAllUnits().stream().filter(u -> {
707707
final TilePosition tp = u.getTilePosition();
708-
return tp.x == tileX && tp.y == tileY && pred.operation(u);
708+
return tp.x == tileX && tp.y == tileY && pred.test(u);
709709
}).collect(Collectors.toList());
710710
}
711711

@@ -727,7 +727,7 @@ public List<Unit> getUnitsInRectangle(final int left, final int top, final int r
727727
*/
728728
public List<Unit> getUnitsInRectangle(final int left, final int top, final int right, final int bottom, final UnitFilter pred) {
729729
return getAllUnits().stream().filter(u ->
730-
left <= u.getRight() && top <= u.getBottom() && right >= u.getLeft() && bottom >= u.getTop() && pred.operation(u))
730+
left <= u.getRight() && top <= u.getBottom() && right >= u.getLeft() && bottom >= u.getTop() && pred.test(u))
731731
.collect(Collectors.toList());
732732
}
733733

@@ -765,7 +765,8 @@ public List<Unit> getUnitsInRadius(final Position center, final int radius) {
765765

766766
public List<Unit> getUnitsInRadius(final Position center, final int radius, final UnitFilter pred) {
767767
return getAllUnits().stream()
768-
.filter(u -> center.getApproxDistance(u.getPosition()) <= radius && pred.operation(u))
768+
.filter(u -> center.getApproxDistance(u.getPosition()) <= radius && pred.test(u))
769+
.filter(u -> center.getApproxDistance(u.getPosition()) <= radius && pred.test(u))
769770
.collect(Collectors.toList());
770771
}
771772

src/main/java/bwapi/Region.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ public List<Unit> getUnits() {
233233
*/
234234
public List<Unit> getUnits(final UnitFilter pred) {
235235
return game.getUnitsInRectangle(getBoundsLeft(), getBoundsTop(), getBoundsRight(), getBoundsBottom(),
236-
u -> equals(u.getRegion()) && pred.operation(u));
236+
u -> equals(u.getRegion()) && pred.test(u));
237237
}
238238

239239
@Override

src/main/java/bwapi/Unit.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,7 +1198,7 @@ public List<Unit> getUnitsInRadius(final int radius, final UnitFilter pred) {
11981198
getTop() - radius,
11991199
getRight() + radius,
12001200
getBottom() + radius,
1201-
u -> getDistance(u) <= radius && pred.operation(u));
1201+
u -> getDistance(u) <= radius && pred.test(u));
12021202
}
12031203

12041204
public List<Unit> getUnitsInWeaponRange(final WeaponType weapon) {
@@ -1227,7 +1227,7 @@ public List<Unit> getUnitsInWeaponRange(final WeaponType weapon, final UnitFilte
12271227
getRight() + max,
12281228
getBottom() + max,
12291229
u -> {
1230-
if (!pred.operation(u)) {
1230+
if (!pred.test(u)) {
12311231
return false;
12321232
}
12331233
// Unit check and unit status
Lines changed: 330 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,333 @@
11
package bwapi;
22

3-
public interface UnitFilter {
4-
boolean operation(Unit unit);
3+
import java.util.function.Predicate;
4+
5+
public interface UnitFilter extends Predicate<Unit> {
6+
UnitFilter IsTransPort = u -> u.getType().spaceProvided() > 0 && u.getType() != UnitType.Terran_Bunker;
7+
UnitFilter CanProduce = u -> u.getType().canProduce();
8+
UnitFilter CanAttack = u -> u.getType().canAttack();
9+
UnitFilter CanMove = u -> u.getType().canMove();
10+
UnitFilter IsFlyer = u -> u.getType().isFlyer();
11+
UnitFilter IsFlying = u -> u.isFlying();
12+
UnitFilter RegeneratesHP = u -> u.getType().regeneratesHP();
13+
UnitFilter IsSpellcaster = u -> u.getType().isSpellcaster();
14+
UnitFilter HasPermanentCloak = u -> u.getType().hasPermanentCloak();
15+
UnitFilter IsOrganic = u -> u.getType().isOrganic();
16+
UnitFilter IsMechanical = u -> u.getType().isMechanical();
17+
UnitFilter IsRobotic = u -> u.getType().isRobotic();
18+
UnitFilter IsDetector = u -> u.getType().isDetector();
19+
UnitFilter IsResourceContainer = u -> u.getType().isResourceContainer();
20+
UnitFilter IsResourceDepot = u -> u.getType().isResourceDepot();
21+
UnitFilter IsRefinery = u -> u.getType().isRefinery();
22+
UnitFilter IsWorker = u -> u.getType().isWorker();
23+
UnitFilter RequiresPsi = u -> u.getType().requiresPsi();
24+
UnitFilter RequiresCreep = u -> u.getType().requiresCreep();
25+
UnitFilter IsBurrowable = u -> u.getType().isBurrowable();
26+
UnitFilter IsCloakable = u -> u.getType().isCloakable();
27+
UnitFilter IsBuilding = u -> u.getType().isBuilding();
28+
UnitFilter IsAddon = u -> u.getType().isAddon();
29+
UnitFilter IsFlyingBuilding = u -> u.getType().isFlyingBuilding();
30+
UnitFilter IsNeutral = u -> u.getType().isNeutral();
31+
UnitFilter IsHero = u -> u.getType().isHero();
32+
UnitFilter IsPowerup = u -> u.getType().isPowerup();
33+
UnitFilter IsBeacon = u -> u.getType().isBeacon();
34+
UnitFilter IsFlagBeacon = u -> u.getType().isFlagBeacon();
35+
UnitFilter IsSpecialBuilding = u -> u.getType().isSpecialBuilding();
36+
UnitFilter IsSpell = u -> u.getType().isSpell();
37+
UnitFilter ProducesLarva = u -> u.getType().producesLarva();
38+
UnitFilter IsMineralField = u -> u.getType().isMineralField();
39+
UnitFilter IsCritter = u -> u.getType().isCritter();
40+
UnitFilter CanBuildAddon = u -> u.getType().canBuildAddon();
41+
42+
// static UnitFilter example = HP(x -> x > 40);
43+
static UnitFilter HP(Predicate<Integer> c) {
44+
return u -> c.test(u.getHitPoints());
45+
}
46+
47+
static UnitFilter MaxHP(Predicate<Integer> c) {
48+
return u -> c.test(u.getType().maxHitPoints());
49+
}
50+
51+
static UnitFilter HP_Percent(Predicate<Integer> c) {
52+
return u -> c.test((u.getType().maxHitPoints() != 0) ? ((u.getHitPoints() * 100) / u.getType().maxHitPoints()) : 0);
53+
}
54+
55+
static UnitFilter Shields(Predicate<Integer> c) {
56+
return u -> c.test(u.getShields());
57+
}
58+
59+
static UnitFilter MaxShields(Predicate<Integer> c) {
60+
return u -> c.test(u.getType().maxShields());
61+
}
62+
63+
static UnitFilter Shields_Percent(Predicate<Integer> c) {
64+
return u -> c.test((u.getType().maxShields() != 0) ? ((u.getShields() * 100) / u.getType().maxShields()) : 0);
65+
}
66+
67+
static UnitFilter Energy(Predicate<Integer> c) {
68+
return u -> c.test(u.getEnergy());
69+
}
70+
71+
static UnitFilter MaxEnergy(Predicate<Integer> c) {
72+
return u -> c.test(u.getPlayer().maxEnergy(u.getType()));
73+
}
74+
75+
static UnitFilter Energy_Percent(Predicate<Integer> c) {
76+
return u -> c.test((u.getPlayer().maxEnergy(u.getType()) != 0) ? ((u.getEnergy() * 100) / u.getPlayer().maxEnergy(u.getType())) : 0);
77+
}
78+
79+
static UnitFilter Armor(Predicate<Integer> c) {
80+
return u -> c.test(u.getPlayer().armor(u.getType()));
81+
}
82+
83+
static UnitFilter ArmorUpgrade(Predicate<UpgradeType> c) {
84+
return u -> c.test(u.getType().armorUpgrade());
85+
}
86+
87+
static UnitFilter MineralPrice(Predicate<Integer> c) {
88+
return u -> c.test(u.getType().mineralPrice());
89+
}
90+
91+
static UnitFilter GasPrice(Predicate<Integer> c) {
92+
return u -> c.test(u.getType().gasPrice());
93+
}
94+
95+
static UnitFilter BuildTime(Predicate<Integer> c) {
96+
return u -> c.test(u.getType().buildTime());
97+
}
98+
99+
static UnitFilter SupplyRequired(Predicate<Integer> c) {
100+
return u -> c.test(u.getType().supplyRequired());
101+
}
102+
103+
static UnitFilter SupplyProvided(Predicate<Integer> c) {
104+
return u -> c.test(u.getType().supplyProvided());
105+
}
106+
107+
static UnitFilter SpaceRequired(Predicate<Integer> c) {
108+
return u -> c.test(u.getType().spaceRequired());
109+
}
110+
111+
static UnitFilter SpaceRemaining(Predicate<Integer> c) {
112+
return u -> c.test(u.getSpaceRemaining());
113+
}
114+
115+
static UnitFilter SpaceProvided(Predicate<Integer> c) {
116+
return u -> c.test(u.getType().spaceProvided());
117+
}
118+
119+
static UnitFilter BuildScore(Predicate<Integer> c) {
120+
return u -> c.test(u.getType().buildScore());
121+
}
122+
123+
static UnitFilter DestroyScore(Predicate<Integer> c) {
124+
return u -> c.test(u.getType().destroyScore());
125+
}
126+
127+
static UnitFilter TopSpeed(Predicate<Double> c) {
128+
return u -> c.test(u.getPlayer().topSpeed(u.getType()));
129+
}
130+
131+
static UnitFilter SightRange(Predicate<Integer> c) {
132+
return u -> c.test(u.getPlayer().sightRange(u.getType()));
133+
}
134+
135+
static UnitFilter MaxWeaponCooldown(Predicate<Integer> c) {
136+
return u -> c.test(u.getPlayer().weaponDamageCooldown(u.getType()));
137+
}
138+
139+
static UnitFilter SizeType(Predicate<UnitSizeType> c) {
140+
return u -> c.test(u.getType().size());
141+
}
142+
143+
static UnitFilter GroundWeapon(Predicate<WeaponType> c) {
144+
return u -> c.test(u.getType().groundWeapon());
145+
}
146+
147+
static UnitFilter AirWeapon(Predicate<WeaponType> c) {
148+
return u -> c.test(u.getType().airWeapon());
149+
}
150+
151+
static UnitFilter GetType(Predicate<UnitType> c) {
152+
return u -> c.test(u.getType());
153+
}
154+
155+
static UnitFilter GetRace(Predicate<Race> c) {
156+
return u -> c.test(u.getType().getRace());
157+
}
158+
159+
static UnitFilter GetPlayer(Predicate<Player> c) {
160+
return u -> c.test(u.getPlayer());
161+
}
162+
163+
static UnitFilter Resources(Predicate<Integer> c) {
164+
return u -> c.test(u.getResources());
165+
}
166+
167+
static UnitFilter ResourceGroup(Predicate<Integer> c) {
168+
return u -> c.test(u.getResourceGroup());
169+
}
170+
171+
static UnitFilter AcidSporeCount(Predicate<Integer> c) {
172+
return u -> c.test(u.getAcidSporeCount());
173+
}
174+
175+
static UnitFilter InterceptorCount(Predicate<Integer> c) {
176+
return u -> c.test(u.getInterceptorCount());
177+
}
178+
179+
static UnitFilter ScarabCount(Predicate<Integer> c) {
180+
return u -> c.test(u.getScarabCount());
181+
}
182+
183+
static UnitFilter SpiderMineCount(Predicate<Integer> c) {
184+
return u -> c.test(u.getSpiderMineCount());
185+
}
186+
187+
static UnitFilter WeaponCooldown(Predicate<Integer> c) {
188+
return u -> c.test(u.getGroundWeaponCooldown());
189+
}
190+
191+
static UnitFilter SpellCooldown(Predicate<Integer> c) {
192+
return u -> c.test(u.getSpellCooldown());
193+
}
194+
195+
static UnitFilter DefenseMatrixPoints(Predicate<Integer> c) {
196+
return u -> c.test(u.getDefenseMatrixPoints());
197+
}
198+
199+
static UnitFilter DefenseMatrixTime(Predicate<Integer> c) {
200+
return u -> c.test(u.getDefenseMatrixTimer());
201+
}
202+
203+
static UnitFilter EnsnareTime(Predicate<Integer> c) {
204+
return u -> c.test(u.getEnsnareTimer());
205+
}
206+
207+
static UnitFilter IrradiateTime(Predicate<Integer> c) {
208+
return u -> c.test(u.getIrradiateTimer());
209+
}
210+
211+
static UnitFilter LockdownTime(Predicate<Integer> c) {
212+
return u -> c.test(u.getLockdownTimer());
213+
}
214+
215+
static UnitFilter MaelstromTime(Predicate<Integer> c) {
216+
return u -> c.test(u.getMaelstromTimer());
217+
}
218+
219+
static UnitFilter OrderTime(Predicate<Integer> c) {
220+
return u -> c.test(u.getOrderTimer());
221+
}
222+
223+
static UnitFilter PlagueTimer(Predicate<Integer> c) {
224+
return u -> c.test(u.getPlagueTimer());
225+
}
226+
227+
static UnitFilter RemoveTime(Predicate<Integer> c) {
228+
return u -> c.test(u.getRemoveTimer());
229+
}
230+
231+
static UnitFilter StasisTime(Predicate<Integer> c) {
232+
return u -> c.test(u.getStasisTimer());
233+
}
234+
235+
static UnitFilter StimTime(Predicate<Integer> c) {
236+
return u -> c.test(u.getStimTimer());
237+
}
238+
239+
static UnitFilter BuildType(Predicate<UnitType> c) {
240+
return u -> c.test(u.getBuildType());
241+
}
242+
243+
static UnitFilter RemainingBuildTime(Predicate<Integer> c) {
244+
return u -> c.test(u.getRemainingBuildTime());
245+
}
246+
247+
static UnitFilter RemainingTrainTime(Predicate<Integer> c) {
248+
return u -> c.test(u.getRemainingTrainTime());
249+
}
250+
251+
static UnitFilter Target(Predicate<Unit> c) {
252+
return u -> c.test(u.getTarget());
253+
}
254+
255+
static UnitFilter CurrentOrder(Predicate<Order> c) {
256+
return u -> c.test(u.getOrder());
257+
}
258+
259+
static UnitFilter SecondaryOrder(Predicate<Order> c) {
260+
return u -> c.test(u.getSecondaryOrder());
261+
}
262+
263+
static UnitFilter OrderTarget(Predicate<Unit> c) {
264+
return u -> c.test(u.getOrderTarget());
265+
}
266+
267+
static UnitFilter GetLeft(Predicate<Integer> c) {
268+
return u -> c.test(u.getLeft());
269+
}
270+
271+
static UnitFilter GetTop(Predicate<Integer> c) {
272+
return u -> c.test(u.getTop());
273+
}
274+
275+
static UnitFilter GetRight(Predicate<Integer> c) {
276+
return u -> c.test(u.getRight());
277+
}
278+
279+
static UnitFilter GetBottom(Predicate<Integer> c) {
280+
return u -> c.test(u.getBottom());
281+
}
282+
283+
UnitFilter Exists = u -> u.exists();
284+
UnitFilter IsAttacking = u -> u.isAttacking();
285+
UnitFilter IsBeingConstructed = u -> u.isBeingConstructed();
286+
UnitFilter IsBeingGathered = u -> u.isBeingGathered();
287+
UnitFilter IsBeingHealed = u -> u.isBeingHealed();
288+
UnitFilter IsBlind = u -> u.isBlind();
289+
UnitFilter IsBraking = u -> u.isBraking();
290+
UnitFilter IsBurrowed = u -> u.isBurrowed();
291+
UnitFilter IsCarryingGas = u -> u.isCarryingGas();
292+
UnitFilter IsCarryingMinerals = u -> u.isCarryingMinerals();
293+
UnitFilter IsCarryingSomething = u -> u.isCarryingMinerals() || u.isCarryingGas();
294+
UnitFilter IsCloaked = u -> u.isCloaked();
295+
UnitFilter IsCompleted = u -> u.isCompleted();
296+
UnitFilter IsConstructing = u -> u.isConstructing();
297+
UnitFilter IsDefenseMatrixed = u -> u.isDefenseMatrixed();
298+
UnitFilter IsDetected = u -> u.isDetected();
299+
UnitFilter IsEnsnared = u -> u.isEnsnared();
300+
UnitFilter IsFollowing = u -> u.isFollowing();
301+
UnitFilter IsGatheringGas = u -> u.isGatheringGas();
302+
UnitFilter IsGatheringMinerals = u -> u.isGatheringMinerals();
303+
UnitFilter IsHallucination = u -> u.isHallucination();
304+
UnitFilter IsHoldingPosition = u -> u.isHoldingPosition();
305+
UnitFilter IsIdle = u -> u.isIdle();
306+
UnitFilter IsInterruptible = u -> u.isInterruptible();
307+
UnitFilter IsInvincible = u -> u.isInvincible();
308+
UnitFilter IsIrradiated = u -> u.isIrradiated();
309+
UnitFilter IsLifted = u -> u.isLifted();
310+
UnitFilter IsLoaded = u -> u.isLoaded();
311+
UnitFilter IsLockedDown = u -> u.isLockedDown();
312+
UnitFilter IsMaelstrommed = u -> u.isMaelstrommed();
313+
UnitFilter IsMorphing = u -> u.isMorphing();
314+
UnitFilter IsMoving = u -> u.isMoving();
315+
UnitFilter IsParasited = u -> u.isParasited();
316+
UnitFilter IsPatrolling = u -> u.isPatrolling();
317+
UnitFilter IsPlagued = u -> u.isPlagued();
318+
UnitFilter IsRepairing = u -> u.isRepairing();
319+
UnitFilter IsResearching = u -> u.isResearching();
320+
UnitFilter IsSieged = u -> u.isSieged();
321+
UnitFilter IsStartingAttack = u -> u.isStartingAttack();
322+
UnitFilter IsStasised = u -> u.isStasised();
323+
UnitFilter IsStimmed = u -> u.isStimmed();
324+
UnitFilter IsStuck = u -> u.isStuck();
325+
UnitFilter IsTraining = u -> u.isTraining();
326+
UnitFilter IsUnderAttack = u -> u.isUnderAttack();
327+
UnitFilter IsUnderDarkSwarm = u -> u.isUnderDarkSwarm();
328+
UnitFilter IsUnderDisruptionWeb = u -> u.isUnderDisruptionWeb();
329+
UnitFilter IsUnderStorm = u -> u.isUnderStorm();
330+
UnitFilter IsPowered = u -> u.isPowered();
331+
UnitFilter IsVisible = u -> u.isVisible();
5332
}
333+

0 commit comments

Comments
 (0)