//-------------------------------------------------------------------------
// 注册全局事件
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);
}
Beispiel #4
0
    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);
}