From 14e4e5aaef23b145e58369d05a6e95e682ff1f68 Mon Sep 17 00:00:00 2001 From: vjurenka Date: Mon, 9 Feb 2015 19:16:11 +0100 Subject: [PATCH] bwapi4 testing begins! --- bwapi4/Game.java | 114 +---- bwapi4/Mirror.java | 2 +- bwapi4/Region.java | 6 - bwapi4/Regionset.java | 6 - bwapi4/Unit.java | 30 +- bwapi4/UnitCommand.java | 124 ++++- bwapi4/Unitset.java | 18 - c4/impl.cpp | 427 ++++-------------- compiled4/bwapi4/Game.class | Bin 30475 -> 26869 bytes compiled4/bwapi4/Mirror.class | Bin 3245 -> 3240 bytes compiled4/bwapi4/Region.class | Bin 2688 -> 2385 bytes compiled4/bwapi4/Regionset.class | Bin 1301 -> 998 bytes compiled4/bwapi4/Unit.class | Bin 45024 -> 44125 bytes compiled4/bwapi4/UnitCommand.class | Bin 1016 -> 2489 bytes compiled4/bwapi4/Unitset.class | Bin 7060 -> 6410 bytes concat_header4.h | 240 ++-------- headers4/bwapi4_Game.h | 152 +------ headers4/bwapi4_Region.h | 8 - headers4/bwapi4_Regionset.h | 8 - headers4/bwapi4_Unit.h | 40 +- headers4/bwapi4_UnitCommand.h | 8 - headers4/bwapi4_Unitset.h | 24 - manual-bwapi4/Mirror.java | 2 +- manual-bwapi4/UnitCommand.java | 116 +++++ out/production/InvokeGenerator/c/Method.class | Bin 234 -> 259 bytes .../generator/JavaContext.class | Bin 6685 -> 7633 bytes .../InvokeGenerator/generator/c/Bind.class | Bin 12934 -> 13074 bytes .../generator/ccalls/CallImplementer.class | Bin 15067 -> 16870 bytes .../generator/java/ClassMirror.class | Bin 7576 -> 7619 bytes .../InvokeGenerator/impl/CApiParser$1.class | Bin 855 -> 855 bytes .../impl/CApiParser$ACCESS.class | Bin 1068 -> 1068 bytes .../impl/CApiParser$LineState.class | Bin 1363 -> 1363 bytes .../InvokeGenerator/impl/CApiParser.class | Bin 11848 -> 12263 bytes .../InvokeGenerator/impl/Function.class | Bin 2933 -> 3131 bytes src/c/Method.java | 2 + src/generator/JavaContext.java | 40 +- src/generator/c/Bind.java | 4 +- src/generator/ccalls/CallImplementer.java | 49 +- src/generator/java/ClassMirror.java | 4 +- src/impl/CApiParser.java | 30 +- src/impl/Function.java | 11 + src/test/api/TestBot1.java | 21 +- 42 files changed, 504 insertions(+), 982 deletions(-) create mode 100644 manual-bwapi4/UnitCommand.java diff --git a/bwapi4/Game.java b/bwapi4/Game.java index 0b30ed7..8a339d5 100644 --- a/bwapi4/Game.java +++ b/bwapi4/Game.java @@ -133,70 +133,6 @@ public class Game { enableFlag_native(pointer, flag); } - public List getUnitsOnTile(int tileX, int tileY, UnitFilter pred) { - return getUnitsOnTile_native(pointer, tileX, tileY, pred); - } - - public List getUnitsOnTile(TilePosition tile, UnitFilter pred) { - return getUnitsOnTile_native(pointer, tile, pred); - } - - public List getUnitsInRectangle(int left, int top, int right, int bottom, UnitFilter pred) { - return getUnitsInRectangle_native(pointer, left, top, right, bottom, pred); - } - - public List getUnitsInRectangle(Position topLeft, Position bottomRight, UnitFilter pred) { - return getUnitsInRectangle_native(pointer, topLeft, bottomRight, pred); - } - - public List getUnitsInRadius(int x, int y, int radius, UnitFilter pred) { - return getUnitsInRadius_native(pointer, x, y, radius, pred); - } - - public List getUnitsInRadius(Position center, int radius, UnitFilter pred) { - return getUnitsInRadius_native(pointer, center, radius, pred); - } - - public Unit getClosestUnit(Position center, UnitFilter pred) { - return getClosestUnit_native(pointer, center, pred); - } - - public Unit getClosestUnit(Position center, UnitFilter pred, int radius) { - return getClosestUnit_native(pointer, center, pred, radius); - } - - public Unit getClosestUnitInRectangle(Position center, UnitFilter pred, int left, int top, int right) { - return getClosestUnitInRectangle_native(pointer, center, pred, left, top, right); - } - - public Unit getClosestUnitInRectangle(Position center, UnitFilter pred, int left, int top) { - return getClosestUnitInRectangle_native(pointer, center, pred, left, top); - } - - public Unit getClosestUnitInRectangle(Position center, UnitFilter pred, int left) { - return getClosestUnitInRectangle_native(pointer, center, pred, left); - } - - public Unit getClosestUnitInRectangle(Position center, UnitFilter pred) { - return getClosestUnitInRectangle_native(pointer, center, pred); - } - - public Unit getClosestUnitInRectangle(Position center, UnitFilter pred, int left, int top, int right, int bottom) { - return getClosestUnitInRectangle_native(pointer, center, pred, left, top, right, bottom); - } - - public Unit getBestUnit(BestUnitFilter best, UnitFilter pred, Position center) { - return getBestUnit_native(pointer, best, pred, center); - } - - public Unit getBestUnit(BestUnitFilter best, UnitFilter pred) { - return getBestUnit_native(pointer, best, pred); - } - - public Unit getBestUnit(BestUnitFilter best, UnitFilter pred, Position center, int radius) { - return getBestUnit_native(pointer, best, pred, center, radius); - } - public Error getLastError() { return getLastError_native(pointer); } @@ -241,6 +177,14 @@ public class Game { return isWalkable_native(pointer, position); } + public int getGroundHeight(int tileX, int tileY) { + return getGroundHeight_native(pointer, tileX, tileY); + } + + public int getGroundHeight(TilePosition position) { + return getGroundHeight_native(pointer, position); + } + public boolean isBuildable(int tileX, int tileY) { return isBuildable_native(pointer, tileX, tileY); } @@ -857,6 +801,10 @@ public class Game { return setVision_native(pointer, player, enabled); } + public int elapsedTime() { + return elapsedTime_native(pointer); + } + public void setCommandOptimizationLevel(int level) { setCommandOptimizationLevel_native(pointer, level); } @@ -1004,38 +952,6 @@ public class Game { private native void enableFlag_native(long pointer, int flag); - private native List getUnitsOnTile_native(long pointer, int tileX, int tileY, UnitFilter pred); - - private native List getUnitsOnTile_native(long pointer, TilePosition tile, UnitFilter pred); - - private native List getUnitsInRectangle_native(long pointer, int left, int top, int right, int bottom, UnitFilter pred); - - private native List getUnitsInRectangle_native(long pointer, Position topLeft, Position bottomRight, UnitFilter pred); - - private native List getUnitsInRadius_native(long pointer, int x, int y, int radius, UnitFilter pred); - - private native List getUnitsInRadius_native(long pointer, Position center, int radius, UnitFilter pred); - - private native Unit getClosestUnit_native(long pointer, Position center, UnitFilter pred); - - private native Unit getClosestUnit_native(long pointer, Position center, UnitFilter pred, int radius); - - private native Unit getClosestUnitInRectangle_native(long pointer, Position center, UnitFilter pred, int left, int top, int right); - - private native Unit getClosestUnitInRectangle_native(long pointer, Position center, UnitFilter pred, int left, int top); - - private native Unit getClosestUnitInRectangle_native(long pointer, Position center, UnitFilter pred, int left); - - private native Unit getClosestUnitInRectangle_native(long pointer, Position center, UnitFilter pred); - - private native Unit getClosestUnitInRectangle_native(long pointer, Position center, UnitFilter pred, int left, int top, int right, int bottom); - - private native Unit getBestUnit_native(long pointer, BestUnitFilter best, UnitFilter pred, Position center); - - private native Unit getBestUnit_native(long pointer, BestUnitFilter best, UnitFilter pred); - - private native Unit getBestUnit_native(long pointer, BestUnitFilter best, UnitFilter pred, Position center, int radius); - private native Error getLastError_native(long pointer); private native boolean setLastError_native(long pointer); @@ -1058,6 +974,10 @@ public class Game { private native boolean isWalkable_native(long pointer, WalkPosition position); + private native int getGroundHeight_native(long pointer, int tileX, int tileY); + + private native int getGroundHeight_native(long pointer, TilePosition position); + private native boolean isBuildable_native(long pointer, int tileX, int tileY); private native boolean isBuildable_native(long pointer, int tileX, int tileY, boolean includeBuildings); @@ -1366,6 +1286,8 @@ public class Game { private native boolean setVision_native(long pointer, Player player, boolean enabled); + private native int elapsedTime_native(long pointer); + private native void setCommandOptimizationLevel_native(long pointer, int level); private native int countdownTimer_native(long pointer); diff --git a/bwapi4/Mirror.java b/bwapi4/Mirror.java index 1eaf4f2..93d4543 100644 --- a/bwapi4/Mirror.java +++ b/bwapi4/Mirror.java @@ -60,7 +60,7 @@ public class Mirror { static { String arch = System.getProperty("os.arch"); - String dllNames[] = {"bwapi_bridge" + VERSION, "gmp-vc90-mt", "mpfr-vc90-mt"}; + String dllNames[] = {"BWAPI4.dll", "gmp-vc90-mt", "mpfr-vc90-mt"}; if(!arch.equals("x86")){ throw new UnsupportedOperationException("BWMirror API supports only x86 architecture."); } diff --git a/bwapi4/Region.java b/bwapi4/Region.java index e914e82..bf086ae 100644 --- a/bwapi4/Region.java +++ b/bwapi4/Region.java @@ -63,10 +63,6 @@ public class Region extends CenteredObject return getDistance_native(pointer, other); } - public List getUnits(UnitFilter pred) { - return getUnits_native(pointer, pred); - } - private static Map instances = new HashMap(); @@ -114,7 +110,5 @@ public class Region extends CenteredObject private native int getDistance_native(long pointer, Region other); - private native List getUnits_native(long pointer, UnitFilter pred); - } diff --git a/bwapi4/Regionset.java b/bwapi4/Regionset.java index 416ac15..574730c 100644 --- a/bwapi4/Regionset.java +++ b/bwapi4/Regionset.java @@ -13,10 +13,6 @@ public class Regionset { return getCenter_native(pointer); } - public List getUnits(UnitFilter pred) { - return getUnits_native(pointer, pred); - } - private static Map instances = new HashMap(); @@ -40,7 +36,5 @@ public class Regionset { private native Position getCenter_native(long pointer); - private native List getUnits_native(long pointer, UnitFilter pred); - } diff --git a/bwapi4/Unit.java b/bwapi4/Unit.java index 98c565d..3cb2e35 100644 --- a/bwapi4/Unit.java +++ b/bwapi4/Unit.java @@ -103,6 +103,10 @@ public class Unit extends PositionedObject return getLastCommandFrame_native(pointer); } + public UnitCommand getLastCommand() { + return getLastCommand_native(pointer); + } + public Player getLastAttackingPlayer() { return getLastAttackingPlayer_native(pointer); } @@ -307,22 +311,6 @@ public class Unit extends PositionedObject return getLarva_native(pointer); } - public List getUnitsInRadius(int radius, UnitFilter pred) { - return getUnitsInRadius_native(pointer, radius, pred); - } - - public List getUnitsInWeaponRange(WeaponType weapon, UnitFilter pred) { - return getUnitsInWeaponRange_native(pointer, weapon, pred); - } - - public Unit getClosestUnit(UnitFilter pred) { - return getClosestUnit_native(pointer, pred); - } - - public Unit getClosestUnit(UnitFilter pred, int radius) { - return getClosestUnit_native(pointer, pred, radius); - } - public boolean hasNuke() { return hasNuke_native(pointer); } @@ -1906,6 +1894,8 @@ public class Unit extends PositionedObject private native int getLastCommandFrame_native(long pointer); + private native UnitCommand getLastCommand_native(long pointer); + private native Player getLastAttackingPlayer_native(long pointer); private native UnitType getInitialType_native(long pointer); @@ -2008,14 +1998,6 @@ public class Unit extends PositionedObject private native List getLarva_native(long pointer); - private native List getUnitsInRadius_native(long pointer, int radius, UnitFilter pred); - - private native List getUnitsInWeaponRange_native(long pointer, WeaponType weapon, UnitFilter pred); - - private native Unit getClosestUnit_native(long pointer, UnitFilter pred); - - private native Unit getClosestUnit_native(long pointer, UnitFilter pred, int radius); - private native boolean hasNuke_native(long pointer); private native boolean isAccelerating_native(long pointer); diff --git a/bwapi4/UnitCommand.java b/bwapi4/UnitCommand.java index d1692a4..bfbd96b 100644 --- a/bwapi4/UnitCommand.java +++ b/bwapi4/UnitCommand.java @@ -1,40 +1,116 @@ package bwapi4; -import bwapi4.*; +import bwapi.UnitCommandType; -import java.util.Map; -import java.util.HashMap; -import java.util.Collection; -import java.util.List; +import java.lang.Override; public class UnitCommand { - public UnitCommandType getType() { - return getType_native(pointer); + private Unit unit; + + private UnitCommandType unitCommandType; + + private Unit target; + + private int x, y; + + private int extra; + + public UnitCommand(Unit unit, UnitCommandType unitCommandType, Unit target, int x, int y, int extra) { + this.unit = unit; + this.unitCommandType = unitCommandType; + this.target = target; + this.x = x; + this.y = y; + this.extra = extra; + } + + public Unit getUnit() { + return unit; + } + + public UnitCommandType getUnitCommandType() { + return unitCommandType; + } + + public Unit getTarget() { + return target; } - private static Map instances = new HashMap(); - private UnitCommand(long pointer) { - this.pointer = pointer; - } - - private static UnitCommand get(long pointer) { - if (pointer == 0 ) { - return null; + public int getSlot() { + if (unitCommandType == UnitCommandType.None) { + return extra; } - UnitCommand instance = instances.get(pointer); - if (instance == null ) { - instance = new UnitCommand(pointer); - instances.put(pointer, instance); - } - return instance; + return -1; } - private long pointer; + public Position getTargetPosition() { + if (unitCommandType == UnitCommandType.Build || + unitCommandType == UnitCommandType.Land || + unitCommandType == UnitCommandType.Place_COP) { + return new Position(x * 32, y * 32); + } + return new Position(x, y); + } - private native UnitCommandType getType_native(long pointer); + public TilePosition getTargetTilePosition() { + if (unitCommandType == UnitCommandType.Build || + unitCommandType == UnitCommandType.Land || + unitCommandType == UnitCommandType.Place_COP) { + return new TilePosition(x, y); + } + return new TilePosition(x / 32, y / 32); + } + public boolean isQueued() { + if (unitCommandType == UnitCommandType.Attack_Move || + unitCommandType == UnitCommandType.Attack_Unit || + unitCommandType == UnitCommandType.Move || + unitCommandType == UnitCommandType.Patrol || + unitCommandType == UnitCommandType.Hold_Position || + unitCommandType == UnitCommandType.Stop || + unitCommandType == UnitCommandType.Follow || + unitCommandType == UnitCommandType.Gather || + unitCommandType == UnitCommandType.Return_Cargo || + unitCommandType == UnitCommandType.Repair || + unitCommandType == UnitCommandType.Load || + unitCommandType == UnitCommandType.Unload_All || + unitCommandType == UnitCommandType.Unload_All_Position || + unitCommandType == UnitCommandType.Right_Click_Position || + unitCommandType == UnitCommandType.Right_Click_Unit) { + return extra != 0; + } + return false; + } -} + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof UnitCommand)) return false; + + UnitCommand that = (UnitCommand) o; + + if (extra != that.extra) return false; + if (x != that.x) return false; + if (y != that.y) return false; + if (target != null ? !target.equals(that.target) : that.target != null) return false; + if (unit != null ? !unit.equals(that.unit) : that.unit != null) return false; + if (unitCommandType != null ? !unitCommandType.equals(that.unitCommandType) : that.unitCommandType != null) + return false; + + return true; + } + + @Override + public int hashCode() { + int result = unit != null ? unit.hashCode() : 0; + result = 31 * result + (unitCommandType != null ? unitCommandType.hashCode() : 0); + result = 31 * result + (target != null ? target.hashCode() : 0); + result = 31 * result + x; + result = 31 * result + y; + result = 31 * result + extra; + return result; + } +} \ No newline at end of file diff --git a/bwapi4/Unitset.java b/bwapi4/Unitset.java index eda3f72..9444d33 100644 --- a/bwapi4/Unitset.java +++ b/bwapi4/Unitset.java @@ -25,18 +25,6 @@ public class Unitset { return getLarva_native(pointer); } - public List getUnitsInRadius(int radius, UnitFilter pred) { - return getUnitsInRadius_native(pointer, radius, pred); - } - - public Unit getClosestUnit(UnitFilter pred) { - return getClosestUnit_native(pointer, pred); - } - - public Unit getClosestUnit(UnitFilter pred, int radius) { - return getClosestUnit_native(pointer, pred, radius); - } - public boolean issueCommand(UnitCommand command) { return issueCommand_native(pointer, command); } @@ -266,12 +254,6 @@ public class Unitset { private native List getLarva_native(long pointer); - private native List getUnitsInRadius_native(long pointer, int radius, UnitFilter pred); - - private native Unit getClosestUnit_native(long pointer, UnitFilter pred); - - private native Unit getClosestUnit_native(long pointer, UnitFilter pred, int radius); - private native boolean issueCommand_native(long pointer, UnitCommand command); private native boolean attack_native(long pointer, PositionOrUnit target); diff --git a/c4/impl.cpp b/c4/impl.cpp index f210c8a..76f0df8 100644 --- a/c4/impl.cpp +++ b/c4/impl.cpp @@ -5,7 +5,7 @@ #include #include #include -#include "../BWTA_Result.h" + using namespace BWAPI; std::map tableBulletType; @@ -66,12 +66,12 @@ jfieldID FindCachedField(JNIEnv * env, jclass clz, string name, string signature using namespace BWAPI; PositionOrUnit convertPositionOrUnit(JNIEnv * env, jobject obj){ - jclass clz = FindCachedClass(env, "PositionOrUnit"); + jclass clz = FindCachedClass(env, "bwapi4/PositionOrUnit"); jmethodID typeMethodId = FindCachedMethod(env, clz, "isUnit", "()Z"); bool isUnit = (bool)env->CallBooleanMethod(obj, typeMethodId); if(isUnit){ jobject unitObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, "getUnit", "()Lbwapi4/Unit;")); - Unit unit = (Unit)env->GetLongField(unitObj, FindCachedField(env, env->GetObjectClass(unitObj), "unitObj", "J")); + Unit unit = (Unit)env->GetLongField(unitObj, FindCachedField(env, env->GetObjectClass(unitObj), "pointer", "J")); return PositionOrUnit(unit); } jobject posObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, "getPosition", "()Lbwapi4/Position;")); @@ -80,6 +80,29 @@ PositionOrUnit convertPositionOrUnit(JNIEnv * env, jobject obj){ } +UnitCommand convertUnitCommand(JNIEnv * env, jobject obj){ jclass clz = FindCachedClass(env, "bwapi4/UnitCommand"); + jobject unitObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, "getUnit", "()Lbwapi4/Unit;")); + Unit unit = (Unit)env->GetLongField(unitObj, FindCachedField(env, env->GetObjectClass(unitObj), "pointer", "J")); + jobject targetObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, "getTarget", "()Lbwapi4/Unit;")); + Unit target = (Unit)env->GetLongField(targetObj, FindCachedField(env, env->GetObjectClass(targetObj), "pointer", "J")); + jobject typeObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, "getType", "()Lbwapi4/UnitCommandType;")); + UnitCommandType type = (UnitCommandType)env->GetIntField(typeObj, FindCachedField(env, env->GetObjectClass(typeObj), "value", "I")); + int extra = (int)env->GetIntField(obj, FindCachedField(env, clz, "extra", "I")); + jobject posObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, "getPosition", "()Lbwapi4/Position;")); + Position position((int)env->GetIntField(posObj, FindCachedField(env, env->GetObjectClass(posObj), "x", "I")), (int)env->GetIntField(posObj, FindCachedField(env, env->GetObjectClass(posObj), "y", "I"))); + return UnitCommand(unit, UnitCommandType(type), target, position.x, position.y, extra); +} + + +int resolveUnitCommandExtra(UnitCommand& command){ + if(command.getUnitType() != UnitTypes::None){ return command.getUnitType().getID();} + if(command.getTechType() != TechTypes::None){ return command.getTechType().getID();} + if(command.getUpgradeType() != UpgradeTypes::None){ return command.getUpgradeType().getID();} + if(command.getSlot() != -1){ return command.extra;} + return command.isQueued(); +} + + JNIEXPORT jint JNICALL Java_bwapi4_Bullet_getID_1native(JNIEnv * env, jobject obj, jlong pointer){ Bullet x_bullet = (Bullet)pointer; return x_bullet->getID(); @@ -505,198 +528,6 @@ JNIEXPORT void JNICALL Java_bwapi4_Game_enableFlag_1native(JNIEnv * env, jobject Game* x_game = (Game*)pointer; x_game->enableFlag(flag); } -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsOnTile_1native__JIILbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jint tileX, jint tileY, jobject p_pred){ -Game* x_game = (Game*)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_game->getUnitsOnTile(tileX, tileY, pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsOnTile_1native__JLbwapi4_TilePosition_2Lbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_tile, jobject p_pred){ -Game* x_game = (Game*)pointer; -TilePosition tile((int)env->GetIntField(p_tile, FindCachedField(env, env->GetObjectClass(p_tile), "x", "I")), (int)env->GetIntField(p_tile, FindCachedField(env, env->GetObjectClass(p_tile), "y", "I"))); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_game->getUnitsOnTile(tile, pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRectangle_1native__JIIIILbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jint left, jint top, jint right, jint bottom, jobject p_pred){ -Game* x_game = (Game*)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_game->getUnitsInRectangle(left, top, right, bottom, pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRectangle_1native__JLbwapi4_Position_2Lbwapi4_Position_2Lbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_topLeft, jobject p_bottomRight, jobject p_pred){ -Game* x_game = (Game*)pointer; -Position topLeft((int)env->GetIntField(p_topLeft, FindCachedField(env, env->GetObjectClass(p_topLeft), "x", "I")), (int)env->GetIntField(p_topLeft, FindCachedField(env, env->GetObjectClass(p_topLeft), "y", "I"))); -Position bottomRight((int)env->GetIntField(p_bottomRight, FindCachedField(env, env->GetObjectClass(p_bottomRight), "x", "I")), (int)env->GetIntField(p_bottomRight, FindCachedField(env, env->GetObjectClass(p_bottomRight), "y", "I"))); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_game->getUnitsInRectangle(topLeft, bottomRight, pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRadius_1native__JIIILbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jint x, jint y, jint radius, jobject p_pred){ -Game* x_game = (Game*)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_game->getUnitsInRadius(x, y, radius, pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRadius_1native__JLbwapi4_Position_2ILbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_center, jint radius, jobject p_pred){ -Game* x_game = (Game*)pointer; -Position center((int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "x", "I")), (int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "y", "I"))); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_game->getUnitsInRadius(center, radius, pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnit_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_center, jobject p_pred){ -Game* x_game = (Game*)pointer; -Position center((int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "x", "I")), (int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "y", "I"))); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_game->getClosestUnit(center, pred); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnit_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2I(JNIEnv * env, jobject obj, jlong pointer, jobject p_center, jobject p_pred, jint radius){ -Game* x_game = (Game*)pointer; -Position center((int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "x", "I")), (int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "y", "I"))); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_game->getClosestUnit(center, pred, radius); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2III(JNIEnv * env, jobject obj, jlong pointer, jobject p_center, jobject p_pred, jint left, jint top, jint right){ -Game* x_game = (Game*)pointer; -Position center((int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "x", "I")), (int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "y", "I"))); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_game->getClosestUnitInRectangle(center, pred, left, top, right); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2II(JNIEnv * env, jobject obj, jlong pointer, jobject p_center, jobject p_pred, jint left, jint top){ -Game* x_game = (Game*)pointer; -Position center((int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "x", "I")), (int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "y", "I"))); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_game->getClosestUnitInRectangle(center, pred, left, top); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2I(JNIEnv * env, jobject obj, jlong pointer, jobject p_center, jobject p_pred, jint left){ -Game* x_game = (Game*)pointer; -Position center((int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "x", "I")), (int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "y", "I"))); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_game->getClosestUnitInRectangle(center, pred, left); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_center, jobject p_pred){ -Game* x_game = (Game*)pointer; -Position center((int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "x", "I")), (int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "y", "I"))); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_game->getClosestUnitInRectangle(center, pred); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2IIII(JNIEnv * env, jobject obj, jlong pointer, jobject p_center, jobject p_pred, jint left, jint top, jint right, jint bottom){ -Game* x_game = (Game*)pointer; -Position center((int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "x", "I")), (int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "y", "I"))); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_game->getClosestUnitInRectangle(center, pred, left, top, right, bottom); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getBestUnit_1native__JLbwapi4_BestUnitFilter_2Lbwapi4_UnitFilter_2Lbwapi4_Position_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_best, jobject p_pred, jobject p_center){ -Game* x_game = (Game*)pointer; -BestUnitFilter best = (BestUnitFilter)env->GetLongField(p_best, FindCachedField(env, env->GetObjectClass(p_best), "pointer", "J")); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Position center((int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "x", "I")), (int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "y", "I"))); -jlong resptr = (jlong)x_game->getBestUnit(best, pred, center); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getBestUnit_1native__JLbwapi4_BestUnitFilter_2Lbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_best, jobject p_pred){ -Game* x_game = (Game*)pointer; -BestUnitFilter best = (BestUnitFilter)env->GetLongField(p_best, FindCachedField(env, env->GetObjectClass(p_best), "pointer", "J")); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_game->getBestUnit(best, pred); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getBestUnit_1native__JLbwapi4_BestUnitFilter_2Lbwapi4_UnitFilter_2Lbwapi4_Position_2I(JNIEnv * env, jobject obj, jlong pointer, jobject p_best, jobject p_pred, jobject p_center, jint radius){ -Game* x_game = (Game*)pointer; -BestUnitFilter best = (BestUnitFilter)env->GetLongField(p_best, FindCachedField(env, env->GetObjectClass(p_best), "pointer", "J")); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Position center((int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "x", "I")), (int)env->GetIntField(p_center, FindCachedField(env, env->GetObjectClass(p_center), "y", "I"))); -jlong resptr = (jlong)x_game->getBestUnit(best, pred, center, radius); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} JNIEXPORT jobject JNICALL Java_bwapi4_Game_getLastError_1native(JNIEnv * env, jobject obj, jlong pointer){ Game* x_game = (Game*)pointer; jlong resptr = (jlong)tableError.find(x_game->getLastError())->second; @@ -746,6 +577,15 @@ Game* x_game = (Game*)pointer; WalkPosition position((int)env->GetIntField(p_position, FindCachedField(env, env->GetObjectClass(p_position), "x", "I")), (int)env->GetIntField(p_position, FindCachedField(env, env->GetObjectClass(p_position), "y", "I"))); return x_game->isWalkable(position); } +JNIEXPORT jint JNICALL Java_bwapi4_Game_getGroundHeight_1native__JII(JNIEnv * env, jobject obj, jlong pointer, jint tileX, jint tileY){ +Game* x_game = (Game*)pointer; +return x_game->getGroundHeight(tileX, tileY); +} +JNIEXPORT jint JNICALL Java_bwapi4_Game_getGroundHeight_1native__JLbwapi4_TilePosition_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_position){ +Game* x_game = (Game*)pointer; +TilePosition position((int)env->GetIntField(p_position, FindCachedField(env, env->GetObjectClass(p_position), "x", "I")), (int)env->GetIntField(p_position, FindCachedField(env, env->GetObjectClass(p_position), "y", "I"))); +return x_game->getGroundHeight(position); +} JNIEXPORT jboolean JNICALL Java_bwapi4_Game_isBuildable_1native__JII(JNIEnv * env, jobject obj, jlong pointer, jint tileX, jint tileY){ Game* x_game = (Game*)pointer; return x_game->isBuildable(tileX, tileY); @@ -970,7 +810,7 @@ x_game->setLocalSpeed(speed); } JNIEXPORT jboolean JNICALL Java_bwapi4_Game_issueCommand_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_units, jobject p_command){ Game* x_game = (Game*)pointer; -std::set units; +Unitset units; jclass colClass = env->GetObjectClass(p_units); jmethodID sizeMethodId = FindCachedMethod(env, colClass, "size", "()I"); jmethodID getMethodId = FindCachedMethod(env, colClass, "get", "(I)Ljava/lang/Object;"); @@ -979,7 +819,7 @@ for( int i = 0; i < size; i++ ) { jobject jobj = env->CallObjectMethod(p_units,getMethodId); units.insert((Unit)env->GetLongField(jobj, FindCachedField(env, env->GetObjectClass(jobj), "pointer", "J"))); } -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_game->issueCommand(units, command); } JNIEXPORT jobject JNICALL Java_bwapi4_Game_getSelectedUnits_1native(JNIEnv * env, jobject obj, jlong pointer){ @@ -1069,12 +909,12 @@ x_game->setTextSize(); } JNIEXPORT void JNICALL Java_bwapi4_Game_setTextSize_1native__JLbwapi4_Text_Size_Enum_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_size){ Game* x_game = (Game*)pointer; -Text::Size::Enum size; +Text::Size::Enum size = (Text::Size::Enum)(int)env->GetIntField(p_size, FindCachedField(env, env->GetObjectClass(p_size), "value", "I")); x_game->setTextSize(size); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawText_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint x, jint y, jstring cstr_format){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); x_game->drawText(ctype, x, y, std::string(env->GetStringUTFChars(cstr_format, NULL)).c_str()); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawTextMap_1native__JIILjava_lang_String_2(JNIEnv * env, jobject obj, jlong pointer, jint x, jint y, jstring cstr_format){ @@ -1106,13 +946,13 @@ x_game->drawTextScreen(p, std::string(env->GetStringUTFChars(cstr_format, NULL)) } JNIEXPORT void JNICALL Java_bwapi4_Game_drawBox_1native__JLbwapi4_CoordinateType_Enum_2IIIILbwapi4_Color_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint left, jint top, jint right, jint bottom, jobject p_color){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); Color color((int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "r", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "g", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "b", "I"))); x_game->drawBox(ctype, left, top, right, bottom, color); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawBox_1native__JLbwapi4_CoordinateType_Enum_2IIIILbwapi4_Color_2Z(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint left, jint top, jint right, jint bottom, jobject p_color, jboolean isSolid){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); Color color((int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "r", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "g", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "b", "I"))); x_game->drawBox(ctype, left, top, right, bottom, color, (bool)isSolid); } @@ -1190,13 +1030,13 @@ x_game->drawBoxScreen(leftTop, rightBottom, color, (bool)isSolid); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawTriangle_1native__JLbwapi4_CoordinateType_Enum_2IIIIIILbwapi4_Color_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint ax, jint ay, jint bx, jint by, jint cx, jint cy, jobject p_color){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); Color color((int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "r", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "g", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "b", "I"))); x_game->drawTriangle(ctype, ax, ay, bx, by, cx, cy, color); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawTriangle_1native__JLbwapi4_CoordinateType_Enum_2IIIIIILbwapi4_Color_2Z(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint ax, jint ay, jint bx, jint by, jint cx, jint cy, jobject p_color, jboolean isSolid){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); Color color((int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "r", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "g", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "b", "I"))); x_game->drawTriangle(ctype, ax, ay, bx, by, cx, cy, color, (bool)isSolid); } @@ -1280,13 +1120,13 @@ x_game->drawTriangleScreen(a, b, c, color, (bool)isSolid); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawCircle_1native__JLbwapi4_CoordinateType_Enum_2IIILbwapi4_Color_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint x, jint y, jint radius, jobject p_color){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); Color color((int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "r", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "g", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "b", "I"))); x_game->drawCircle(ctype, x, y, radius, color); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawCircle_1native__JLbwapi4_CoordinateType_Enum_2IIILbwapi4_Color_2Z(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint x, jint y, jint radius, jobject p_color, jboolean isSolid){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); Color color((int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "r", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "g", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "b", "I"))); x_game->drawCircle(ctype, x, y, radius, color, (bool)isSolid); } @@ -1358,13 +1198,13 @@ x_game->drawCircleScreen(p, radius, color, (bool)isSolid); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawEllipse_1native__JLbwapi4_CoordinateType_Enum_2IIIILbwapi4_Color_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint x, jint y, jint xrad, jint yrad, jobject p_color){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); Color color((int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "r", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "g", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "b", "I"))); x_game->drawEllipse(ctype, x, y, xrad, yrad, color); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawEllipse_1native__JLbwapi4_CoordinateType_Enum_2IIIILbwapi4_Color_2Z(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint x, jint y, jint xrad, jint yrad, jobject p_color, jboolean isSolid){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); Color color((int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "r", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "g", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "b", "I"))); x_game->drawEllipse(ctype, x, y, xrad, yrad, color, (bool)isSolid); } @@ -1436,7 +1276,7 @@ x_game->drawEllipseScreen(p, xrad, yrad, color, (bool)isSolid); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawDot_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint x, jint y, jobject p_color){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); Color color((int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "r", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "g", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "b", "I"))); x_game->drawDot(ctype, x, y, color); } @@ -1475,7 +1315,7 @@ x_game->drawDotScreen(p, color); } JNIEXPORT void JNICALL Java_bwapi4_Game_drawLine_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_ctype, jint x1, jint y1, jint x2, jint y2, jobject p_color){ Game* x_game = (Game*)pointer; -CoordinateType::Enum ctype; +CoordinateType::Enum ctype = (CoordinateType::Enum)(int)env->GetIntField(p_ctype, FindCachedField(env, env->GetObjectClass(p_ctype), "value", "I")); Color color((int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "r", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "g", "I")), (int)env->GetIntField(p_color, FindCachedField(env, env->GetObjectClass(p_color), "b", "I"))); x_game->drawLine(ctype, x1, y1, x2, y2, color); } @@ -1606,6 +1446,10 @@ Game* x_game = (Game*)pointer; Player player = (Player)env->GetLongField(p_player, FindCachedField(env, env->GetObjectClass(p_player), "pointer", "J")); return x_game->setVision(player, (bool)enabled); } +JNIEXPORT jint JNICALL Java_bwapi4_Game_elapsedTime_1native(JNIEnv * env, jobject obj, jlong pointer){ +Game* x_game = (Game*)pointer; +return x_game->elapsedTime(); +} JNIEXPORT void JNICALL Java_bwapi4_Game_setCommandOptimizationLevel_1native(JNIEnv * env, jobject obj, jlong pointer, jint level){ Game* x_game = (Game*)pointer; x_game->setCommandOptimizationLevel(level); @@ -2110,22 +1954,6 @@ Region x_region = (Region)pointer; Region other = (Region)env->GetLongField(p_other, FindCachedField(env, env->GetObjectClass(p_other), "pointer", "J")); return x_region->getDistance(other); } -JNIEXPORT jobject JNICALL Java_bwapi4_Region_getUnits_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_pred){ -Region x_region = (Region)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_region->getUnits(pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} JNIEXPORT jobject JNICALL Java_bwapi4_Regionset_getCenter_1native(JNIEnv * env, jobject obj, jlong pointer){ Regionset* x_regionset = (Regionset*)pointer; Position cresult = x_regionset->getCenter(); @@ -2134,22 +1962,6 @@ jmethodID retConsID = FindCachedMethod(env, retcls, "", "(II)V"); jobject result = env->NewObject(retcls, retConsID, cresult.x, cresult.y); return result; } -JNIEXPORT jobject JNICALL Java_bwapi4_Regionset_getUnits_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_pred){ -Regionset* x_regionset = (Regionset*)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_regionset->getUnits(pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} JNIEXPORT jboolean JNICALL Java_bwapi4_TilePosition_isValid(JNIEnv * env, jobject obj){ TilePosition x_tilePosition((int)env->GetIntField(obj, FindCachedField(env, env->GetObjectClass(obj), "x", "I")), (int)env->GetIntField(obj, FindCachedField(env, env->GetObjectClass(obj), "y", "I"))); return x_tilePosition.isValid(); @@ -2282,6 +2094,14 @@ JNIEXPORT jint JNICALL Java_bwapi4_Unit_getLastCommandFrame_1native(JNIEnv * env Unit x_unit = (Unit)pointer; return x_unit->getLastCommandFrame(); } +JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getLastCommand_1native(JNIEnv * env, jobject obj, jlong pointer){ +Unit x_unit = (Unit)pointer; +UnitCommand cresult = x_unit->getLastCommand(); +jclass retcls = FindCachedClass(env, "bwapi4/UnitCommand"); +jmethodID retConsID = FindCachedMethod(env, retcls, "", "(Lbwapi4/Unit;Lbwapi4/UnitCommandType;Lbwapi4/Unit;III)V"); +jobject result = env->NewObject(retcls, retConsID, env->CallStaticObjectMethod(FindCachedClass(env, "bwapi4/Unit"), FindCachedMethodStatic(env, FindCachedClass(env, "bwapi4/Unit"), "get", "(J)Lbwapi4/Unit;"), cresult.getUnit()), env->CallStaticObjectMethod(FindCachedClass(env, "bwapi4/UnitCommandType"), FindCachedMethodStatic(env, FindCachedClass(env, "bwapi4/UnitCommandType"), "get", "(J)Lbwapi4/UnitCommandType;"), cresult.getType()), env->CallStaticObjectMethod(FindCachedClass(env, "bwapi4/Unit"), FindCachedMethodStatic(env, FindCachedClass(env, "bwapi4/Unit"), "get", "(J)Lbwapi4/Unit;"), cresult.getTarget()), cresult.getTargetPosition().x , cresult.getTargetPosition().y , resolveUnitCommandExtra(cresult)); +return result; +} JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getLastAttackingPlayer_1native(JNIEnv * env, jobject obj, jlong pointer){ Unit x_unit = (Unit)pointer; jlong resptr = (jlong)x_unit->getLastAttackingPlayer(); @@ -2590,55 +2410,6 @@ env->CallVoidMethod(result, addMethodID, elem); } return result; } -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getUnitsInRadius_1native(JNIEnv * env, jobject obj, jlong pointer, jint radius, jobject p_pred){ -Unit x_unit = (Unit)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_unit->getUnitsInRadius(radius, pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getUnitsInWeaponRange_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_weapon, jobject p_pred){ -Unit x_unit = (Unit)pointer; -WeaponType weapon = (WeaponType)env->GetLongField(p_weapon, FindCachedField(env, env->GetObjectClass(p_weapon), "pointer", "J")); -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_unit->getUnitsInWeaponRange(weapon, pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getClosestUnit_1native__JLbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_pred){ -Unit x_unit = (Unit)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_unit->getClosestUnit(pred); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getClosestUnit_1native__JLbwapi4_UnitFilter_2I(JNIEnv * env, jobject obj, jlong pointer, jobject p_pred, jint radius){ -Unit x_unit = (Unit)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_unit->getClosestUnit(pred, radius); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_hasNuke_1native(JNIEnv * env, jobject obj, jlong pointer){ Unit x_unit = (Unit)pointer; return x_unit->hasNuke(); @@ -2867,7 +2638,7 @@ return x_unit->isTargetable(); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_issueCommand_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_command){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->issueCommand(command); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_attack_1native__JLbwapi4_PositionOrUnit_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_target){ @@ -3125,72 +2896,72 @@ return x_unit->placeCOP(target); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommand_1native__JLbwapi4_UnitCommand_2ZZZZZ(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions, jboolean checkCanUseTechUnitOnUnits, jboolean checkCanBuildUnitType, jboolean checkCanTargetUnit, jboolean checkCanIssueCommandType){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommand(command, (bool)checkCanUseTechPositionOnPositions, (bool)checkCanUseTechUnitOnUnits, (bool)checkCanBuildUnitType, (bool)checkCanTargetUnit, (bool)checkCanIssueCommandType); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommand_1native__JLbwapi4_UnitCommand_2ZZZZ(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions, jboolean checkCanUseTechUnitOnUnits, jboolean checkCanBuildUnitType, jboolean checkCanTargetUnit){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommand(command, (bool)checkCanUseTechPositionOnPositions, (bool)checkCanUseTechUnitOnUnits, (bool)checkCanBuildUnitType, (bool)checkCanTargetUnit); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommand_1native__JLbwapi4_UnitCommand_2ZZZ(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions, jboolean checkCanUseTechUnitOnUnits, jboolean checkCanBuildUnitType){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommand(command, (bool)checkCanUseTechPositionOnPositions, (bool)checkCanUseTechUnitOnUnits, (bool)checkCanBuildUnitType); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommand_1native__JLbwapi4_UnitCommand_2ZZ(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions, jboolean checkCanUseTechUnitOnUnits){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommand(command, (bool)checkCanUseTechPositionOnPositions, (bool)checkCanUseTechUnitOnUnits); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommand_1native__JLbwapi4_UnitCommand_2Z(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommand(command, (bool)checkCanUseTechPositionOnPositions); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommand_1native__JLbwapi4_UnitCommand_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_command){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommand(command); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommand_1native__JLbwapi4_UnitCommand_2ZZZZZZ(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions, jboolean checkCanUseTechUnitOnUnits, jboolean checkCanBuildUnitType, jboolean checkCanTargetUnit, jboolean checkCanIssueCommandType, jboolean checkCommandibility){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommand(command, (bool)checkCanUseTechPositionOnPositions, (bool)checkCanUseTechUnitOnUnits, (bool)checkCanBuildUnitType, (bool)checkCanTargetUnit, (bool)checkCanIssueCommandType, (bool)checkCommandibility); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommandGrouped_1native__JLbwapi4_UnitCommand_2ZZZZZ(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions, jboolean checkCanUseTechUnitOnUnits, jboolean checkCanTargetUnit, jboolean checkCanIssueCommandType, jboolean checkCommandibilityGrouped){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommandGrouped(command, (bool)checkCanUseTechPositionOnPositions, (bool)checkCanUseTechUnitOnUnits, (bool)checkCanTargetUnit, (bool)checkCanIssueCommandType, (bool)checkCommandibilityGrouped); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommandGrouped_1native__JLbwapi4_UnitCommand_2ZZZZ(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions, jboolean checkCanUseTechUnitOnUnits, jboolean checkCanTargetUnit, jboolean checkCanIssueCommandType){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommandGrouped(command, (bool)checkCanUseTechPositionOnPositions, (bool)checkCanUseTechUnitOnUnits, (bool)checkCanTargetUnit, (bool)checkCanIssueCommandType); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommandGrouped_1native__JLbwapi4_UnitCommand_2ZZZ(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions, jboolean checkCanUseTechUnitOnUnits, jboolean checkCanTargetUnit){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommandGrouped(command, (bool)checkCanUseTechPositionOnPositions, (bool)checkCanUseTechUnitOnUnits, (bool)checkCanTargetUnit); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommandGrouped_1native__JLbwapi4_UnitCommand_2ZZ(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions, jboolean checkCanUseTechUnitOnUnits){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommandGrouped(command, (bool)checkCanUseTechPositionOnPositions, (bool)checkCanUseTechUnitOnUnits); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommandGrouped_1native__JLbwapi4_UnitCommand_2Z(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommandGrouped(command, (bool)checkCanUseTechPositionOnPositions); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommandGrouped_1native__JLbwapi4_UnitCommand_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_command){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommandGrouped(command); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canIssueCommandGrouped_1native__JLbwapi4_UnitCommand_2ZZZZZZ(JNIEnv * env, jobject obj, jlong pointer, jobject p_command, jboolean checkCanUseTechPositionOnPositions, jboolean checkCanUseTechUnitOnUnits, jboolean checkCanTargetUnit, jboolean checkCanIssueCommandType, jboolean checkCommandibilityGrouped, jboolean checkCommandibility){ Unit x_unit = (Unit)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unit->canIssueCommandGrouped(command, (bool)checkCanUseTechPositionOnPositions, (bool)checkCanUseTechUnitOnUnits, (bool)checkCanTargetUnit, (bool)checkCanIssueCommandType, (bool)checkCommandibilityGrouped, (bool)checkCommandibility); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canCommand_1native(JNIEnv * env, jobject obj, jlong pointer){ @@ -4354,13 +4125,6 @@ Unit x_unit = (Unit)pointer; TilePosition target((int)env->GetIntField(p_target, FindCachedField(env, env->GetObjectClass(p_target), "x", "I")), (int)env->GetIntField(p_target, FindCachedField(env, env->GetObjectClass(p_target), "y", "I"))); return x_unit->canPlaceCOP(target, (bool)checkCanIssueCommandType, (bool)checkCommandibility); } -JNIEXPORT jobject JNICALL Java_bwapi4_UnitCommand_getType_1native(JNIEnv * env, jobject obj, jlong pointer){ -UnitCommand x_unitCommand = (UnitCommand)pointer; -jlong resptr = (jlong)x_unitCommand->getType(); -jclass retcls = FindCachedClass(env, "bwapi4/UnitCommandType"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/UnitCommandType;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getPosition_1native(JNIEnv * env, jobject obj, jlong pointer){ Unitset* x_unitset = (Unitset*)pointer; Position cresult = x_unitset->getPosition(); @@ -4414,41 +4178,9 @@ env->CallVoidMethod(result, addMethodID, elem); } return result; } -JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getUnitsInRadius_1native(JNIEnv * env, jobject obj, jlong pointer, jint radius, jobject p_pred){ -Unitset* x_unitset = (Unitset*)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -Unitset cresult = x_unitset->getUnitsInRadius(radius, pred); -jclass listCls = FindCachedClass(env, "java/util/ArrayList"); -jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); -jobject result = env->NewObject(listCls, listConsID); -jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z"); -jclass elemClass = FindCachedClass(env, "bwapi4/Unit"); -jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi4/Unit;"); -for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it; -jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; -env->CallVoidMethod(result, addMethodID, elem); -} -return result; -} -JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getClosestUnit_1native__JLbwapi4_UnitFilter_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_pred){ -Unitset* x_unitset = (Unitset*)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_unitset->getClosestUnit(pred); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} -JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getClosestUnit_1native__JLbwapi4_UnitFilter_2I(JNIEnv * env, jobject obj, jlong pointer, jobject p_pred, jint radius){ -Unitset* x_unitset = (Unitset*)pointer; -UnitFilter pred = (UnitFilter)env->GetLongField(p_pred, FindCachedField(env, env->GetObjectClass(p_pred), "pointer", "J")); -jlong resptr = (jlong)x_unitset->getClosestUnit(pred, radius); -jclass retcls = FindCachedClass(env, "bwapi4/Unit"); -jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi4/Unit;"); -return env->CallStaticObjectMethod(retcls, mid, resptr); -} JNIEXPORT jboolean JNICALL Java_bwapi4_Unitset_issueCommand_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_command){ Unitset* x_unitset = (Unitset*)pointer; -UnitCommand command = (UnitCommand)env->GetLongField(p_command, FindCachedField(env, env->GetObjectClass(p_command), "pointer", "J")); +UnitCommand command(convertUnitCommand(env, p_command )); return x_unitset->issueCommand(command); } JNIEXPORT jboolean JNICALL Java_bwapi4_Unitset_attack_1native__JLbwapi4_PositionOrUnit_2(JNIEnv * env, jobject obj, jlong pointer, jobject p_target){ @@ -6297,11 +6029,6 @@ println("Connecting to Broodwar..."); { switch (it->getType()) { case EventType::MatchStart: - BWTA::BWTA_Result::regions.clear(); - BWTA::BWTA_Result::baselocations.clear(); - BWTA::BWTA_Result::startlocations.clear(); - BWTA::BWTA_Result::chokepoints.clear(); - BWTA::BWTA_Result::unwalkablePolygons.clear(); env->CallVoidMethod(moduleObj, matchStartCallback); break; case EventType::MatchEnd: diff --git a/compiled4/bwapi4/Game.class b/compiled4/bwapi4/Game.class index 0696b3b3aa3ccab1a39ba2a48144a257a5b71b40..f746ca9a5bc85bafaf70d996fa5db725f777629f 100644 GIT binary patch literal 26869 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 literal 30475 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 diff --git a/compiled4/bwapi4/Region.class b/compiled4/bwapi4/Region.class index f3db5bf4200e6939b34fb1d4357aa5cc9f9f6b59..869159701265bb7549ea01a5727dd1b80129404a 100644 GIT binary patch literal 2385 zcma)6TT>iW5dLPlEV~T1ESH23kf3o{Fhq0J#l!$1T$YP~iNt6emSGvPnc3Qz#qxjn zSeP%cdBU|Omch2ely8E2&KK<7}zx@v2I@}a8SWOew1l9#U z71$8i6xb5@OyH5gV}Z{FwgsLDe38a^JQY`8rtuY?wc~48N$iNOD2Lr7>@@oEG>JU} zDaZ8#%Prczfv&=Vb!bi10;fE+Vpa0gZaO8`3Tjo`z_rub>F`*#+|pFRb4&Tc&No)Y zxiPh2mmJT{-=%r7;yG?$R}C0T23ksXusCO+DLcMspn2BYrPr>4O>v- zPS-)xB?RknL0)#c9-5LlSr#qrrA56uTAa~h7D-F{v{cnf%loxFESXk}QqiDtnlo1C z{I^(|r8+IDnHFZUOJ~%sZMs;Fs>iRu;-xpeTD54;JJSB`VF|9vS2S@6!zMn&M<((D z)A-oLUEDMAi5&0CZbo*q0&@Zn1mnfBo{ZDSNY6F&-WI3JttT4NQ*rtP>5~oV={S9g^!FOl+vD`>q+f*? zjWWgYs+#e<-zM=|LwZM?o+tf%d=PoRjAnKdkXAi2afHtJZSGOepBC|R?6D@rKSEb- zNe<9ng{eaj}(7&n&0+TWEW5>b~lGp-+hl3GcKag3O{1bz3 zkl7wSLhnkXoP3SGCOn>$CnQuK4ZCK&=Sj7<5*re;c8-Fwb+&b{}X=bYs4fB$$5;0}&s=)>bU#kLSn zg!oK|9U-0y@wpIR2=S#5UkUL{h_8h(gxD3L5XT_)L_9N&eH1%!04s_^VS6q%r6`W# z7{Fc>wuYExyPjbeOjkos{?Ir!(pAqYrB{q{hSp81Xd7O&Vrsa3+B)lRONL!c=N-G4 z$?tw^l&$IXhFP>6J2OZ3XxXuB&#Y+BavIu-rk7pR(2|_UYG_?>_87G%Z`tN*^=Q|u zY#F;HYAzAx$5^U3)w1x2QMF+DkrK&?+DYq(-*0iV9DIXHWSN}#ieqp4C+~3o1Rg4 zPUgr;l5>7Cvy0EjA?uj66)|}G0mksXf)Xo$D8655rRr-qs-fcjrz@`D;s{oLkby## zSCB*_0hG3n9(5ilbwa602c_*-TFDBfzoPU$Ih0|Ph9(?Qn6WzMEG-mDaynp#QYMnQ zTICv8BB&}^qHyDN-2by>=0d=;bm^Ealmf!A&&ikgrcE5aJ^|)G?0*9gAZ7vG{rntN-zhh~9%@0M6K>^RzvjZ)QI z+tO3?6$6Ya2a?!*)T8tsI?}QZh?yZRj%^9d*{F}6ab@~^Mm|Ri6AZ#0!|yb zdy5(-oZlnVT_aAzb?!#d!Y?3}O8pA$1d$)P(J)5YE)6}DZ#RXvgy9LoZ(yAAyy&ej zLeU2ZyoqEJcw0ESc+W)B%e05#;;E^o(W7Db7~zvmqj!YiHwm9=3Xg^1lZ3z16dn)5 z(}dq@3hxZV?+~8GZOZfVu7~q}m%w+M!n?xo4B_wbkBT4tI$FslATBvGd4lfnZ5|Lg zjTxfEZO-6(!toaZmcCC9c4%-;irj3G=bYeDYUDR)KPmcjOG}nF$sxvZ5NEsJ5Bxl8 zh2P9@?E4?kroH$Xy~Drb@=GKl_!E6AQ-5LT75a9DPtd;-7^hz1N(-J$iK|5<|A!If z_bU5f4ITItSFyosZj#8r{AIFn4~ocFxvy?pk+-TR+^zyAQ1Suf(4@p@)G5w!s4Jo7A+ zSfuV~gjf>5lH-NPQ*$)WKD5&<^VT%dFD6Of*yg)Y#v-POBc4!=c)*b3WyC99JC-9R zSTT(3oNOQNuQWgI?(H9ZI@&!B;-?X-tfg)HtKrlESk+KEhT%RM5hHi~bK=H%sP|FY z&Xi9di^~fky$x0&B2*`%3%=eVQ?Go(TnQP1eyATACo7+#)LyNX|K%Nv4SB0^@%)0E zxx6MD-;nE)x7^}3k~_*hTr2KS*tk9&M3XMX44cWNGHt&`td*f|^71b5OutFpDQd)8 vc~uOmZ3}>fu`*N?*zTpJ6cbsF!wH8q4#0Bd9eA literal 1301 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 M#3v!GAb!UG0r;fB5C8xG literal 45024 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 diff --git a/compiled4/bwapi4/UnitCommand.class b/compiled4/bwapi4/UnitCommand.class index d41833f16e40d985bfcc1bae0958baafd6565e9a..2cc5489af013d9c2f6b093f185f81d3364c8336b 100644 GIT binary patch literal 2489 zcmb7F-*XdH6#h2ZWSg)hDQzePX(~xe&4%){Qb+X0N%kD zaqP$07<%x5z&U~Q0v80v1U`)6Ba9172wW7nWMDE56PFE4#jzciMVJ$q7MKyZB5+mU zV}WY|vjW!zJ`uPf@TovvU{1g?FfTzB1Qra~8uV(ZSkcfrK7ZF*DGm+JkR8^L5OLOB zUbadL)Av`X*r_ypg@z64Mk`i%(WVjY9{*$f-`5ba?^VhcH%E%JbW+3dzAY~P!`c>| zv9YoKD-1E~E--+^c(G((tS-;n~VmvS% zBqD}$j!VPgzJ4aunyXlaTNBnw;JB@>JL#?#D@C`Yp}l5%Xs{+^ZBlj3>7rxTHdxI~ z?ZyqBXeq8OmErzbwv>mKtkoq| zrg+Y+mJ9Ydy3>%9@&qL~EQd`D;4>4i;|&uBaL~k?LiM5FL|Pz&eglgpmSnFea8uwG z4zkF>h}5zWTMiQs#Ep5FSe9cY0asu};I=?nU{#IVAF@9jWam(_p$|s<^mR$!DD+W83tYY!pk7 z=;af$pKnnVA!#|OkaXQ&*?50t@BNkS_g78;*ElqG_Ym{)~7Y8h=gx)eFWW%c!-Y0wT@7CioQ-@_<#9se~#_GZ{;OH zuZmCZb5tzOGbEaQ57YNaCOumBEqRaN{lNF1LH#_MVEvLFzE)J5hp!a1!@~nbwR^a& zs16T{ib{F7p{Si6a*FEoFs7(o9!@E$%fnGc?e>sS)E*DLih8YH@4fYUcdsGIUE>=V z`V;8k^>A}f&*C9+_#QKUaxv(C;bDA~v6Rk1&3v^IHr%eAD`yL_j1aVQuB&8FM3hHgoCr-yw&u$TII>30Zz#Cir!^%8!f1Z;M=sLx{GGYX30L5X0w-LYlYN Rr$d@{Wh={U&d4^h{{rW@@}&R( literal 1016 zcma)5U2hUW6g{(iENr*56tzlQTC7w+ENY9IK>E_emYC(y=P{B{rUDCz!n~ap<-R*azlfTlnggC+(dc? z8Dv%5l2}d#w^eLv(2!D*7YJK+&oS(}*%O#69~%QB-*>ELzG8HWM5|WAHk^Lf6eyfW zOQW!9*o}O-Z8wVL+8d)|ZRelbmb2S#wG8{HxI+!K)3$8K>EciTtg%#|(Me9~{#%*N)9P$Bv9s@(Sqg zz-ac({g(nUIn#Mqx-r&uH8;`|oRMmAvdl}-=1!mIJ)A=SF99U^`gFcjg%6L0fLH5A z^UTmM?gPxlaEa?>MoIX%1H#$tXNVz`69xiTxCUKdmWA}oqi0F?5!13m__C{CAU^!# zM_eQZKgGio*LVYQug+ms))f-rckdApCm-QYd_~|CK?OgcR&qZPKZAOh7$Q{hz}zXq zK0MFKmK3+81g8U=2~s+QCGM8_UqK29ew%B|a1tn?-||ab7K(fwOogyYa5V5brQ~ns X4BFukGoRoek1!fJN@|i61=s%qsCU)k diff --git a/compiled4/bwapi4/Unitset.class b/compiled4/bwapi4/Unitset.class index 7a90d6e2d2828f9b0afb187b402d748e4cc56793..8f125cf9d62a9c74469069077c59fe732882a2dc 100644 GIT binary patch literal 6410 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 diff --git a/concat_header4.h b/concat_header4.h index 156ebfe..32387fc 100644 --- a/concat_header4.h +++ b/concat_header4.h @@ -680,134 +680,6 @@ JNIEXPORT jboolean JNICALL Java_bwapi4_Game_isFlagEnabled_1native JNIEXPORT void JNICALL Java_bwapi4_Game_enableFlag_1native (JNIEnv *, jobject, jlong, jint); -/* - * Class: bwapi4_Game - * Method: getUnitsOnTile_native - * Signature: (JIILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsOnTile_1native__JIILbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jint, jint, jobject); - -/* - * Class: bwapi4_Game - * Method: getUnitsOnTile_native - * Signature: (JLbwapi4/TilePosition;Lbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsOnTile_1native__JLbwapi4_TilePosition_2Lbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getUnitsInRectangle_native - * Signature: (JIIIILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRectangle_1native__JIIIILbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jint, jint, jint, jint, jobject); - -/* - * Class: bwapi4_Game - * Method: getUnitsInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/Position;Lbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRectangle_1native__JLbwapi4_Position_2Lbwapi4_Position_2Lbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getUnitsInRadius_native - * Signature: (JIIILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRadius_1native__JIIILbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jint, jint, jint, jobject); - -/* - * Class: bwapi4_Game - * Method: getUnitsInRadius_native - * Signature: (JLbwapi4/Position;ILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRadius_1native__JLbwapi4_Position_2ILbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jint, jobject); - -/* - * Class: bwapi4_Game - * Method: getClosestUnit_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnit_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getClosestUnit_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;I)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnit_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2I - (JNIEnv *, jobject, jlong, jobject, jobject, jint); - -/* - * Class: bwapi4_Game - * Method: getClosestUnitInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;III)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2III - (JNIEnv *, jobject, jlong, jobject, jobject, jint, jint, jint); - -/* - * Class: bwapi4_Game - * Method: getClosestUnitInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;II)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2II - (JNIEnv *, jobject, jlong, jobject, jobject, jint, jint); - -/* - * Class: bwapi4_Game - * Method: getClosestUnitInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;I)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2I - (JNIEnv *, jobject, jlong, jobject, jobject, jint); - -/* - * Class: bwapi4_Game - * Method: getClosestUnitInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getClosestUnitInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;IIII)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2IIII - (JNIEnv *, jobject, jlong, jobject, jobject, jint, jint, jint, jint); - -/* - * Class: bwapi4_Game - * Method: getBestUnit_native - * Signature: (JLbwapi4/BestUnitFilter;Lbwapi4/UnitFilter;Lbwapi4/Position;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getBestUnit_1native__JLbwapi4_BestUnitFilter_2Lbwapi4_UnitFilter_2Lbwapi4_Position_2 - (JNIEnv *, jobject, jlong, jobject, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getBestUnit_native - * Signature: (JLbwapi4/BestUnitFilter;Lbwapi4/UnitFilter;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getBestUnit_1native__JLbwapi4_BestUnitFilter_2Lbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getBestUnit_native - * Signature: (JLbwapi4/BestUnitFilter;Lbwapi4/UnitFilter;Lbwapi4/Position;I)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getBestUnit_1native__JLbwapi4_BestUnitFilter_2Lbwapi4_UnitFilter_2Lbwapi4_Position_2I - (JNIEnv *, jobject, jlong, jobject, jobject, jobject, jint); - /* * Class: bwapi4_Game * Method: getLastError_native @@ -896,6 +768,22 @@ JNIEXPORT jboolean JNICALL Java_bwapi4_Game_isWalkable_1native__JII JNIEXPORT jboolean JNICALL Java_bwapi4_Game_isWalkable_1native__JLbwapi4_WalkPosition_2 (JNIEnv *, jobject, jlong, jobject); +/* + * Class: bwapi4_Game + * Method: getGroundHeight_native + * Signature: (JII)I + */ +JNIEXPORT jint JNICALL Java_bwapi4_Game_getGroundHeight_1native__JII + (JNIEnv *, jobject, jlong, jint, jint); + +/* + * Class: bwapi4_Game + * Method: getGroundHeight_native + * Signature: (JLbwapi4/TilePosition;)I + */ +JNIEXPORT jint JNICALL Java_bwapi4_Game_getGroundHeight_1native__JLbwapi4_TilePosition_2 + (JNIEnv *, jobject, jlong, jobject); + /* * Class: bwapi4_Game * Method: isBuildable_native @@ -2128,6 +2016,14 @@ JNIEXPORT jboolean JNICALL Java_bwapi4_Game_setVision_1native__JLbwapi4_Player_2 JNIEXPORT jboolean JNICALL Java_bwapi4_Game_setVision_1native__JLbwapi4_Player_2Z (JNIEnv *, jobject, jlong, jobject, jboolean); +/* + * Class: bwapi4_Game + * Method: elapsedTime_native + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_bwapi4_Game_elapsedTime_1native + (JNIEnv *, jobject, jlong); + /* * Class: bwapi4_Game * Method: setCommandOptimizationLevel_native @@ -3176,14 +3072,6 @@ JNIEXPORT jobject JNICALL Java_bwapi4_Region_getClosestInaccessibleRegion_1nativ JNIEXPORT jint JNICALL Java_bwapi4_Region_getDistance_1native (JNIEnv *, jobject, jlong, jobject); -/* - * Class: bwapi4_Region - * Method: getUnits_native - * Signature: (JLbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Region_getUnits_1native - (JNIEnv *, jobject, jlong, jobject); - #ifdef __cplusplus } #endif @@ -3203,14 +3091,6 @@ extern "C" { JNIEXPORT jobject JNICALL Java_bwapi4_Regionset_getCenter_1native (JNIEnv *, jobject, jlong); -/* - * Class: bwapi4_Regionset - * Method: getUnits_native - * Signature: (JLbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Regionset_getUnits_1native - (JNIEnv *, jobject, jlong, jobject); - #ifdef __cplusplus } #endif @@ -3471,6 +3351,14 @@ JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_hasPath_1native JNIEXPORT jint JNICALL Java_bwapi4_Unit_getLastCommandFrame_1native (JNIEnv *, jobject, jlong); +/* + * Class: bwapi4_Unit + * Method: getLastCommand_native + * Signature: (J)Lbwapi4/UnitCommand; + */ +JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getLastCommand_1native + (JNIEnv *, jobject, jlong); + /* * Class: bwapi4_Unit * Method: getLastAttackingPlayer_native @@ -3879,38 +3767,6 @@ JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getHatchery_1native JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getLarva_1native (JNIEnv *, jobject, jlong); -/* - * Class: bwapi4_Unit - * Method: getUnitsInRadius_native - * Signature: (JILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getUnitsInRadius_1native - (JNIEnv *, jobject, jlong, jint, jobject); - -/* - * Class: bwapi4_Unit - * Method: getUnitsInWeaponRange_native - * Signature: (JLbwapi4/WeaponType;Lbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getUnitsInWeaponRange_1native - (JNIEnv *, jobject, jlong, jobject, jobject); - -/* - * Class: bwapi4_Unit - * Method: getClosestUnit_native - * Signature: (JLbwapi4/UnitFilter;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getClosestUnit_1native__JLbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject); - -/* - * Class: bwapi4_Unit - * Method: getClosestUnit_native - * Signature: (JLbwapi4/UnitFilter;I)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getClosestUnit_1native__JLbwapi4_UnitFilter_2I - (JNIEnv *, jobject, jlong, jobject, jint); - /* * Class: bwapi4_Unit * Method: hasNuke_native @@ -6954,14 +6810,6 @@ JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_canPlaceCOP_1native__JLbwapi4_TilePo #ifdef __cplusplus extern "C" { #endif -/* - * Class: bwapi4_UnitCommand - * Method: getType_native - * Signature: (J)Lbwapi4/UnitCommandType; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_UnitCommand_getType_1native - (JNIEnv *, jobject, jlong); - #ifdef __cplusplus } #endif @@ -7027,30 +6875,6 @@ JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getInterceptors_1native JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getLarva_1native (JNIEnv *, jobject, jlong); -/* - * Class: bwapi4_Unitset - * Method: getUnitsInRadius_native - * Signature: (JILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getUnitsInRadius_1native - (JNIEnv *, jobject, jlong, jint, jobject); - -/* - * Class: bwapi4_Unitset - * Method: getClosestUnit_native - * Signature: (JLbwapi4/UnitFilter;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getClosestUnit_1native__JLbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject); - -/* - * Class: bwapi4_Unitset - * Method: getClosestUnit_native - * Signature: (JLbwapi4/UnitFilter;I)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getClosestUnit_1native__JLbwapi4_UnitFilter_2I - (JNIEnv *, jobject, jlong, jobject, jint); - /* * Class: bwapi4_Unitset * Method: issueCommand_native diff --git a/headers4/bwapi4_Game.h b/headers4/bwapi4_Game.h index 62ccd7a..b7cdf38 100644 --- a/headers4/bwapi4_Game.h +++ b/headers4/bwapi4_Game.h @@ -255,134 +255,6 @@ JNIEXPORT jboolean JNICALL Java_bwapi4_Game_isFlagEnabled_1native JNIEXPORT void JNICALL Java_bwapi4_Game_enableFlag_1native (JNIEnv *, jobject, jlong, jint); -/* - * Class: bwapi4_Game - * Method: getUnitsOnTile_native - * Signature: (JIILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsOnTile_1native__JIILbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jint, jint, jobject); - -/* - * Class: bwapi4_Game - * Method: getUnitsOnTile_native - * Signature: (JLbwapi4/TilePosition;Lbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsOnTile_1native__JLbwapi4_TilePosition_2Lbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getUnitsInRectangle_native - * Signature: (JIIIILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRectangle_1native__JIIIILbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jint, jint, jint, jint, jobject); - -/* - * Class: bwapi4_Game - * Method: getUnitsInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/Position;Lbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRectangle_1native__JLbwapi4_Position_2Lbwapi4_Position_2Lbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getUnitsInRadius_native - * Signature: (JIIILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRadius_1native__JIIILbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jint, jint, jint, jobject); - -/* - * Class: bwapi4_Game - * Method: getUnitsInRadius_native - * Signature: (JLbwapi4/Position;ILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getUnitsInRadius_1native__JLbwapi4_Position_2ILbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jint, jobject); - -/* - * Class: bwapi4_Game - * Method: getClosestUnit_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnit_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getClosestUnit_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;I)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnit_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2I - (JNIEnv *, jobject, jlong, jobject, jobject, jint); - -/* - * Class: bwapi4_Game - * Method: getClosestUnitInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;III)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2III - (JNIEnv *, jobject, jlong, jobject, jobject, jint, jint, jint); - -/* - * Class: bwapi4_Game - * Method: getClosestUnitInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;II)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2II - (JNIEnv *, jobject, jlong, jobject, jobject, jint, jint); - -/* - * Class: bwapi4_Game - * Method: getClosestUnitInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;I)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2I - (JNIEnv *, jobject, jlong, jobject, jobject, jint); - -/* - * Class: bwapi4_Game - * Method: getClosestUnitInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getClosestUnitInRectangle_native - * Signature: (JLbwapi4/Position;Lbwapi4/UnitFilter;IIII)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getClosestUnitInRectangle_1native__JLbwapi4_Position_2Lbwapi4_UnitFilter_2IIII - (JNIEnv *, jobject, jlong, jobject, jobject, jint, jint, jint, jint); - -/* - * Class: bwapi4_Game - * Method: getBestUnit_native - * Signature: (JLbwapi4/BestUnitFilter;Lbwapi4/UnitFilter;Lbwapi4/Position;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getBestUnit_1native__JLbwapi4_BestUnitFilter_2Lbwapi4_UnitFilter_2Lbwapi4_Position_2 - (JNIEnv *, jobject, jlong, jobject, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getBestUnit_native - * Signature: (JLbwapi4/BestUnitFilter;Lbwapi4/UnitFilter;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getBestUnit_1native__JLbwapi4_BestUnitFilter_2Lbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject, jobject); - -/* - * Class: bwapi4_Game - * Method: getBestUnit_native - * Signature: (JLbwapi4/BestUnitFilter;Lbwapi4/UnitFilter;Lbwapi4/Position;I)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Game_getBestUnit_1native__JLbwapi4_BestUnitFilter_2Lbwapi4_UnitFilter_2Lbwapi4_Position_2I - (JNIEnv *, jobject, jlong, jobject, jobject, jobject, jint); - /* * Class: bwapi4_Game * Method: getLastError_native @@ -471,6 +343,22 @@ JNIEXPORT jboolean JNICALL Java_bwapi4_Game_isWalkable_1native__JII JNIEXPORT jboolean JNICALL Java_bwapi4_Game_isWalkable_1native__JLbwapi4_WalkPosition_2 (JNIEnv *, jobject, jlong, jobject); +/* + * Class: bwapi4_Game + * Method: getGroundHeight_native + * Signature: (JII)I + */ +JNIEXPORT jint JNICALL Java_bwapi4_Game_getGroundHeight_1native__JII + (JNIEnv *, jobject, jlong, jint, jint); + +/* + * Class: bwapi4_Game + * Method: getGroundHeight_native + * Signature: (JLbwapi4/TilePosition;)I + */ +JNIEXPORT jint JNICALL Java_bwapi4_Game_getGroundHeight_1native__JLbwapi4_TilePosition_2 + (JNIEnv *, jobject, jlong, jobject); + /* * Class: bwapi4_Game * Method: isBuildable_native @@ -1703,6 +1591,14 @@ JNIEXPORT jboolean JNICALL Java_bwapi4_Game_setVision_1native__JLbwapi4_Player_2 JNIEXPORT jboolean JNICALL Java_bwapi4_Game_setVision_1native__JLbwapi4_Player_2Z (JNIEnv *, jobject, jlong, jobject, jboolean); +/* + * Class: bwapi4_Game + * Method: elapsedTime_native + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_bwapi4_Game_elapsedTime_1native + (JNIEnv *, jobject, jlong); + /* * Class: bwapi4_Game * Method: setCommandOptimizationLevel_native diff --git a/headers4/bwapi4_Region.h b/headers4/bwapi4_Region.h index 5f0aa02..d28b736 100644 --- a/headers4/bwapi4_Region.h +++ b/headers4/bwapi4_Region.h @@ -111,14 +111,6 @@ JNIEXPORT jobject JNICALL Java_bwapi4_Region_getClosestInaccessibleRegion_1nativ JNIEXPORT jint JNICALL Java_bwapi4_Region_getDistance_1native (JNIEnv *, jobject, jlong, jobject); -/* - * Class: bwapi4_Region - * Method: getUnits_native - * Signature: (JLbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Region_getUnits_1native - (JNIEnv *, jobject, jlong, jobject); - #ifdef __cplusplus } #endif diff --git a/headers4/bwapi4_Regionset.h b/headers4/bwapi4_Regionset.h index 9ea0a7e..43b1167 100644 --- a/headers4/bwapi4_Regionset.h +++ b/headers4/bwapi4_Regionset.h @@ -15,14 +15,6 @@ extern "C" { JNIEXPORT jobject JNICALL Java_bwapi4_Regionset_getCenter_1native (JNIEnv *, jobject, jlong); -/* - * Class: bwapi4_Regionset - * Method: getUnits_native - * Signature: (JLbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Regionset_getUnits_1native - (JNIEnv *, jobject, jlong, jobject); - #ifdef __cplusplus } #endif diff --git a/headers4/bwapi4_Unit.h b/headers4/bwapi4_Unit.h index 74a00c3..4620e82 100644 --- a/headers4/bwapi4_Unit.h +++ b/headers4/bwapi4_Unit.h @@ -191,6 +191,14 @@ JNIEXPORT jboolean JNICALL Java_bwapi4_Unit_hasPath_1native JNIEXPORT jint JNICALL Java_bwapi4_Unit_getLastCommandFrame_1native (JNIEnv *, jobject, jlong); +/* + * Class: bwapi4_Unit + * Method: getLastCommand_native + * Signature: (J)Lbwapi4/UnitCommand; + */ +JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getLastCommand_1native + (JNIEnv *, jobject, jlong); + /* * Class: bwapi4_Unit * Method: getLastAttackingPlayer_native @@ -599,38 +607,6 @@ JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getHatchery_1native JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getLarva_1native (JNIEnv *, jobject, jlong); -/* - * Class: bwapi4_Unit - * Method: getUnitsInRadius_native - * Signature: (JILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getUnitsInRadius_1native - (JNIEnv *, jobject, jlong, jint, jobject); - -/* - * Class: bwapi4_Unit - * Method: getUnitsInWeaponRange_native - * Signature: (JLbwapi4/WeaponType;Lbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getUnitsInWeaponRange_1native - (JNIEnv *, jobject, jlong, jobject, jobject); - -/* - * Class: bwapi4_Unit - * Method: getClosestUnit_native - * Signature: (JLbwapi4/UnitFilter;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getClosestUnit_1native__JLbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject); - -/* - * Class: bwapi4_Unit - * Method: getClosestUnit_native - * Signature: (JLbwapi4/UnitFilter;I)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unit_getClosestUnit_1native__JLbwapi4_UnitFilter_2I - (JNIEnv *, jobject, jlong, jobject, jint); - /* * Class: bwapi4_Unit * Method: hasNuke_native diff --git a/headers4/bwapi4_UnitCommand.h b/headers4/bwapi4_UnitCommand.h index 6b034f8..9ecc053 100644 --- a/headers4/bwapi4_UnitCommand.h +++ b/headers4/bwapi4_UnitCommand.h @@ -7,14 +7,6 @@ #ifdef __cplusplus extern "C" { #endif -/* - * Class: bwapi4_UnitCommand - * Method: getType_native - * Signature: (J)Lbwapi4/UnitCommandType; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_UnitCommand_getType_1native - (JNIEnv *, jobject, jlong); - #ifdef __cplusplus } #endif diff --git a/headers4/bwapi4_Unitset.h b/headers4/bwapi4_Unitset.h index 49ae414..d90d703 100644 --- a/headers4/bwapi4_Unitset.h +++ b/headers4/bwapi4_Unitset.h @@ -39,30 +39,6 @@ JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getInterceptors_1native JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getLarva_1native (JNIEnv *, jobject, jlong); -/* - * Class: bwapi4_Unitset - * Method: getUnitsInRadius_native - * Signature: (JILbwapi4/UnitFilter;)Ljava/util/List; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getUnitsInRadius_1native - (JNIEnv *, jobject, jlong, jint, jobject); - -/* - * Class: bwapi4_Unitset - * Method: getClosestUnit_native - * Signature: (JLbwapi4/UnitFilter;)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getClosestUnit_1native__JLbwapi4_UnitFilter_2 - (JNIEnv *, jobject, jlong, jobject); - -/* - * Class: bwapi4_Unitset - * Method: getClosestUnit_native - * Signature: (JLbwapi4/UnitFilter;I)Lbwapi4/Unit; - */ -JNIEXPORT jobject JNICALL Java_bwapi4_Unitset_getClosestUnit_1native__JLbwapi4_UnitFilter_2I - (JNIEnv *, jobject, jlong, jobject, jint); - /* * Class: bwapi4_Unitset * Method: issueCommand_native diff --git a/manual-bwapi4/Mirror.java b/manual-bwapi4/Mirror.java index 1eaf4f2..93d4543 100644 --- a/manual-bwapi4/Mirror.java +++ b/manual-bwapi4/Mirror.java @@ -60,7 +60,7 @@ public class Mirror { static { String arch = System.getProperty("os.arch"); - String dllNames[] = {"bwapi_bridge" + VERSION, "gmp-vc90-mt", "mpfr-vc90-mt"}; + String dllNames[] = {"BWAPI4.dll", "gmp-vc90-mt", "mpfr-vc90-mt"}; if(!arch.equals("x86")){ throw new UnsupportedOperationException("BWMirror API supports only x86 architecture."); } diff --git a/manual-bwapi4/UnitCommand.java b/manual-bwapi4/UnitCommand.java new file mode 100644 index 0000000..6764feb --- /dev/null +++ b/manual-bwapi4/UnitCommand.java @@ -0,0 +1,116 @@ +package bwapi4; + +import bwapi.UnitCommandType; + +import java.lang.Override; + +public class UnitCommand { + + private Unit unit; + + private UnitCommandType unitCommandType; + + private Unit target; + + private int x, y; + + private int extra; + + private UnitCommand(Unit unit, UnitCommandType unitCommandType, Unit target, int x, int y, int extra) { + this.unit = unit; + this.unitCommandType = unitCommandType; + this.target = target; + this.x = x; + this.y = y; + this.extra = extra; + } + + public Unit getUnit() { + return unit; + } + + public UnitCommandType getUnitCommandType() { + return unitCommandType; + } + + public Unit getTarget() { + return target; + } + + + + public int getSlot() { + if (unitCommandType == UnitCommandType.None) { + return extra; + } + return -1; + } + + public Position getTargetPosition() { + if (unitCommandType == UnitCommandType.Build || + unitCommandType == UnitCommandType.Land || + unitCommandType == UnitCommandType.Place_COP) { + return new Position(x * 32, y * 32); + } + return new Position(x, y); + } + + public TilePosition getTargetTilePosition() { + if (unitCommandType == UnitCommandType.Build || + unitCommandType == UnitCommandType.Land || + unitCommandType == UnitCommandType.Place_COP) { + return new TilePosition(x, y); + } + return new TilePosition(x / 32, y / 32); + } + + public boolean isQueued() { + if (unitCommandType == UnitCommandType.Attack_Move || + unitCommandType == UnitCommandType.Attack_Unit || + unitCommandType == UnitCommandType.Move || + unitCommandType == UnitCommandType.Patrol || + unitCommandType == UnitCommandType.Hold_Position || + unitCommandType == UnitCommandType.Stop || + unitCommandType == UnitCommandType.Follow || + unitCommandType == UnitCommandType.Gather || + unitCommandType == UnitCommandType.Return_Cargo || + unitCommandType == UnitCommandType.Repair || + unitCommandType == UnitCommandType.Load || + unitCommandType == UnitCommandType.Unload_All || + unitCommandType == UnitCommandType.Unload_All_Position || + unitCommandType == UnitCommandType.Right_Click_Position || + unitCommandType == UnitCommandType.Right_Click_Unit) { + return extra != 0; + } + return false; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof UnitCommand)) return false; + + UnitCommand that = (UnitCommand) o; + + if (extra != that.extra) return false; + if (x != that.x) return false; + if (y != that.y) return false; + if (target != null ? !target.equals(that.target) : that.target != null) return false; + if (unit != null ? !unit.equals(that.unit) : that.unit != null) return false; + if (unitCommandType != null ? !unitCommandType.equals(that.unitCommandType) : that.unitCommandType != null) + return false; + + return true; + } + + @Override + public int hashCode() { + int result = unit != null ? unit.hashCode() : 0; + result = 31 * result + (unitCommandType != null ? unitCommandType.hashCode() : 0); + result = 31 * result + (target != null ? target.hashCode() : 0); + result = 31 * result + x; + result = 31 * result + y; + result = 31 * result + extra; + return result; + } +} \ No newline at end of file diff --git a/out/production/InvokeGenerator/c/Method.class b/out/production/InvokeGenerator/c/Method.class index 7f866483e22393922e34e9e7de83434defb68579..61d7953402e003dd2d874544551e0e5773a0df51 100644 GIT binary patch delta 90 zcmaFG*vuq+>ff$?3=9m$41(+oeC!PT>dc`Pw>ff$?3=9m$4E*d2JnRg->`6)B8Ffy<(ure?*umKe?F|Y&q P91NU5HX{QUScDq@rpyQ? diff --git a/out/production/InvokeGenerator/generator/JavaContext.class b/out/production/InvokeGenerator/generator/JavaContext.class index 14ccc31647086064e957e41683344d19c7a0871d..d491fa3d22d86f697a9e9e78c553191e04be3ff1 100644 GIT binary patch literal 7633 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 literal 6685 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 UctKed-n_w~jnIa)rnP!o zq;^N)wpOU!)EaGF3V|$QS!x%h|Mj#zr=C*_QbAi3E7m0h(wY0-yDzl#v^gj9{bs(I z`M#O?X5PK8V^`4 zc%AVE<8O?=GtMyHWW2>V%Xpjd55_x;bBuQx|75(!c%ShB<3q*><2+-Oae;AB&cYaz z9BvaSF_ie2{Br&f1(VsYKyqrc$QaWlZHv6--l@Dw(28 zRZP`PHB3{PYMG`n)iKpGH84$AUo%XaY0_2B!}M-Qz${6*NwfR+7_~%=&N1IQgEF0{ z|53gd+bw(%+nhi6tAn#FYND$hGf)?7wrCE`?Vl4k=l9K{`OfrEukRXa>3=r#O3?RB zY=b8Can5FBW)jj;+`pot_1zt9w>O0dCC=Wg z9H(kxNHmwkH3QE2iIW^7KQC=*TTlDO*6y}DIvPbc;VIx8pLm6HPhq~*v3bL)j@};K z>=ffp=Xide^GxOhadz5ub~5v@I&xmhvPAa0E1O#!bbQ%6T=`J8%6GZ)Gud6i1r}XP zEzY`};{KgEcZGf5lE~6ZS7v=f)ABt$XyJZrC(zxJ8QJPBoqTJnMGI+>NsSgQrnwef zM@tB)?X@inI@-J1y4!j-ZP{$m^|aKaWft8)%Pm?#A0e=)v~;y?-D=@cJZ8~KT17D1 zYg;#UbZxL`H7zF;IK^C$ZPAU?Lhv`0R5lR;EnB*_bW8P|>ay*=r|`7XU$)A(Ms6J{ zAMt$~5B8fCD-GM0z5@t`R#Q+|uoPG5mxQa8m1GS>2SIxU7`RVp&=qFl%Yv<#0=|N; z3P<=FzAjXa=ZLnU+R>^5Fp}0GSDJ?a@=>NPvSMm+7wTT`qIZ&fsx#+eWle(~9D!eG zAyQBzxEOgT8Fz{NxCaCB(pLsb4G%V?TU? zKrcJLk9OMTZg3>G4}nPP047APRFbD8UrB+-PEu6pu|?nS<##XI|MgFbG;0u>&`qS^Mwo`V*vi>ei#Q4x_J=c$TcF38>OmIi>fYAa;>MY zZ^!4pJZDjLzWpTj(VuWISwVU^UU{wH4)B;1m`pqX!^BP#yT+t|F7J!+CY&*>_@63N za9I@_R%e`wJSG_rvB!i>!f8X5xgn=%A|kDlkv>>1UKr0#WRZYm*jdsnz#)0R zhY_*yqQv(*l*-RrvIEP;r6BQ$rOV|!?ZqF;s=Zhzjl9@B={h;Uy@V;ECDE!uTrXg$ zySFTUivirAcksKZFPE+Zj>B)`1Sa5BWZ)#S@tSn;DQU;ksKo1-hBw?h#ag<~Yw0?C z2Mz-bTOmLu;}NW0Rx^wn3Hz{S05|PMI9hWA^3>M$jr}nh%_NxO_l(5!rc8vlP>r)_ z!rN%UJ7~o@H;Aa5T`eJgA3u;Q=AuT@_#+s$UdW4V;eSM?l0;+{e51%U@kr%}gpv$V zMtST-P>Z+@h{q><%@WZ^32s;#gBzA3zzyq`Mt`n<7`GCF`>;+TbLQ7(*dLP~5wnjI zv}4-5j)}=4>j%)j8?k4$L2}lI3e9Aq_d5QIwZA!9mFqu(&Ov;lZ|t_@JFJ)D0q;pD z@5|)<0Cqh-#7vA}EzV;jM$v$VTu2Ql)zz8AXSQpH8L`q-Zh?JO%sdcoq+eFL@|5KOR~# zCmSV3nUb4gsabYOV%CgL#%)Q($n7!QB}?QEC7Xq~6Lw1id{Tj}d!JI$EhIMF_Ws{a zx2g*@?zz-M{EnZN;_X3AocoN+6~?(cT`t{@v%PMe{g)j5S#cWMR_~v?gu6>P_vFtf zz}*7k_m`x{hOOK2B)_#3##EB;Jxa$m%D@YhgY%S&QL^)B9_4$@BKc2LQ&6m$DtiXc zO1X-t7(c^aajtcBJ7b$n;`8X$?}mL|(=T_6>wY&3;-2K=bH5v?5CJMm%$Ql?D3~}> U(7z8Em1rv_8jsK~76$hJ3t>!o0ssI2 delta 3116 zcma)7dvsLg5&zBJyL-RAdkJLoCL!6p$>zlpKuwgYK`1II6+G-p6(2CK704h{#TYFAV|LQrdrwH}c`lwn#Aw<%dd++XsW6rUA&dxV8 z-+c4U{AT96cWk;Pk$U#*fhPd8(S;_4FdW1U*sJgh6Tif-6n?Gnpoxd@8-<4z_8EA@ zgo$B=5m_HqcuZkbVN7Aa!no)TC>&HcWU`;f6`oLd(!^mLQTVOGQwmQj{7&H+h2Jau zLE(?O!n5l3^@~#q|4=xp@Vvq?h2skU6c;ZjyeR8SLS7c~io(AnxPL3Ws_VH<88{t6m%BZoa7L7q3hyhV&YGCQNkvdZ z2Ko35X^M0c>)3+)iUQ1%p-3qTDl!#?6j_R9DauhaThSavxr)My@)YGODo|9Ys7O(< zxGFJdu0f>)ZE#zXP;g~me0#jLcd&K!Q16!Hn&gmujQ(!2Nf|?I(7chSeXT_0_6co+ z52x+5`u%Dfwp-YWq&=lK1Uaga~TyrIm2GD z{am4C=T^4Z#YMNxv~P87>rX68Bop09FOXA31A+M#HBi0XS6pc?$q!SVWM@Yr`pDkm z4I%9oMkiRartr%G?RRmjg`2URKsPbEyfsu)y*_GDBQ+URZc#H;Thv0Wgq-fy&Si=2 zf%s57**mz!q6HK)XrV=Iw8)~xw1m5eO*#kSTen*HK7L@)d2~L(=x$x!n;6(=(FL@~ zezT@(UOUwj^p2{A4uZdPaA0tVi%*DcP9#@uw2xT%_NBEw+K=#K`@!0^S_h}1*G*_& z$E_n&zs6U31CJ~~@JVAZ7h<0Kgz1g;U_)VQ2kQbX0R{LxQ_JD~_yWGj65&g@No<*4 z%07I&2BM9R!MBe&ALO*@XiMQond70*wemcOcez<2U=TfDSFt2_mf3o=vQ4~%p);*O z5E14pQHrW*@sxSqeBgE!ANIOv^UCbGI=-cz&$aQnr8At{$-Z^?!iw+Z0=iN7s-Q^} z)NlVex+zsMido^gO!mWJOGPddGEYc(MywDnk`XI~tICMg!qsHNTH)$4V!d$lGh%~q zQAbP(Z4}bv$U>Thv}D9q;TELD{V;Yzg=53;hjT=kD`cUNHYTIU8-*Ty6uyHnuNgxq zyoj~lp&U81SWK4)Igg2VKz*h`> zb&BD1WX+Wgd~J%j(jQ`ig)^F@kafd#<56_$hF-6GYMpFmOOE05IoV-Y4u64{c(|Pz zFCh-NkXsZu#I5o;x5_gd`(IFl=d$Ucc3OHmQf|NSDDizV0r&AL6A+7zp~Jc9LcYKW z!eG@!(Z(?>W#%K!-o;)Nqqsz3(4Aqa;|2$gvh+M=;TZC897TA6N9RRu{Fl&xm$3k^ zI5DN%Ns47ADTZ(0n~cG?*o8Z%qWLy!cCvV;_lTh;*?eqH!bHSNjQ1g%s6>J zhp}!9*9=efWxH}Aml8O^iJjyp?_HjS_pk(~upX(?=)nZPos+m5XR(K$st0(QhDmdP zUBnqz@$B8jyE<~Xd;+W{C}e=$%i2ARkq4DNWjjF7c3Y^OvmFGvP<-Q@k)VUFQIE^>i>koiz-9#^pEg68@}^&oOBh zCZ1-lO*7r1-YEFH(C_=dohH&QHaRXb9=sSgbMf||*^_!4sltDzS#2KF7Nh+a> zX|6l}GCGWZx|+-2D#dW^jW4J!s ke9pI<=D|8X3&=7!rQQcHCh91EFbdE&u=k diff --git a/out/production/InvokeGenerator/generator/ccalls/CallImplementer.class b/out/production/InvokeGenerator/generator/ccalls/CallImplementer.class index 17d1318a0b548a0dbdf4ae876de08f6225b43032..eb2d6d455d71de94082f828abdfed0a3d5bc873b 100644 GIT binary patch literal 16870 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 IhvOyx13~bgD*ylh diff --git a/out/production/InvokeGenerator/generator/java/ClassMirror.class b/out/production/InvokeGenerator/generator/java/ClassMirror.class index bea32cac9fd3c0852903d36e138fd0b4349046d9..731550dfc76fbea4bb9810edb9f1e97b9e122069 100644 GIT binary patch delta 3114 zcmZ`*3wV`v8UMZKvhUkDf7s3$yRi)>qk?U*hz(@Ei3JLL~#Ay@0^|Ov8V0X`@P@$fA8<_ z{eQc==JA^N*>_Go3SgG(3}7doNyiR6YvZT-{F#!UTX-&jU*MMkq~TW&w-=?b8tIEEn z+~1Y_L&@t({%PZ1)ZKsI{J1UYK?z7OC`QI98E;93C7D!{kdm+^S^At{Nwz+7Y{?B` zzT`1`$tQ<%woD9Sf#i|kToAP?DF`4Yg?y1B^*_m$$+i@$gG-c5v86;c2&sq+r|7P1rl zm;1^klbV?v1gAuI%(B1N9~7x~_NGNDd$7;o2J8~R;6{AZ;1+yJV75kfMk-pjRV-?4 zYq4aJk;QU_L62N1$aRjJ+=-Ta*vM5B$`V;B@Xt^SBg^CpXN8p)?~&z3R>(>tA7KP( zkgEmbI(BSqYmF91+ag_E#R4fda*ZC?ExWo~V$EHAZ`60`A){uiWVL~V14h&{4bOL6}z)(aA^H?mf)vt*%>b+niDvO!=)SyW3~ zGs8wJmbP?n+16|%A{!0v$1!#?TG1HkY>jMeYcV*2dtJ!__O&|_>o)i*?h}OFP>EtF z?`BO#qS}jQoEGFIkDdBJ!MGOLWMnhzkS)^Wv~7bsRI&DqD?QFKtHJC1&u5Y%|g!Z8R)3vRyijbV;|79TF2{ zx|3^*#5Pwnba%GKHXA&K)6UjlrMF*V{YQdL-jW^MX~4r@PTu7>c|OAs^x$KpyPZiH z1#@~S8xJpO4t&VvLgyjwzIjLk_&9FjQ#tj+bZ|31L9e^}J2TQmdYv0H*RNB9O880N zOc}h1J@_QmRYttgM7d8h2`_5co6qpnhrN^r;kkgr7H)l;+j$!WKAPQ517d;PZfACA zL&a#GbFi2WmSL`&r*T6pPlojV6TGfuYJQ$yGPfNC*v7Hk#Jgj63!2y$30y)fV|SO zL9BNk&doO)-W4exQ2~!P@)@Ql6P~6dIzk38{z3Ruqq#4c3KjCSAzrs3%aBF>CRTVe zhrb6A?ogE5rTev)yXBA`#I1zFZ5-?EY|0(HZ}#EGT#IKB-_MWj0hxunqy~p%A+e>i zs%5)wK_R|{<6PkmRJqvnX$wa>O)fD%m7T!1IiDzALO(gLJJUv_rw?N)ycSMcc#yEN zFkoSDn5m{@@svtueC!4-pFoYJt zyh2}dZP8(DNXUwYu*t*Au<0Z=KY@A*w+O0z-r4?af1wk}&$emfYaT+Y)0m7m+D)5hdD# z^O$xXwuom_n(sS__Qwz##5U*EiAA-m z`Hkxsz%pG7uP(-RYO!HU1ZvYs;u@!LN_38b(OF!O*mS-2OZcnk@$sL#Y8O4)t^=uz z4O}(wcALUQD3l%ouc3q%y2<^C!r;^iL&&RPd>I^6Sm@ZZ~ILHwM|RM$(VqX*b$W F{tKNrS&aYy delta 3199 zcmZ`*d3aRS75|-C@?K^hkeMNS(m>)u7DxjLlmx;OAfhD%qd+18LlR;j3nWn~5JuE4 zDn;$1Rlsgq8)>ms5|Re3&{C8)ReZ#<;K1{&x)aLg-l0PW7w_`iHXr zRPJ9&-cj;zCGVQ}kLv!{eE5k45x*pg&o6$ll#DZEyde{)CP_*Hh6HsD88T7VWK&Z7 zSRkp4Ued_ntSRY!R7olc&iYZQk_;c(C6gP;Qvcbee8iL-budZEWK(iY$DdMeY$# z6^qed?J1HZT1;Rs*eJSXwEg#Z{UVF(2NS|2+p*We9k^2f3)}Ds3!lWN1lFeT9pU2E z&f+DlZOw)(wq%J^Ti7nw*^`Z|g-b2Do_o1LJ}&T1Q)Nq*Nwpv}YFOLV+R;xuE%92}YAZulv{bpin(RvA6IE+KAQe*MT za93-1LtC?jui&eWq>44`33v2Z_!^$HC;L*(4VqdbPT2E(SC4CwW=l3Q6lsxqyURDn zJdCF;4C9bJ=qnAJ!fA$)FK|uTVd49fUhw6u_yJy|WSq~!Q#fSFZPIGVCfRIBo3I+s zONS+$vYCbjmTZx&mUKzCB|XwENOB6;7Vc;%X7yS-S}YuAD4qV&gd=*MVYj<7`cL}j zx+6WDPQb-KHqhbNK(0XuwqpnBPVSaC8i220i1!s9h3i>Ix0iH0+@vY+Ae94~hF#9i zMe0KYcX3rty)#zq#@+NqpK_Rk@3kWnE=#YyD{0+YwJU{}^u4&|(fo_cT}rGB_B;-G>1FK`GSpuj`3Jv3m;$?dc&0_%&fggYD6bWnpiPPmqH z#q!v-E(M2Ub2{)p26sGIk*UE&wcd(r5l4%R4#|m7J8^_#m zL)@0gb8Mdq<&KH!W)^TIlCWxwO(1SV7;EY5bD=vK)z*o#+BK>IW}3lQXdgb$q8POO z0v>S+wJ~N1Y{aA3&-)IN zZ8xMAM(WGG*#{imK(JvDDeg*|1q#x=L%4<8zL8gSA6!G8jB6O#+Oi#v@YX@36%-C( zt+OlR?l~mZ4{;(J2H?><){*e=!^4PJ!S$*`FJU#{Jyvjvk`1F|5aW-+qZ*BUu|TPi zrgd{e`(A?(>24O{ZerwKtmarYa4>s0l)E{O_w#QL=WjphW1PJwiSuVUPsjM`Mvn8r zeF^(yG9Hn99FXZ$(Uw-Ss=dgf^$s!J?LIXpWP%aMSa}9jw90C`x$D~s}$qE8 zbg_%eg$GT7xmlj3%It$!AC+YfquGTMs2{+_Q&>!4i=f=&p6N~YW@R@$j;qo=j&XGH zN1b?@hH;yHC_Rs$K9fGf0ku}36!|REbF4rKpO5DWY7d`+FuqHfzOY@RwICO*g~h>s zfu}B~0;%v`LXyZOfH@l05z?s670wSMGpH3%QTEMD8M^Y_yVYBJ(8EidJ$iJeR;dCVR` z?kI$uTt5ITl@enyWYGyf-LZPV8$(fDuxnWqG&NI)Q7iWJteir=2Oq3c^f9oQ?y|m- zGez1I4|?sLS$T1!lps4cE18%%IxDD)x2P_jRV_|AS@~F+A95(&@lQZh@)9Nba0cMI zj7%rvA2~^vF$?}IiDl79H5c8Zc=XZHcV+GMR5hp delta 19 bcmcc4cAag*CMHJa$(xyc8QCT?GKT>GL~#YI diff --git a/out/production/InvokeGenerator/impl/CApiParser$ACCESS.class b/out/production/InvokeGenerator/impl/CApiParser$ACCESS.class index 1dece350d0c9b4a62d1d24a749d7147347383f81..e632b26ca6d7eab86c33c212ed8ff6c59063998b 100644 GIT binary patch delta 35 ocmZ3(v4&%V2s5MNWKm`VAnC?z2P9jW8(5VX)EN{fbFnA^0F?CySO5S3 delta 35 ocmZ3(v4&%V2s5L?WKm`VAnC?z2P9jW8(0+?)EN{ebFnA^0FGBLE delta 63 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 W^t-8*_Kc3>2VpC{#QhG&^Y1_WBY;i- delta 6057 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 getParams(); public Method clone(); + + public boolean isStatic(); } diff --git a/src/generator/JavaContext.java b/src/generator/JavaContext.java index 9e75c54..7a4c460 100644 --- a/src/generator/JavaContext.java +++ b/src/generator/JavaContext.java @@ -14,13 +14,13 @@ public class JavaContext { private HashMap javaToCType = new HashMap<>(); - private List valueTypes = Arrays.asList("Position", "TilePosition", "WalkPosition", "Color", "BWTA::RectangleArray", "PositionOrUnit", "Point"); + private List valueTypes = Arrays.asList("Position", "TilePosition", "WalkPosition", "Color", "BWTA::RectangleArray", "PositionOrUnit", "Point", "UnitCommand"); private List constantTypes = Arrays.asList("UnitType", "TechType", "UpgradeType", "Race", "UnitCommand", "WeaponType", "Order", "GameType", "Error"); - private List enumTypes = Arrays.asList("MouseButton", "Key", "bwapi4.Text.Size.Enum", "bwapi4.CoordinateType.Enum"); + private List enumTypes = Arrays.asList("MouseButton", "Key", "bwapi4.Text.Size.Enum", "bwapi4.CoordinateType.Enum", "Text::Size::Enum", "CoordinateType::Enum"); - private List valueReturnTypes = Arrays.asList("UnitCommand", "Event"); + private List valueReturnTypes = Arrays.asList("Event"); private List bwtaClasses = Arrays.asList("Chokepoint", "Region", "RectangleArray", "Polygon", "BaseLocation"); @@ -40,7 +40,7 @@ public class JavaContext { } public String getPackageName(String javaRetType) { - if(javaRetType.equals("Position") || javaRetType.equals("TilePosition")){ + if (javaRetType.equals("Position") || javaRetType.equals("TilePosition")) { return "bwapi"; } return packageName; @@ -104,16 +104,18 @@ public class JavaContext { ");"; case "PositionOrUnit": return "(convertPositionOrUnit(env, " + rawName + " ));"; + case "UnitCommand": + return "(convertUnitCommand(env, " + rawName + " ));"; } return ";"; } public String copyJavaObjectToC(String variableType, String variableName, String rawName) { String packageStrippedType = variableType; - if(packageStrippedType.startsWith("bwapi")){ + if (packageStrippedType.startsWith("bwapi")) { packageStrippedType = packageStrippedType.substring(packageStrippedType.indexOf(".") + 1); } - packageStrippedType = packageStrippedType.replaceAll("\\.","::"); + packageStrippedType = packageStrippedType.replaceAll("\\.", "::"); return (packageStrippedType + " " + variableName) + copyFields(packageStrippedType, variableName, rawName); } @@ -151,6 +153,8 @@ public class JavaContext { return "III"; case "Error": return "I"; + case "UnitCommand": + return "L" + packageName + "/Unit;L" + packageName + "/UnitCommandType;L" + packageName + "/Unit;III"; default: throw new UnsupportedOperationException(); } @@ -160,8 +164,8 @@ public class JavaContext { return implementCopyReturn(javaType, "cresult"); } - public static String checkBWAPI3brackets(){ - if(CJavaPipeline.isBWAPI3()){ + public static String checkBWAPI3brackets() { + if (CJavaPipeline.isBWAPI3()) { return "()"; } return ""; @@ -173,18 +177,26 @@ public class JavaContext { case "Position": case "WalkPosition": case "Point": - return ", "+fieldName+".x" + checkBWAPI3brackets() + - ", "+fieldName+".y" + checkBWAPI3brackets() ; + return ", " + fieldName + ".x" + checkBWAPI3brackets() + + ", " + fieldName + ".y" + checkBWAPI3brackets(); case "Color": - return ", "+fieldName+".red()" + - ", "+fieldName+".green()" + - ", "+fieldName+".blue()"; + return ", " + fieldName + ".red()" + + ", " + fieldName + ".green()" + + ", " + fieldName + ".blue()"; + case "UnitCommand": + return + ", env->CallStaticObjectMethod(FindCachedClass(env, \"" + packageName + "/Unit\"), FindCachedMethodStatic(env, FindCachedClass(env, \"" + packageName + "/Unit\"), \"get\", \"(J)Lbwapi4/Unit;\"), " +fieldName+ ".getUnit())" + + ", env->CallStaticObjectMethod(FindCachedClass(env, \"" + packageName + "/UnitCommandType\"), FindCachedMethodStatic(env, FindCachedClass(env, \"" + packageName + "/UnitCommandType\"), \"get\", \"(J)Lbwapi4/UnitCommandType;\"), "+fieldName+".getType())" + + ", env->CallStaticObjectMethod(FindCachedClass(env, \"" + packageName + "/Unit\"), FindCachedMethodStatic(env, FindCachedClass(env, \"" + packageName + "/Unit\"), \"get\", \"(J)Lbwapi4/Unit;\"), "+fieldName+".getTarget())" + + ", "+ fieldName +".getTargetPosition().x " + + ", "+ fieldName +".getTargetPosition().y " + + ", resolveUnitCommandExtra("+fieldName+")"; default: throw new UnsupportedOperationException(); } } - public boolean isBWTA(String cls){ + public boolean isBWTA(String cls) { return bwtaClasses.contains(cls); } } diff --git a/src/generator/c/Bind.java b/src/generator/c/Bind.java index 2446f06..436ec44 100644 --- a/src/generator/c/Bind.java +++ b/src/generator/c/Bind.java @@ -109,12 +109,14 @@ public class Bind { "\t\t\t\tfor(std::list::const_iterator it = Broodwar->getEvents().begin(); it!=Broodwar->getEvents().end(); it++)\n" + "\t\t\t\t {\n" + "\t\t\t\t\t switch (it->getType()) {\n" + + "\t\t\t\t\t\t case EventType::MatchStart:\n" + + ( CJavaPipeline.isBWAPI3()? "\t\t\t\t\t\t\t BWTA::BWTA_Result::regions.clear();\n" + "\t\t\t\t\t\t\t BWTA::BWTA_Result::baselocations.clear();\n" + "\t\t\t\t\t\t\t BWTA::BWTA_Result::startlocations.clear();\n" + "\t\t\t\t\t\t\t BWTA::BWTA_Result::chokepoints.clear();\n" + - "\t\t\t\t\t\t\t BWTA::BWTA_Result::unwalkablePolygons.clear();\n" + + "\t\t\t\t\t\t\t BWTA::BWTA_Result::unwalkablePolygons.clear();\n" : "" ) + "\t\t\t\t\t\t\t env->CallVoidMethod(moduleObj, matchStartCallback);\n" + "\t\t\t\t\t\t break;\n" + "\t\t\t\t\t\t case EventType::MatchEnd:\n" + diff --git a/src/generator/ccalls/CallImplementer.java b/src/generator/ccalls/CallImplementer.java index 14ea667..77dc72e 100644 --- a/src/generator/ccalls/CallImplementer.java +++ b/src/generator/ccalls/CallImplementer.java @@ -56,7 +56,7 @@ public class CallImplementer { (CJavaPipeline.isBWAPI3() ? "#include \n" : "#include \n" + "#include \n") + "#include \n" + "#include \n" + - "#include \"../BWTA_Result.h\"" + + (CJavaPipeline.isBWAPI3() ? "#include \"../BWTA_Result.h\"" : "")+ "\n" + "using namespace BWAPI;\n\n"); } @@ -82,7 +82,11 @@ public class CallImplementer { if (javaContext.isCollection(param.third)) { String genericType = Generic.extractGeneric(param.third); - out.println("std::set<" + PointerTest.test(genericType) + "> " + param.second + SEMICOLON); + if (CJavaPipeline.isBWAPI3()) { + out.println("std::set<" + PointerTest.test(genericType) + "> " + param.second + SEMICOLON); + } else { + out.println(genericType + "set " + param.second + SEMICOLON); + } out.println("jclass colClass = env->GetObjectClass(" + paramName + ");"); out.println("jmethodID sizeMethodId = FindCachedMethod(env, colClass, \"size\", \"()I\");"); @@ -391,19 +395,54 @@ public class CallImplementer { this.bwtaMode = bwtaMode; } - public void notifyPackageStart(){ + public void notifyPackageStart() { out.println("PositionOrUnit convertPositionOrUnit(JNIEnv * env, jobject obj){ \n" + - "\tjclass clz = FindCachedClass(env, \"PositionOrUnit\");\n" + + "\tjclass clz = FindCachedClass(env, \"" + javaContext.getPackageName() + "/PositionOrUnit\");\n" + "\tjmethodID typeMethodId = FindCachedMethod(env, clz, \"isUnit\", \"()Z\");\n" + "\tbool isUnit = (bool)env->CallBooleanMethod(obj, typeMethodId);\n" + "\tif(isUnit){\n" + "\t\tjobject unitObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, \"getUnit\", \"()L" + javaContext.getPackageName() + "/Unit;\"));\n" + - "\t\tUnit unit = (Unit)env->GetLongField(unitObj, FindCachedField(env, env->GetObjectClass(unitObj), \"unitObj\", \"J\"));\n" + + "\t\tUnit unit = (Unit)env->GetLongField(unitObj, FindCachedField(env, env->GetObjectClass(unitObj), \"pointer\", \"J\"));\n" + "\t\treturn PositionOrUnit(unit);\n" + "\t}\n" + "\tjobject posObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, \"getPosition\", \"()L" + javaContext.getPackageName() + "/Position;\"));\n" + "\t" + javaContext.copyJavaObjectToC("Position", "position", "posObj") + "\n" + "\treturn PositionOrUnit(position);\n" + "}\n\n"); + + out.println("UnitCommand convertUnitCommand(JNIEnv * env, jobject obj){" + + "\tjclass clz = FindCachedClass(env, \"" + javaContext.getPackageName() + "/UnitCommand\");\n" + + + "\tjobject unitObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, \"getUnit\", \"()L" + javaContext.getPackageName() + "/Unit;\"));\n" + + "\tUnit unit = (Unit)env->GetLongField(unitObj, FindCachedField(env, env->GetObjectClass(unitObj), \"pointer\", \"J\"));\n" + + + "\tjobject targetObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, \"getTarget\", \"()L" + javaContext.getPackageName() + "/Unit;\"));\n" + + "\tUnit target = (Unit)env->GetLongField(targetObj, FindCachedField(env, env->GetObjectClass(targetObj), \"pointer\", \"J\"));\n" + + + "\tjobject typeObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, \"getType\", \"()L" + javaContext.getPackageName() + "/UnitCommandType;\"));\n" + + "\tUnitCommandType type = (UnitCommandType)env->GetIntField(typeObj, FindCachedField(env, env->GetObjectClass(typeObj), \"value\", \"I\"));\n" + + + "\tint extra = (int)env->GetIntField(obj, FindCachedField(env, clz, \"extra\", \"I\"));\n" + + + "\tjobject posObj = env->CallObjectMethod(obj, FindCachedMethod(env, clz, \"getPosition\", \"()L" + javaContext.getPackageName() + "/Position;\"));\n" + + "\t" + javaContext.copyJavaObjectToC("Position", "position", "posObj") + "\n" + + "\treturn UnitCommand(unit, UnitCommandType(type), target, position.x, position.y, extra);\n" + + "}\n\n"); + + out.println("int resolveUnitCommandExtra(UnitCommand& command){\n" + + "\tif(command.getUnitType() != UnitTypes::None){" + + "\t\treturn command.getUnitType().getID();" + + "}\n" + + "\tif(command.getTechType() != TechTypes::None){" + + "\t\treturn command.getTechType().getID();" + + "}\n" + + "\tif(command.getUpgradeType() != UpgradeTypes::None){" + + "\t\treturn command.getUpgradeType().getID();" + + "}\n" + + "\tif(command.getSlot() != -1){" + + "\t\treturn command.extra;" + + "}\n" + + "\treturn command.isQueued();\n" + + "}\n\n"); } } diff --git a/src/generator/java/ClassMirror.java b/src/generator/java/ClassMirror.java index b460205..217aac5 100644 --- a/src/generator/java/ClassMirror.java +++ b/src/generator/java/ClassMirror.java @@ -129,7 +129,7 @@ public class ClassMirror extends Mirror { if(checkDefaults){ handleDefaults(method); } - out.print(INTEND + "public" + SPACE + (cClass.isStatic() ? "static" + SPACE + "native" + SPACE : "") + context.toJavaType(method.getType()) + SPACE + method.getName() + "("); + out.print(INTEND + "public" + SPACE + (cClass.isStatic() || method.isStatic() ? "static" + SPACE + "native" + SPACE : "") + context.toJavaType(method.getType()) + SPACE + method.getName() + "("); boolean first = true; for (Param param : method.getParams()) { if (!first) { @@ -139,7 +139,7 @@ public class ClassMirror extends Mirror { out.print(paramString(param)); } out.print(")"); - if (!cClass.isStatic()) { + if (!cClass.isStatic() && !method.isStatic()) { out.println(SPACE + "{"); writeNativeCall(method); out.println(INTEND + "}"); diff --git a/src/impl/CApiParser.java b/src/impl/CApiParser.java index b0aaa30..ec26525 100644 --- a/src/impl/CApiParser.java +++ b/src/impl/CApiParser.java @@ -1,6 +1,7 @@ package impl; import c.*; +import generator.CJavaPipeline; import java.io.BufferedReader; import java.io.File; @@ -41,12 +42,13 @@ public class CApiParser { //String FUNC_REGEX = "^(\\s*)(virtual)?\\s([\\w\\*]+)\\s([\\w\\*]+)\\((.*)\\)(\\s=\\s0;)?"; //String FUNC_REGEX = "^(\\s*)(virtual)?\\s(BWAPI::)?([\\w\\*]+)\\s([\\w\\*]+)\\((.*)\\)((\\sconst)?\\s=\\s0;)?"; //String FUNC_REGEX = "^(\\s*)(virtual)?\\s((BWAPI)|(std)::)?([\\w\\*]+)\\s([\\w\\*]+)\\((.*)\\)((\\sconst)?\\s=\\s0;)?"; - // 1 2 3 45 6 78 9 10 11 12 13,14 15,16 - String FUNC_REGEX = "^(\\s*)(virtual)?\\s(const\\s)?((BWAPI::)|(std)::)?((set<(\\s*(BWAPI::)?\\w+\\*?\\s*)>)|([\\w\\*]+))&?\\s([\\w\\*]+)\\((.*)\\)((\\sconst)?\\s=\\s0;)?\\s*"; + // 1 2 3 4 56 7 89 10 11 12 13 14,15 15,17 + String FUNC_REGEX = "^(\\s*)(virtual)?\\s(const\\s)?(static\\s)?((BWAPI::)|(std)::)?((set<(\\s*(BWAPI::)?\\w+\\*?\\s*)>)|([\\w\\*]+))&?\\s+([\\w\\*]+)\\((.*)\\)((\\sconst)?\\s=\\s0;)?\\s*"; - static final int F_REGEX_RETURN_TYPE = 7; - static final int F_REGEX_NAME = 12; - static final int F_REGEX_PARAMS = 13; + static final int F_REGEX_STATIC = 4; + static final int F_REGEX_RETURN_TYPE = 8; + static final int F_REGEX_NAME = 13; + static final int F_REGEX_PARAMS = 14; String ENUM_VALUE_REGEX = "^(\\s*)(\\w+)(\\s*=\\s*(0x)?([0-9A-Fa-f]+))?\\s*[\\,;]"; @@ -161,7 +163,7 @@ public class CApiParser { return LineState.SKIP; } - private static final boolean isSkip(String line) { + private static boolean isSkip(String line) { if (line.isEmpty()) { return true; } @@ -244,7 +246,7 @@ public class CApiParser { System.err.println("function skipped - GameData* return (" + function.name + ")"); return null; } - if (function.returnType.equals("UnitCommand")) { + if (CJavaPipeline.isBWAPI3() && function.returnType.equals("UnitCommand")) { System.err.println("function skipped - UnitCommand return (" + function.name + ")"); return null; } @@ -266,6 +268,10 @@ public class CApiParser { return null; } + if(matcher.group(F_REGEX_STATIC) != null){ + function.setStatic(true); + } + if (matcher.group(F_REGEX_PARAMS) != null) { String paramsString = matcher.group(F_REGEX_PARAMS); String paramStrings[] = paramsString.split("\\,"); @@ -391,6 +397,16 @@ public class CApiParser { return null; } + if (argType.equals("UnitFilter")) { + System.err.println("function skipped - UnitFilter param (" + function.name + ")"); + return null; + } + + if (argType.equals("BestUnitFilter")) { + System.err.println("function skipped - BestUnitFilter param (" + function.name + ")"); + return null; + } + if (arg.length > 2 && arg[2].equals("=")) { function.args.add(new Param(argType, argName, arg[3])); diff --git a/src/impl/Function.java b/src/impl/Function.java index fc0fa40..2812e33 100644 --- a/src/impl/Function.java +++ b/src/impl/Function.java @@ -20,6 +20,8 @@ public class Function implements Method { ArrayList args = new ArrayList(); + boolean isStatic = false; + @Override public List getParams() { return args; @@ -96,4 +98,13 @@ public class Function implements Method { public void setJavadoc(String javadoc) { this.javadoc = javadoc; } + + @Override + public boolean isStatic() { + return isStatic; + } + + public void setStatic(boolean isStatic) { + this.isStatic = isStatic; + } } diff --git a/src/test/api/TestBot1.java b/src/test/api/TestBot1.java index 12df25f..7b108ca 100644 --- a/src/test/api/TestBot1.java +++ b/src/test/api/TestBot1.java @@ -1,9 +1,8 @@ package test.api; -import bwapi.*; -import bwta.BWTA; -import bwta.BaseLocation; -import org.jsoup.Connection; +import bwapi4.*; +import bwapi4.Text.Size.*; +import bwapi4.Text.Size.Enum; /** * User: PC @@ -24,11 +23,11 @@ public class TestBot1 { @Override public void onStart() { System.out.println("-------Analysing map-------"); - BWTA.readMap(); - BWTA.analyze(); + //BWTA.readMap(); + //BWTA.analyze(); System.out.println(); - mirror.getGame().enableFlag(bwapi.Flag.Enum.UserInput.getValue()); + mirror.getGame().enableFlag(bwapi4.Flag.Enum.UserInput.getValue()); } @Override @@ -38,14 +37,14 @@ public class TestBot1 { game.drawBoxScreen(0, 0, 100,100,Color.Red,true); - game.setTextSize(10); + game.setTextSize(Enum.Small); game.drawTextScreen(10, 10, "Playing as " + self.getName() + " - " + self.getRace()); StringBuilder units = new StringBuilder("My units:\n"); - + /* for(Player player : game.getPlayers()){ System.out.println(player.getName()); - for(Unit enemyUnit: player.getUnits()){ + for(Unit enemyUnit: player.()){ System.out.println(enemyUnit.getType()); } } @@ -75,7 +74,7 @@ public class TestBot1 { } } } - + */ //draw my units on screen