Example #1
0
//--------------------------------------------------------------------------------
bool App::HandleEvent( EventPtr pEvent )
{
	eEVENT e = pEvent->GetEventType();

	if ( e == SYSTEM_KEYBOARD_KEYDOWN )
	{
		EvtKeyDownPtr pKeyDown = std::static_pointer_cast<EvtKeyDown>( pEvent );

		unsigned int key = pKeyDown->GetCharacterCode();
	}
	else if ( e == SYSTEM_KEYBOARD_KEYUP )
	{
		EvtKeyUpPtr pKeyUp = std::static_pointer_cast<EvtKeyUp>( pEvent );

		unsigned int key = pKeyUp->GetCharacterCode();

		if ( 'A' == key ) // 'A' Key - restart animations
		{
			m_pDisplacedActor->PlayAllAnimations();
			m_pSkinnedActor->PlayAllAnimations();
			return( true );
		}
	}

	// Call the parent class's event handler if we haven't handled the event.

	return( RenderApplication::HandleEvent( pEvent ) );
}
//--------------------------------------------------------------------------------
bool RenderApplication::HandleEvent( EventPtr pEvent )
{
	// This method body is included here for future use, to allow the 
	// RenderApplication to handle some events if needed.

	eEVENT e = pEvent->GetEventType();

	if ( e == WINDOW_RESIZE )
	{
		EvtWindowResizePtr pResize = std::static_pointer_cast<EvtWindowResize>( pEvent );

		this->HandleWindowResize( pResize->GetWindowHandle(), pResize->NewWidth(), pResize->NewHeight() );

		return( true );
	}
	else if ( e == SYSTEM_KEYBOARD_KEYUP )
	{
		EvtKeyUpPtr pKeyUp = std::static_pointer_cast<EvtKeyUp>( pEvent );

		unsigned int key = pKeyUp->GetCharacterCode();

		if ( key == VK_F1 ) // 'F1' Key - Toggle the multithreading state
		{
			ToggleMultiThreadedMode();
			return true;
		}
		else if ( key == '\t' ) // TAB Key - Toggle the console on and off.
		{
			if ( m_InputMode == InputMode::Camera )
			{
				m_InputMode = InputMode::Console;
				m_pScene->GetRoot()->AttachChild( m_pConsole->GetNode() );
			}
			else
			{
				m_InputMode = InputMode::Camera;
				m_pScene->GetRoot()->DetachChild( m_pConsole->GetNode() );
			}

			return true;
		}
	}

	if ( m_InputMode == InputMode::Camera ) {
		if ( CameraEventHub.ProcessEvent( pEvent ) ) {
			return true;
		}
	}

	if ( m_InputMode == InputMode::Console ) {
		if ( ConsoleEventHub.ProcessEvent( pEvent ) ) {
			return true;
		}
	}

	// Call the parent class's event handler if we haven't handled the event.
	
	return( Application::HandleEvent( pEvent ) );
}
Example #3
0
//--------------------------------------------------------------------------------
bool App::HandleEvent( EventPtr pEvent )
{
    eEVENT e = pEvent->GetEventType();

    if ( e == SYSTEM_KEYBOARD_KEYDOWN )
    {
        EvtKeyDownPtr pKeyDown = std::static_pointer_cast<EvtKeyDown>( pEvent );

        unsigned int key = pKeyDown->GetCharacterCode();
    }
    else if ( e == SYSTEM_KEYBOARD_KEYUP )
    {
        EvtKeyUpPtr pKeyUp = std::static_pointer_cast<EvtKeyUp>( pEvent );

        unsigned int key = pKeyUp->GetCharacterCode();

        if ( 'W' == key )
        {
            // Toggle Wireframe
            m_bSolidRender = !m_bSolidRender;
            m_pTerrainEffect->m_iRasterizerState = m_bSolidRender ? m_rsSolid : m_rsWireframe;
        }
        else if ( 'D' == key )
        {
            // Debug colours - show LOD or N-dot-L shading
            switch( m_smCurrentShading )
            {
            case SolidColour:
                m_smCurrentShading = SimpleShading;
                break;
            case SimpleShading:
                m_smCurrentShading = LodDebugView;
                break;
            case LodDebugView:
                m_smCurrentShading = SolidColour;
                break;
            }

            m_pTerrainEffect->SetDomainShader( m_TerrainDomainShaders[ m_smCurrentShading ] );
        }
        else if ( 'L' == key )
        {
            // Toggle between simple and CS-based LOD
            m_bSimpleComplexity = !m_bSimpleComplexity;

            m_pTerrainEffect->SetHullShader( m_bSimpleComplexity ? m_iSimpleHullShader : m_iComplexHullShader );
        }
        else if ( 'A' == key )
        {
            // Toggle automated camera
            m_bViewPointInAutoMode = !m_bViewPointInAutoMode;
        }
    }

    // Call the parent class's event handler if we haven't handled the event.

    return( Application::HandleEvent( pEvent ) );
}
bool EventManagerImpl::VProcessEvents(long p_time)
{
    //TODO ThreadSafeQueue

    std::cout << "HAHAHA" << std::endl;

    int queueToProcess = m_activeQueue;
    m_activeQueue = (m_activeQueue + 1) % EVENTMANAGER_NUM_QUEUES;
    m_queues[m_activeQueue].clear();

    while (!m_queues[queueToProcess].empty())
    {
        EventPtr pEvent = m_queues[queueToProcess].front();
        m_queues[queueToProcess].pop_front();
        //TODO Log Processing Event ...

        const EventType& eventType = pEvent->GetEventType();

        auto findIt = m_eventListeners.find(eventType);
        if (findIt != m_eventListeners.end())
        {
            const EventListenerList& eventListeners = findIt->second;

            for (auto itListener = eventListeners.begin(); itListener != eventListeners.end(); ++itListener)
            {
                EventListenerPtr listener = (*itListener);
                listener->VprocessEvent(pEvent);
            }
        }
        // Time check
    }

    //If we couldn't process allEvents, we push them to the front of the new active queue
    bool queueFlushed = (m_queues[queueToProcess].empty());
    if (!queueFlushed)
    {
        while (!m_queues[queueToProcess].empty())
        {
            EventPtr pEvent = m_queues[queueToProcess].back();
            m_queues[queueToProcess].pop_back();
            m_queues[m_activeQueue].push_front(pEvent);
        }
    }

    return queueFlushed;
}
bool EventManagerImpl::VTriggerEvent(EventPtr& p_event)
{
    //TODO log
    bool processed = false;
    auto findIt = m_eventListeners.find(p_event->GetEventType());
    if (findIt != m_eventListeners.end())
    {
        const EventListenerList& eventListenerList = findIt->second;
        for (EventListenerList::const_iterator itListener = eventListenerList.begin(); itListener != eventListenerList.end(); ++itListener)
        {
            EventListenerPtr listener = (*itListener);
            listener->VprocessEvent(p_event);
            processed = true;
        }
    }
    return processed;
}
Example #6
0
//--------------------------------------------------------------------------------
bool App::HandleEvent( EventPtr pEvent )
{
    eEVENT e = pEvent->GetEventType();

    if ( e == SYSTEM_KEYBOARD_KEYUP )
    {
        EvtKeyUpPtr pKeyUp = std::static_pointer_cast<EvtKeyUp>( pEvent );

        unsigned int key = pKeyUp->GetCharacterCode();


        if ( key == 0x31 ) // Pressing the '1' key will pass events to the main application
        {
            m_uiInputTarget = 1;
            return( true );
        }
        else if ( key == 0x32 ) // Pressing the '2' key will pass events to the first glyphlet
        {
            m_uiInputTarget = 2;
            return( true );
        }
        else if ( key == 0x33 ) // Pressing the '3' key will pass events to the first glyphlet
        {
            m_uiInputTarget = 3;
            return( true );
        }
    }

    // All other key up events will be forwarded appropriately:

    bool bHandled = false;

    if ( m_uiInputTarget == 2 ) {
        bHandled = m_pActor1->m_pGlyphlet->EvtManager.ProcessEvent( pEvent );
    }
    else if ( m_uiInputTarget == 3 ) {
        bHandled = m_pActor2->m_pGlyphlet->EvtManager.ProcessEvent( pEvent );
    }

    // Call the parent class's event handler if we haven't handled the event.

    if ( bHandled )
        return( true );
    else
        return( RenderApplication::HandleEvent( pEvent ) );
}
bool Application::HandleEvent(EventPtr event)
{
    EventType eventType = event->GetEventType();

    if (eventType == EventType::INFO_MESSAGE)
    {
        // 若是信息,弹窗提醒
        EventInfoMessagePtr infoMessageEvent = std::static_pointer_cast<EventInfoMessage>(event);
        MessageBox(0, infoMessageEvent->GetInfoMessage().c_str(), L"Info Message", MB_ICONINFORMATION | MB_SYSTEMMODAL);
    }
    else if (eventType == EventType::ERROR_MESSAGE)
    {
        // 若是错误信息,弹窗提醒并结束运行
        EventErrorMessagePtr errorMessageEvent = std::static_pointer_cast<EventErrorMessage>(event);
        MessageBox(0, errorMessageEvent->GetErrorMessage().c_str(), L"Error Message", MB_ICONERROR | MB_SYSTEMMODAL);
        RequestTermination();
    }
    else if (eventType == EventType::SYSTEM_KEYBOARD_KEYUP)
    {
        EventKeyUpPtr  keyUevent = std::static_pointer_cast<EventKeyUp>(event);

        //Attention mark:实际上这里应该提供一个可以配置的按键映射,考虑到这个handleEvent是可以自行重载的故,可以在这里暂时不用考虑
        // 判断按下的是哪个键
        UINT key = keyUevent->GetCharacterCode();

        if (key == VK_ESCAPE)
        {
            // 按下的是Esc, 该键用于结束程序运行
            RequestTermination();
            return true;
        }
        else if (key == VK_SPACE)
        {
            // 按下空格,保存当前帧图像
            mSaveScreenShot = true;
            return true;
        }
    }

    return true;
}
Example #8
0
//--------------------------------------------------------------------------------
bool App::HandleEvent( EventPtr pEvent )
{
	eEVENT e = pEvent->GetEventType();

	if ( e == SYSTEM_KEYBOARD_KEYDOWN )
	{
		EvtKeyDownPtr pKeyDown = std::static_pointer_cast<EvtKeyDown>( pEvent );

		unsigned int key = pKeyDown->GetCharacterCode();
	}
	else if ( e == SYSTEM_KEYBOARD_KEYUP )
	{
		EvtKeyUpPtr pKeyUp = std::static_pointer_cast<EvtKeyUp>( pEvent );

		unsigned int key = pKeyUp->GetCharacterCode();
	}

	// Call the parent class's event handler if we haven't handled the event.

	return( RenderApplication::HandleEvent( pEvent ) );
}
bool EventManagerImpl::VQueueEvent(EventPtr& p_event) {
    if (m_activeQueue < 0 || m_activeQueue > EVENTMANAGER_NUM_QUEUES)
        return false; //BIG ERROR

    //std::cout << "Neues Event: " << EventTypeValueNames[p_event->GetEventType()] << std::endl;

    if (!p_event)
    {
        return false;
    }

    auto findIt = m_eventListeners.find(p_event->GetEventType());
    if (findIt != m_eventListeners.end())
    {
        m_queues[m_activeQueue].push_back(p_event);
        return true;
    }
    else
    {
        return false;
    }
}