From c63a4bb80813b877abd8163093a791c2d8fbd7a6 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 18 Oct 2009 22:20:22 +0000 Subject: [PATCH] Engine calling update_event, key_pressed_event, and key_released_event git-svn-id: svn://anubis/anaglym/trunk@98 99a6e188-d820-4881-8870-2d33a10e2619 --- Engine.cc | 25 ++++++++++++++++++++++++- Engine.h | 1 + anaglym.cc | 2 +- tests/ballstairs.lua | 8 +++++++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Engine.cc b/Engine.cc index 263b76a..f423d25 100644 --- a/Engine.cc +++ b/Engine.cc @@ -2,6 +2,7 @@ #include "ag.h" #include "anaglym.h" #include "Engine.h" +#include "sdl_keymap.h" #include #include /* exit() */ #include @@ -288,6 +289,10 @@ void Engine::run() { goto RET; } + key_event(event.key.keysym.sym, true); + break; + case SDL_KEYUP: + key_event(event.key.keysym.sym, false); break; case SDL_QUIT: goto RET; @@ -311,7 +316,7 @@ void Engine::update() doPhysics(); if (m_autoStartFrame) startFrame(); - lua_getfield(m_luaState, LUA_GLOBALSINDEX, "update"); + lua_getfield(m_luaState, LUA_GLOBALSINDEX, "update_event"); if (lua_type(m_luaState, -1) == LUA_TFUNCTION) { /* call the update function - pops the function ref from the stack */ @@ -329,6 +334,24 @@ void Engine::update() m_drawing = false; } +void Engine::key_event(int keysym, bool pressed) +{ + lua_getfield(m_luaState, LUA_GLOBALSINDEX, + pressed ? "key_pressed_event" : "key_released_event"); + if (lua_type(m_luaState, -1) == LUA_TFUNCTION) + { + lua_pushstring(m_luaState, sdl_keymap[keysym]); + /* call the key_event function + * This pops the function ref and arguments from the stack */ + int s = lua_pcall(m_luaState, 1, LUA_MULTRET, 0); + reportErrors(s); + } + else + { + lua_pop(m_luaState, 1); + } +} + void Engine::doPhysics() { static Uint32 last_updated = 0; diff --git a/Engine.h b/Engine.h index eac0940..653b703 100644 --- a/Engine.h +++ b/Engine.h @@ -96,6 +96,7 @@ class Engine void registerLibraries(); bool fileExists(const std::string & path); void update(); + void key_event(int keysym, bool pressed); Object * createObject(bool is_static, GLuint display_list, float scale = 1.0f) { diff --git a/anaglym.cc b/anaglym.cc index f680b95..f6b73b9 100644 --- a/anaglym.cc +++ b/anaglym.cc @@ -47,7 +47,7 @@ int main(int argc, char * argv[]) } Video video; -#if 1 +#if 0 /* start in windowed mode for debugging */ video.start(0, 0, false, false); #else diff --git a/tests/ballstairs.lua b/tests/ballstairs.lua index 87d56a4..7afb271 100755 --- a/tests/ballstairs.lua +++ b/tests/ballstairs.lua @@ -1,9 +1,15 @@ -function update() +function update_event() ballx, bally, ballz = ball:getPosition() ag.setCamera(7, -6, 15, ballx, bally, ballz, 0, 0, 1) end +function key_pressed_event(key) + if (key == "d") then + ball2:destroy() + end +end + arena = ag.loadStaticModel("boxarena") ball = ag.loadModel("checkerball") ball:setPosition(-7, 7.4, 12)