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