diff --git a/bwmirror_v1_2.jar b/bwmirror_v1_2.jar index 8ba209c..3365170 100644 Binary files a/bwmirror_v1_2.jar and b/bwmirror_v1_2.jar differ diff --git a/bwmirror_v2_2.jar b/bwmirror_v2_2.jar new file mode 100644 index 0000000..f1e51b4 Binary files /dev/null and b/bwmirror_v2_2.jar differ diff --git a/bwta2-c/BWTA.h b/bwta2-c/BWTA.h index 61395ba..9bc15bd 100644 --- a/bwta2-c/BWTA.h +++ b/bwta2-c/BWTA.h @@ -10,7 +10,8 @@ namespace BWTA void readMap(); void analyze(); void computeDistanceTransform(); - void balanceAnalysis(); + void balanceAnalysis(); + void cleanMemory(); int getMaxDistanceTransform(); RectangleArray* getDistanceTransformMap(); diff --git a/bwta2-c/BWTA/BaseLocation.h b/bwta2-c/BWTA/BaseLocation.h index 67bcf12..fa33e45 100644 --- a/bwta2-c/BWTA/BaseLocation.h +++ b/bwta2-c/BWTA/BaseLocation.h @@ -1,28 +1,29 @@ -#pragma once + #pragma once #include namespace BWTA { - class Region; - class BaseLocation - { - public: - virtual BWAPI::Position getPosition() const=0; - virtual BWAPI::TilePosition getTilePosition() const=0; + class Region; + class BaseLocation + { + public: + virtual ~BaseLocation(){}; + virtual BWAPI::Position getPosition() const = 0; + virtual BWAPI::TilePosition getTilePosition() const = 0; - virtual Region* getRegion() const=0; + virtual Region* getRegion() const = 0; - virtual int minerals() const=0; - virtual int gas() 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 const BWAPI::Unitset &getMinerals() = 0; + virtual const BWAPI::Unitset &getStaticMinerals() const = 0; + virtual const BWAPI::Unitset &getGeysers() const = 0; - virtual bool isIsland() const=0; - virtual bool isMineralOnly() const=0; - virtual bool isStartLocation() 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 index 5e58458..34e42f1 100644 --- a/bwta2-c/BWTA/Chokepoint.h +++ b/bwta2-c/BWTA/Chokepoint.h @@ -3,13 +3,14 @@ #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; - }; + class Region; + class Chokepoint + { + public: + virtual ~Chokepoint(){}; + 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/RectangleArray.h b/bwta2-c/BWTA/RectangleArray.h index 7a44d0a..01cfcc6 100644 --- a/bwta2-c/BWTA/RectangleArray.h +++ b/bwta2-c/BWTA/RectangleArray.h @@ -17,7 +17,9 @@ namespace BWTA 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. */ + /** Assignment operator */ + const RectangleArray& operator=(const RectangleArray& rectangleArray); + /** Destroys the array and deletes all content of array. */ ~RectangleArray(void); /** * Gets the width of the array. @@ -47,7 +49,6 @@ namespace BWTA */ 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); @@ -109,7 +110,7 @@ namespace BWTA for (unsigned int position = 0;i < width; i ++,position += height) columns[i] = &this->data[position]; } - //---------------------------------------------- CONSTRUCTOR ----------------------------------------------- + //-------------------------------------------- COPY CONSTRUCTOR -------------------------------------------- template RectangleArray::RectangleArray(const RectangleArray& rectangleArray) :owner(true) @@ -124,6 +125,22 @@ namespace BWTA columns[i] = &data[position]; memcpy(this->data, rectangleArray.data, sizeof(Type)*this->getWidth()*this->getHeight()); } + //------------------------------------------ ASSIGNMENT OPERATOR ------------------------------------------- + template + const RectangleArray& RectangleArray::operator=(const RectangleArray& rectangleArray) + { + this->setWidth(rectangleArray.getWidth()); + this->setHeight(rectangleArray.getHeight()); + this->owner = true; + 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()); + return *this; + } //----------------------------------------------- DESTRUCTOR ----------------------------------------------- template RectangleArray::~RectangleArray(void) @@ -211,29 +228,21 @@ namespace BWTA 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); + std::ofstream outputFile(fileName); + if (!outputFile) + exit(1); + + for (unsigned int y = 0; y < this->getHeight(); ++y) { + for (unsigned int x = 0; x < this->getWidth(); ++x) { + outputFile << this->getColumn(x)[y]; + } + outputFile << std::endl; + } + outputFile.close(); } //------------------------------------------------- SET TO ------------------------------------------------- template diff --git a/bwta2-c/BWTA/Region.h b/bwta2-c/BWTA/Region.h index 7892332..3d4a6dc 100644 --- a/bwta2-c/BWTA/Region.h +++ b/bwta2-c/BWTA/Region.h @@ -4,17 +4,18 @@ #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; - }; + class Chokepoint; + class BaseLocation; + class Region + { + public: + virtual ~Region() {}; + 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 eb70e3d..d5b97cf 100644 --- a/c4/impl.cpp +++ b/c4/impl.cpp @@ -5957,8 +5957,8 @@ 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;"); +jclass elemClass = FindCachedClass(env, "bwapi/Unit"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/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) ; @@ -5973,8 +5973,8 @@ 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;"); +jclass elemClass = FindCachedClass(env, "bwapi/Unit"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/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) ; @@ -5989,8 +5989,8 @@ 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;"); +jclass elemClass = FindCachedClass(env, "bwapi/Unit"); +jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/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) ; @@ -6032,6 +6032,9 @@ BWTA::computeDistanceTransform(); JNIEXPORT void JNICALL Java_bwta_BWTA_balanceAnalysis(JNIEnv * env, jclass jclz){ BWTA::balanceAnalysis(); } +JNIEXPORT void JNICALL Java_bwta_BWTA_cleanMemory(JNIEnv * env, jclass jclz){ +BWTA::cleanMemory(); +} JNIEXPORT jint JNICALL Java_bwta_BWTA_getMaxDistanceTransform(JNIEnv * env, jclass jclz){ return BWTA::getMaxDistanceTransform(); } @@ -6224,7 +6227,7 @@ TilePosition cObj((int)env->GetIntField(p_cObj, FindCachedField(env, env->GetObj targets.insert(cObj); } std::pair cresult = BWTA::getNearestTilePosition(start, targets); -jclass firstElemClass = FindCachedClass(env, "bwta/TilePosition"); +jclass firstElemClass = FindCachedClass(env, "bwapi/TilePosition"); jmethodID firstElemConsID = FindCachedMethod(env, firstElemClass, "", "(II)V"); jclass secondElemClass = FindCachedClass(env, "java/lang/Double"); jmethodID secondElemConsID = FindCachedMethod(env, secondElemClass, "", "(D)V"); @@ -6254,7 +6257,7 @@ jclass listCls = FindCachedClass(env, "java/util/HashMap"); jmethodID listConsID = FindCachedMethod(env, listCls, "", "()V"); jobject result = env->NewObject(listCls, listConsID); jmethodID addMethodID = FindCachedMethod(env, listCls, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); -jclass keyElemClass = FindCachedClass(env, "bwta/TilePosition"); +jclass keyElemClass = FindCachedClass(env, "bwapi/TilePosition"); jmethodID keyElemConsID = FindCachedMethod(env, keyElemClass, "", "(II)V"); jclass valueElemClass = FindCachedClass(env, "java/lang/Double"); jmethodID valueElemConsID = FindCachedMethod(env, valueElemClass, "", "(D)V"); diff --git a/compiled4/bwapi/Mirror.class b/compiled4/bwapi/Mirror.class index 8961480..d682c78 100644 Binary files a/compiled4/bwapi/Mirror.class and b/compiled4/bwapi/Mirror.class differ diff --git a/compiled4/bwta/BWTA.class b/compiled4/bwta/BWTA.class index 8ff3932..a693b60 100644 Binary files a/compiled4/bwta/BWTA.class and b/compiled4/bwta/BWTA.class differ diff --git a/concat_header4.h b/concat_header4.h index ae1aaa3..1a1ea15 100644 --- a/concat_header4.h +++ b/concat_header4.h @@ -9091,6 +9091,14 @@ JNIEXPORT void JNICALL Java_bwta_BWTA_computeDistanceTransform JNIEXPORT void JNICALL Java_bwta_BWTA_balanceAnalysis (JNIEnv *, jclass); +/* + * Class: bwta_BWTA + * Method: cleanMemory + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_cleanMemory + (JNIEnv *, jclass); + /* * Class: bwta_BWTA * Method: getMaxDistanceTransform diff --git a/generated/bwapi/Mirror.java b/generated/bwapi/Mirror.java index 51589c9..b56b035 100644 --- a/generated/bwapi/Mirror.java +++ b/generated/bwapi/Mirror.java @@ -56,7 +56,7 @@ public class Mirror { private static final boolean EXTRACT_JAR = true; - private static final String VERSION = "2_1"; + private static final String VERSION = "2_2"; static { String arch = System.getProperty("os.arch"); diff --git a/generated/bwta/BWTA.java b/generated/bwta/BWTA.java index c0382ee..33c28e9 100644 --- a/generated/bwta/BWTA.java +++ b/generated/bwta/BWTA.java @@ -22,6 +22,8 @@ public class BWTA { public static native void balanceAnalysis(); + public static native void cleanMemory(); + public static native int getMaxDistanceTransform(); public static native List getRegions(); diff --git a/headers4/bwta_BWTA.h b/headers4/bwta_BWTA.h index ca753f9..bb0f8d7 100644 --- a/headers4/bwta_BWTA.h +++ b/headers4/bwta_BWTA.h @@ -39,6 +39,14 @@ JNIEXPORT void JNICALL Java_bwta_BWTA_computeDistanceTransform JNIEXPORT void JNICALL Java_bwta_BWTA_balanceAnalysis (JNIEnv *, jclass); +/* + * Class: bwta_BWTA + * Method: cleanMemory + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_bwta_BWTA_cleanMemory + (JNIEnv *, jclass); + /* * Class: bwta_BWTA * Method: getMaxDistanceTransform diff --git a/manual-bwapi4/Mirror.java b/manual-bwapi4/Mirror.java index 51589c9..b56b035 100644 --- a/manual-bwapi4/Mirror.java +++ b/manual-bwapi4/Mirror.java @@ -56,7 +56,7 @@ public class Mirror { private static final boolean EXTRACT_JAR = true; - private static final String VERSION = "2_1"; + private static final String VERSION = "2_2"; static { String arch = System.getProperty("os.arch"); diff --git a/out/production/InvokeGenerator/generator/JavaContext.class b/out/production/InvokeGenerator/generator/JavaContext.class index 23e9685..389c0e6 100644 Binary files a/out/production/InvokeGenerator/generator/JavaContext.class and b/out/production/InvokeGenerator/generator/JavaContext.class differ diff --git a/out/production/InvokeGenerator/generator/ccalls/CallImplementer.class b/out/production/InvokeGenerator/generator/ccalls/CallImplementer.class index 69b5c5c..045a76e 100644 Binary files a/out/production/InvokeGenerator/generator/ccalls/CallImplementer.class and b/out/production/InvokeGenerator/generator/ccalls/CallImplementer.class differ diff --git a/out/production/InvokeGenerator/test/api/TestBot1$1.class b/out/production/InvokeGenerator/test/api/TestBot1$1.class index d4aee9a..6011e6e 100644 Binary files a/out/production/InvokeGenerator/test/api/TestBot1$1.class and b/out/production/InvokeGenerator/test/api/TestBot1$1.class differ diff --git a/out/production/InvokeGenerator/test/api/TestBot1.class b/out/production/InvokeGenerator/test/api/TestBot1.class index 79000a6..e7e007b 100644 Binary files a/out/production/InvokeGenerator/test/api/TestBot1.class and b/out/production/InvokeGenerator/test/api/TestBot1.class differ diff --git a/src/generator/JavaContext.java b/src/generator/JavaContext.java index b3be68d..4361da3 100644 --- a/src/generator/JavaContext.java +++ b/src/generator/JavaContext.java @@ -43,7 +43,7 @@ public class JavaContext { } public String getPackageName(String javaRetType) { - if (packageName.equals("bwta") && (javaRetType.equals("Position") || javaRetType.equals("TilePosition"))) { + if (packageName.equals("bwta") && (javaRetType.equals("Position") || javaRetType.equals("Unit") || javaRetType.equals("TilePosition"))) { return "bwapi"; } return packageName; diff --git a/src/generator/ccalls/CallImplementer.java b/src/generator/ccalls/CallImplementer.java index e637522..a4d4615 100644 --- a/src/generator/ccalls/CallImplementer.java +++ b/src/generator/ccalls/CallImplementer.java @@ -246,7 +246,7 @@ public class CallImplementer { //Key static part - String keyPackageName = javaContext.getPackageName(); + String keyPackageName = javaContext.getPackageName(javaKeyType); if (javaContext.isPrimitive(javaKeyType)) { keyPackageName = "java/lang"; } @@ -259,7 +259,7 @@ public class CallImplementer { } //Value static part - String valuePackageName = javaContext.getPackageName(); + String valuePackageName = javaContext.getPackageName(javaValueType); if (javaContext.isPrimitive(javaValueType)) { valuePackageName = "java/lang"; } @@ -337,9 +337,9 @@ public class CallImplementer { "jobject result = env->NewObject(listCls, listConsID);"); out.println("jmethodID addMethodID = FindCachedMethod(env, listCls, \"add\", \"(Ljava/lang/Object;)Z\");"); - out.println("jclass elemClass = FindCachedClass(env, \"" + javaContext.getPackageName() + "/" + classGenericType + "\");"); + out.println("jclass elemClass = FindCachedClass(env, \"" + javaContext.getPackageName(classGenericType) + "/" + classGenericType + "\");"); if (!javaContext.isValueType(genericType)) { - out.println("jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, \"get\", \"(J)L" + javaContext.getPackageName() + "/" + classGenericType + ";\");"); + out.println("jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, \"get\", \"(J)L" + javaContext.getPackageName(classGenericType) + "/" + classGenericType + ";\");"); } else { out.println("jmethodID elemConsID = FindCachedMethod(env, elemClass, \"\", \"(" + javaContext.copyConstructor(genericType) + ")V\");"); } @@ -397,7 +397,7 @@ public class CallImplementer { } //First static part - String firstPackageName = javaContext.getPackageName(); + String firstPackageName = javaContext.getPackageName(javaFirstType); if (javaContext.isPrimitive(javaFirstType)) { firstPackageName = "java/lang"; } @@ -410,7 +410,7 @@ public class CallImplementer { } //Second static part - String secondPackageName = javaContext.getPackageName(); + String secondPackageName = javaContext.getPackageName(javaSecondType); if (javaContext.isPrimitive(javaSecondType)) { secondPackageName = "java/lang"; } diff --git a/src/test/api/TestBot1.java b/src/test/api/TestBot1.java index c94457b..9e50c2e 100644 --- a/src/test/api/TestBot1.java +++ b/src/test/api/TestBot1.java @@ -3,6 +3,8 @@ package test.api; import bwapi.*; import bwapi.Text.Size.Enum; import bwta.BWTA; +import bwta.BaseLocation; +import bwta.Chokepoint; import util.Pair; import java.io.File; @@ -47,6 +49,15 @@ public class TestBot1 { StringBuilder units = new StringBuilder("My units:\n"); + for(BaseLocation baseLocation : BWTA.getBaseLocations()){ + //System.out.println(baseLocation.getPosition()); + //System.out.println(baseLocation.getTilePosition()); + } + + for(Chokepoint chokepoint : BWTA.getChokepoints()){ + //System.out.println(chokepoint.getCenter()); + } + for (Player player : game.getPlayers()) { // System.out.println(player.getName()); for (Unit enemyUnit : player.getUnits()) {