@@ -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