From 6065021f23f79d6f41e1c2bac25b074075bf85a2 Mon Sep 17 00:00:00 2001 From: vjurenka Date: Fri, 27 Feb 2015 21:29:33 +0100 Subject: [PATCH] BWTA2 --- bwapi_bridge2_0.exp | Bin 237869 -> 249301 bytes bwta2-c/BWTA.h | 58 ++ bwta2-c/BWTA/BaseLocation.h | 28 + bwta2-c/BWTA/Chokepoint.h | 15 + bwta2-c/BWTA/Polygon.h | 19 + bwta2-c/BWTA/RectangleArray.h | 274 ++++++++++ bwta2-c/BWTA/Region.h | 20 + c4/impl.cpp | 404 ++++++++++++++ compiled4/bwta/BWTA.class | Bin 0 -> 1631 bytes compiled4/bwta/BaseLocation.class | Bin 0 -> 2557 bytes compiled4/bwta/Chokepoint.class | Bin 0 -> 1105 bytes compiled4/bwta/Polygon.class | Bin 0 -> 1513 bytes compiled4/bwta/Region.class | Bin 0 -> 2040 bytes concat_header4.h | 495 ++++++++++++++++++ generated/bwta/BWTA.java | 73 +++ generated/bwta/BaseLocation.java | 118 +++++ generated/bwta/Chokepoint.java | 52 ++ generated/bwta/Polygon.java | 68 +++ generated/bwta/Region.java | 82 +++ headers4/bwta_BWTA.h | 237 +++++++++ headers4/bwta_BaseLocation.h | 117 +++++ headers4/bwta_Chokepoint.h | 29 + headers4/bwta_Polygon.h | 53 ++ headers4/bwta_Region.h | 69 +++ .../generator/CJavaPipeline$1.class | Bin 685 -> 685 bytes .../generator/CJavaPipeline$2.class | Bin 936 -> 936 bytes .../generator/CJavaPipeline.class | Bin 9894 -> 10036 bytes .../generator/ccalls/CallImplementer.class | Bin 17074 -> 17174 bytes .../generator/java/Mirror.class | Bin 2259 -> 2256 bytes .../InvokeGenerator/test/api/TestBot1$1.class | Bin 3653 -> 3722 bytes .../InvokeGenerator/test/api/TestBot1.class | Bin 827 -> 827 bytes .../InvokeGenerator/util/PointerTest.class | Bin 1558 -> 1600 bytes src/generator/CJavaPipeline.java | 17 +- src/generator/ccalls/CallImplementer.java | 11 +- src/generator/java/Mirror.java | 2 +- src/test/api/TestBot1.java | 8 +- src/util/PointerTest.java | 2 +- 37 files changed, 2239 insertions(+), 12 deletions(-) create mode 100644 bwta2-c/BWTA.h create mode 100644 bwta2-c/BWTA/BaseLocation.h create mode 100644 bwta2-c/BWTA/Chokepoint.h create mode 100644 bwta2-c/BWTA/Polygon.h create mode 100644 bwta2-c/BWTA/RectangleArray.h create mode 100644 bwta2-c/BWTA/Region.h create mode 100644 compiled4/bwta/BWTA.class create mode 100644 compiled4/bwta/BaseLocation.class create mode 100644 compiled4/bwta/Chokepoint.class create mode 100644 compiled4/bwta/Polygon.class create mode 100644 compiled4/bwta/Region.class create mode 100644 generated/bwta/BWTA.java create mode 100644 generated/bwta/BaseLocation.java create mode 100644 generated/bwta/Chokepoint.java create mode 100644 generated/bwta/Polygon.java create mode 100644 generated/bwta/Region.java create mode 100644 headers4/bwta_BWTA.h create mode 100644 headers4/bwta_BaseLocation.h create mode 100644 headers4/bwta_Chokepoint.h create mode 100644 headers4/bwta_Polygon.h create mode 100644 headers4/bwta_Region.h diff --git a/bwapi_bridge2_0.exp b/bwapi_bridge2_0.exp index 0d67629d777154a1bad9aaa8cdc2fc3f203652c4..aa1f45acff50bad84023a91112ddb0270ff78996 100644 GIT binary patch literal 249301 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 delta 39862 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 +#include +#include +#include +#include +#include +namespace BWTA +{ + void readMap(); + void analyze(); + void computeDistanceTransform(); + void balanceAnalysis(); + + int getMaxDistanceTransform(); + RectangleArray* getDistanceTransformMap(); + + const std::set& getRegions(); + const std::set& getChokepoints(); + const std::set& getBaseLocations(); + const std::set& getStartLocations(); + const std::set& getUnwalkablePolygons(); + + BaseLocation* getStartLocation(BWAPI::Player player); + + Region* getRegion(int x, int y); + Region* getRegion(BWAPI::TilePosition tileposition); + Region* getRegion(BWAPI::Position position); + + Chokepoint* getNearestChokepoint(int x, int y); + Chokepoint* getNearestChokepoint(BWAPI::TilePosition tileposition); + Chokepoint* getNearestChokepoint(BWAPI::Position position); + + BaseLocation* getNearestBaseLocation(int x, int y); + BaseLocation* getNearestBaseLocation(BWAPI::TilePosition tileposition); + BaseLocation* getNearestBaseLocation(BWAPI::Position position); + + Polygon* getNearestUnwalkablePolygon(int x, int y); + Polygon* getNearestUnwalkablePolygon(BWAPI::TilePosition tileposition); + BWAPI::Position getNearestUnwalkablePosition(BWAPI::Position position); + + bool isConnected(int x1, int y1, int x2, int y2); + bool isConnected(BWAPI::TilePosition a, BWAPI::TilePosition b); + + double getGroundDistance(BWAPI::TilePosition start, BWAPI::TilePosition end); + std::pair getNearestTilePosition(BWAPI::TilePosition start, const std::set& targets); + std::map getGroundDistances(BWAPI::TilePosition start, const std::set& targets); + void getGroundDistanceMap(BWAPI::TilePosition start, RectangleArray& distanceMap); + void getGroundWalkDistanceMap(int walkx, int walky, RectangleArray& distanceMap); + std::vector getShortestPath(BWAPI::TilePosition start, BWAPI::TilePosition end); + std::vector getShortestPath(BWAPI::TilePosition start, const std::set& targets); + + // HPA* implementation + void buildChokeNodes(); + std::list getShortestPath2(BWAPI::TilePosition start, BWAPI::TilePosition target); + int getGroundDistance2(BWAPI::TilePosition start, BWAPI::TilePosition end); + +} \ No newline at end of file diff --git a/bwta2-c/BWTA/BaseLocation.h b/bwta2-c/BWTA/BaseLocation.h new file mode 100644 index 0000000..67bcf12 --- /dev/null +++ b/bwta2-c/BWTA/BaseLocation.h @@ -0,0 +1,28 @@ +#pragma once +#include +namespace BWTA +{ + class Region; + class BaseLocation + { + public: + virtual BWAPI::Position getPosition() const=0; + virtual BWAPI::TilePosition getTilePosition() const=0; + + virtual Region* getRegion() const=0; + + virtual int minerals() const=0; + virtual int gas() const=0; + + virtual const BWAPI::Unitset &getMinerals()=0; + virtual const BWAPI::Unitset &getStaticMinerals() const=0; + virtual const BWAPI::Unitset &getGeysers() const=0; + + virtual double getGroundDistance(BaseLocation* other) const=0; + virtual double getAirDistance(BaseLocation* other) const=0; + + virtual bool isIsland() const=0; + virtual bool isMineralOnly() const=0; + virtual bool isStartLocation() const=0; + }; +} \ No newline at end of file diff --git a/bwta2-c/BWTA/Chokepoint.h b/bwta2-c/BWTA/Chokepoint.h new file mode 100644 index 0000000..5e58458 --- /dev/null +++ b/bwta2-c/BWTA/Chokepoint.h @@ -0,0 +1,15 @@ +#pragma once +#include +#include +namespace BWTA +{ + class Region; + class Chokepoint + { + public: + virtual const std::pair& getRegions() const=0; + virtual const std::pair& getSides() const=0; + virtual BWAPI::Position getCenter() const=0; + virtual double getWidth() const=0; + }; +} \ No newline at end of file diff --git a/bwta2-c/BWTA/Polygon.h b/bwta2-c/BWTA/Polygon.h new file mode 100644 index 0000000..d65ca16 --- /dev/null +++ b/bwta2-c/BWTA/Polygon.h @@ -0,0 +1,19 @@ +#pragma once +#include +#include +namespace BWTA +{ + class Polygon : public std::vector + { + public: + Polygon(); + Polygon(const Polygon& b); + double getArea() const; + double getPerimeter() const; + BWAPI::Position getCenter() const; + bool isInside(BWAPI::Position p) const; + BWAPI::Position getNearestPoint(BWAPI::Position p) const; + const std::vector& getHoles() const; + std::vector holes; + }; +} \ No newline at end of file diff --git a/bwta2-c/BWTA/RectangleArray.h b/bwta2-c/BWTA/RectangleArray.h new file mode 100644 index 0000000..7a44d0a --- /dev/null +++ b/bwta2-c/BWTA/RectangleArray.h @@ -0,0 +1,274 @@ +#pragma once + +namespace BWTA +{ + /** + * Template used for work with dynamically initialized array with dimension 2. + */ + template + class RectangleArray + { + public : + /** + * Creates the array with the specified proportions. + * @param width Width of the new array. + * @param height Height of the new array. + */ + RectangleArray(unsigned int width = 1, unsigned int height = 1, Type* data = NULL); + /** Copy constructor */ + RectangleArray(const RectangleArray& rectangleArray); + /** Destorys the array and deletes all content of array. */ + ~RectangleArray(void); + /** + * Gets the width of the array. + * @return width of the array. + */ + unsigned int getWidth(void) const; + /** + * Gets the height of the array. + * @return height of the array. + */ + unsigned int getHeight(void) const; + /** + * Gets item of the array on the specified position. + * @param x horizontal index of the array position. + * @param y vertical index of the array position. + * @return item on the specified position. + */ + Type getItem(unsigned int x, unsigned int y); + Type getItemSafe(unsigned int x, unsigned int y); + inline Type* operator[](int i) { return this->getColumn(i); } + inline Type const * const operator[](int i) const {return this->getColumn(i); } + /** + * Sets item of the array on the specified position. + * @param x horizontal index of the array position. + * @param y vertical index of the array position. + * @param item new value of the field. + */ + void setItem(unsigned int x, unsigned int y, Type *item); + void resize(unsigned int width, unsigned int height); + void printToFile(FILE* f); + void saveToFile(const std::string& fileName); + /** Sets all fields of the array to the specified value */ + void setTo(const Type& value); + void setBorderTo(const Type& value); + /** Set a rectangle area of the array to the specified values */ + void setRectangleTo(unsigned int xLeft, unsigned int yTop, unsigned int xRight, unsigned int yBottom, const Type& value); + private : + bool owner; + /** width of array */ + unsigned int width; + /** height of array */ + unsigned int height; + /** Array data, stored as linear array of size width*height */ + Type *data; + /** Pointers to begins of lines*/ + Type **columns; + /** + * Gets data item on the specified index + * @param index index of the data to be returned. + */ + Type getData(unsigned int index); + /** + * Gets the pointer in data to the beginning of line with the specified + * index. + * @param index index of the line. + */ + Type *getColumn(unsigned int index); + /** + * Gets the pointer in data to the beginning of line with the specified + * index. + * @param index index of the line. + */ + const Type *getColumn(unsigned int index) const; + /** + * Sets the width of the array. + * @param width New width of the array. + */ + void setWidth(unsigned int width); + /** + * Sets the height of the array. + * @param height New height of the array. + */ + void setHeight(unsigned int height); + }; + //---------------------------------------------- CONSTRUCTOR ----------------------------------------------- + template + RectangleArray::RectangleArray(unsigned int width, unsigned int height, Type* data) + { + this->setWidth(width); + this->setHeight(height); + this->owner = (data == NULL); + if (this->owner) + this->data = new Type[this->getWidth()*this->getHeight()]; + else + this->data = data; + + columns = new Type*[this->getWidth()]; + unsigned int i = 0; + for (unsigned int position = 0;i < width; i ++,position += height) + columns[i] = &this->data[position]; + } + //---------------------------------------------- CONSTRUCTOR ----------------------------------------------- + template + RectangleArray::RectangleArray(const RectangleArray& rectangleArray) + :owner(true) + { + this->setWidth(rectangleArray.getWidth()); + this->setHeight(rectangleArray.getHeight()); + this->data = new Type[this->getWidth()*this->getHeight()]; + columns = new Type*[this->getWidth()]; + + unsigned int i = 0; + for (unsigned int position = 0;i < width; i ++,position += height) + columns[i] = &data[position]; + memcpy(this->data, rectangleArray.data, sizeof(Type)*this->getWidth()*this->getHeight()); + } + //----------------------------------------------- DESTRUCTOR ----------------------------------------------- + template + RectangleArray::~RectangleArray(void) + { + delete [] columns; + if (this->owner) + delete [] data; + } + //----------------------------------------------- GET WIDTH ------------------------------------------------ + template + unsigned int RectangleArray::getWidth(void) const + { + return this->width; + } + //----------------------------------------------- SET WIDTH ------------------------------------------------ + template + void RectangleArray::setWidth(unsigned int width) + { + this->width = width; + } + //----------------------------------------------- GET HEIGHT ----------------------------------------------- + template + unsigned int RectangleArray::getHeight(void) const + { + return this->height; + } + //----------------------------------------------- SET HEIGHT ----------------------------------------------- + template + void RectangleArray::setHeight(unsigned int height) + { + this->height = height; + } + //------------------------------------------------ GET ITEM ------------------------------------------------ + template + Type RectangleArray::getItem(unsigned int x, unsigned int y) + { + return this->getColumn(x)[y]; + } + //------------------------------------------------ GET ITEM ------------------------------------------------ + template + Type RectangleArray::getItemSafe(unsigned int x, unsigned int y) + { + if (x<0 || y<0 || x>=this->width || y>=this->height) + { + return (Type)NULL; + } + return this->getColumn(x)[y]; + } + //------------------------------------------------ SET ITEM ------------------------------------------------ + template + void RectangleArray::setItem(unsigned int x, unsigned int y, Type* item) + { + this->getColumn(x)[y] = item; + } + //------------------------------------------------ GET LINE ------------------------------------------------ + template + Type* RectangleArray::getColumn(unsigned int index) + { + return columns[index]; + } + //------------------------------------------------ GET LINE ------------------------------------------------ + template + const Type* RectangleArray::getColumn(unsigned int index) const + { + return columns[index]; + } + //------------------------------------------------- RESIZE ------------------------------------------------- + template + void RectangleArray::resize(unsigned int width, unsigned int height) + { + if (this->getWidth() == width && + this->getHeight() == height) + return; + + delete [] this->columns; + delete [] this->data; + + this->setWidth(width); + this->setHeight(height); + + this->data = new Type[this->width * this->height]; + + this->columns = new Type*[this->width]; + unsigned int i = 0; + for (unsigned int position = 0;i < this->width; i ++,position += this->height) + columns[i] = &data[position]; + } + //--------------------------------------------- PRINT TO FILE ---------------------------------------------- + template + void RectangleArray::printToFile(FILE* f) + { + for (unsigned int y = 0; y < this->getHeight(); y++) + { + for (unsigned int x = 0; x < this->getWidth(); x++) + { + char ch = this->getColumn(x)[y]; + fprintf_s(f, "%c", ch); + } + fprintf_s(f, "\n"); + } + } + //---------------------------------------------- SAVE TO FILE ---------------------------------------------- + template + void RectangleArray::saveToFile(const std::string& fileName) + { + FILE* f = fopen(fileName.c_str(), "wt"); + if (!f) + exit(1); + this->printToFile(f); + fclose(f); + } + //------------------------------------------------- SET TO ------------------------------------------------- + template + void RectangleArray::setTo(const Type& value) + { + for (unsigned int i = 0; i < this->getWidth()*this->getHeight(); i++) + this->data[i] = value; + } + //--------------------------------------------- SET BORDER TO ---------------------------------------------- + template + void RectangleArray::setBorderTo(const Type& value) + { + for (unsigned int i = 0; i < this->width; i++) + { + this->getColumn(i)[0] = value; + this->getColumn(i)[this->height - 1] = value; + } + for (unsigned int i = 0; i < this->height; i++) + { + this->getColumn(0)[i] = value; + this->getColumn(this->width - 1)[i] = value; + } + } + //------------------------------------------- SET RECTANGLE TO --------------------------------------------- + template + void RectangleArray::setRectangleTo(unsigned int xLeft, unsigned int yTop, unsigned int xRight, unsigned int yBottom, const Type& value) { + xLeft = std::max(xLeft,0); + yTop = std::max(yTop,0); + xRight = std::min(xRight,this->width-1); + yBottom = std::min(yBottom,this->height-1); + for (unsigned int x = xLeft; x <= xRight; x++) { + for (unsigned int y = yTop; y <= yBottom; y++) { + this->getColumn(x)[y] = value; + } + } + } + //---------------------------------------------------------------------------------------------------------- +} \ No newline at end of file diff --git a/bwta2-c/BWTA/Region.h b/bwta2-c/BWTA/Region.h new file mode 100644 index 0000000..7892332 --- /dev/null +++ b/bwta2-c/BWTA/Region.h @@ -0,0 +1,20 @@ +#pragma once +#include +#include +#include +namespace BWTA +{ + class Chokepoint; + class BaseLocation; + class Region + { + public: + virtual const Polygon& getPolygon() const=0; + virtual const BWAPI::Position& getCenter() const=0; + virtual const std::set& getChokepoints() const=0; + virtual const std::set& getBaseLocations() const=0; + virtual bool isReachable(Region* region) const=0; + virtual const std::set& getReachableRegions() const=0; + virtual const int getMaxDistance() const=0; + }; +} \ No newline at end of file diff --git a/c4/impl.cpp b/c4/impl.cpp index 4c56a6f..9c31e55 100644 --- a/c4/impl.cpp +++ b/c4/impl.cpp @@ -1,6 +1,7 @@ #include "../concat_header4.h" #include #include +#include #include #include #include @@ -5824,6 +5825,409 @@ JNIEXPORT jboolean JNICALL Java_bwapi_WeaponType_targetsOwn_1native(JNIEnv * env WeaponType* x_weaponType = (WeaponType*)pointer; return x_weaponType->targetsOwn(); } +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getPosition_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +Position cresult = x_baseLocation->getPosition(); +jclass retcls = FindCachedClass(env, "bwapi/Position"); +jmethodID retConsID = FindCachedMethod(env, retcls, "", "(II)V"); +jobject result = env->NewObject(retcls, retConsID, cresult.x, cresult.y); +return result; +} +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getTilePosition_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +TilePosition cresult = x_baseLocation->getTilePosition(); +jclass retcls = FindCachedClass(env, "bwapi/TilePosition"); +jmethodID retConsID = FindCachedMethod(env, retcls, "", "(II)V"); +jobject result = env->NewObject(retcls, retConsID, cresult.x, cresult.y); +return result; +} +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getRegion_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +jlong resptr = (jlong)x_baseLocation->getRegion(); +jclass retcls = FindCachedClass(env, "bwta/Region"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/Region;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jint JNICALL Java_bwta_BaseLocation_minerals_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +return x_baseLocation->minerals(); +} +JNIEXPORT jint JNICALL Java_bwta_BaseLocation_gas_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +return x_baseLocation->gas(); +} +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getMinerals_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +Unitset cresult = x_baseLocation->getMinerals(); +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, "bwta/Unit"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/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_bwta_BaseLocation_getStaticMinerals_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +Unitset cresult = x_baseLocation->getStaticMinerals(); +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, "bwta/Unit"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/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_bwta_BaseLocation_getGeysers_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +Unitset cresult = x_baseLocation->getGeysers(); +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, "bwta/Unit"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/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 jdouble JNICALL Java_bwta_BaseLocation_getGroundDistance_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_other){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +BWTA::BaseLocation* other = (BWTA::BaseLocation*)env->GetLongField(p_other, FindCachedField(env, env->GetObjectClass(p_other), "pointer", "J")); +return x_baseLocation->getGroundDistance(other); +} +JNIEXPORT jdouble JNICALL Java_bwta_BaseLocation_getAirDistance_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_other){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +BWTA::BaseLocation* other = (BWTA::BaseLocation*)env->GetLongField(p_other, FindCachedField(env, env->GetObjectClass(p_other), "pointer", "J")); +return x_baseLocation->getAirDistance(other); +} +JNIEXPORT jboolean JNICALL Java_bwta_BaseLocation_isIsland_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +return x_baseLocation->isIsland(); +} +JNIEXPORT jboolean JNICALL Java_bwta_BaseLocation_isMineralOnly_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +return x_baseLocation->isMineralOnly(); +} +JNIEXPORT jboolean JNICALL Java_bwta_BaseLocation_isStartLocation_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::BaseLocation* x_baseLocation = (BWTA::BaseLocation*)pointer; +return x_baseLocation->isStartLocation(); +} +JNIEXPORT void JNICALL Java_bwta_BWTA_readMap(JNIEnv * env, jclass jclz){ +BWTA::readMap(); +} +JNIEXPORT void JNICALL Java_bwta_BWTA_analyze(JNIEnv * env, jclass jclz){ +BWTA::analyze(); +} +JNIEXPORT void JNICALL Java_bwta_BWTA_computeDistanceTransform(JNIEnv * env, jclass jclz){ +BWTA::computeDistanceTransform(); +} +JNIEXPORT void JNICALL Java_bwta_BWTA_balanceAnalysis(JNIEnv * env, jclass jclz){ +BWTA::balanceAnalysis(); +} +JNIEXPORT jint JNICALL Java_bwta_BWTA_getMaxDistanceTransform(JNIEnv * env, jclass jclz){ +return BWTA::getMaxDistanceTransform(); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegions(JNIEnv * env, jclass jclz){ +std::set cresult = BWTA::getRegions(); +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, "bwta/Region"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Region;"); +for(std::set::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::Region* elem_ptr = *it; +jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; +env->CallVoidMethod(result, addMethodID, elem); +} +return result; +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getChokepoints(JNIEnv * env, jclass jclz){ +std::set cresult = BWTA::getChokepoints(); +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, "bwta/Chokepoint"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Chokepoint;"); +for(std::set::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::Chokepoint* elem_ptr = *it; +jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; +env->CallVoidMethod(result, addMethodID, elem); +} +return result; +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getBaseLocations(JNIEnv * env, jclass jclz){ +std::set cresult = BWTA::getBaseLocations(); +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, "bwta/BaseLocation"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/BaseLocation;"); +for(std::set::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::BaseLocation* elem_ptr = *it; +jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; +env->CallVoidMethod(result, addMethodID, elem); +} +return result; +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getStartLocations(JNIEnv * env, jclass jclz){ +std::set cresult = BWTA::getStartLocations(); +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, "bwta/BaseLocation"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/BaseLocation;"); +for(std::set::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::BaseLocation* elem_ptr = *it; +jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; +env->CallVoidMethod(result, addMethodID, elem); +} +return result; +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getUnwalkablePolygons(JNIEnv * env, jclass jclz){ +std::set cresult = BWTA::getUnwalkablePolygons(); +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, "bwta/Polygon"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Polygon;"); +for(std::set::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::Polygon* elem_ptr = *it; +jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; +env->CallVoidMethod(result, addMethodID, elem); +} +return result; +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getStartLocation(JNIEnv * env, jclass jclz, jobject p_player){ +Player player = (Player)env->GetLongField(p_player, FindCachedField(env, env->GetObjectClass(p_player), "pointer", "J")); +jlong resptr = (jlong)BWTA::getStartLocation(player); +jclass retcls = FindCachedClass(env, "bwta/BaseLocation"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/BaseLocation;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegion__II(JNIEnv * env, jclass jclz, jint x, jint y){ +jlong resptr = (jlong)BWTA::getRegion(x, y); +jclass retcls = FindCachedClass(env, "bwta/Region"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/Region;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegion__Lbwapi_TilePosition_2(JNIEnv * env, jclass jclz, jobject p_tileposition){ +TilePosition tileposition((int)env->GetIntField(p_tileposition, FindCachedField(env, env->GetObjectClass(p_tileposition), "x", "I")), (int)env->GetIntField(p_tileposition, FindCachedField(env, env->GetObjectClass(p_tileposition), "y", "I"))); +jlong resptr = (jlong)BWTA::getRegion(tileposition); +jclass retcls = FindCachedClass(env, "bwta/Region"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/Region;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegion__Lbwapi_Position_2(JNIEnv * env, jclass jclz, jobject p_position){ +Position 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"))); +jlong resptr = (jlong)BWTA::getRegion(position); +jclass retcls = FindCachedClass(env, "bwta/Region"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/Region;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestChokepoint__II(JNIEnv * env, jclass jclz, jint x, jint y){ +jlong resptr = (jlong)BWTA::getNearestChokepoint(x, y); +jclass retcls = FindCachedClass(env, "bwta/Chokepoint"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/Chokepoint;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestChokepoint__Lbwapi_TilePosition_2(JNIEnv * env, jclass jclz, jobject p_tileposition){ +TilePosition tileposition((int)env->GetIntField(p_tileposition, FindCachedField(env, env->GetObjectClass(p_tileposition), "x", "I")), (int)env->GetIntField(p_tileposition, FindCachedField(env, env->GetObjectClass(p_tileposition), "y", "I"))); +jlong resptr = (jlong)BWTA::getNearestChokepoint(tileposition); +jclass retcls = FindCachedClass(env, "bwta/Chokepoint"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/Chokepoint;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestChokepoint__Lbwapi_Position_2(JNIEnv * env, jclass jclz, jobject p_position){ +Position 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"))); +jlong resptr = (jlong)BWTA::getNearestChokepoint(position); +jclass retcls = FindCachedClass(env, "bwta/Chokepoint"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/Chokepoint;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestBaseLocation__II(JNIEnv * env, jclass jclz, jint x, jint y){ +jlong resptr = (jlong)BWTA::getNearestBaseLocation(x, y); +jclass retcls = FindCachedClass(env, "bwta/BaseLocation"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/BaseLocation;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestBaseLocation__Lbwapi_TilePosition_2(JNIEnv * env, jclass jclz, jobject p_tileposition){ +TilePosition tileposition((int)env->GetIntField(p_tileposition, FindCachedField(env, env->GetObjectClass(p_tileposition), "x", "I")), (int)env->GetIntField(p_tileposition, FindCachedField(env, env->GetObjectClass(p_tileposition), "y", "I"))); +jlong resptr = (jlong)BWTA::getNearestBaseLocation(tileposition); +jclass retcls = FindCachedClass(env, "bwta/BaseLocation"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/BaseLocation;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestBaseLocation__Lbwapi_Position_2(JNIEnv * env, jclass jclz, jobject p_position){ +Position 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"))); +jlong resptr = (jlong)BWTA::getNearestBaseLocation(position); +jclass retcls = FindCachedClass(env, "bwta/BaseLocation"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/BaseLocation;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestUnwalkablePolygon__II(JNIEnv * env, jclass jclz, jint x, jint y){ +jlong resptr = (jlong)BWTA::getNearestUnwalkablePolygon(x, y); +jclass retcls = FindCachedClass(env, "bwta/Polygon"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/Polygon;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestUnwalkablePolygon__Lbwapi_TilePosition_2(JNIEnv * env, jclass jclz, jobject p_tileposition){ +TilePosition tileposition((int)env->GetIntField(p_tileposition, FindCachedField(env, env->GetObjectClass(p_tileposition), "x", "I")), (int)env->GetIntField(p_tileposition, FindCachedField(env, env->GetObjectClass(p_tileposition), "y", "I"))); +jlong resptr = (jlong)BWTA::getNearestUnwalkablePolygon(tileposition); +jclass retcls = FindCachedClass(env, "bwta/Polygon"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/Polygon;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestUnwalkablePosition(JNIEnv * env, jclass jclz, jobject p_position){ +Position 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"))); +Position cresult = BWTA::getNearestUnwalkablePosition(position); +jclass retcls = FindCachedClass(env, "bwapi/Position"); +jmethodID retConsID = FindCachedMethod(env, retcls, "", "(II)V"); +jobject result = env->NewObject(retcls, retConsID, cresult.x, cresult.y); +return result; +} +JNIEXPORT jboolean JNICALL Java_bwta_BWTA_isConnected__IIII(JNIEnv * env, jclass jclz, jint x1, jint y1, jint x2, jint y2){ +return BWTA::isConnected(x1, y1, x2, y2); +} +JNIEXPORT jboolean JNICALL Java_bwta_BWTA_isConnected__Lbwapi_TilePosition_2Lbwapi_TilePosition_2(JNIEnv * env, jclass jclz, jobject p_a, jobject p_b){ +TilePosition a((int)env->GetIntField(p_a, FindCachedField(env, env->GetObjectClass(p_a), "x", "I")), (int)env->GetIntField(p_a, FindCachedField(env, env->GetObjectClass(p_a), "y", "I"))); +TilePosition b((int)env->GetIntField(p_b, FindCachedField(env, env->GetObjectClass(p_b), "x", "I")), (int)env->GetIntField(p_b, FindCachedField(env, env->GetObjectClass(p_b), "y", "I"))); +return BWTA::isConnected(a, b); +} +JNIEXPORT jdouble JNICALL Java_bwta_BWTA_getGroundDistance(JNIEnv * env, jclass jclz, jobject p_start, jobject p_end){ +TilePosition start((int)env->GetIntField(p_start, FindCachedField(env, env->GetObjectClass(p_start), "x", "I")), (int)env->GetIntField(p_start, FindCachedField(env, env->GetObjectClass(p_start), "y", "I"))); +TilePosition end((int)env->GetIntField(p_end, FindCachedField(env, env->GetObjectClass(p_end), "x", "I")), (int)env->GetIntField(p_end, FindCachedField(env, env->GetObjectClass(p_end), "y", "I"))); +return BWTA::getGroundDistance(start, end); +} +JNIEXPORT void JNICALL Java_bwta_BWTA_buildChokeNodes(JNIEnv * env, jclass jclz){ +BWTA::buildChokeNodes(); +} +JNIEXPORT jint JNICALL Java_bwta_BWTA_getGroundDistance2(JNIEnv * env, jclass jclz, jobject p_start, jobject p_end){ +TilePosition start((int)env->GetIntField(p_start, FindCachedField(env, env->GetObjectClass(p_start), "x", "I")), (int)env->GetIntField(p_start, FindCachedField(env, env->GetObjectClass(p_start), "y", "I"))); +TilePosition end((int)env->GetIntField(p_end, FindCachedField(env, env->GetObjectClass(p_end), "x", "I")), (int)env->GetIntField(p_end, FindCachedField(env, env->GetObjectClass(p_end), "y", "I"))); +return BWTA::getGroundDistance2(start, end); +} +JNIEXPORT jobject JNICALL Java_bwta_Chokepoint_getCenter_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Chokepoint* x_chokepoint = (BWTA::Chokepoint*)pointer; +Position cresult = x_chokepoint->getCenter(); +jclass retcls = FindCachedClass(env, "bwapi/Position"); +jmethodID retConsID = FindCachedMethod(env, retcls, "", "(II)V"); +jobject result = env->NewObject(retcls, retConsID, cresult.x, cresult.y); +return result; +} +JNIEXPORT jdouble JNICALL Java_bwta_Chokepoint_getWidth_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Chokepoint* x_chokepoint = (BWTA::Chokepoint*)pointer; +return x_chokepoint->getWidth(); +} +JNIEXPORT jdouble JNICALL Java_bwta_Polygon_getArea_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Polygon* x_polygon = (BWTA::Polygon*)pointer; +return x_polygon->getArea(); +} +JNIEXPORT jdouble JNICALL Java_bwta_Polygon_getPerimeter_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Polygon* x_polygon = (BWTA::Polygon*)pointer; +return x_polygon->getPerimeter(); +} +JNIEXPORT jobject JNICALL Java_bwta_Polygon_getCenter_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Polygon* x_polygon = (BWTA::Polygon*)pointer; +Position cresult = x_polygon->getCenter(); +jclass retcls = FindCachedClass(env, "bwapi/Position"); +jmethodID retConsID = FindCachedMethod(env, retcls, "", "(II)V"); +jobject result = env->NewObject(retcls, retConsID, cresult.x, cresult.y); +return result; +} +JNIEXPORT jboolean JNICALL Java_bwta_Polygon_isInside_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_p){ +BWTA::Polygon* x_polygon = (BWTA::Polygon*)pointer; +Position p((int)env->GetIntField(p_p, FindCachedField(env, env->GetObjectClass(p_p), "x", "I")), (int)env->GetIntField(p_p, FindCachedField(env, env->GetObjectClass(p_p), "y", "I"))); +return x_polygon->isInside(p); +} +JNIEXPORT jobject JNICALL Java_bwta_Polygon_getNearestPoint_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_p){ +BWTA::Polygon* x_polygon = (BWTA::Polygon*)pointer; +Position p((int)env->GetIntField(p_p, FindCachedField(env, env->GetObjectClass(p_p), "x", "I")), (int)env->GetIntField(p_p, FindCachedField(env, env->GetObjectClass(p_p), "y", "I"))); +Position cresult = x_polygon->getNearestPoint(p); +jclass retcls = FindCachedClass(env, "bwapi/Position"); +jmethodID retConsID = FindCachedMethod(env, retcls, "", "(II)V"); +jobject result = env->NewObject(retcls, retConsID, cresult.x, cresult.y); +return result; +} +JNIEXPORT jobject JNICALL Java_bwta_Region_getPolygon_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Region* x_region = (BWTA::Region*)pointer; +jlong resptr = (jlong)&x_region->getPolygon(); +jclass retcls = FindCachedClass(env, "bwta/Polygon"); +jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwta/Polygon;"); +return env->CallStaticObjectMethod(retcls, mid, resptr); +} +JNIEXPORT jobject JNICALL Java_bwta_Region_getCenter_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Region* x_region = (BWTA::Region*)pointer; +Position cresult = x_region->getCenter(); +jclass retcls = FindCachedClass(env, "bwapi/Position"); +jmethodID retConsID = FindCachedMethod(env, retcls, "", "(II)V"); +jobject result = env->NewObject(retcls, retConsID, cresult.x, cresult.y); +return result; +} +JNIEXPORT jobject JNICALL Java_bwta_Region_getChokepoints_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Region* x_region = (BWTA::Region*)pointer; +std::set cresult = x_region->getChokepoints(); +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, "bwta/Chokepoint"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Chokepoint;"); +for(std::set::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::Chokepoint* elem_ptr = *it; +jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; +env->CallVoidMethod(result, addMethodID, elem); +} +return result; +} +JNIEXPORT jobject JNICALL Java_bwta_Region_getBaseLocations_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Region* x_region = (BWTA::Region*)pointer; +std::set cresult = x_region->getBaseLocations(); +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, "bwta/BaseLocation"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/BaseLocation;"); +for(std::set::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::BaseLocation* elem_ptr = *it; +jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; +env->CallVoidMethod(result, addMethodID, elem); +} +return result; +} +JNIEXPORT jboolean JNICALL Java_bwta_Region_isReachable_1native(JNIEnv * env, jobject obj, jlong pointer, jobject p_region){ +BWTA::Region* x_region = (BWTA::Region*)pointer; +BWTA::Region* region = (BWTA::Region*)env->GetLongField(p_region, FindCachedField(env, env->GetObjectClass(p_region), "pointer", "J")); +return x_region->isReachable(region); +} +JNIEXPORT jobject JNICALL Java_bwta_Region_getReachableRegions_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Region* x_region = (BWTA::Region*)pointer; +std::set cresult = x_region->getReachableRegions(); +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, "bwta/Region"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Region;"); +for(std::set::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::Region* elem_ptr = *it; +jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ; +env->CallVoidMethod(result, addMethodID, elem); +} +return result; +} +JNIEXPORT jint JNICALL Java_bwta_Region_getMaxDistance_1native(JNIEnv * env, jobject obj, jlong pointer){ +BWTA::Region* x_region = (BWTA::Region*)pointer; +return x_region->getMaxDistance(); +} void reconnect() { while (!BWAPIClient.connect()) { diff --git a/compiled4/bwta/BWTA.class b/compiled4/bwta/BWTA.class new file mode 100644 index 0000000000000000000000000000000000000000..8f3973f39a213ddfb9ffb867249f17f13ad919e9 GIT binary patch literal 1631 zcmb7FZEq4m5T0!d2(1)qX{&9m&?3-k(fS^mCM}JIgkmG8iQg7jaogjL+=~_em7h%f z;1BRe8E2P0?v59e^5LG_*=L@aot+#0{QdPC0G`0B7|g=+2)u~EO9J6Tu5MhnVscwBX z%q|KvsU}Rvf@^V$z-outXY|_yE=H~ph~fS_*5QVZ$hE9(W4y(;8n-&KWr6c6WQL+5RxMV$p>o%%pr#X2n>6k#r6Kb)l(W3Ssq1-fA zKTkR*(YbC@)Ao6%(Dq)xqS~b>=DDHuJMx&BX{w4c%qAd6U^|b8r9ECe*Jz)arNZFs zfn2a&7tc_DrEC6IFk zCxs0#y(HZQOmkcJr?hvK&hIQ}4n&#+n%#L(_fAV2U0tA@`oB0!u(;RaFx zF{&`8a9-g8+?4xqSVW%$dd)x*`Afd_EnF}A)+t=CjI39E>owfJ4R@sOI&3K1RCrh7 z7Ti;qR+y2v4Lb_63hztIL0(}&;x6n-d;kv>?n^AfBZ-gI`3~@}1P$<1p6uB_>>ajt literal 0 HcmV?d00001 diff --git a/compiled4/bwta/BaseLocation.class b/compiled4/bwta/BaseLocation.class new file mode 100644 index 0000000000000000000000000000000000000000..b80e6f9a52ea17b5667e2585e94f5c4c34e4dae1 GIT binary patch literal 2557 zcma)7{Zkud5PmLD^1<;{+JOClQnXD1Hfmdo2B|GrN}7-gluG@mN4Ta(!zJb}IQ>8T z$-luFYt_Np8OPt8@o#b*pM7(=Bu6siFZ;4oz}(1XW6hz>0HGwWpcaU zx<>l8;h4Ef(QvJbompataJ6FDu36KdWiiCS=%yp%c7z0mQ^;JSPgOCzg;hR6S`rR)FmSd#MBxJS|bMxT{Froxi67i zqbwQxExF}=i{#d7N6vCwdR{oDT=WWfU|X)LcZ^XsUDjW0#fnk4YCd<&8m|$+YOPYY z_f{BGS}%ok>0WY0!!W_OtXc~hv79xBP2W?wKhiK{Io?GDyZoG8vK(GtbDJb+7+AEJ z+!8yR$R@X?TGN#)v(o$^WeiC7;xqEE+Rn)#PxNSZ{W0gkI%Lk{jQ|1m;)J%7;ln3d z@OC?!I!c!YH$HgOPtGT8q)D0&l5$91jO6(`$+X#bU#T)Z#^sFM(WyN~<|M;)lIaIk zG&VT(bpr3C);F>IF5MQ2Pt&Q5V&8*AHkkG`QZN}m)xo%LjR%PL4UxrS*_!~4I|m@P zS*h2G<{iEzj$`|ay(0b4aUN4T7V(jeCEV2UF>dL&jb$AxB0j+#9d|{niOAxfj+}@* z)^!v_+!ygaHgvp!Ghx^|DyW9>jgAFy6O0|3J3-&j;eeAl)*|Ju;XLIea#}mrgt=GP z-8YK_4=b?0g}84HjdI;AJn;s!)68ibYDHI(FD2R*StDx3n+p}yQ}NkU>%4EF3;cft zzzi4gBo}=MG3g34oK;`vsA0qT`#g2ixIj6>uNn057Z6RQet~v`&H+T$!p{6aeRYbGARyUpDOkUBdO_Mq5b3+JFF~gY)2MR z+~YVe-~-RkrB?i|Pes4`9w)RHFEKjx8^&JYWC(v^JU{;z&b-F>&eRc3%goU5@7H( X;yXu}_!*ogf@OdSc#%UD*&O)SKb z!z~rJWo}VAODgW@h+|&GvOvsn8@}b1?S??IxNjX=xu)+_a~oDI&+L{{aV@`Dw*?kY zXA7ZQwcJXs=(&}AvGm5ba%+3ufnD<)*UzuAff^j`x`0?`yNd0v*{(1Bp>&27R?W#h z^BRutcrM|6Yu+wLC5w)0KW)A)+4bjEsmh4P%57)Y-xG+WGmiwK1;=&#RhFdJGcOn= zKwyN+`OI)|Jw92WPil>9fjgOd}vfmSG2+dFV2uApyu z&3f5>?8t?aT_F~vss@HIY~UKE3|z;wficV&7(i0RT?6;9qT;@RaXesYkB}03)j%Ev zfx+$#J+T^lq(su8jG?gh?q+Gnwv0NS}9-o>F+ZQ7f!+DuQUDSo2cJLo%`{_l#z zuKCQ_5Vfy0IdA10_*wKh4KT&0nc!Pipi4!-+X=iuMyMLkDq|zKNPCIi6e2tUG1L4E z(SmYBM_`mT8YG5kFXIaBdGN^l9{4EdP~tY+WcLUWy4gaXIr#iD)k18eoy;CXk6=4187KjR z6v={5B#LRuGD9A-95TmKnm@bA!6Xhv`wdgYq)_COB6~%?DyB5tAT%UC&6e_upCG=| Tg7FFcT`HkclJqPg3g-R-!~NjF literal 0 HcmV?d00001 diff --git a/compiled4/bwta/Polygon.class b/compiled4/bwta/Polygon.class new file mode 100644 index 0000000000000000000000000000000000000000..f4db15f7e31931c170ba91a04ad4920835a5b62a GIT binary patch literal 1513 zcma)6YflqV5IwgAwvVN}5m1XfgtiolJQOXW2qIv4Bp3~TF-u+RV%d^*i}8Q>$=_fi zzEY9I_|3%MWQ^zD)&dJAewp2wIrrQ-Gqd~i_t$R##`|pIK{jvkT{v0F1uO7&LmPfJCjUpy>yJkdM^7ale3dEJgx2KEZZ^j0%Dn7#&l-$ zrXk>sMCS!+=5kL-+mNzsbG5j$W#%6kTUkbQ0@uyFwPUKYe!6pJnWs4tlgb0>upRj$_9!rxXRNcaORa`aM$Y@z(HPlkR$ECI5uhuHA zHL~n3U21M8<8jSZeBT*(HvxM(oz7O&b6ON1*vJ+0X>-9+6RJ#kMDB}@Hni)AAgUuK z%@E=`hB2Zefl(d37}L>&W(^BE?qN~Gl8%0GBlP1NBY}N7?jyw>AMN3yQFzYA3N)&i zTDP^WZ8ObLgpNXT1G!>*Mz(0KJ(G*TDVNhIn7)52?%`D~Q04DBIVM%awBuqw?Hj*#G(sYQ_Es_`+Y{KS02P z?+C8Mf1v9S!Od_9`bs4kKR~?~kK(c@a*>*$#}dS66t=7=N}C7+}^9 zkM9>^8U}?&ZaRnIk;|^0+;{cl%Bv^0o=1G77^_s;r}_s34-widq2VKZM-s~em7>N~ HO%s0rk?S`F literal 0 HcmV?d00001 diff --git a/compiled4/bwta/Region.class b/compiled4/bwta/Region.class new file mode 100644 index 0000000000000000000000000000000000000000..9f75dc186d7c461e57827147533c7feed77b653a GIT binary patch literal 2040 zcma)7ZBr9h7(F*ZHrZ?-fEJ5wD5#JGBvtE6O-ij;tC$D{t77YPHgOwP(_Myau>BwX z)Zfq#_Qgr9Go60xOn+0y@!Y#Rn`I$0etFpY-1EHLbDk&s_xi8D0i4I9G_qLHX|7B2 zximMV`9hkT(%h0}RmV7POK?p`9d|NV!@7nq<=uunY-+fxBZu1>z7j~=PRBEyrqvM` ztvxaK%yQSW+vU2sQ{nBV-EvH?yK4z7?Z2)1$F}LT$~D(%RceiAo>|_oTDI#{mKm(= zxVGb2y8>cWKyO*zy4(J-+rS3;j^lb&lDtnH{UYmFyXlhZV!py8%-v-iw)*IN6I^BnRKUUS#7{oE?=Tp{vf;b*M` z(yOq*#p&JYvfkxG;BS=xGyIVo=g(yVx?}?a$JFT^dPpU|$LM<(Q?w^|nn99ZK)O`= z1EPn-a~=fVqa9Wk6SVImPkR_V8HZ02IE@cj?J)RI9DX8bZ-!yB1H+EQ!={6Pl5WcOV~MwEBvSvQq@gSl za@RNk3At|SFE@@I`BQX}elA~lzRWZCP~o_Wp}$H$x00z-_!L)z7oAk<0GU_FZS^qr RJM=yk{?K?G5}8xC;OP literal 0 HcmV?d00001 diff --git a/concat_header4.h b/concat_header4.h index d7424f3..ae9882c 100644 --- a/concat_header4.h +++ b/concat_header4.h @@ -8894,3 +8894,498 @@ JNIEXPORT jboolean JNICALL Java_bwapi_WeaponType_targetsOwn_1native } #endif #endif +/* Header for class bwta_BaseLocation */ + +#ifndef _Included_bwta_BaseLocation +#define _Included_bwta_BaseLocation +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: bwta_BaseLocation + * Method: getPosition_native + * Signature: (J)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getPosition_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getTilePosition_native + * Signature: (J)Lbwapi/TilePosition; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getTilePosition_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getRegion_native + * Signature: (J)Lbwta/Region; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getRegion_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: minerals_native + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_bwta_BaseLocation_minerals_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: gas_native + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_bwta_BaseLocation_gas_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getMinerals_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getMinerals_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getStaticMinerals_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getStaticMinerals_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getGeysers_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getGeysers_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getGroundDistance_native + * Signature: (JLbwta/BaseLocation;)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_BaseLocation_getGroundDistance_1native + (JNIEnv *, jobject, jlong, jobject); + +/* + * Class: bwta_BaseLocation + * Method: getAirDistance_native + * Signature: (JLbwta/BaseLocation;)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_BaseLocation_getAirDistance_1native + (JNIEnv *, jobject, jlong, jobject); + +/* + * Class: bwta_BaseLocation + * Method: isIsland_native + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_BaseLocation_isIsland_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: isMineralOnly_native + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_BaseLocation_isMineralOnly_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: isStartLocation_native + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_BaseLocation_isStartLocation_1native + (JNIEnv *, jobject, jlong); + +#ifdef __cplusplus +} +#endif +#endif +/* Header for class bwta_BWTA */ + +#ifndef _Included_bwta_BWTA +#define _Included_bwta_BWTA +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: bwta_BWTA + * Method: readMap + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_readMap + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: analyze + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_analyze + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: computeDistanceTransform + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_computeDistanceTransform + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: balanceAnalysis + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_balanceAnalysis + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getMaxDistanceTransform + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_bwta_BWTA_getMaxDistanceTransform + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getRegions + * Signature: ()Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegions + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getChokepoints + * Signature: ()Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getChokepoints + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getBaseLocations + * Signature: ()Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getBaseLocations + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getStartLocations + * Signature: ()Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getStartLocations + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getUnwalkablePolygons + * Signature: ()Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getUnwalkablePolygons + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getStartLocation + * Signature: (Lbwapi/Player;)Lbwta/BaseLocation; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getStartLocation + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getRegion + * Signature: (II)Lbwta/Region; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegion__II + (JNIEnv *, jclass, jint, jint); + +/* + * Class: bwta_BWTA + * Method: getRegion + * Signature: (Lbwapi/TilePosition;)Lbwta/Region; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegion__Lbwapi_TilePosition_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getRegion + * Signature: (Lbwapi/Position;)Lbwta/Region; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegion__Lbwapi_Position_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestChokepoint + * Signature: (II)Lbwta/Chokepoint; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestChokepoint__II + (JNIEnv *, jclass, jint, jint); + +/* + * Class: bwta_BWTA + * Method: getNearestChokepoint + * Signature: (Lbwapi/TilePosition;)Lbwta/Chokepoint; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestChokepoint__Lbwapi_TilePosition_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestChokepoint + * Signature: (Lbwapi/Position;)Lbwta/Chokepoint; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestChokepoint__Lbwapi_Position_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestBaseLocation + * Signature: (II)Lbwta/BaseLocation; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestBaseLocation__II + (JNIEnv *, jclass, jint, jint); + +/* + * Class: bwta_BWTA + * Method: getNearestBaseLocation + * Signature: (Lbwapi/TilePosition;)Lbwta/BaseLocation; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestBaseLocation__Lbwapi_TilePosition_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestBaseLocation + * Signature: (Lbwapi/Position;)Lbwta/BaseLocation; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestBaseLocation__Lbwapi_Position_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestUnwalkablePolygon + * Signature: (II)Lbwta/Polygon; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestUnwalkablePolygon__II + (JNIEnv *, jclass, jint, jint); + +/* + * Class: bwta_BWTA + * Method: getNearestUnwalkablePolygon + * Signature: (Lbwapi/TilePosition;)Lbwta/Polygon; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestUnwalkablePolygon__Lbwapi_TilePosition_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestUnwalkablePosition + * Signature: (Lbwapi/Position;)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestUnwalkablePosition + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: isConnected + * Signature: (IIII)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_BWTA_isConnected__IIII + (JNIEnv *, jclass, jint, jint, jint, jint); + +/* + * Class: bwta_BWTA + * Method: isConnected + * Signature: (Lbwapi/TilePosition;Lbwapi/TilePosition;)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_BWTA_isConnected__Lbwapi_TilePosition_2Lbwapi_TilePosition_2 + (JNIEnv *, jclass, jobject, jobject); + +/* + * Class: bwta_BWTA + * Method: getGroundDistance + * Signature: (Lbwapi/TilePosition;Lbwapi/TilePosition;)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_BWTA_getGroundDistance + (JNIEnv *, jclass, jobject, jobject); + +/* + * Class: bwta_BWTA + * Method: buildChokeNodes + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_buildChokeNodes + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getGroundDistance2 + * Signature: (Lbwapi/TilePosition;Lbwapi/TilePosition;)I + */ +JNIEXPORT jint JNICALL Java_bwta_BWTA_getGroundDistance2 + (JNIEnv *, jclass, jobject, jobject); + +#ifdef __cplusplus +} +#endif +#endif +/* Header for class bwta_Chokepoint */ + +#ifndef _Included_bwta_Chokepoint +#define _Included_bwta_Chokepoint +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: bwta_Chokepoint + * Method: getCenter_native + * Signature: (J)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_Chokepoint_getCenter_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Chokepoint + * Method: getWidth_native + * Signature: (J)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_Chokepoint_getWidth_1native + (JNIEnv *, jobject, jlong); + +#ifdef __cplusplus +} +#endif +#endif +/* Header for class bwta_Polygon */ + +#ifndef _Included_bwta_Polygon +#define _Included_bwta_Polygon +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: bwta_Polygon + * Method: getArea_native + * Signature: (J)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_Polygon_getArea_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Polygon + * Method: getPerimeter_native + * Signature: (J)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_Polygon_getPerimeter_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Polygon + * Method: getCenter_native + * Signature: (J)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_Polygon_getCenter_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Polygon + * Method: isInside_native + * Signature: (JLbwapi/Position;)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_Polygon_isInside_1native + (JNIEnv *, jobject, jlong, jobject); + +/* + * Class: bwta_Polygon + * Method: getNearestPoint_native + * Signature: (JLbwapi/Position;)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_Polygon_getNearestPoint_1native + (JNIEnv *, jobject, jlong, jobject); + +#ifdef __cplusplus +} +#endif +#endif +/* Header for class bwta_Region */ + +#ifndef _Included_bwta_Region +#define _Included_bwta_Region +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: bwta_Region + * Method: getPolygon_native + * Signature: (J)Lbwta/Polygon; + */ +JNIEXPORT jobject JNICALL Java_bwta_Region_getPolygon_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Region + * Method: getCenter_native + * Signature: (J)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_Region_getCenter_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Region + * Method: getChokepoints_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_Region_getChokepoints_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Region + * Method: getBaseLocations_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_Region_getBaseLocations_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Region + * Method: isReachable_native + * Signature: (JLbwta/Region;)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_Region_isReachable_1native + (JNIEnv *, jobject, jlong, jobject); + +/* + * Class: bwta_Region + * Method: getReachableRegions_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_Region_getReachableRegions_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Region + * Method: getMaxDistance_native + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_bwta_Region_getMaxDistance_1native + (JNIEnv *, jobject, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/generated/bwta/BWTA.java b/generated/bwta/BWTA.java new file mode 100644 index 0000000..060be1c --- /dev/null +++ b/generated/bwta/BWTA.java @@ -0,0 +1,73 @@ +package bwta; + +import bwta.*; + +import java.util.Map; +import java.util.HashMap; +import java.util.Collection; +import java.util.List; +import bwapi.Position; +import bwapi.TilePosition; +import bwapi.Player; +import bwapi.Unit; + +public class BWTA { + + public static native void readMap(); + + public static native void analyze(); + + public static native void computeDistanceTransform(); + + public static native void balanceAnalysis(); + + public static native int getMaxDistanceTransform(); + + public static native List getRegions(); + + public static native List getChokepoints(); + + public static native List getBaseLocations(); + + public static native List getStartLocations(); + + public static native List getUnwalkablePolygons(); + + public static native BaseLocation getStartLocation(Player player); + + public static native Region getRegion(int x, int y); + + public static native Region getRegion(TilePosition tileposition); + + public static native Region getRegion(Position position); + + public static native Chokepoint getNearestChokepoint(int x, int y); + + public static native Chokepoint getNearestChokepoint(TilePosition tileposition); + + public static native Chokepoint getNearestChokepoint(Position position); + + public static native BaseLocation getNearestBaseLocation(int x, int y); + + public static native BaseLocation getNearestBaseLocation(TilePosition tileposition); + + public static native BaseLocation getNearestBaseLocation(Position position); + + public static native Polygon getNearestUnwalkablePolygon(int x, int y); + + public static native Polygon getNearestUnwalkablePolygon(TilePosition tileposition); + + public static native Position getNearestUnwalkablePosition(Position position); + + public static native boolean isConnected(int x1, int y1, int x2, int y2); + + public static native boolean isConnected(TilePosition a, TilePosition b); + + public static native double getGroundDistance(TilePosition start, TilePosition end); + + public static native void buildChokeNodes(); + + public static native int getGroundDistance2(TilePosition start, TilePosition end); + + +} diff --git a/generated/bwta/BaseLocation.java b/generated/bwta/BaseLocation.java new file mode 100644 index 0000000..ea2353a --- /dev/null +++ b/generated/bwta/BaseLocation.java @@ -0,0 +1,118 @@ +package bwta; + +import bwta.*; + +import java.util.Map; +import java.util.HashMap; +import java.util.Collection; +import java.util.List; +import bwapi.Position; +import bwapi.TilePosition; +import bwapi.Player; +import bwapi.Unit; +import bwapi.PositionedObject; + +public class BaseLocation extends PositionedObject +{ + + public Position getPosition() { + return getPosition_native(pointer); + } + + public TilePosition getTilePosition() { + return getTilePosition_native(pointer); + } + + public Region getRegion() { + return getRegion_native(pointer); + } + + public int minerals() { + return minerals_native(pointer); + } + + public int gas() { + return gas_native(pointer); + } + + public List getMinerals() { + return getMinerals_native(pointer); + } + + public List getStaticMinerals() { + return getStaticMinerals_native(pointer); + } + + public List getGeysers() { + return getGeysers_native(pointer); + } + + public double getGroundDistance(BaseLocation other) { + return getGroundDistance_native(pointer, other); + } + + public double getAirDistance(BaseLocation other) { + return getAirDistance_native(pointer, other); + } + + public boolean isIsland() { + return isIsland_native(pointer); + } + + public boolean isMineralOnly() { + return isMineralOnly_native(pointer); + } + + public boolean isStartLocation() { + return isStartLocation_native(pointer); + } + + + private static Map instances = new HashMap(); + + private BaseLocation(long pointer) { + this.pointer = pointer; + } + + private static BaseLocation get(long pointer) { + if (pointer == 0 ) { + return null; + } + BaseLocation instance = instances.get(pointer); + if (instance == null ) { + instance = new BaseLocation(pointer); + instances.put(pointer, instance); + } + return instance; + } + + private long pointer; + + private native Position getPosition_native(long pointer); + + private native TilePosition getTilePosition_native(long pointer); + + private native Region getRegion_native(long pointer); + + private native int minerals_native(long pointer); + + private native int gas_native(long pointer); + + private native List getMinerals_native(long pointer); + + private native List getStaticMinerals_native(long pointer); + + private native List getGeysers_native(long pointer); + + private native double getGroundDistance_native(long pointer, BaseLocation other); + + private native double getAirDistance_native(long pointer, BaseLocation other); + + private native boolean isIsland_native(long pointer); + + private native boolean isMineralOnly_native(long pointer); + + private native boolean isStartLocation_native(long pointer); + + +} diff --git a/generated/bwta/Chokepoint.java b/generated/bwta/Chokepoint.java new file mode 100644 index 0000000..5f4906c --- /dev/null +++ b/generated/bwta/Chokepoint.java @@ -0,0 +1,52 @@ +package bwta; + +import bwta.*; + +import java.util.Map; +import java.util.HashMap; +import java.util.Collection; +import java.util.List; +import bwapi.Position; +import bwapi.TilePosition; +import bwapi.Player; +import bwapi.Unit; +import bwapi.CenteredObject; + +public class Chokepoint extends CenteredObject +{ + + public Position getCenter() { + return getCenter_native(pointer); + } + + public double getWidth() { + return getWidth_native(pointer); + } + + + private static Map instances = new HashMap(); + + private Chokepoint(long pointer) { + this.pointer = pointer; + } + + private static Chokepoint get(long pointer) { + if (pointer == 0 ) { + return null; + } + Chokepoint instance = instances.get(pointer); + if (instance == null ) { + instance = new Chokepoint(pointer); + instances.put(pointer, instance); + } + return instance; + } + + private long pointer; + + private native Position getCenter_native(long pointer); + + private native double getWidth_native(long pointer); + + +} diff --git a/generated/bwta/Polygon.java b/generated/bwta/Polygon.java new file mode 100644 index 0000000..33a062e --- /dev/null +++ b/generated/bwta/Polygon.java @@ -0,0 +1,68 @@ +package bwta; + +import bwta.*; + +import java.util.Map; +import java.util.HashMap; +import java.util.Collection; +import java.util.List; +import bwapi.Position; +import bwapi.TilePosition; +import bwapi.Player; +import bwapi.Unit; + +public class Polygon { + + public double getArea() { + return getArea_native(pointer); + } + + public double getPerimeter() { + return getPerimeter_native(pointer); + } + + public Position getCenter() { + return getCenter_native(pointer); + } + + public boolean isInside(Position p) { + return isInside_native(pointer, p); + } + + public Position getNearestPoint(Position p) { + return getNearestPoint_native(pointer, p); + } + + + private static Map instances = new HashMap(); + + private Polygon(long pointer) { + this.pointer = pointer; + } + + private static Polygon get(long pointer) { + if (pointer == 0 ) { + return null; + } + Polygon instance = instances.get(pointer); + if (instance == null ) { + instance = new Polygon(pointer); + instances.put(pointer, instance); + } + return instance; + } + + private long pointer; + + private native double getArea_native(long pointer); + + private native double getPerimeter_native(long pointer); + + private native Position getCenter_native(long pointer); + + private native boolean isInside_native(long pointer, Position p); + + private native Position getNearestPoint_native(long pointer, Position p); + + +} diff --git a/generated/bwta/Region.java b/generated/bwta/Region.java new file mode 100644 index 0000000..82f2885 --- /dev/null +++ b/generated/bwta/Region.java @@ -0,0 +1,82 @@ +package bwta; + +import bwta.*; + +import java.util.Map; +import java.util.HashMap; +import java.util.Collection; +import java.util.List; +import bwapi.Position; +import bwapi.TilePosition; +import bwapi.Player; +import bwapi.Unit; +import bwapi.CenteredObject; + +public class Region extends CenteredObject +{ + + public Polygon getPolygon() { + return getPolygon_native(pointer); + } + + public Position getCenter() { + return getCenter_native(pointer); + } + + public List getChokepoints() { + return getChokepoints_native(pointer); + } + + public List getBaseLocations() { + return getBaseLocations_native(pointer); + } + + public boolean isReachable(Region region) { + return isReachable_native(pointer, region); + } + + public List getReachableRegions() { + return getReachableRegions_native(pointer); + } + + public int getMaxDistance() { + return getMaxDistance_native(pointer); + } + + + private static Map instances = new HashMap(); + + private Region(long pointer) { + this.pointer = pointer; + } + + private static Region get(long pointer) { + if (pointer == 0 ) { + return null; + } + Region instance = instances.get(pointer); + if (instance == null ) { + instance = new Region(pointer); + instances.put(pointer, instance); + } + return instance; + } + + private long pointer; + + private native Polygon getPolygon_native(long pointer); + + private native Position getCenter_native(long pointer); + + private native List getChokepoints_native(long pointer); + + private native List getBaseLocations_native(long pointer); + + private native boolean isReachable_native(long pointer, Region region); + + private native List getReachableRegions_native(long pointer); + + private native int getMaxDistance_native(long pointer); + + +} diff --git a/headers4/bwta_BWTA.h b/headers4/bwta_BWTA.h new file mode 100644 index 0000000..37bd90c --- /dev/null +++ b/headers4/bwta_BWTA.h @@ -0,0 +1,237 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class bwta_BWTA */ + +#ifndef _Included_bwta_BWTA +#define _Included_bwta_BWTA +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: bwta_BWTA + * Method: readMap + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_readMap + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: analyze + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_analyze + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: computeDistanceTransform + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_computeDistanceTransform + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: balanceAnalysis + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_balanceAnalysis + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getMaxDistanceTransform + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_bwta_BWTA_getMaxDistanceTransform + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getRegions + * Signature: ()Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegions + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getChokepoints + * Signature: ()Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getChokepoints + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getBaseLocations + * Signature: ()Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getBaseLocations + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getStartLocations + * Signature: ()Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getStartLocations + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getUnwalkablePolygons + * Signature: ()Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getUnwalkablePolygons + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getStartLocation + * Signature: (Lbwapi/Player;)Lbwta/BaseLocation; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getStartLocation + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getRegion + * Signature: (II)Lbwta/Region; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegion__II + (JNIEnv *, jclass, jint, jint); + +/* + * Class: bwta_BWTA + * Method: getRegion + * Signature: (Lbwapi/TilePosition;)Lbwta/Region; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegion__Lbwapi_TilePosition_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getRegion + * Signature: (Lbwapi/Position;)Lbwta/Region; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getRegion__Lbwapi_Position_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestChokepoint + * Signature: (II)Lbwta/Chokepoint; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestChokepoint__II + (JNIEnv *, jclass, jint, jint); + +/* + * Class: bwta_BWTA + * Method: getNearestChokepoint + * Signature: (Lbwapi/TilePosition;)Lbwta/Chokepoint; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestChokepoint__Lbwapi_TilePosition_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestChokepoint + * Signature: (Lbwapi/Position;)Lbwta/Chokepoint; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestChokepoint__Lbwapi_Position_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestBaseLocation + * Signature: (II)Lbwta/BaseLocation; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestBaseLocation__II + (JNIEnv *, jclass, jint, jint); + +/* + * Class: bwta_BWTA + * Method: getNearestBaseLocation + * Signature: (Lbwapi/TilePosition;)Lbwta/BaseLocation; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestBaseLocation__Lbwapi_TilePosition_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestBaseLocation + * Signature: (Lbwapi/Position;)Lbwta/BaseLocation; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestBaseLocation__Lbwapi_Position_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestUnwalkablePolygon + * Signature: (II)Lbwta/Polygon; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestUnwalkablePolygon__II + (JNIEnv *, jclass, jint, jint); + +/* + * Class: bwta_BWTA + * Method: getNearestUnwalkablePolygon + * Signature: (Lbwapi/TilePosition;)Lbwta/Polygon; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestUnwalkablePolygon__Lbwapi_TilePosition_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: getNearestUnwalkablePosition + * Signature: (Lbwapi/Position;)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestUnwalkablePosition + (JNIEnv *, jclass, jobject); + +/* + * Class: bwta_BWTA + * Method: isConnected + * Signature: (IIII)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_BWTA_isConnected__IIII + (JNIEnv *, jclass, jint, jint, jint, jint); + +/* + * Class: bwta_BWTA + * Method: isConnected + * Signature: (Lbwapi/TilePosition;Lbwapi/TilePosition;)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_BWTA_isConnected__Lbwapi_TilePosition_2Lbwapi_TilePosition_2 + (JNIEnv *, jclass, jobject, jobject); + +/* + * Class: bwta_BWTA + * Method: getGroundDistance + * Signature: (Lbwapi/TilePosition;Lbwapi/TilePosition;)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_BWTA_getGroundDistance + (JNIEnv *, jclass, jobject, jobject); + +/* + * Class: bwta_BWTA + * Method: buildChokeNodes + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_buildChokeNodes + (JNIEnv *, jclass); + +/* + * Class: bwta_BWTA + * Method: getGroundDistance2 + * Signature: (Lbwapi/TilePosition;Lbwapi/TilePosition;)I + */ +JNIEXPORT jint JNICALL Java_bwta_BWTA_getGroundDistance2 + (JNIEnv *, jclass, jobject, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/headers4/bwta_BaseLocation.h b/headers4/bwta_BaseLocation.h new file mode 100644 index 0000000..41d8fb2 --- /dev/null +++ b/headers4/bwta_BaseLocation.h @@ -0,0 +1,117 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class bwta_BaseLocation */ + +#ifndef _Included_bwta_BaseLocation +#define _Included_bwta_BaseLocation +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: bwta_BaseLocation + * Method: getPosition_native + * Signature: (J)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getPosition_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getTilePosition_native + * Signature: (J)Lbwapi/TilePosition; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getTilePosition_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getRegion_native + * Signature: (J)Lbwta/Region; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getRegion_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: minerals_native + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_bwta_BaseLocation_minerals_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: gas_native + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_bwta_BaseLocation_gas_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getMinerals_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getMinerals_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getStaticMinerals_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getStaticMinerals_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getGeysers_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_BaseLocation_getGeysers_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: getGroundDistance_native + * Signature: (JLbwta/BaseLocation;)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_BaseLocation_getGroundDistance_1native + (JNIEnv *, jobject, jlong, jobject); + +/* + * Class: bwta_BaseLocation + * Method: getAirDistance_native + * Signature: (JLbwta/BaseLocation;)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_BaseLocation_getAirDistance_1native + (JNIEnv *, jobject, jlong, jobject); + +/* + * Class: bwta_BaseLocation + * Method: isIsland_native + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_BaseLocation_isIsland_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: isMineralOnly_native + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_BaseLocation_isMineralOnly_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_BaseLocation + * Method: isStartLocation_native + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_BaseLocation_isStartLocation_1native + (JNIEnv *, jobject, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/headers4/bwta_Chokepoint.h b/headers4/bwta_Chokepoint.h new file mode 100644 index 0000000..fa4b2dd --- /dev/null +++ b/headers4/bwta_Chokepoint.h @@ -0,0 +1,29 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class bwta_Chokepoint */ + +#ifndef _Included_bwta_Chokepoint +#define _Included_bwta_Chokepoint +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: bwta_Chokepoint + * Method: getCenter_native + * Signature: (J)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_Chokepoint_getCenter_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Chokepoint + * Method: getWidth_native + * Signature: (J)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_Chokepoint_getWidth_1native + (JNIEnv *, jobject, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/headers4/bwta_Polygon.h b/headers4/bwta_Polygon.h new file mode 100644 index 0000000..80e661b --- /dev/null +++ b/headers4/bwta_Polygon.h @@ -0,0 +1,53 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class bwta_Polygon */ + +#ifndef _Included_bwta_Polygon +#define _Included_bwta_Polygon +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: bwta_Polygon + * Method: getArea_native + * Signature: (J)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_Polygon_getArea_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Polygon + * Method: getPerimeter_native + * Signature: (J)D + */ +JNIEXPORT jdouble JNICALL Java_bwta_Polygon_getPerimeter_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Polygon + * Method: getCenter_native + * Signature: (J)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_Polygon_getCenter_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Polygon + * Method: isInside_native + * Signature: (JLbwapi/Position;)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_Polygon_isInside_1native + (JNIEnv *, jobject, jlong, jobject); + +/* + * Class: bwta_Polygon + * Method: getNearestPoint_native + * Signature: (JLbwapi/Position;)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_Polygon_getNearestPoint_1native + (JNIEnv *, jobject, jlong, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/headers4/bwta_Region.h b/headers4/bwta_Region.h new file mode 100644 index 0000000..c2198ae --- /dev/null +++ b/headers4/bwta_Region.h @@ -0,0 +1,69 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class bwta_Region */ + +#ifndef _Included_bwta_Region +#define _Included_bwta_Region +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: bwta_Region + * Method: getPolygon_native + * Signature: (J)Lbwta/Polygon; + */ +JNIEXPORT jobject JNICALL Java_bwta_Region_getPolygon_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Region + * Method: getCenter_native + * Signature: (J)Lbwapi/Position; + */ +JNIEXPORT jobject JNICALL Java_bwta_Region_getCenter_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Region + * Method: getChokepoints_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_Region_getChokepoints_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Region + * Method: getBaseLocations_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_Region_getBaseLocations_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Region + * Method: isReachable_native + * Signature: (JLbwta/Region;)Z + */ +JNIEXPORT jboolean JNICALL Java_bwta_Region_isReachable_1native + (JNIEnv *, jobject, jlong, jobject); + +/* + * Class: bwta_Region + * Method: getReachableRegions_native + * Signature: (J)Ljava/util/List; + */ +JNIEXPORT jobject JNICALL Java_bwta_Region_getReachableRegions_1native + (JNIEnv *, jobject, jlong); + +/* + * Class: bwta_Region + * Method: getMaxDistance_native + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_bwta_Region_getMaxDistance_1native + (JNIEnv *, jobject, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/out/production/InvokeGenerator/generator/CJavaPipeline$1.class b/out/production/InvokeGenerator/generator/CJavaPipeline$1.class index 90c814966e250f5d65a36d5810f401fb07af868a..2d2f755ca808190ce4161009819b2f3ce4af4d62 100644 GIT binary patch delta 19 acmZ3>x|Vf=5fh{LWMd|0M!(7BOlAN$VFfV& delta 19 acmZ3>x|Vf=5fh`&WMd|0M*qp>OlAN$aRoB~ diff --git a/out/production/InvokeGenerator/generator/CJavaPipeline$2.class b/out/production/InvokeGenerator/generator/CJavaPipeline$2.class index 4574e2776fc2b3947c47ec97681437251a4e5af0..1fd7853c9aaadbe1f0f850749a347bbd6ccea011 100644 GIT binary patch delta 19 bcmZ3%zJh%N6Eoxf$;{0DjE5%&Glv2II|K#3 delta 19 bcmZ3%zJh%N6Eow1$;{0Dj7KI1Glv2II}`=L diff --git a/out/production/InvokeGenerator/generator/CJavaPipeline.class b/out/production/InvokeGenerator/generator/CJavaPipeline.class index 25236ff6f36eba2c926e48a46022fb29e94239e4..d5b4444cf81e895229fa3343c31e85d7d6d0ae77 100644 GIT binary patch delta 3691 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 MJeK+X+~d-I11tvwxBvhE delta 3492 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 diff --git a/out/production/InvokeGenerator/generator/ccalls/CallImplementer.class b/out/production/InvokeGenerator/generator/ccalls/CallImplementer.class index 54bb58e9abfe796f44e28eb8c600a55bacc8db7a..26f72b3ccf69f3b51230fb53b2596f71bd070ab1 100644 GIT binary patch literal 17174 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 YFjs=OkTj1jM${Dqxifr$sNv=R2TWPOy#N3J literal 17074 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 JD;Fi(@PFXOsx<%r diff --git a/out/production/InvokeGenerator/generator/java/Mirror.class b/out/production/InvokeGenerator/generator/java/Mirror.class index b3878d8a83e90b8b119608766fdd2588099efe75..7a329ae58aeb3f03b9cc7c7a2878eec9bdd20fa1 100644 GIT binary patch delta 99 zcmcaCctLQ(6J}oC%-n+fq7sFq^2CD7%}<$Ym^mXDm>F0Y7#L1X&SIa%qolQkfq6Fr zd*pToj>+;Iv7EaYk{J#%q%fSE+{&TIeTuF0Y7#MC&E@Pi1ZK$<{fq6Frd*pTo4k3YU3|v4y z_cjI|AZxM=N37{dhGd2d3@HpZ7*ZL`fx5JSdP^DP8C)4uf#xJJm@>FAxHB+;%ww=% XumsW|lh<*Ga~m=+GI#@dObk8%92^>+ diff --git a/out/production/InvokeGenerator/test/api/TestBot1$1.class b/out/production/InvokeGenerator/test/api/TestBot1$1.class index a1832cfe536d5e9a0e880776e6c9ce98bfb755ed..2ac80bc13f8c80c6d575c96810851888089cdf3b 100644 GIT binary patch delta 1753 zcmYk630zcF6vqFTVdl;}t~!yZqk^C!D&lU~l)0qk2JVt&%P6Fn5`sq9GMS}iWs5CR zmf0d@tAjm3&8%Ef+xOD;-4<=J(lk1EAnW~pbIy0pJ@-4`yZ6l7-gaqfbobvIw*Y-{XX{sy~#qo12>hh;XnIf+}iHHq6; zZq4nQJ8a>dn!Eh0u#&3$+#TQ^R@(f%7Tssls~kc1TeRBpJYd5IZTOJG!>qB$R69Jv zqnfpv$71S`3JQ2!I>?)Ao{$#Hy`EmFPa2+Ll;IRkHJnV?Fo02-rw!|fEuY}&9Iau! z;Tc>*4I2!#)M+*vHnCaJCa2*UToRdGSzcT+BYjS!v@xf7*09BLKWEJ*OS{$ZJTGWo zG;CwLVFx=!l;I_I8K$sXv&ZlY6Ds7KQdAi{p>J*;z z9D(ohp5c8yP&j#&>GMm9=aq*Y`y!hSAF@}o&+ri+%Uc^h;ZwtBe6BFlDk7!DJuGQa znc)le%KnDjB%x3!q5hJQUkP$FUmL#RTf=wkH0-zNdwwwdX!(A!<^a152QB)UUo^iO ze&dkgcmB})X*kT08aHvFN()S@m>20Wq+sG;g)S?K6y`-r1x4%;E-0$$=iBA!kSlWv z3BjPf5)d!2!|{l8i%w z*p{@VRlL4MJWg$_hg60$LUt%dGRp3h>giHrJ7mU4Om5<0YH3y{c7%Ys@LK?Tsj?u~`lpS<}&L+H5HsDKc?c(p|(nefz+XkHK;iX@{tg-Ar zqHV{CvcldR%M=g|$(^Gj$VOdk)K!9l_*#tYHKYhpw_xwpn2g0Y1z?Wf-JnKvf@3SEn&lO=6gu!f-W}Q7S^dn#CAZ z#&|WK0=1a4;-j*Rra}sNGMt)4gve)%%vXhc6vr}7KBp1+Q`lUh@OEOn)cIAajIYgU z;q()oz(j$~WS%F!Au|{%$Pp2_;^p}VZrNci delta 1650 zcmYL}d3aM*5XFBtX>wm)FEj><1ZXK#C{hX(sKpck6~(d?6xkHSA_zsStRlDsL_tw; zsS8!KqCyoFCB;`31w|GGaYMy@UvUBT^AGsIIyViNe3>~j@7yz!d*|I{Sv%Xr_x!tg zE6|g_LlkkPHB(&9U}}g8rfIHn2{6@Ry7gDPbfD6rYpj{!GLu;jv#p=wGM8&Z%;P#& z%zT#xTyM<{A#UU*i{c>`vdE&F9TvOfa!cIdRtuKc>{5r@tnTeLSeDKm+?mc@EVt%v z%{`WQujW37D%;5Y4iAKQkcVu3g+mAYuFY}6FE8C=;;ZI~_89i^mLh%l^z!)?l~Z!cXXhC9u|eU_DG>NJ?-<_YJ%u}Te$L#=iaE1muI;ei z@IL!BADB2F@{#->!vQ`ve8Q&+GjU$|jEZhnb@D93XY3b&#@tBJP$<#4cRx)YwE1?gHv#Q3pIeC304oV~x`iV73oI!uil}Isw^OD>ew`<&T zU3_Aj(T3(pev4$BmEuDd=QB`NC@!GXt`zo2;n)go6Qo6&co^{>O*?PE=aG>h>~V@m zWW7*)*dmc+n=Nr@O;eG~mTy1eC%S8Uvb#YiYWNPJ2}#3CQ>sJqJ(>;8_xr<>!jlp- zmx7u330ioZnjdzj_3$dN^G?qT(X08gXk6*CXAdjU`30>d7t>wYKq1spQ&dxIQF|rBl^Y9010JU}GJ?@yiV?9W$>90%ULyv-LW?Ej?YARGLD37|G ztf`|q)mm?hQmr{rCt0$4HQCYNE;6G5n<*3*6t`j}I_ku#4w#I1kC>LM_UJjfwxPG( z%4mUXR=DX#ddZI2GxR6Vuu{$r+RGW{(nM~8*5pali6L}m6kX)v>MC22M(z3CiFKM#$5k zG?ozcfwFcjd*h9Z?VzQG&{1(2@KG}0P1FLpVur~Kk5YwfMx3pk2j2uH}w6DP9eBI{$K^l0Dc QNlfM(L9R4WBwjxM0VQ8U0RR91 diff --git a/out/production/InvokeGenerator/test/api/TestBot1.class b/out/production/InvokeGenerator/test/api/TestBot1.class index 2bf247c9cadeee2c415a9c262fafdbf604aa678a..380046810ed187094a2c9b7a5324a0d71605583c 100644 GIT binary patch delta 41 xcmdnZwwrB33=<>&I^=wPUUcFw1{z(vKS z0K;X)6~)yg91i4gBw&=hPaz=9km6e6uPbgO{$|oK=5tFiuDGqZqnJ?KRZIrlW6I~g z&jX8=!fbwOd~kkza^uaM z>AYr^Ud<``d>(0H9$U1P7M!-M1)3+!Sy-XwDbF-L^p+OwF>hY;oP|=^e(43vD+{kz zN*U)@v0bhWmMkvB;yWd?IYdfg*+=XVshk!s(4@jmtc|UfZn550v5}(^>+J@Paa^(> zp_NK9yeNRlaP9+k_zA~mjn2@x6;f+OT0`R{5jr$}1+|LruH!oIWy0YYJDae`3J zPs-=v^f;py4I)Rb#@JtD^g_2vLs`1)I;3nJQqikHCF6ay@t@Le%g{uXV3n>fq~lF= zhin$ElQNAJnoP5p3Yqe5hhdeLRg`Jo=}sC2Z~Hn;;t|z7QM|h-f+y-_w+U;@2(?Jw zFY6>XEa1=h4E&YU_Bpd<2P8;O?pEEkh>~A?=P?Vof(l{A`*A>%>8O5yPhN7gn8E}g^pW8lV zi)?Xea=tYBxKyr8FU(9%O-GxrDwaDgleM4LP@$JT%>jCR?r7$@YvDXwd9GPt(88^} ze7d3uIpq^+DlFD!?Y`_imMpALbDvmql)>5yd)8alJm6vNtNo-l=6tVq%iX{dZBdte zP&%7Kq@ zY}V)sjk`r^t%?qfC)FyxyN>I;5u(F?anmB6=NQN3{|Wg#oL*1yIybNq+UZ5f)YqgLtvNIKpo=#i6!>!eKE7TRPaY|*~4+t090 z$12KX{<0II=^Cl(KgwTWjrs*Q!s)5vOuI4#FXZdk-$^eOz7*7g~0#DWxU z<=xO-K@?~Hym@!eDGJB%fGkc@hH(gPzOfIUk?;UpX(pHOw L9nzf@%x2^d?>k;6 diff --git a/src/generator/CJavaPipeline.java b/src/generator/CJavaPipeline.java index 0cd4444..71dc4cc 100644 --- a/src/generator/CJavaPipeline.java +++ b/src/generator/CJavaPipeline.java @@ -14,7 +14,6 @@ import impl.Clazz; import util.FileUtils; import java.io.*; -import java.lang.reflect.Array; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.util.*; @@ -134,7 +133,7 @@ public class CJavaPipeline { MyJavaCompiler compiler = new MyJavaCompiler(); for (PackageProcessOptions pkg : packages) { - compiler.run(new File(processingOptions.get(GENERATE_TO_DIR) + "/" + pkg.packageName), javaOut); + compiler.run(new File(processingOptions.get(GENERATE_TO_DIR) + "/" + pkg.packageName), javaOut); } /** @@ -145,7 +144,7 @@ public class CJavaPipeline { packageDirNames.add(pkg.packageName); } HeaderMaker hm = new HeaderMaker(); - hm.run(packageDirNames, javaOut, processingOptions.getProperty(HEADER_FILE_PROPERTY) , processingOptions.getProperty(HEADERS_DIR_PROPERTY)); + hm.run(packageDirNames, javaOut, processingOptions.getProperty(HEADER_FILE_PROPERTY), processingOptions.getProperty(HEADERS_DIR_PROPERTY)); /** * Phase 6 - implementation of native functions @@ -189,7 +188,7 @@ public class CJavaPipeline { callImplementer.notifyPackageStart(); - for (File file : new File(processingOptions.getProperty(GENERATE_TO_DIR) +"/" + pkg.packageName).listFiles(new FilenameFilter() { + for (File file : new File(processingOptions.getProperty(GENERATE_TO_DIR) + "/" + pkg.packageName).listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { //we skip mirror.java as it has a native function which we implement manually @@ -215,6 +214,7 @@ public class CJavaPipeline { * Bind constants together and create initialisation function */ + javaContext.setPackageName(packages[0].packageName); Bind bind = new Bind(javaContext); bind.setOut(out); bind.implementBind(allDecs); @@ -255,6 +255,11 @@ public class CJavaPipeline { bwapiOptions.cHeadersDir = new File("bwapi4-includes"); bwapiOptions.manualCopyClassesDir = new File("manual-bwapi4"); + PackageProcessOptions bwtaOptions = new PackageProcessOptions(); + bwtaOptions.packageName = "bwta"; + bwtaOptions.cHeadersDir = new File("bwta2-c"); + bwtaOptions.additionalImportClasses = Arrays.asList("bwapi.Position", "bwapi.TilePosition", "bwapi.Player", "bwapi.Unit"); + bwtaOptions.globalClassName = "BWTA"; Properties props = new Properties(); props.put(COMPILE_DIR_PROPERTY, "compiled4"); @@ -263,7 +268,7 @@ public class CJavaPipeline { props.put(C_IMPLEMENTATION_FILE_PROPERTY, "c4/impl.cpp"); props.put(GENERATE_TO_DIR, "generated"); - new CJavaPipeline().run(new PackageProcessOptions[]{bwapiOptions}, props); + new CJavaPipeline().run(new PackageProcessOptions[]{bwapiOptions, bwtaOptions}, props); } } @@ -274,7 +279,7 @@ public class CJavaPipeline { private static final String HEADER_FILE_PROPERTY = "header_file"; private static final String GENERATE_TO_DIR = "generate_to_dir"; - public static boolean isBWAPI3(){ + public static boolean isBWAPI3() { return BWAPI_VERSION == BWAPI_V3; } diff --git a/src/generator/ccalls/CallImplementer.java b/src/generator/ccalls/CallImplementer.java index ab01240..a31105e 100644 --- a/src/generator/ccalls/CallImplementer.java +++ b/src/generator/ccalls/CallImplementer.java @@ -47,13 +47,16 @@ public class CallImplementer { private static final String VARIABLE_PREFIX = "x_"; + private boolean customFunctionsWritten = false; + public void setOut(PrintStream out) { this.out = out; out.print("#include \"../concat_header" + (CJavaPipeline.isBWAPI3() ? "" : "4")+ ".h\"\n" + "#include \n" + "#include \n" + - (CJavaPipeline.isBWAPI3() ? "#include \n" : "#include \n" + "#include \n") + + "#include \n" + + (CJavaPipeline.isBWAPI3() ? "" : "#include \n" + "#include \n") + "#include \n" + "#include \n" + (CJavaPipeline.isBWAPI3() ? "#include \"../BWTA_Result.h\"" : "")+ @@ -169,7 +172,7 @@ public class CallImplementer { private String wrapInCCollection(String genericType) { String buffer = ""; - boolean isBWAPI4Collection = !CJavaPipeline.isBWAPI3(); + boolean isBWAPI4Collection = !CJavaPipeline.isBWAPI3() && !genericType.startsWith("BWTA::"); if (!isBWAPI4Collection) { buffer += "std::set<"; } @@ -396,6 +399,10 @@ public class CallImplementer { } public void notifyPackageStart() { + if(customFunctionsWritten){ + return; + } + customFunctionsWritten = true; out.println("PositionOrUnit convertPositionOrUnit(JNIEnv * env, jobject obj){ \n" + "\tjclass clz = FindCachedClass(env, \"" + javaContext.getPackageName() + "/PositionOrUnit\");\n" + "\tjmethodID typeMethodId = FindCachedMethod(env, clz, \"isUnit\", \"()Z\");\n" + diff --git a/src/generator/java/Mirror.java b/src/generator/java/Mirror.java index 31906b2..58f4037 100644 --- a/src/generator/java/Mirror.java +++ b/src/generator/java/Mirror.java @@ -94,7 +94,7 @@ public abstract class Mirror { out.println("import" + SPACE + pkg + SEMICOLON); } if (superClass != null) { - out.println("import" + SPACE + context.getPackage() + "." + superClass + SEMICOLON); + out.println("import" + SPACE + /*context.getPackage() +*/ "bwapi." + superClass + SEMICOLON); } out.println(); writeJavadoc(getDecl()); diff --git a/src/test/api/TestBot1.java b/src/test/api/TestBot1.java index 758899f..e8ff5ff 100644 --- a/src/test/api/TestBot1.java +++ b/src/test/api/TestBot1.java @@ -2,6 +2,9 @@ package test.api; import bwapi.*; import bwapi.Text.Size.Enum; +import bwta.BWTA; + +import java.io.File; /** * User: PC @@ -11,6 +14,7 @@ import bwapi.Text.Size.Enum; public class TestBot1 { + public void run() { final Mirror mirror = new Mirror(); mirror.getModule().setEventListener(new DefaultBWListener() { @@ -22,8 +26,8 @@ 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()); diff --git a/src/util/PointerTest.java b/src/util/PointerTest.java index a90bc35..6f810ed 100644 --- a/src/util/PointerTest.java +++ b/src/util/PointerTest.java @@ -15,7 +15,7 @@ public class PointerTest { private static final List BWAPI4_INTERFACES = Arrays.asList("Client", "Game", "AIModule" ,"Event", "Race", "Error"); private static boolean testCls(String cls){ - return BWAPI4_INTERFACES.contains(cls) || cls.endsWith("set") || cls.endsWith("Type"); + return BWAPI4_INTERFACES.contains(cls) || cls.endsWith("set") || cls.endsWith("Type") || cls.startsWith("BWTA"); } public static String test(String cls) {