setInternalTickCallback in an Objective-c Class

zalavariandris
Posts: 12
Joined: Wed Feb 18, 2009 12:31 am

setInternalTickCallback in an Objective-c Class

Post by zalavariandris »

I woud like to implement the bullet tickCallback into my objective-c class.
I have an objective-c class cald Scene, that has a parameter called bulletDynamics, and a Function called myTickCallback of course;

a had no idea how to implement this tick callback function into my Class.

errors:
/Users/andris/Documents/andrisDocuments/develop/sumoBall/Classes/Scene.mm:57: error: invalid conversion from 'void (*)(const btDynamicsWorld*, btScalar)' to 'void (*)(btDynamicsWorld*, btScalar)'
/Users/andris/Documents/andrisDocuments/develop/sumoBall/Classes/Scene.mm:57: error: initializing argument 1 of 'void btDynamicsWorld::setInternalTickCallback(void (*)(btDynamicsWorld*, btScalar), void*)'

header:

Code: Select all

#import <Foundation/Foundation.h>
#import "btBulletDynamicsCommon.h"

@interface Scene : NSObject {
	NSMutableArray *objects;
	btDiscreteDynamicsWorld *dynamicsWorld;
}
@property (nonatomic,retain) NSMutableArray *objects;
@property btDiscreteDynamicsWorld *dynamicsWorld;

-(void)draw;
-(void)initPhysics;

-(void)addObject:(id)anObject;
- (void)removeObject:(id)anObject;

void myTickCallback(const btDynamicsWorld *world, btScalar timeStep);

@end
source:

Code: Select all

#import "Scene.h"

@implementation Scene
@synthesize objects;
@synthesize dynamicsWorld;
	void myTickCallback(const btDynamicsWorld *world, btScalar timeStep) { 
		printf("The world just ticked by %f seconds\n", (float)timeStep); 
	} 

	- (id) init
	{
		self = [super init];
		if (self != nil) {
			objects=[[NSMutableArray alloc]init];
		}
		return self;
	}

	-(void)draw{
		for (id object in objects)
		{
			[object draw];
		}
	}

	-(void)initPhysics{
		//--broadphase
		int maxProxies = 32;
		btVector3 worldAabbMin(-50,-50,-50);
		btVector3 worldAabbMax(50,50,50);
		btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin,worldAabbMax,maxProxies);
		//--Set up the collision configuration and dispatcher
		btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
		btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
		//--The actual physics solver
		btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;
		//--The world.
		dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration);
		dynamicsWorld->setGravity(btVector3(0,-200,0));
		for (id object in objects)
		{
			if([object isKindOfClass:[RBNode class]]){
				dynamicsWorld->addRigidBody([object rigidBody]);
			}
		}
		dynamicsWorld->setInternalTickCallback(myTickCallback); 
	}
...
@end
shogun
Posts: 34
Joined: Tue Mar 04, 2008 3:16 pm

Re: setInternalTickCallback in an Objective-c Class

Post by shogun »

Read your error message!

It's "void myTickCallback(btDynamicsWorld *world, btScalar timeStep)", not "void myTickCallback(const btDynamicsWorld *world, btScalar timeStep)".