Exemplo n.º 1
0
        void CameraTool::handleScroll(InputState& inputState) {
            if (inputState.modifierKeys() != ModifierKeys::MKNone &&
                inputState.modifierKeys() != ModifierKeys::MKAlt)
                return;
            if (m_orbit) {
                const Renderer::Camera& camera = inputState.camera();
                Planef orbitPlane(camera.direction(), m_orbitCenter);
                float maxForward = orbitPlane.intersectWithRay(Rayf(camera.position(), camera.direction())) - 32.0f;

                float forward = inputState.scrollY() * moveSpeed(false);
                if (maxForward < 0.0f)
                    maxForward = 0.0f;
                if (forward > maxForward)
                    forward = maxForward;
                
                CameraMoveEvent cameraEvent;
                cameraEvent.setForward(forward);
                postEvent(cameraEvent);
            } else {
                Preferences::PreferenceManager& prefs = Preferences::PreferenceManager::preferences();
                const Renderer::Camera& camera = inputState.camera();
                const Vec3f moveDirection = prefs.getBool(Preferences::CameraMoveInCursorDir) ? inputState.pickRay().direction : camera.direction();
                
                const float distance = inputState.scrollY() * moveSpeed(false);
                const Vec3f moveVector = distance * moveDirection;
                
                CameraMoveEvent cameraEvent;
                cameraEvent.setForward(moveVector.dot(camera.direction()));
                cameraEvent.setRight(moveVector.dot(camera.right()));
                cameraEvent.setUp(moveVector.dot(camera.up()));
                postEvent(cameraEvent);
            }
        }
Exemplo n.º 2
0
void enemy::manhackAI(float elapsed)
{
	flying = false;

	manhackTargetAcquire();

	if (!weaponMelee() && attacking() && bowDrawn())
		endAttack();

	if (target != NULL)
	{
		startAttack();
		flying = true;

		float myX = getX() + getMaskWidth() / 2;
		float theirX = target->getX() + target->getMaskWidth() / 2;

		if (theirX > myX)
			facingX = 1;
		else
			facingX = -1;

		//find the desired position
		float desiredX = target->getX() + target->getMaskWidth() / 2;
		float desiredY = target->getY() + target->getMaskHeight() / 2;
		desiredX += orbitRange * cos(angle);
		desiredY += orbitRange * sin(angle);

		if (timer >= 0) //orbit the desired position
			angle += elapsed * orbitSpeed;

		if (weaponMelee())
		{
			//handle the timer
			float oldT = timer;
			timer += elapsed * ORBITTIMERSPEED;
			if (oldT < 0 && timer >= 0)
				manhackAIOrbitDetails(); //move back out again
			else if (timer >= 1 && getY() <= target->getY())
			{
				//move in for the strike!
				timer = orbitRange * -ORBITTIMERSPEED / moveSpeed();
				orbitRange = 0;
			}
		}


		//move in that direction
		float xDif = desiredX - x;
		float yDif = desiredY - y;
		float dis = sqrt(xDif * xDif + yDif * yDif);
		if (dis <= moveSpeed() * elapsed)
		{
			x = desiredX;
			y = desiredY;
		}
		else
			flyMove(xDif / dis, yDif / dis, elapsed);
	}
}
        void CameraTool::handleScroll(InputState& inputState) {
            if (inputState.modifierKeys() != ModifierKeys::MKNone &&
                inputState.modifierKeys() != ModifierKeys::MKAlt)
                return;
            if (m_orbit) {
                const Renderer::Camera& camera = inputState.camera();
                Plane orbitPlane(camera.direction(), m_orbitCenter);
                float maxForward = orbitPlane.intersectWithRay(Ray(camera.position(), camera.direction())) - 32.0f;

                float forward = inputState.scrollY() * moveSpeed();
                if (maxForward < 0.0f)
                    maxForward = 0.0f;
                if (forward > maxForward)
                    forward = maxForward;
                
                CameraMoveEvent cameraEvent;
                cameraEvent.setForward(forward);
                postEvent(cameraEvent);
            } else {
                CameraMoveEvent cameraEvent;
                cameraEvent.setForward(inputState.scrollY() * moveSpeed());
                cameraEvent.setRight(inputState.scrollX() * moveSpeed());
                postEvent(cameraEvent);
            }
        }
Exemplo n.º 4
0
bool Player::simulate(const Ogre::Real elapsedTime)
{
    if(inMotion)
    {
        Ogre::Vector3 nowPos = rootNode->getPosition();
        if(direction == 0)
        {
            Ogre::Vector3 nextPos = Ogre::Vector3(nowPos.x, nowPos.y, nowPos.z - moveSpeed() * elapsedTime);
            if(nextPos.z < endPos.z)
            {
                rootNode->setPosition(endPos);
                playerX -= 1;
                inMotion = false;
                return true;
            }
            else
                rootNode->setPosition(nextPos);
        }
        else if(direction == 1)
        {
            Ogre::Vector3 nextPos = Ogre::Vector3(nowPos.x + moveSpeed() * elapsedTime, nowPos.y, nowPos.z);
            if(nextPos.x > endPos.x)
            {
                rootNode->setPosition(endPos);
                playerY += 1;
                inMotion = false;
                return true;
            }
            else
                rootNode->setPosition(nextPos);
        }
        else if(direction == 2)
        {
            Ogre::Vector3 nextPos = Ogre::Vector3(nowPos.x, nowPos.y, nowPos.z + moveSpeed() * elapsedTime);
            if(nextPos.z > endPos.z)
            {
                rootNode->setPosition(endPos);
                playerX += 1;
                inMotion = false;
                return true;
            }
            else
                rootNode->setPosition(nextPos);
        }
        else if(direction == 3)
        {
            Ogre::Vector3 nextPos = Ogre::Vector3(nowPos.x - moveSpeed() * elapsedTime, nowPos.y, nowPos.z);
            if(nextPos.x < endPos.x)
            {
                rootNode->setPosition(endPos);
                playerY -= 1;
                inMotion = false;
                return true;
            }
            else
                rootNode->setPosition(nextPos);
        }
    }
    return false;
}
Exemplo n.º 5
0
void AbstractCubester::simulate(const Ogre::Real elapsedTime, Ogre::Vector3 playerPos)
{
    if(!inMotion)
    {
        direction = getAction(playerPos);
        if(direction != -1)
            inMotion = true;
    }
    Ogre::Vector3 nowPos = rootNode->getPosition();
    if(direction == 0)
    {
        rootNode->setPosition(Ogre::Vector3(nowPos.x, nowPos.y, nowPos.z - moveSpeed() * elapsedTime));
        if(rootNode->getPosition().z < endPos.z)
        {
            rootNode->setPosition(endPos);
            // playerX -= 1;
            inMotion = false;
            return;
        }
    }
    else if(direction == 1)
    {
        rootNode->setPosition(Ogre::Vector3(nowPos.x + moveSpeed() * elapsedTime, nowPos.y, nowPos.z));
        if(rootNode->getPosition().x > endPos.x)
        {
            rootNode->setPosition(endPos);
            // playerY += 1;
            inMotion = false;
            return;
        }
    }
    else if(direction == 2)
    {
        rootNode->setPosition(Ogre::Vector3(nowPos.x, nowPos.y, nowPos.z + moveSpeed() * elapsedTime));
        if(rootNode->getPosition().z > endPos.z)
        {
            rootNode->setPosition(endPos);
            // playerX += 1;
            inMotion = false;
            return;
        }
    }
    else if(direction == 3)
    {
        rootNode->setPosition(Ogre::Vector3(nowPos.x - moveSpeed() * elapsedTime, nowPos.y, nowPos.z));
        if(rootNode->getPosition().x < endPos.x)
        {
            rootNode->setPosition(endPos);
            // playerY -= 1;
            inMotion = false;
            return;
        }
    }
}
Exemplo n.º 6
0
        bool CameraTool::handleDrag(InputState& inputState) {
            if (inputState.mouseButtons() == MouseButtons::MBRight) {
                if (m_orbit) {
                    CameraOrbitEvent cameraEvent;
                    cameraEvent.setHAngle(inputState.deltaX() * lookSpeed(false));
                    cameraEvent.setVAngle(inputState.deltaY() * lookSpeed(true));
                    cameraEvent.setCenter(m_orbitCenter);
                    postEvent(cameraEvent);
                } else {
                    CameraLookEvent cameraEvent;
                    cameraEvent.setHAngle(inputState.deltaX() * lookSpeed(false));
                    cameraEvent.setVAngle(inputState.deltaY() * lookSpeed(true));
                    postEvent(cameraEvent);
                }
            } else if (inputState.mouseButtons() == MouseButtons::MBMiddle) {
                Preferences::PreferenceManager& prefs = Preferences::PreferenceManager::preferences();
                bool enableAltMove = prefs.getBool(Preferences::CameraEnableAltMove);

                CameraMoveEvent cameraEvent;
                if (enableAltMove && inputState.modifierKeys() == ModifierKeys::MKAlt) {
                    cameraEvent.setRight(inputState.deltaX() * panSpeed(false));
                    cameraEvent.setForward(inputState.deltaY() * -moveSpeed(true));
                } else {
                    cameraEvent.setRight(inputState.deltaX() * panSpeed(false));
                    cameraEvent.setUp(inputState.deltaY() * panSpeed(true));
                }
                postEvent(cameraEvent);
            }
            return true;
        }
Exemplo n.º 7
0
void enemy::copterAI(float elapsed)
{
	manhackTargetAcquire();
	flying = false;

	if (attacking() && bowDrawn())
		endAttack();

	if (target != NULL)
	{
		flying = true;
		float myX = getX() + getMaskWidth() / 2;
		float theirX = target->getX() + target->getMaskWidth() / 2;
		float myY = getY() + getMaskHeight() / 2;
		float theirY = target->getY() + target->getMaskHeight() / 2;

		float xDif = abs(myX - theirX);
		float yDif = abs(myY - theirY);

		if (myX > theirX)
			facingX = -1;
		else
			facingX = 1;

		float xMove = 0;
		float yMove = 0;
		if (xDif > maxRange)
		{
			if (myX > theirX)
				xMove = -1;
			else
				xMove = 1;
		}
		else if (xDif < maxRange / 2)
		{
			if (myX > theirX)
				xMove = COPTERBACKOFF;
			else
				xMove = -COPTERBACKOFF;
		}

		if (yDif > moveSpeed() * elapsed)
		{
			if (myY > theirY)
				yMove = -1;
			else
				yMove = 1;
		}
		if (yDif < CLOSERANGE)
			startAttack();

		if (xMove != 0 || yMove != 0)
		{
			float dif = sqrt(xMove * xMove + yMove * yMove);
			flyMove(xMove / dif, yMove / dif, elapsed);
		}
	}
}
Exemplo n.º 8
0
	void WheelController::setEnabled(bool value) {
		std::unique_lock<std::mutex> guard(cmdLock);
		if (isEnabled && !value) { moveSpeed(0, 0); }
		isEnabled = value;
	}
Exemplo n.º 9
0
	WheelController::~WheelController() {
		try { moveSpeed(0, 0); } catch (...) { }
	}
Exemplo n.º 10
0
int main()
{
	enum Direction { Right, Left, Down, Up };

	sf::Vector2i blockDimensions(10, 10);

	sf::Vector2i source(1, Down);

	float frameCounter = 0, switchFrame = 100, frameSpeed = 500;

	srand(time(0));

	sf::RenderWindow window; 
	//2D Array Vector
	sf::Vector2u windowSize(800, 600);
	//Create the window
	window.create(sf::VideoMode(windowSize.x, windowSize.y), "RPG", sf::Style::Default);

	//Actual time
	sf::Clock clock;
	sf::Time time = sf::seconds(2);

	bool updateFrame = true;

	std::string message = "Hello my name is Max";
	std::string display = "";

	int index = 0;

	//Stops key repeat when holding down
	//window.setKeyRepeatEnabled(false);
	
	//Load in a font type
	sf::Font font;
	if (!font.loadFromFile("modern.fon"))
		std::cout << "Can't find font file" << std::endl;

	//Make a string, load into text, and do things with text
	sf::String sentence;
	sf::Text text(sentence, font, 40);
	text.setColor(sf::Color(44, 127, 255));
	text.setStyle(sf::Text::Bold | sf::Text::Underlined);

	//Images and Sprites
	sf::Texture playerTexture;
	//Loads in spritemap
	if (!playerTexture.loadFromFile("Monsters4.png"))
		std::cout << "Error: Could not load Player Image" << std::endl;

	sf::Sprite playerSprite;
	playerSprite.setTexture(playerTexture);
	playerSprite.setPosition(0, 0);

	//Checks controller connection before the game loop starts
	if (sf::Joystick::isConnected(0))
		std::cout << "Joystick 1 is connected" << std::endl;
	else
		std::cout << "Joystick 1 is disconnected" << std::endl;

	//Gets number of buttons on controller
	int buttonCount = sf::Joystick::getButtonCount(0);
	std::cout << "Number of controller buttons: " << buttonCount << std::endl;

	//Check if controller has axis
	bool hasAxis = sf::Joystick::hasAxis(0, sf::Joystick::Z);

	//Update loop
	while (window.isOpen())
	{
		//Make an event
		sf::Event evt;
		//Loop checking for any event
		while (window.pollEvent(evt))
		{
			//Event Finders
			switch (evt.type)
			{
				case sf::Event::Closed:
					window.close();
					break;
				//Various Mouse Events
				case sf::Event::MouseEntered:
					//std::cout << "Mouse in screen bounds" << std::endl;
					break;
				case sf::Event::MouseLeft:
					//std::cout << "Mouse not in screen bound" << std::endl;
					break;
				case sf::Event::MouseMoved:
					//std::cout << "X: " << evt.mouseMove.x << "Y: " << evt.mouseMove.y << std::endl;
					break;
				case sf::Event::MouseButtonPressed:
					if (evt.mouseButton.button == sf::Mouse::Left)
					//	std::cout << "Left Button Pressed at: X:" << evt.mouseButton.x << "Y: " << evt.mouseButton.y << std::endl;
					break;
				case sf::Event::MouseWheelMoved:
					//std::cout << "Delta: "/*Positive: Down, Negative: Up. Higher number = harder scrolling*/ << evt.mouseWheel.delta << std::endl;
					break;

				//Keyboard Events
				case sf::Event::KeyPressed:
					/*if (evt.key.code == sf::Keyboard::Return)
						window.close();
					else if (evt.key.code == sf::Keyboard::Up)
						source.y = Up;
					else if (evt.key.code == sf::Keyboard::Down)
					{
						source.y = Down;
						source.x++;
						if (source.x * 32 >= playerTexture.getSize().x)
							source.x = 0;
					}
						
					else if (evt.key.code == sf::Keyboard::Right)
						source.y = Right;
					else if (evt.key.code == sf::Keyboard::Left)
						source.y = Left;
					break;*/


				//Text Events (Letters Keyboard)
				case sf::Event::TextEntered:
					//Only regular characters
					if (evt.text.unicode != 8)
					{
						if (evt.text.unicode >= 33 && evt.text.unicode <= 126)
							display += (char)evt.text.unicode;
					}
					else if (evt.text.unicode == 8)
						display = display.substr(0, display.length() - 1);

					//CMD Code for clear -- clear for Linux/Mac
					system("cls");
					//std::cout << display;
					break;

				//Controller Events -- May change based on drivers
				case sf::Event::JoystickConnected:
					//Shows which joystick is connected
					//std::cout << "Joystick" << evt.joystickConnect.joystickId + 1 << "is connected" << std::endl;
					break;
				case sf::Event::JoystickDisconnected:
					//Shows which joystick is disconnected
					//std::cout << "Joystick" << evt.joystickConnect.joystickId + 1 << "is disconnected" << std::endl;
					break;
				//Use this one to change controller button mapping
				case sf::Event::JoystickButtonPressed:
					//std::cout << "Button: " << evt.joystickButton.button << std::endl;
					break;
				//Check position if controller
				case sf::Event::JoystickMoved:
					if (evt.joystickMove.axis == sf::Joystick::X)
					//	std::cout << "Position : " << evt.joystickMove.position << std::endl;
					break;


				//Window Events
				case sf::Event::GainedFocus:
					//std::cout << "Window now active" << std::endl;
					break;
				case sf::Event::LostFocus:
					//std::cout << "Window not active" << std::endl;
					break;
				case sf::Event::Resized:
					//std::cout << "Width: " << evt.size.width << "Height: " << evt.size.height << std::endl;
					break;
					
			}
		}
		
		//Live keyboard input -- Can hold down keys
		if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
		{
			source.y = Up;
			playerSprite.move(0, -0.1);
		}
		else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
		{
			source.y = Down;
			playerSprite.move(0, 0.1);
		}
		else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
		{
			source.y = Right;
			playerSprite.move(0.1, 0);
		}
		else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
		{
			source.y = Left;
			playerSprite.move(-0.1, 0);
		}

		sf::Vector2f moveSpeed(sf::Joystick::getAxisPosition(0, sf::Joystick::X), sf::Joystick::getAxisPosition(0, sf::Joystick::Y));

		if (moveSpeed.x > 0)
			source.y = Right;
		else if (moveSpeed.x < 0)
			source.y = Left;
		else if (moveSpeed.y < 0)
			source.y = Up;
		else if (moveSpeed.y > 0)
			source.y = Down;

		playerSprite.move(moveSpeed.x * clock.getElapsedTime().asSeconds(), moveSpeed.y * clock.getElapsedTime().asSeconds());
		

		//Gets actual position in window. Without parameter, mouse position for the monitor
		sf::Vector2i mousePosition = sf::Mouse::getPosition(window);
		//Sets a fixed position for mouse in window
		//sf::Mouse::setPosition(sf::Vector2i(100, 100), window);

		std::cout << "X: " << mousePosition.x << "Y: " << mousePosition.y << std::endl;

		//Live mouse input
		if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
			updateFrame = true;
		else if (sf::Mouse::isButtonPressed(sf::Mouse::Right))
			updateFrame = false;

		//Same as above for controller
		if (sf::Joystick::isButtonPressed(0, 1))
			updateFrame = true;
		else if (sf::Joystick::isButtonPressed(0, 2))
			updateFrame = false;

		//Starts sprite animation
		if (updateFrame)
			frameCounter += frameSpeed * clock.restart().asSeconds();
		else
			frameCounter = 0;
		
		//Change speed of animation
		if (frameCounter >= switchFrame)
		{
			frameCounter = 0;
			source.x++;
			if (source.x * 32 >= playerTexture.getSize().x)
				source.x = 0;
		}

		//Vertex Arrays are geometry objects
		/*for (int i = 0; i < windowSize.x / blockDimensions.x; i++)
		{
			for (int j = 0; j < windowSize.y / blockDimensions.y; j++)
			{
				sf::VertexArray vArray(sf::PrimitiveType::LinesStrip, 4);
				vArray[0].position = sf::Vector2f(i * blockDimensions.x, j * blockDimensions.y);
				vArray[1].position = sf::Vector2f(i * blockDimensions.x + blockDimensions.x, j * blockDimensions.y + blockDimensions.y);
				vArray[2].position = sf::Vector2f(i * blockDimensions.x + blockDimensions.x, j * blockDimensions.y + blockDimensions.y);
				vArray[3].position = sf::Vector2f(i * blockDimensions.x, j * blockDimensions.y + blockDimensions.y);

				for (int k = 0; k < 4; k++)
				{
					int red = rand() % 255;
					int green = rand() % 255;
					int blue = rand() % 255;

					vArray[k].color = sf::Color(red, green, blue);
				}
				window.draw(vArray);
			}
		}*/

		sf::RectangleShape rect(sf::Vector2f(100, 100)); 
		rect.setFillColor(sf::Color(255, 0, 0, 255));
		rect.setOutlineColor(sf::Color::Blue); 
		rect.setOutlineThickness(2.0f);
		rect.setPosition(sf::Vector2f(20, 20));
		rect.setTexture(&playerTexture);

		//Wait for an event to happen
		/*if (window.waitEvent(evt))
		{
			std::cout << "Event" << std::endl;
		}*/

		//Actual time
		time = clock.getElapsedTime(); //Can be one line
		clock.restart(); //Send up ^^^^^^
		

		

		playerSprite.setTextureRect(sf::IntRect(source.x * 32, source.y * 32, 32, 32));
		window.clear();
		//Draw to screen
		window.draw(playerSprite);
		window.draw(rect);
		//Update window
		window.display();
		
	}
}