diff --git a/ag.cc b/ag.cc index ecd0e38..6b1924d 100644 --- a/ag.cc +++ b/ag.cc @@ -31,6 +31,7 @@ namespace ag { "elapsedTime", elapsedTime }, { "doPhysics", doPhysics }, { "drawObjects", drawObjects }, + { "setAutoPhysics", setAutoPhysics }, { NULL, NULL } }; luaL_register(L, "ag", functions); @@ -225,6 +226,21 @@ namespace ag return 0; } + int setAutoPhysics(lua_State * L) + { + int argc = lua_gettop(L); + + if (argc == 1) + { + if (lua_isboolean(L, 1)) + { + g_engine->setAutoPhysics(lua_toboolean(L, 1)); + } + } + + return 0; + } + namespace object { static Engine::Object * getObject(lua_State * L, int index) diff --git a/ag.h b/ag.h index add00f4..df4abe1 100644 --- a/ag.h +++ b/ag.h @@ -18,6 +18,7 @@ namespace ag int elapsedTime(lua_State * L); int doPhysics(lua_State * L); int drawObjects(lua_State * L); + int setAutoPhysics(lua_State * L); namespace object { diff --git a/anaglym.cc b/anaglym.cc index 18fc24c..4006e62 100644 --- a/anaglym.cc +++ b/anaglym.cc @@ -90,6 +90,7 @@ Engine::Engine() m_up[1] = 0; m_up[2] = 1; m_drawing = false; + m_autoPhysics = true; /* setup redraw SDL event structure */ userEvent.type = SDL_USEREVENT; @@ -334,6 +335,8 @@ RET: void Engine::update() { m_drawing = true; + if (m_autoPhysics) + doPhysics(); lua_getfield(m_luaState, LUA_GLOBALSINDEX, "update"); if (lua_type(m_luaState, -1) == LUA_TFUNCTION) { diff --git a/anaglym.h b/anaglym.h index ceb821c..8926254 100644 --- a/anaglym.h +++ b/anaglym.h @@ -60,6 +60,8 @@ class Engine Object * getObject(int id); void doPhysics(); void drawObjects(); + void setAutoPhysics(bool autoPhysics) { m_autoPhysics = autoPhysics; } + bool getAutoPhysics() { return m_autoPhysics; } /* lua services */ int startFrame(lua_State * L); @@ -89,6 +91,7 @@ class Engine GLdouble m_center[3]; GLdouble m_up[3]; bool m_drawing; + bool m_autoPhysics; }; extern Engine * g_engine; diff --git a/tests/ballstairs.lua b/tests/ballstairs.lua index 1be70f3..56bf7ca 100755 --- a/tests/ballstairs.lua +++ b/tests/ballstairs.lua @@ -2,7 +2,6 @@ function update() ballx, bally, ballz = ball:getPosition() ag.setCamera(7, -6, 15, ballx, bally, ballz, 0, 0, 1) - ag.doPhysics() ag.startFrame() ag.drawObjects() ag.endFrame()