Cześć, piszę sobie moduł w C++ do modyfikacji MTA. Od razu mówię że w C++ jestem w miarę początkujący, chociaż znam Lua więc jakby ktoś chciał pomóc to proszę o dokładniejsze wytłumaczenie :)
Ok, więc problem polega na tym że zaimplementowałem do modułu (plik .dll) system fizyki bullet + język skryptowy Lua. I teraz mam problem. Stworzyłem funkcję bulletSetUp w której ustawiam dane fizyki, między innym element świata na którym będę operował.
int CFunctions::bulletSetUp ( lua_State* luaVM )
{
if ( luaVM )
{
btBroadphaseInterface* broadphase = new btDbvtBroadphase();
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);
btGImpactCollisionAlgorithm::registerAlgorithm(dispatcher);
btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;
btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
lua_pushboolean(luaVM, true);
return 1;
}
lua_pushboolean(luaVM, false);
return 0;
}
Funkcja działa prawidłowo. Teraz druga funkcja, physicsSetGravity która odpowiada za ustawianie grawitacji w świecie.
int CFunctions::physicsSetGravity ( lua_State* luaVM )
{
if ( luaVM )
{
if(dynamicsWorld == 0)
{
lua_pushboolean(luaVM, false);
return 0;
}
CLuaArguments args;
int data1;
int data2;
int data3;
data1 = lua_tonumber ( luaVM, 1 );
data2 = lua_tonumber ( luaVM, 2 );
data3 = lua_tonumber ( luaVM, 3 );
// args.PushString("Hello World!");
//args.PushArguments(luaVM);
std::cout << "lolek: " << data1 << " and " << data2 << " and " << data3 << std::endl;
dynamicsWorld->setGravity(btVector3(0, -10, 0));
return 1;
}
return 0;
}
I tutaj jest już problem, ponieważ podczas kompilowania kompilator twierdzi, że zmienna dynamicsWorld nie istnieje. No w sumie ma rację, bo jest tworzona w pierwszej funkcji. Jak to rozwiązać? Z góry dzięki za pomoc.