bool CScriptingManager::Unload(CScript * pScript) { if(pScript) { CEvents * pEvents = CEvents::GetInstance(); pEvents->Call("scriptExit", pScript); CScriptArguments pArguments; pArguments.push(pScript->GetMetaFile().ToMetaAndFileString()); pEvents->Call("scriptUnload", &pArguments); pEvents->RemoveScript(pScript->GetVM()); #ifdef _SERVER if(g_pModuleManager) g_pModuleManager->ScriptUnload(pScript->GetVM()); #endif pScript->Unload(); m_scripts.remove(pScript); delete pScript; return true; } return false; }
// The_GTA: use childCall sparringly, because in Eir it's use does not make sense. bool CClientEntity::CallEvent( const char *name, lua_State *callee, unsigned int argCount, bool childCall ) { lua_checkstack( m_lua, 1 ); // Reference ourselves so we cannot be deleted during eventcalls lua_class_reference ref; Reference( ref ); CEvents *pEvents = g_pClientGame->GetEvents(); // Make sure our event-manager knows we're about to call an event pEvents->PrePulse(); // Call the event on our parents/us CallParentEvent( callee, argCount, name, this ); if ( childCall ) CallEventNoParent( callee, argCount, name, this ); // Remove the arguments from the stack lua_pop( callee, (int)argCount ); // Tell the event manager that we're done calling the event pEvents->PostPulse(); // Return whether it got cancelled or not return !pEvents->WasCancelled(); }
bool CClientEntity::CallEvent ( const char* szName, const CLuaArguments& Arguments, bool bCallOnChildren ) { g_pClientGame->GetDebugHookManager()->OnPreEvent( szName, Arguments, this, NULL ); TIMEUS startTime = GetTimeUs (); CEvents* pEvents = g_pClientGame->GetEvents(); // Make sure our event-manager knows we're about to call an event pEvents->PreEventPulse (); // Call the event on our parents/us first CallParentEvent ( szName, Arguments, this ); if ( bCallOnChildren ) { // Call it on all our children CallEventNoParent ( szName, Arguments, this ); } // Tell the event manager that we're done calling the event pEvents->PostEventPulse (); if ( IS_TIMING_CHECKPOINTS() ) { TIMEUS deltaTimeUs = GetTimeUs () - startTime; if ( deltaTimeUs > 10000 ) TIMING_DETAIL( SString ( "Event: %s [%d ms]", szName, deltaTimeUs / 1000 ) ); } g_pClientGame->GetDebugHookManager()->OnPostEvent( szName, Arguments, this, NULL ); // Return whether it got cancelled or not return ( !pEvents->WasEventCancelled () ); }
CScript * CScriptingManager::Load(CMetaFile & mf) { CScript * pScript = new CScript(); if(!pScript->Load(mf)) { delete pScript; return NULL; } for(auto i = m_funcs.begin(); i != m_funcs.end(); i++) pScript->RegisterFunction((*i)->strName, (*i)->pfnFunction, (*i)->iParameterCount, (*i)->strTemplate); for(auto i = m_classes.begin(); i != m_classes.end(); i++) pScript->RegisterClass(*i); for(auto i = m_constants.begin(); i != m_constants.end(); i++) pScript->RegisterConstant((*i)->strName, (*i)->value); #ifdef _SERVER if(g_pModuleManager) g_pModuleManager->ScriptLoad(pScript->GetVM()); #endif // not a very good way , but leave it as is for now for(auto i = m_scripts.begin(); i != m_scripts.end(); i++) { if((*i)->GetMetaFile().m_Meta == "common" && (*i)->GetMetaFile().m_Type == mf.m_Type) { pScript->AddExternal((*i)->GetMetaFile()); } } if(!pScript->Execute()) { delete pScript; CLogFile::Printf("Failed to execute script %s", mf.ToMetaAndFileString().Get()); return NULL; } m_scripts.push_back(pScript); CEvents * pEvents = CEvents::GetInstance(); pEvents->Call("scriptInit", pScript); CScriptArguments arguments; arguments.push(mf.ToMetaAndFileString()); pEvents->Call("scriptLoad", &arguments); return pScript; }
// event checkBoxCheckedChanged(checkBoxName) bool OnCheckboxCheckStateChanged(const CEGUI::EventArgs &eventArgs) { CEvents * pEvents = g_pClient->GetEvents(); String eventName("checkBoxCheckedChanged"); if(!pEvents->IsEventRegistered(eventName)) return false; CEGUI::Window * pWindow = static_cast<const CEGUI::WindowEventArgs&>(eventArgs).window; CSquirrel * pScript = g_pClient->GetClientScriptManager()->GetGUIManager()->GetScript(pWindow); CSquirrelArguments pArguments; pArguments.push(pWindow->getName().c_str()); pEvents->Call(eventName, &pArguments, pScript); return true; }
// event buttonClick(buttonName, bState) // TODO: remove it. We have better alternative guiClick (OnClick) for any gui element bool OnButtonClick(const CEGUI::EventArgs &eventArgs) { CEvents * pEvents = g_pClient->GetEvents(); String eventName("buttonClick"); if(!pEvents->IsEventRegistered(eventName)) return false; CEGUI::Window * pWindow = static_cast<const CEGUI::WindowEventArgs&>(eventArgs).window; CSquirrel * pScript = g_pClient->GetClientScriptManager()->GetGUIManager()->GetScript(pWindow); CSquirrelArguments pArguments; pArguments.push(pWindow->getName().c_str()); pArguments.push(0); // FIXME or what? pEvents->Call(eventName, &pArguments, pScript); return true; }
// event guiMouseLeave(guiName) bool OnMouseLeaves(const CEGUI::EventArgs &eventArgs) { CEvents * pEvents = g_pClient->GetEvents(); String eventName("guiMouseLeave"); if(!pEvents->IsEventRegistered(eventName)) return false; const CEGUI::MouseEventArgs eArgs = static_cast<const CEGUI::MouseEventArgs&>(eventArgs); CEGUI::Window * pWindow = eArgs.window; CSquirrel * pScript = g_pClient->GetClientScriptManager()->GetGUIManager()->GetScript(pWindow); CSquirrelArguments pArguments; pArguments.push(pWindow->getName().c_str()); pEvents->Call(eventName, &pArguments, pScript); return true; }
bool CElement::CallEvent ( const char* szName, const CLuaArguments& Arguments, CPlayer* pCaller ) { CEvents* pEvents = g_pGame->GetEvents(); // Make sure our event-manager knows we're about to call an event pEvents->PreEventPulse (); // Call the event on our parents/us first CallParentEvent ( szName, Arguments, this, pCaller ); // Call it on all our children CallEventNoParent ( szName, Arguments, this, pCaller ); // Tell the event manager that we're done calling the event pEvents->PostEventPulse (); // Return whether our event was cancelled or not return ( !pEvents->WasEventCancelled () ); }
// event guiKeyPress(string guiName, string key, string keyState) bool OnKeyPress(const CEGUI::KeyEventArgs &eArgs, String keyState) { CEvents * pEvents = g_pClient->GetEvents(); String eventName("guiKeyPress"); if(!pEvents->IsEventRegistered(eventName)) return false; CEGUI::Window * pWindow = eArgs.window; CSquirrel * pScript = g_pClient->GetClientScriptManager()->GetGUIManager()->GetScript(pWindow); CEGUI::Key::Scan keyCode = eArgs.scancode; CSquirrelArguments pArguments; pArguments.push(eArgs.window->getName().c_str()); pArguments.push(GetKeyNameByScan(eArgs.scancode)); pArguments.push(keyState); CSquirrelArgument pReturn = pEvents->Call(eventName, &pArguments, pScript); return pReturn.GetBool(); }
extern "C" int main(int argc, char** argv) { SDL_Init( SDL_INIT_EVERYTHING ); //Inicjacja SDL ekran = SDL_SetVideoMode( 800, 600, 32, SDL_SWSURFACE); //Ustawienie sterownika okna SDL CMap *world = new CMap("data/mapa.japierdole"); //Konstruktor œwiata CPlayer *player = new CPlayer( "data/grog.japierdole",150,150,1); //Konstruktor gracza CEvents *events = new CEvents; //Konstruktor pêtli player->draw(); //rysowanie gracza world->draw(); //rysowanie œwiata SDL_Flip( ekran ); //"przerzucenie" ekranu - podwójny bufor events->loop(); //pêtla delete world; //Destruktor œwiata delete player; //destruktor gracza delete events; //destruktor pêtli SDL_Quit(); //wy³¹cza SDL return 0; }
// event windowClose(windowName) bool OnWindowClose(const CEGUI::EventArgs &eventArgs) { CEvents * pEvents = g_pClient->GetEvents(); String eventName("windowClose"); if(!pEvents->IsEventRegistered(eventName)) return false; CEGUI::Window * pWindow = static_cast<const CEGUI::WindowEventArgs&>(eventArgs).window; CSquirrel * pScript = g_pClient->GetClientScriptManager()->GetGUIManager()->GetScript(pWindow); CSquirrelArguments pArguments; pArguments.push(pWindow->getName().c_str()); // Event handler must return 1 to close window, otherwise, 0. CSquirrelArgument pReturn = pEvents->Call(eventName, &pArguments, pScript); if(pReturn.GetInteger()) pWindow->hide(); return true; }
bool CClientEntity::CallEvent ( const char* szName, const CLuaArguments& Arguments, bool bCallOnChildren ) { CEvents* pEvents = g_pClientGame->GetEvents(); // Make sure our event-manager knows we're about to call an event pEvents->PreEventPulse (); // Call the event on our parents/us first CallParentEvent ( szName, Arguments, this ); if ( bCallOnChildren ) { // Call it on all our children CallEventNoParent ( szName, Arguments, this ); } // Tell the event manager that we're done calling the event pEvents->PostEventPulse (); // Return whether it got cancelled or not return ( !pEvents->WasEventCancelled () ); }
int main(int argc, char *argv[]) { std::string jobBatchFileLocation; CEvents events; CSimulation sim; // initialise from jobHeader file if(2==argc) { jobBatchFileLocation=argv[1]; sim.initialise(jobBatchFileLocation); } CSDLGLscreen window; window.initialiseSDLandGL(&sim); do { events.doEvents(&sim); sim.next_step(); if (true==sim.get_draw()) window.drawSystem(); } while(sim.is_running()); sim.clean_up(); return 0; }
// event rowClick(string guiName) bool OnRowClick(const CEGUI::EventArgs &eventArgs) { CEvents * pEvents = g_pClient->GetEvents(); String eventName ("rowClick"); if(!pEvents->IsEventRegistered(eventName)) return false; const CEGUI::WindowEventArgs eArgs = static_cast<const CEGUI::WindowEventArgs&>(eventArgs); CEGUI::Window * pWindow = eArgs.window; CSquirrel * pScript = g_pClient->GetClientScriptManager()->GetGUIManager()->GetScript(pWindow); CEGUI::MultiColumnList * pMultiColumnList = static_cast<CEGUI::MultiColumnList*>(eArgs.window); int iItemID = pMultiColumnList->getItemRowIndex(pMultiColumnList->getFirstSelectedItem()); CSquirrelArguments pArguments; pArguments.push(eArgs.window->getName().c_str()); // Window Name pArguments.push(iItemID); // Row CLogFile::Printf("Value: %i",iItemID); pEvents->Call(eventName, &pArguments, pScript); return true; }