static void _callLuaCollisionHandler(int aCallback, WorldEntity_t *aCollider, World_CollisionInfo *aCollisionInfo) { if(aCallback == -1) return; luaCtx_pushScriptHandler(GlobalLuaContext, aCallback); luaCtx_pushlightuserdata(GlobalLuaContext, aCollider); luaCtx_pushlightuserdata(GlobalLuaContext, aCollisionInfo); luaCtx_pcall(GlobalLuaContext, 2, 0, 0); }
static void _callEntityUpdateCallback(WorldEntity_t *aEntity, World_t *aWorld) { if(aEntity->updateHandler) aEntity->updateHandler(aEntity); if(aEntity->luaUpdateHandler != -1) { luaCtx_pushScriptHandler(GlobalLuaContext, aEntity->luaUpdateHandler); luaCtx_pushlightuserdata(GlobalLuaContext, aEntity); luaCtx_pcall(GlobalLuaContext, 1, 0, 0); } }
bool luaCtx_executeString(LuaContext_t *aCtx, const char *aScript) { int err = 0; err = luaL_loadstring(aCtx->luaState, aScript); if(err) { dynamo_log("Lua error: %s", (char*)lua_tostring(aCtx->luaState, -1)); lua_pop(aCtx->luaState, 1); return false; } return luaCtx_pcall(aCtx, 0, 0, 0); }
void input_postMomentaryEvent(InputManager_t *aManager, Input_type_t aType, unsigned char *aCode, vec3_t *aLocation, Input_state_t aState) { int count; InputObserver_t **observers = _input_observersForEvent(aManager, aType, aCode, &count); for(int i = 0; i < count; ++i) { if(observers[i]->handlerCallback) observers[i]->handlerCallback(aManager, observers[i], aLocation, aState, observers[i]->metaData); if(observers[i]->luaHandlerCallback) { luaCtx_pushScriptHandler(GlobalLuaContext, observers[i]->luaHandlerCallback); luaCtx_createtable(GlobalLuaContext, 0, 2); luaCtx_pushnumber(GlobalLuaContext, aLocation->x); luaCtx_setfield(GlobalLuaContext, -2, "x"); luaCtx_pushnumber(GlobalLuaContext, aLocation->y); luaCtx_setfield(GlobalLuaContext, -2, "y"); luaCtx_pushinteger(GlobalLuaContext, aState); luaCtx_pcall(GlobalLuaContext, 2, 0, 0); } observers[i]->lastKnownState = aState; } if(observers) free(observers); }