//------------------------------------------------------------------------- // 注册全局事件 void EventBridge::RegisteFKEvent() { IEventSystem* pEvenSystem = GetEventSystem(); if (pEvenSystem == NULL) { return; } pEvenSystem->SubscibeExec(this,eEvent_UIEvent,eEvent_Scene_Switch); pEvenSystem->SubscibeExec(this,eEvent_UIEvent,eEvent_Play_ButtonClick); }
//------------------------------------------------------------------------ int CScriptBind_UIAction::CallFunction( IFunctionHandler *pH, const char * elementName, int instanceID, const char* functionName ) { SUIArguments args; if (!SUIToLuaConversationHelper::LuaArgsToUIArgs(pH, 4, args)) { UIACTION_WARNING( "LUA: Failed to call function %s on element %s: Invalid arguments", functionName, elementName ); return pH->EndFunction(false); } IUIElement* pElement = GetElement( elementName, instanceID, true ); if ( pElement ) { const SUIEventDesc* pFctDesc = pElement->GetFunctionDesc( functionName ); if ( pFctDesc ) { TUIData res; bool bFctOk = true; if ( instanceID < 0 ) { IUIElementIteratorPtr elements = pElement->GetInstances(); while ( IUIElement* pInstance = elements->Next() ) bFctOk &= pInstance->CallFunction( pFctDesc, args, &res); } else { bFctOk = pElement->CallFunction( pFctDesc, args, &res); } if ( bFctOk ) { string sRes; res.GetValueWithConversion( sRes ); return pH->EndFunction( sRes.c_str() ); } } UIACTION_WARNING( "LUA: UIElement %s does not have function %s", elementName, functionName ); } else if (IUIEventSystem* pEventSystem = GetEventSystem( elementName, IUIEventSystem::eEST_UI_TO_SYSTEM )) { uint eventid = pEventSystem->GetEventId( functionName ); if ( eventid != ~0 ) { SUIArguments res = pEventSystem->SendEvent( SUIEvent( eventid, args ) ); SmartScriptTable table = gEnv->pScriptSystem->CreateTable(); SUIToLuaConversationHelper::UIArgsToLuaTable(res, table); return pH->EndFunction( table ); } UIACTION_WARNING( "LUA: UIEventSystem %s does not have event %s", elementName, functionName ); } else { UIACTION_WARNING( "LUA: UIElement or UIEventSystem %s does not exist", elementName ); } return pH->EndFunction(false); }
//------------------------------------------------------------------------ int CScriptBind_UIAction::RegisterEventSystemListener( IFunctionHandler *pH, SmartScriptTable pTable, const char* eventSystem, const char* eventName, const char* callback ) { if (!pTable) { UIACTION_WARNING( "LUA: RegisterEventSystemListener received non-valid script table!"); return pH->EndFunction( false ); } IUIEventSystem* pEventSystem = GetEventSystem( eventSystem, IUIEventSystem::eEST_SYSTEM_TO_UI ); m_EventSystemCallbacks.Init(pEventSystem); m_EventSystemCallbacks.AddCallback(pTable, callback, SUILuaCallbackInfo<IUIEventSystem>::CreateInfo(pEventSystem, eventName ? eventName : "")); return pH->EndFunction(true); }
void SceneEditorApp::SetCameraProcessors() { GetEventSystem().SetProcessor( "MB", AppEventProcessor([this]() { camRotFirstClick = GetCursorPos(); }, [this]() { Vec2f new_pos = GetCursorPos(); Vec2f rot = camera->GetRotation().Get(); rot.y -= new_pos.x - camRotFirstClick.x; rot.x += new_pos.y - camRotFirstClick.y; camera->GetRotation().Set(rot); camRotFirstClick = new_pos; })); GetEventSystem().SetProcessor( "w", AppEventProcessor([this]() {}, [this]() { camera->Forward(MOVING_SPEED * timer.GetDeltaTime()); }, [this] {})); GetEventSystem().SetProcessor( "a", AppEventProcessor([this]() {}, [this]() { camera->Strafe(MOVING_SPEED * timer.GetDeltaTime()); })); GetEventSystem().SetProcessor( "s", AppEventProcessor([this]() {}, [this]() { camera->Forward(-MOVING_SPEED * timer.GetDeltaTime()); })); GetEventSystem().SetProcessor( "d", AppEventProcessor([this]() {}, [this]() { camera->Strafe(-MOVING_SPEED * timer.GetDeltaTime()); })); }
//------------------------------------------------------------------------- bool TestApp::SubInit() { // 自动屏幕适配 __AutomaticScreenAdaptation(); // 加载全局公用资源 __LoadGlobleResources(); // 注册事件 m_EventBridge.RegisteFKEvent(); // 注册场景 REGISTER_SCENE_FUNC(CLoginScene); REGISTER_SCENE_FUNC(CPlayTestScene); REGISTER_SCENE_FUNC(CShopTestScene); REGISTER_SCENE_FUNC(CAchieTestScene); IEventSystem* pEvent = GetEventSystem(); if (pEvent == NULL) { return false; } pEvent->FireExec(eEvent_UIEvent,eEvent_Scene_Switch,eSubSceneType_Login,NULL,0); return true; }
//------------------------------------------------------------------------- // 功能切换按钮 void CLoginScene::OnSelectBtn(CCObject* pSender) { if (pSender == NULL) { return; } FKCW_UIWidget_Widget* pWidget = dynamic_cast<FKCW_UIWidget_Widget*>(pSender); if (pWidget == NULL) { return; } int nTag = pWidget->getUserTag(); if (nTag <= eSubSceneType_Min) { return; } IEventSystem* pEvent = GetEventSystem(); if (pEvent == NULL) { return; } pEvent->FireExec(eEvent_UIEvent,eEvent_Scene_Switch,nTag,NULL,0); }