Exemplo n.º 1
0
/*!
 * Activation (focus change) eventhandler
 */
static void handleActiveEvent(SDL_ActiveEvent * activeEvent)
{
	// Ignore focus loss through SDL_APPMOUSEFOCUS, since it mostly happens accidentialy
	// active.state is a bitflag! Mixed events (eg. APPACTIVE|APPMOUSEFOCUS) will thus not be ignored.
	if ( activeEvent->state == SDL_APPMOUSEFOCUS )
	{
		setMouseScroll(activeEvent->gain);
		return;
	}

	if ( activeEvent->gain == 1 )
	{
		debug( LOG_NEVER, "WM_SETFOCUS");
		if (focusState != FOCUS_IN)
		{
			focusState = FOCUS_IN;

			// Don't pause in multiplayer!
			if (war_GetPauseOnFocusLoss() && !NetPlay.bComms)
			{
				gameTimeStart();
				audio_ResumeAll();
				cdAudio_Resume();
			}
			// enable scrolling
			setScrollPause(false);
			resetScroll();
		}
	}
	else
	{
		debug( LOG_NEVER, "WM_KILLFOCUS");
		if (focusState != FOCUS_OUT)
		{
			focusState = FOCUS_OUT;

			// Don't pause in multiplayer!
			if (war_GetPauseOnFocusLoss() && !NetPlay.bComms)
			{
				gameTimeStop();
				audio_PauseAll();
				cdAudio_Pause();
			}
			/* Have to tell the input system that we've lost focus */
			inputLooseFocus();
			// stop scrolling
			setScrollPause(true);
		}
	}
}
Exemplo n.º 2
0
//get any new input
void WindowSFML::updateInput()
{
	if (!windowIsOpen)
	{
		return;
	}
	else if (!windowObj.isOpen())
	{
		windowIsOpen=0;
		return;
	}
	
	sf::Event event;
	
	keyPressListPos=0;
	keyPressNum=0;
	
	bool lDwn=0, rDwn=0, mDwn=0;
	double scroll=0;
	
	while (windowObj.pollEvent(event))
	{
		switch (event.type)
		{
		// window closed
		case sf::Event::Closed:
			windowObj.close();
			break;
		
		// key pressed
		case sf::Event::KeyPressed:
			if (keyPressNum<MAX_KEY_PRESSES)
			{
				keyPresses[keyPressNum]=key2char[event.key.code];
				++keyPressNum;
			}
			else
			{
				err << "key press overflow" << err;
			}
			break;
		
		case sf::Event::MouseButtonPressed:
			switch (event.mouseButton.button)
			{
			case sf::Mouse::Left:
				lDwn=1;
				break;
				
			case sf::Mouse::Right:
				rDwn=1;
				break;
				
			case sf::Mouse::Middle:
				mDwn=1;
				break;
			
			default:
				break;
			}
			break;
		
		case sf::Event::MouseWheelMoved:
			scroll+=event.mouseWheel.delta;
			break;
			
		case sf::Event::Resized:
			hasBeenResized();
			break;
			
		case sf::Event::GainedFocus:
			windowHasFocus=1;
			break;
		
		case sf::Event::LostFocus:
			windowHasFocus=0;
			break;
		
		// we don't process other types of events
		default:
			break;
		}
	}
	
	auto mouseVctr=sf::Mouse::getPosition(windowObj);
	
	shiftDwnBool=sf::Keyboard::isKeyPressed(sf::Keyboard::LShift) || sf::Keyboard::isKeyPressed(sf::Keyboard::RShift);
	ctrlDwnBool=sf::Keyboard::isKeyPressed(sf::Keyboard::LControl) || sf::Keyboard::isKeyPressed(sf::Keyboard::RControl);
	altDwnBool=sf::Keyboard::isKeyPressed(sf::Keyboard::LAlt) || sf::Keyboard::isKeyPressed(sf::Keyboard::RAlt);
	superDwnBool=sf::Keyboard::isKeyPressed(sf::Keyboard::RSystem) || sf::Keyboard::isKeyPressed(sf::Keyboard::RSystem);
	
	if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
		lDwn=true;
	
	if (sf::Mouse::isButtonPressed(sf::Mouse::Right))
		rDwn=true;
		
	if (sf::Mouse::isButtonPressed(sf::Mouse::Middle))
		mDwn=true;
	
	setMouseButton(&mouse.left, lDwn);
	setMouseButton(&mouse.right, rDwn);
	setMouseButton(&mouse.middle, mDwn);
	
	setMousePos(V2d(mouseVctr.x, dim.y-mouseVctr.y));
	
	setMouseScroll(scroll);
	
	dltaTime=dltaTimer.get();
	dltaTimer.reset();
}