diff --git a/src/main/java/bwapi/Game.java b/src/main/java/bwapi/Game.java index 17a5a3c..411765a 100644 --- a/src/main/java/bwapi/Game.java +++ b/src/main/java/bwapi/Game.java @@ -1033,7 +1033,7 @@ final public boolean hasPower(final int tileX, final int tileY, final UnitType u if (unitType.id >= 0 && unitType.id < UnitType.None.id) { return hasPowerPrecise(tileX * 32 + unitType.tileWidth() * 16, tileY * 32 + unitType.tileHeight() * 16, unitType); } - return hasPowerPrecise(tileY * 32, tileY * 32, UnitType.None); + return hasPowerPrecise(tileX * 32, tileY * 32, UnitType.None); } final public boolean hasPower(final int tileX, final int tileY, final int tileWidth, final int tileHeight) { diff --git a/src/test/java/bwapi/GameTest.java b/src/test/java/bwapi/GameTest.java index 2548a12..8d7b1b4 100644 --- a/src/test/java/bwapi/GameTest.java +++ b/src/test/java/bwapi/GameTest.java @@ -101,4 +101,19 @@ public void ifReplaySelfAndEnemyShouldBeNull() throws IOException { assertTrue(game.enemies().isEmpty()); assertTrue(game.allies().isEmpty()); } + + @Test + public void hasPowerOnTile() throws IOException { + Game game = GameBuilder.createGame(); + Unit pylon = mock(Unit.class); + given(pylon.getType()).willReturn(UnitType.Protoss_Pylon); + given(pylon.getPlayer()).willReturn(game.self()); + given(pylon.exists()).willReturn(true); + given(pylon.isCompleted()).willReturn(true); + given(pylon.getPosition()).willReturn(new Position(1024, 512)); + game.setAllUnits(Collections.singletonList(pylon)); + + // tile (31, 15) is pixel (992, 480), right next to the pylon + assertTrue(game.hasPower(31, 15)); + } } \ No newline at end of file