Skip to content

Commit e52f3f2

Browse files
authored
Merge pull request #29 from bcalabro/patch-1
Add JNI Call for getBuildoutAreaRect for buildout_utility.java
2 parents 498b063 + 688a477 commit e52f3f2

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

engine/server/library/serverScript/src/shared/ScriptMethodsPlanet.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ namespace ScriptMethodsPlanetNamespace
4646
jboolean JNICALL isAreaTooFullForTravel (JNIEnv* env, jobject self, jstring planetName_j, jint x, jint z);
4747
jstring JNICALL getBuildoutAreaName( JNIEnv *env, jobject self, jfloat x, jfloat z, jstring scene );
4848
jfloatArray JNICALL getBuildoutAreaSizeAndCenter(JNIEnv *env, jobject self, jfloat x, jfloat z, jstring scene, jboolean ignoreInternal, jboolean allowComposite);
49+
jfloatArray JNICALL getBuildoutAreaRect(JNIEnv *env, jobject self, jfloat x, jfloat z, jstring scene, jboolean allowComposite);
4950
void JNICALL requestSameServer(JNIEnv *env, jobject self, jlong object1, jlong object2);
5051
}
5152

@@ -70,6 +71,7 @@ const JNINativeMethod NATIVES[] = {
7071
JF("isAreaTooFullForTravel", "(Ljava/lang/String;II)Z", isAreaTooFullForTravel),
7172
JF("getBuildoutAreaName", "(FFLjava/lang/String;)Ljava/lang/String;", getBuildoutAreaName),
7273
JF("getBuildoutAreaSizeAndCenter", "(FFLjava/lang/String;ZZ)[F", getBuildoutAreaSizeAndCenter),
74+
JF("getBuildoutAreaRect", "(FFLjava/lang/String;Z)[F", getBuildoutAreaRect),
7375
JF("_requestSameServer", "(JJ)V", requestSameServer),
7476
};
7577

@@ -548,4 +550,43 @@ void JNICALL ScriptMethodsPlanetNamespace::requestSameServer(JNIEnv *env, jobjec
548550
GameServer::getInstance().sendToPlanetServer(rssMessage);
549551
}
550552

553+
jfloatArray JNICALL ScriptMethodsPlanetNamespace::getBuildoutAreaRect(JNIEnv *env, jobject self, jfloat x, jfloat z, jstring scene, jboolean allowComposite) {
554+
555+
std::string sceneId;
556+
JavaStringParam sceneId_jsp (scene);
557+
if (!JavaLibrary::convert (sceneId_jsp, sceneId))
558+
{
559+
WARNING(true,("getBuildoutAreaRect could not convert the scene id to string"));
560+
return 0;
561+
}
562+
563+
const BuildoutArea * const area = SharedBuildoutAreaManager::findBuildoutAreaAtPosition(sceneId.c_str(), x, z, false, false);
564+
if (!area)
565+
{
566+
return 0;
567+
}
568+
569+
LocalFloatArrayRefPtr valueArray = createNewFloatArray(static_cast<jsize>(4));
570+
if (valueArray == LocalFloatArrayRef::cms_nullPtr)
571+
{
572+
return 0;
573+
}
574+
575+
Rectangle2d rect = area->getRectangle(allowComposite == JNI_TRUE);
576+
577+
auto value = static_cast<jfloat>(rect.x0);
578+
setFloatArrayRegion(*valueArray, 0, 1, &value);
579+
580+
value = static_cast<jfloat>(rect.x1);
581+
setFloatArrayRegion(*valueArray, 1, 1, &value);
582+
583+
value = static_cast<jfloat>(rect.y0);
584+
setFloatArrayRegion(*valueArray, 2, 1, &value);
585+
586+
value = static_cast<jfloat>(rect.y1);
587+
setFloatArrayRegion(*valueArray, 3, 1, &value);
588+
589+
return valueArray->getReturnValue();
590+
}
591+
551592
// ======================================================================

0 commit comments

Comments
 (0)