bool RegisterCallback( CallbackType type, luabind::object f ) { if(HasCallback( type ) && !AllowsMultipleCallbacks( type )) { printf( "Only a single callback is allowed for this callback type.\n" ); return false; } //if(!lua_isfunction(f.interpreter(), 0)) std::get<0>( _callbacks[(CallbackType)type] ) = true; std::get<1>( _callbacks[(CallbackType)type] ).push_back( f ); return true; }
bool ETHRawEntityController::RunCallback(ETHScriptEntity* entity) { if (HasConstructorCallback()) { ETHGlobal::RunEntityCallback(m_pContext, entity, m_constructorCallbackId); m_constructorCallbackId =-1; // never run it again. that's the trick } if (HasCallback()) { ETHGlobal::RunEntityCallback(m_pContext, entity, m_callbackId); } return true; }
bool ETHRawEntityController::RunCallback(ETHScriptEntity* entity) { if (HasConstructorCallback() && !m_hadRunConstructor) { ETHGlobal::RunEntityCallback(m_pContext, entity, m_constructorCallbackId); m_hadRunConstructor = true; } if (HasCallback()) { ETHGlobal::RunEntityCallback(m_pContext, entity, m_callbackId); } return true; }
/////////////////////////////////////////////////////////////// // // CDbJobData::ProcessCallback // // Do callback // /////////////////////////////////////////////////////////////// void CDbJobData::ProcessCallback ( void ) { assert ( HasCallback () ); callback.bDone = true; callback.pfnDbResult( this, callback.pContext ); }
/////////////////////////////////////////////////////////////// // // CCompressJobData::ProcessCallback // // Do callback // /////////////////////////////////////////////////////////////// void CCompressJobData::ProcessCallback ( void ) { assert ( HasCallback () ); callback.bDone = true; callback.pfnScreenShotCallback( result.buffer, callback.uiTimeSpentInQueue ); }
std::vector<luabind::object> GetCallbacks( CallbackType type ) { if(!HasCallback( type )) throw "No callback registered for this event."; if(std::get<0>( _callbacks[type] )) return std::get<1>( _callbacks[type] ); else return std::vector<luabind::object>(); }