added mouse button down/up and mouse motion events

git-svn-id: svn://anubis/anaglym/trunk@111 99a6e188-d820-4881-8870-2d33a10e2619
This commit is contained in:
Josh Holtrop 2009-10-19 21:44:08 +00:00
parent 978293a57e
commit bd4eab495c
2 changed files with 67 additions and 3 deletions

View File

@ -321,13 +321,25 @@ void Engine::run()
case SDL_KEYUP:
key_released_event(event.key.keysym.sym);
break;
case SDL_MOUSEBUTTONDOWN:
mousebutton_pressed_event(event.button.button,
event.button.x, event.button.y);
break;
case SDL_MOUSEBUTTONUP:
mousebutton_released_event(event.button.button,
event.button.x, event.button.y);
break;
case SDL_MOUSEMOTION:
mouse_motion_event(event.motion.x, event.motion.y,
event.motion.xrel, event.motion.yrel);
break;
case SDL_QUIT:
goto RET;
break;
case SDL_USEREVENT:
if (event.user.code == 0)
{
update();
update_event();
}
break;
}
@ -336,7 +348,7 @@ RET:
;
}
void Engine::update()
void Engine::update_event()
{
m_drawing = true;
if (m_autoPhysics)
@ -388,6 +400,55 @@ void Engine::key_released_event(int keysym)
}
}
void Engine::mousebutton_pressed_event(int button, int x, int y)
{
if (m_event_mousebutton_pressed_present)
{
lua_getfield(m_luaState, LUA_GLOBALSINDEX,
AG_EVENT_PREFIX "mousebutton_pressed");
lua_pushinteger(m_luaState, button);
lua_pushnumber(m_luaState, x);
lua_pushnumber(m_luaState, y);
/* call the mouse button pressed event function
* This pops the function ref and arguments from the stack */
int s = lua_pcall(m_luaState, 3, LUA_MULTRET, 0);
reportErrors(s);
}
}
void Engine::mousebutton_released_event(int button, int x, int y)
{
if (m_event_mousebutton_released_present)
{
lua_getfield(m_luaState, LUA_GLOBALSINDEX,
AG_EVENT_PREFIX "mousebutton_released");
lua_pushinteger(m_luaState, button);
lua_pushnumber(m_luaState, x);
lua_pushnumber(m_luaState, y);
/* call the mouse button released event function
* This pops the function ref and arguments from the stack */
int s = lua_pcall(m_luaState, 3, LUA_MULTRET, 0);
reportErrors(s);
}
}
void Engine::mouse_motion_event(int x, int y, int xrel, int yrel)
{
if (m_event_mouse_motion_present)
{
lua_getfield(m_luaState, LUA_GLOBALSINDEX,
AG_EVENT_PREFIX "mouse_motion");
lua_pushnumber(m_luaState, x);
lua_pushnumber(m_luaState, y);
lua_pushnumber(m_luaState, xrel);
lua_pushnumber(m_luaState, yrel);
/* call the mouse motion event function
* This pops the function ref and arguments from the stack */
int s = lua_pcall(m_luaState, 4, LUA_MULTRET, 0);
reportErrors(s);
}
}
void Engine::checkForFunctionFull(const std::string & lua_fn_name,
const std::string & event_name, bool & presentFlag)
{

View File

@ -116,9 +116,12 @@ class Engine
Uint32 updateCallback(Uint32 interval);
void registerLibraries();
bool fileExists(const std::string & path);
void update();
void update_event();
void key_pressed_event(int keysym);
void key_released_event(int keysym);
void mousebutton_pressed_event(int button, int x, int y);
void mousebutton_released_event(int button, int x, int y);
void mouse_motion_event(int x, int y, int xrel, int yrel);
Object * createObject(bool is_static, GLuint display_list,
float scale = 1.0f)
{