1#include <com.badlogic.gdx.physics.box2d.World.h> 2 3//@line:56 4 5#include <Box2D/Box2D.h> 6 7static jclass worldClass = 0; 8static jmethodID shouldCollideID = 0; 9static jmethodID beginContactID = 0; 10static jmethodID endContactID = 0; 11static jmethodID preSolveID = 0; 12static jmethodID postSolveID = 0; 13static jmethodID reportFixtureID = 0; 14static jmethodID reportRayFixtureID = 0; 15 16class CustomRayCastCallback: public b2RayCastCallback 17{ 18private: 19 JNIEnv* env; 20 jobject obj; 21 22public: 23 CustomRayCastCallback( JNIEnv *env, jobject obj ) 24 { 25 this->env = env; 26 this->obj = obj; 27 } 28 29 virtual float32 ReportFixture( b2Fixture* fixture, const b2Vec2& point, const b2Vec2& normal, float32 fraction) 30 { 31 return env->CallFloatMethod(obj, reportRayFixtureID, (jlong)fixture, (jfloat)point.x, (jfloat)point.y, 32 (jfloat)normal.x, (jfloat)normal.y, (jfloat)fraction ); 33 } 34}; 35 36class CustomContactFilter: public b2ContactFilter 37{ 38private: 39 JNIEnv* env; 40 jobject obj; 41 42public: 43 CustomContactFilter( JNIEnv* env, jobject obj ) 44 { 45 this->env = env; 46 this->obj = obj; 47 } 48 49 virtual bool ShouldCollide(b2Fixture* fixtureA, b2Fixture* fixtureB) 50 { 51 if( shouldCollideID != 0 ) 52 return env->CallBooleanMethod( obj, shouldCollideID, (jlong)fixtureA, (jlong)fixtureB ); 53 else 54 return true; 55 } 56}; 57 58class CustomContactListener: public b2ContactListener 59{ 60private: 61 JNIEnv* env; 62 jobject obj; 63 64public: 65 CustomContactListener( JNIEnv* env, jobject obj ) 66 { 67 this->env = env; 68 this->obj = obj; 69 } 70 71 /// Called when two fixtures begin to touch. 72 virtual void BeginContact(b2Contact* contact) 73 { 74 if( beginContactID != 0 ) 75 env->CallVoidMethod(obj, beginContactID, (jlong)contact ); 76 } 77 78 /// Called when two fixtures cease to touch. 79 virtual void EndContact(b2Contact* contact) 80 { 81 if( endContactID != 0 ) 82 env->CallVoidMethod(obj, endContactID, (jlong)contact); 83 } 84 85 /// This is called after a contact is updated. 86 virtual void PreSolve(b2Contact* contact, const b2Manifold* oldManifold) 87 { 88 if( preSolveID != 0 ) 89 env->CallVoidMethod(obj, preSolveID, (jlong)contact, (jlong)oldManifold); 90 } 91 92 /// This lets you inspect a contact after the solver is finished. 93 virtual void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse) 94 { 95 if( postSolveID != 0 ) 96 env->CallVoidMethod(obj, postSolveID, (jlong)contact, (jlong)impulse); 97 } 98}; 99 100class CustomQueryCallback: public b2QueryCallback 101{ 102private: 103 JNIEnv* env; 104 jobject obj; 105 106public: 107 CustomQueryCallback( JNIEnv* env, jobject obj ) 108 { 109 this->env = env; 110 this->obj = obj; 111 } 112 113 virtual bool ReportFixture( b2Fixture* fixture ) 114 { 115 return env->CallBooleanMethod(obj, reportFixtureID, (jlong)fixture ); 116 } 117}; 118 119inline b2BodyType getBodyType( int type ) 120{ 121 switch( type ) 122 { 123 case 0: return b2_staticBody; 124 case 1: return b2_kinematicBody; 125 case 2: return b2_dynamicBody; 126 default: 127 return b2_staticBody; 128 } 129} 130 131b2ContactFilter defaultFilter; 132 JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_newWorld(JNIEnv* env, jobject object, jfloat gravityX, jfloat gravityY, jboolean doSleep) { 133 134 135//@line:237 136 137 // we leak one global ref. 138 if(!worldClass) { 139 worldClass = (jclass)env->NewGlobalRef(env->GetObjectClass(object)); 140 beginContactID = env->GetMethodID(worldClass, "beginContact", "(J)V" ); 141 endContactID = env->GetMethodID( worldClass, "endContact", "(J)V" ); 142 preSolveID = env->GetMethodID( worldClass, "preSolve", "(JJ)V" ); 143 postSolveID = env->GetMethodID( worldClass, "postSolve", "(JJ)V" ); 144 reportFixtureID = env->GetMethodID(worldClass, "reportFixture", "(J)Z" ); 145 reportRayFixtureID = env->GetMethodID(worldClass, "reportRayFixture", "(JFFFFF)F" ); 146 shouldCollideID = env->GetMethodID( worldClass, "contactFilter", "(JJ)Z"); 147 } 148 149 b2World* world = new b2World( b2Vec2( gravityX, gravityY )); 150 world->SetAllowSleeping( doSleep ); 151 return (jlong)world; 152 153 154} 155 156JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_setUseDefaultContactFilter(JNIEnv* env, jobject object, jboolean use) { 157 158 159//@line:268 160 161 // FIXME 162 163 164} 165 166JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreateBody(JNIEnv* env, jobject object, jlong addr, jint type, jfloat positionX, jfloat positionY, jfloat angle, jfloat linearVelocityX, jfloat linearVelocityY, jfloat angularVelocity, jfloat linearDamping, jfloat angularDamping, jboolean allowSleep, jboolean awake, jboolean fixedRotation, jboolean bullet, jboolean active, jfloat inertiaScale) { 167 168 169//@line:294 170 171 b2BodyDef bodyDef; 172 bodyDef.type = getBodyType(type); 173 bodyDef.position.Set( positionX, positionY ); 174 bodyDef.angle = angle; 175 bodyDef.linearVelocity.Set( linearVelocityX, linearVelocityY ); 176 bodyDef.angularVelocity = angularVelocity; 177 bodyDef.linearDamping = linearDamping; 178 bodyDef.angularDamping = angularDamping; 179 bodyDef.allowSleep = allowSleep; 180 bodyDef.awake = awake; 181 bodyDef.fixedRotation = fixedRotation; 182 bodyDef.bullet = bullet; 183 bodyDef.active = active; 184 bodyDef.gravityScale = inertiaScale; 185 186 b2World* world = (b2World*)addr; 187 b2Body* body = world->CreateBody( &bodyDef ); 188 return (jlong)body; 189 190 191} 192 193JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniDestroyBody(JNIEnv* env, jobject object, jlong addr, jlong bodyAddr) { 194 195 196//@line:336 197 198 b2World* world = (b2World*)addr; 199 b2Body* body = (b2Body*)bodyAddr; 200 CustomContactFilter contactFilter(env, object); 201 CustomContactListener contactListener(env,object); 202 world->SetContactFilter(&contactFilter); 203 world->SetContactListener(&contactListener); 204 world->DestroyBody(body); 205 world->SetContactFilter(&defaultFilter); 206 world->SetContactListener(0); 207 208 209} 210 211JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniDestroyFixture(JNIEnv* env, jobject object, jlong addr, jlong bodyAddr, jlong fixtureAddr) { 212 213 214//@line:356 215 216 b2World* world = (b2World*)(addr); 217 b2Body* body = (b2Body*)(bodyAddr); 218 b2Fixture* fixture = (b2Fixture*)(fixtureAddr); 219 CustomContactFilter contactFilter(env, object); 220 CustomContactListener contactListener(env, object); 221 world->SetContactFilter(&contactFilter); 222 world->SetContactListener(&contactListener); 223 body->DestroyFixture(fixture); 224 world->SetContactFilter(&defaultFilter); 225 world->SetContactListener(0); 226 227 228} 229 230JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniDeactivateBody(JNIEnv* env, jobject object, jlong addr, jlong bodyAddr) { 231 232 233//@line:376 234 235 b2World* world = (b2World*)(addr); 236 b2Body* body = (b2Body*)(bodyAddr); 237 CustomContactFilter contactFilter(env, object); 238 CustomContactListener contactListener(env, object); 239 world->SetContactFilter(&contactFilter); 240 world->SetContactListener(&contactListener); 241 body->SetActive(false); 242 world->SetContactFilter(&defaultFilter); 243 world->SetContactListener(0); 244 245 246} 247 248JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreateWheelJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jfloat localAnchorAX, jfloat localAnchorAY, jfloat localAnchorBX, jfloat localAnchorBY, jfloat localAxisAX, jfloat localAxisAY, jboolean enableMotor, jfloat maxMotorTorque, jfloat motorSpeed, jfloat frequencyHz, jfloat dampingRatio) { 249 250 251//@line:481 252 253 b2World* world = (b2World*)addr; 254 b2WheelJointDef def; 255 def.bodyA = (b2Body*)bodyA; 256 def.bodyB = (b2Body*)bodyB; 257 def.collideConnected = collideConnected; 258 def.localAnchorA = b2Vec2(localAnchorAX, localAnchorAY); 259 def.localAnchorB = b2Vec2(localAnchorBX, localAnchorBY); 260 def.localAxisA = b2Vec2(localAxisAX, localAxisAY); 261 def.enableMotor = enableMotor; 262 def.maxMotorTorque = maxMotorTorque; 263 def.motorSpeed = motorSpeed; 264 def.frequencyHz = frequencyHz; 265 def.dampingRatio = dampingRatio; 266 267 return (jlong)world->CreateJoint(&def); 268 269 270} 271 272JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreateRopeJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jfloat localAnchorAX, jfloat localAnchorAY, jfloat localAnchorBX, jfloat localAnchorBY, jfloat maxLength) { 273 274 275//@line:500 276 277 b2World* world = (b2World*)addr; 278 b2RopeJointDef def; 279 def.bodyA = (b2Body*)bodyA; 280 def.bodyB = (b2Body*)bodyB; 281 def.collideConnected = collideConnected; 282 def.localAnchorA = b2Vec2(localAnchorAX, localAnchorAY); 283 def.localAnchorB = b2Vec2(localAnchorBX, localAnchorBY); 284 def.maxLength = maxLength; 285 286 return (jlong)world->CreateJoint(&def); 287 288 289} 290 291JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreateDistanceJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jfloat localAnchorAX, jfloat localAnchorAY, jfloat localAnchorBX, jfloat localAnchorBY, jfloat length, jfloat frequencyHz, jfloat dampingRatio) { 292 293 294//@line:514 295 296 b2World* world = (b2World*)addr; 297 b2DistanceJointDef def; 298 def.bodyA = (b2Body*)bodyA; 299 def.bodyB = (b2Body*)bodyB; 300 def.collideConnected = collideConnected; 301 def.localAnchorA = b2Vec2(localAnchorAX, localAnchorAY); 302 def.localAnchorB = b2Vec2(localAnchorBX, localAnchorBY); 303 def.length = length; 304 def.frequencyHz = frequencyHz; 305 def.dampingRatio = dampingRatio; 306 307 return (jlong)world->CreateJoint(&def); 308 309 310} 311 312JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreateFrictionJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jfloat localAnchorAX, jfloat localAnchorAY, jfloat localAnchorBX, jfloat localAnchorBY, jfloat maxForce, jfloat maxTorque) { 313 314 315//@line:530 316 317 b2World* world = (b2World*)addr; 318 b2FrictionJointDef def; 319 def.bodyA = (b2Body*)bodyA; 320 def.bodyB = (b2Body*)bodyB; 321 def.collideConnected = collideConnected; 322 def.localAnchorA = b2Vec2(localAnchorAX, localAnchorAY); 323 def.localAnchorB = b2Vec2(localAnchorBX, localAnchorBY); 324 def.maxForce = maxForce; 325 def.maxTorque = maxTorque; 326 return (jlong)world->CreateJoint(&def); 327 328 329} 330 331JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreateGearJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jlong joint1, jlong joint2, jfloat ratio) { 332 333 334//@line:544 335 336 b2World* world = (b2World*)addr; 337 b2GearJointDef def; 338 def.bodyA = (b2Body*)bodyA; 339 def.bodyB = (b2Body*)bodyB; 340 def.collideConnected = collideConnected; 341 def.joint1 = (b2Joint*)joint1; 342 def.joint2 = (b2Joint*)joint2; 343 def.ratio = ratio; 344 return (jlong)world->CreateJoint(&def); 345 346 347} 348 349JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreateMotorJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jfloat linearOffsetX, jfloat linearOffsetY, jfloat angularOffset, jfloat maxForce, jfloat maxTorque, jfloat correctionFactor) { 350 351 352//@line:557 353 354 b2World* world = (b2World*)addr; 355 b2MotorJointDef def; 356 def.bodyA = (b2Body*)bodyA; 357 def.bodyB = (b2Body*)bodyB; 358 def.collideConnected = collideConnected; 359 def.linearOffset = b2Vec2( linearOffsetX, linearOffsetY ); 360 def.angularOffset = angularOffset; 361 def.maxForce = maxForce; 362 def.maxTorque = maxTorque; 363 def.correctionFactor = correctionFactor; 364 return (jlong)world->CreateJoint(&def); 365 366 367} 368 369JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreateMouseJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jfloat targetX, jfloat targetY, jfloat maxForce, jfloat frequencyHz, jfloat dampingRatio) { 370 371 372//@line:572 373 374 b2World* world = (b2World*)addr; 375 b2MouseJointDef def; 376 def.bodyA = (b2Body*)bodyA; 377 def.bodyB = (b2Body*)bodyB; 378 def.collideConnected = collideConnected; 379 def.target = b2Vec2( targetX, targetY ); 380 def.maxForce = maxForce; 381 def.frequencyHz = frequencyHz; 382 def.dampingRatio = dampingRatio; 383 return (jlong)world->CreateJoint(&def); 384 385 386} 387 388JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreatePrismaticJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jfloat localAnchorAX, jfloat localAnchorAY, jfloat localAnchorBX, jfloat localAnchorBY, jfloat localAxisAX, jfloat localAxisAY, jfloat referenceAngle, jboolean enableLimit, jfloat lowerTranslation, jfloat upperTranslation, jboolean enableMotor, jfloat maxMotorForce, jfloat motorSpeed) { 389 390 391//@line:588 392 393 b2World* world = (b2World*)addr; 394 b2PrismaticJointDef def; 395 def.bodyA = (b2Body*)bodyA; 396 def.bodyB = (b2Body*)bodyB; 397 def.collideConnected = collideConnected; 398 def.localAnchorA = b2Vec2(localAnchorAX, localAnchorAY); 399 def.localAnchorB = b2Vec2(localAnchorBX, localAnchorBY); 400 def.localAxisA = b2Vec2( localAxisAX, localAxisAY ); 401 def.referenceAngle = referenceAngle; 402 def.enableLimit = enableLimit; 403 def.lowerTranslation = lowerTranslation; 404 def.upperTranslation = upperTranslation; 405 def.enableMotor = enableMotor; 406 def.maxMotorForce = maxMotorForce; 407 def.motorSpeed = motorSpeed; 408 return (jlong)world->CreateJoint(&def); 409 410 411} 412 413JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreatePulleyJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jfloat groundAnchorAX, jfloat groundAnchorAY, jfloat groundAnchorBX, jfloat groundAnchorBY, jfloat localAnchorAX, jfloat localAnchorAY, jfloat localAnchorBX, jfloat localAnchorBY, jfloat lengthA, jfloat lengthB, jfloat ratio) { 414 415 416//@line:609 417 418 b2World* world = (b2World*)addr; 419 b2PulleyJointDef def; 420 def.bodyA = (b2Body*)bodyA; 421 def.bodyB = (b2Body*)bodyB; 422 def.collideConnected = collideConnected; 423 def.groundAnchorA = b2Vec2( groundAnchorAX, groundAnchorAY ); 424 def.groundAnchorB = b2Vec2( groundAnchorBX, groundAnchorBY ); 425 def.localAnchorA = b2Vec2(localAnchorAX, localAnchorAY); 426 def.localAnchorB = b2Vec2(localAnchorBX, localAnchorBY); 427 def.lengthA = lengthA; 428 def.lengthB = lengthB; 429 def.ratio = ratio; 430 431 return (jlong)world->CreateJoint(&def); 432 433 434} 435 436JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreateRevoluteJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jfloat localAnchorAX, jfloat localAnchorAY, jfloat localAnchorBX, jfloat localAnchorBY, jfloat referenceAngle, jboolean enableLimit, jfloat lowerAngle, jfloat upperAngle, jboolean enableMotor, jfloat motorSpeed, jfloat maxMotorTorque) { 437 438 439//@line:628 440 441 b2World* world = (b2World*)addr; 442 b2RevoluteJointDef def; 443 def.bodyA = (b2Body*)bodyA; 444 def.bodyB = (b2Body*)bodyB; 445 def.collideConnected = collideConnected; 446 def.localAnchorA = b2Vec2(localAnchorAX, localAnchorAY); 447 def.localAnchorB = b2Vec2(localAnchorBX, localAnchorBY); 448 def.referenceAngle = referenceAngle; 449 def.enableLimit = enableLimit; 450 def.lowerAngle = lowerAngle; 451 def.upperAngle = upperAngle; 452 def.enableMotor = enableMotor; 453 def.motorSpeed = motorSpeed; 454 def.maxMotorTorque = maxMotorTorque; 455 return (jlong)world->CreateJoint(&def); 456 457 458} 459 460JNIEXPORT jlong JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniCreateWeldJoint(JNIEnv* env, jobject object, jlong addr, jlong bodyA, jlong bodyB, jboolean collideConnected, jfloat localAnchorAX, jfloat localAnchorAY, jfloat localAnchorBX, jfloat localAnchorBY, jfloat referenceAngle, jfloat frequencyHz, jfloat dampingRatio) { 461 462 463//@line:647 464 465 b2World* world = (b2World*)addr; 466 b2WeldJointDef def; 467 def.bodyA = (b2Body*)bodyA; 468 def.bodyB = (b2Body*)bodyB; 469 def.collideConnected = collideConnected; 470 def.localAnchorA = b2Vec2(localAnchorAX, localAnchorAY); 471 def.localAnchorB = b2Vec2(localAnchorBX, localAnchorBY); 472 def.referenceAngle = referenceAngle; 473 def.frequencyHz = frequencyHz; 474 def.dampingRatio = dampingRatio; 475 476 return (jlong)world->CreateJoint(&def); 477 478 479} 480 481JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniDestroyJoint(JNIEnv* env, jobject object, jlong addr, jlong jointAddr) { 482 483 484//@line:672 485 486 b2World* world = (b2World*)addr; 487 b2Joint* joint = (b2Joint*)jointAddr; 488 CustomContactFilter contactFilter(env, object); 489 CustomContactListener contactListener(env,object); 490 world->SetContactFilter(&contactFilter); 491 world->SetContactListener(&contactListener); 492 world->DestroyJoint( joint ); 493 world->SetContactFilter(&defaultFilter); 494 world->SetContactListener(0); 495 496 497} 498 499JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniStep(JNIEnv* env, jobject object, jlong addr, jfloat timeStep, jint velocityIterations, jint positionIterations) { 500 501 502//@line:692 503 504 b2World* world = (b2World*)addr; 505 CustomContactFilter contactFilter(env, object); 506 CustomContactListener contactListener(env,object); 507 world->SetContactFilter(&contactFilter); 508 world->SetContactListener(&contactListener); 509 world->Step( timeStep, velocityIterations, positionIterations ); 510 world->SetContactFilter(&defaultFilter); 511 world->SetContactListener(0); 512 513 514} 515 516JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniClearForces(JNIEnv* env, jobject object, jlong addr) { 517 518 519//@line:712 520 521 b2World* world = (b2World*)addr; 522 world->ClearForces(); 523 524 525} 526 527JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniSetWarmStarting(JNIEnv* env, jobject object, jlong addr, jboolean flag) { 528 529 530//@line:722 531 532 b2World* world = (b2World*)addr; 533 world->SetWarmStarting(flag); 534 535 536} 537 538JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniSetContiousPhysics(JNIEnv* env, jobject object, jlong addr, jboolean flag) { 539 540 541//@line:732 542 543 b2World* world = (b2World*)addr; 544 world->SetContinuousPhysics(flag); 545 546 547} 548 549JNIEXPORT jint JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniGetProxyCount(JNIEnv* env, jobject object, jlong addr) { 550 551 552//@line:742 553 554 b2World* world = (b2World*)addr; 555 return world->GetProxyCount(); 556 557 558} 559 560JNIEXPORT jint JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniGetBodyCount(JNIEnv* env, jobject object, jlong addr) { 561 562 563//@line:752 564 565 b2World* world = (b2World*)addr; 566 return world->GetBodyCount(); 567 568 569} 570 571JNIEXPORT jint JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniGetJointcount(JNIEnv* env, jobject object, jlong addr) { 572 573 574//@line:767 575 576 b2World* world = (b2World*)addr; 577 return world->GetJointCount(); 578 579 580} 581 582JNIEXPORT jint JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniGetContactCount(JNIEnv* env, jobject object, jlong addr) { 583 584 585//@line:777 586 587 b2World* world = (b2World*)addr; 588 return world->GetContactCount(); 589 590 591} 592 593JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniSetGravity(JNIEnv* env, jobject object, jlong addr, jfloat gravityX, jfloat gravityY) { 594 595 596//@line:787 597 598 b2World* world = (b2World*)addr; 599 world->SetGravity( b2Vec2( gravityX, gravityY ) ); 600 601 602} 603 604JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniGetGravity(JNIEnv* env, jobject object, jlong addr, jfloatArray obj_gravity) { 605 float* gravity = (float*)env->GetPrimitiveArrayCritical(obj_gravity, 0); 606 607 608//@line:803 609 610 b2World* world = (b2World*)addr; 611 b2Vec2 g = world->GetGravity(); 612 gravity[0] = g.x; 613 gravity[1] = g.y; 614 615 env->ReleasePrimitiveArrayCritical(obj_gravity, gravity, 0); 616 617} 618 619JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniIsLocked(JNIEnv* env, jobject object, jlong addr) { 620 621 622//@line:815 623 624 b2World* world = (b2World*)addr; 625 return world->IsLocked(); 626 627 628} 629 630JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniSetAutoClearForces(JNIEnv* env, jobject object, jlong addr, jboolean flag) { 631 632 633//@line:825 634 635 b2World* world = (b2World*)addr; 636 world->SetAutoClearForces(flag); 637 638 639} 640 641JNIEXPORT jboolean JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniGetAutoClearForces(JNIEnv* env, jobject object, jlong addr) { 642 643 644//@line:835 645 646 b2World* world = (b2World*)addr; 647 return world->GetAutoClearForces(); 648 649 650} 651 652JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniQueryAABB(JNIEnv* env, jobject object, jlong addr, jfloat lowX, jfloat lowY, jfloat upX, jfloat upY) { 653 654 655//@line:853 656 657 b2World* world = (b2World*)addr; 658 b2AABB aabb; 659 aabb.lowerBound = b2Vec2( lowX, lowY ); 660 aabb.upperBound = b2Vec2( upX, upY ); 661 662 CustomQueryCallback callback( env, object ); 663 world->QueryAABB( &callback, aabb ); 664 665 666} 667 668JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniGetContactList(JNIEnv* env, jobject object, jlong addr, jlongArray obj_contacts) { 669 long long* contacts = (long long*)env->GetPrimitiveArrayCritical(obj_contacts, 0); 670 671 672//@line:938 673 674 b2World* world = (b2World*)addr; 675 676 b2Contact* contact = world->GetContactList(); 677 int i = 0; 678 while( contact != 0 ) 679 { 680 contacts[i++] = (long long)contact; 681 contact = contact->GetNext(); 682 } 683 684 env->ReleasePrimitiveArrayCritical(obj_contacts, contacts, 0); 685 686} 687 688JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniDispose(JNIEnv* env, jobject object, jlong addr) { 689 690 691//@line:954 692 693 b2World* world = (b2World*)(addr); 694 delete world; 695 696 697} 698 699JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_setVelocityThreshold(JNIEnv* env, jclass clazz, jfloat threshold) { 700 701 702//@line:1014 703 704 b2_velocityThreshold = threshold; 705 706 707} 708 709JNIEXPORT jfloat JNICALL Java_com_badlogic_gdx_physics_box2d_World_getVelocityThreshold(JNIEnv* env, jclass clazz) { 710 711 712//@line:1019 713 714 return b2_velocityThreshold; 715 716 717} 718 719JNIEXPORT void JNICALL Java_com_badlogic_gdx_physics_box2d_World_jniRayCast(JNIEnv* env, jobject object, jlong addr, jfloat aX, jfloat aY, jfloat bX, jfloat bY) { 720 721 722//@line:1044 723 724 b2World *world = (b2World*)addr; 725 CustomRayCastCallback callback( env, object ); 726 world->RayCast( &callback, b2Vec2(aX,aY), b2Vec2(bX,bY) ); 727 728 729} 730 731