added doPhysics()

git-svn-id: svn://anubis/anaglym/trunk@48 99a6e188-d820-4881-8870-2d33a10e2619
This commit is contained in:
Josh Holtrop 2009-10-05 19:06:42 +00:00
parent fccfb572e2
commit 6a52215247
4 changed files with 22 additions and 21 deletions

24
ag.cc
View File

@ -24,10 +24,6 @@ namespace ag
{ "println", println }, { "println", println },
{ "loadModel", loadModel }, { "loadModel", loadModel },
{ "loadStaticModel", loadStaticModel }, { "loadStaticModel", loadStaticModel },
#if 0
{ "videoStart", videoStart },
{ "videoStop", videoStop },
#endif
{ "sleep", sleep }, { "sleep", sleep },
{ "startFrame", startFrame }, { "startFrame", startFrame },
{ "endFrame", endFrame }, { "endFrame", endFrame },
@ -163,20 +159,6 @@ namespace ag
loadModelSpecify(L, true); loadModelSpecify(L, true);
} }
#if 0
int videoStart(lua_State * L)
{
g_engine->getVideo()->start();
return 0;
}
int videoStop(lua_State * L)
{
g_engine->getVideo()->stop();
return 0;
}
#endif
int sleep(lua_State * L) int sleep(lua_State * L)
{ {
int argc = lua_gettop(L); int argc = lua_gettop(L);
@ -218,6 +200,12 @@ namespace ag
return 1; return 1;
} }
int doPhysics(lua_State * L)
{
g_engine->doPhysics();
return 0;
}
namespace object namespace object
{ {
static Engine::Object * getObject(lua_State * L, int index) static Engine::Object * getObject(lua_State * L, int index)

3
ag.h
View File

@ -11,13 +11,12 @@ namespace ag
int println(lua_State * L); int println(lua_State * L);
int loadModel(lua_State * L); int loadModel(lua_State * L);
int loadStaticModel(lua_State * L); int loadStaticModel(lua_State * L);
int videoStart(lua_State * L);
int videoStop(lua_State * L);
int sleep(lua_State * L); int sleep(lua_State * L);
int startFrame(lua_State * L); int startFrame(lua_State * L);
int endFrame(lua_State * L); int endFrame(lua_State * L);
int setCamera(lua_State * L); int setCamera(lua_State * L);
int elapsedTime(lua_State * L); int elapsedTime(lua_State * L);
int doPhysics(lua_State * L);
namespace object namespace object
{ {

View File

@ -267,7 +267,7 @@ Uint32 Engine::updateCallback(Uint32 interval)
void Engine::run() void Engine::run()
{ {
/* register a screen redrawing SDL event */ /* register a screen redrawing SDL event */
SDL_AddTimer(20, &updateCallback, this); SDL_AddTimer(25, &updateCallback, this);
SDL_Event event; SDL_Event event;
while (SDL_WaitEvent(&event)) while (SDL_WaitEvent(&event))
@ -333,3 +333,16 @@ void Engine::Object::getPosition(double * x, double * y, double * z)
*z = pos[2]; *z = pos[2];
} }
} }
void Engine::doPhysics()
{
static Uint32 last_updated = 0;
Uint32 current_ticks = SDL_GetTicks();
if (last_updated > 0)
{
Uint32 msec_steps = current_ticks - last_updated;
for (int i = 0; i < msec_steps; i++)
m_world.step();
}
last_updated = current_ticks;
}

View File

@ -41,6 +41,7 @@ class Engine
OdeWorld & getWorld() { return m_world; } OdeWorld & getWorld() { return m_world; }
int addObject(WFObj * obj); int addObject(WFObj * obj);
Object * getObject(int id); Object * getObject(int id);
void doPhysics();
/* lua services */ /* lua services */
int startFrame(lua_State * L); int startFrame(lua_State * L);