Exemple #1
0
bool Collision::CircleSegmentCollision(sf::Vector2f circleCenter, int radius, sf::Vector2f pointA, sf::Vector2f pointB)///Collision type Cercle - Segement
{
    std::cout<<"\nTest 1 Point A <"<<pointA.x<<","<<pointA.y<<"> Point B <"<<pointB.x<<","<<pointB.y<<">";
    if(!CircleDroiteCollision(pointA, pointB, circleCenter, radius))
        return false;
    std::cout<<" - Completed\nTest 2";
    sf::Vector2f AB(pointB.x - pointA.x, pointB.y - pointA.y);
    sf::Vector2f AC(circleCenter.x - pointA.x, circleCenter.y - pointA.y);
    sf::Vector2f BC(circleCenter.x - pointB.x, circleCenter.y - pointB.y);
    float pascal1 = AB.x * AC.x + AB.y * AC.y;
    float pascal2 = (-AB.x)*BC.x + (-AB.y)*BC.y;
    std::cout<<" - Completed\nTest 3";
    if(pascal1 >= 0 && pascal2 >=0)
        return true;
    std::cout<<" - Completed\nTest 4";
    if(PointCircleCollision(pointA, circleCenter, radius))
        return true;
    std::cout<<" - Completed\nTest 5";
    if(PointCircleCollision(pointB, circleCenter, radius))
        return true;
    std::cout<<" - Completed";
    return false;
}
Exemple #2
0
void InputHandling(void)
{
	//If delete save option is up
	if(deleteSave)
	{
		// Mouse location data
		int worldX, worldY;
		Vec2 MouseHover;

		FoxInput_GetWorldPosition(&worldX, &worldY);
		Vec2Set(&MouseHover, (float)worldX, (float)worldY);

		//Adjust scales when mouse is on the delete save button
		if(PointRectCollision(&YesButton->ButtonCollider, &MouseHover))
		{
			YesButton->ButtonSprite->ScaleX = 1.1f;
			YesButton->ButtonSprite->ScaleY = 1.1f;

			NoButton->ButtonSprite->ScaleX = 1.0f;
			NoButton->ButtonSprite->ScaleY = 1.0f;
		}
		//On the back button
		else if(PointRectCollision(&NoButton->ButtonCollider, &MouseHover))
		{
			YesButton->ButtonSprite->ScaleX = 1.0f;
			YesButton->ButtonSprite->ScaleY = 1.0f;

			NoButton->ButtonSprite->ScaleX = 1.1f;
			NoButton->ButtonSprite->ScaleY = 1.1f;
		}
		//Back to normal
		else
		{
			YesButton->ButtonSprite->ScaleX = 1.0f;
			YesButton->ButtonSprite->ScaleY = 1.0f;

			NoButton->ButtonSprite->ScaleX = 1.0f;
			NoButton->ButtonSprite->ScaleY = 1.0f;
		}


		//On click
		if(FoxInput_MouseTriggered(MOUSE_BUTTON_LEFT))
		{
			//Get mouse info
			int worldX, worldY;
			Vec2 MouseClick;

			FoxInput_GetWorldPosition(&worldX, &worldY);
			Vec2Set(&MouseClick, (float)worldX, (float)worldY);

			//We want a new game right meow!
			if(PointRectCollision(&YesButton->ButtonCollider, &MouseClick))
			{
				if(remove(GameData))
					printf("SOMETHING WENT WRONG\n");
				SetNextState(GS_CharacterSelect);
			}
			//I'm so close, lets just continue!
			else if(PointRectCollision(&NoButton->ButtonCollider, &MouseClick))
			{
				//Hides all the save deletion sprites
				deleteSave = FALSE;
				BlackBackground->Visible = FALSE;
				DeleteText->Visible = FALSE;
				YesButton->ButtonSprite->Visible = FALSE;
				NoButton->ButtonSprite->Visible = FALSE;
			}
		}
	}
	//If exit confirmation is up
	else if(exitGame)
	{
		//Get mouse info
		int worldX, worldY;
		Vec2 MouseClick;

		FoxInput_GetWorldPosition(&worldX, &worldY);
		Vec2Set(&MouseClick, (float)worldX, (float)worldY);

		// All for exit button
		if(PointRectCollision(&ExitButton->ButtonCollider, &MouseClick))
		{
			if(FoxInput_MouseTriggered(MOUSE_BUTTON_LEFT))
			{
				SetNextState(GS_Quit);
			}
			ExitButton->ButtonSprite->ScaleX = 1.2f;
			ExitButton->ButtonSprite->ScaleY = 1.2f;
		}
		else
		{
			ExitButton->ButtonSprite->ScaleX = 1.0f;
			ExitButton->ButtonSprite->ScaleY = 1.0f;
		}

		// All for the don't quit button
		if(PointRectCollision(&NoButton->ButtonCollider, &MouseClick))
		{
			if(FoxInput_MouseTriggered(MOUSE_BUTTON_LEFT))
			{
				//Hides all the save deletion sprites
				exitGame = FALSE;
				BlackBackground->Visible = FALSE;
				ExitConfirm->Visible = FALSE;
				ExitButton->ButtonSprite->Visible = FALSE;
				NoButton->ButtonSprite->Visible = FALSE;

				NoButton->ButtonSprite->ScaleX = 1.0f;
				NoButton->ButtonSprite->ScaleY = 1.0f;
			}
			else
			{
				NoButton->ButtonSprite->ScaleX = 1.2f;
				NoButton->ButtonSprite->ScaleY = 1.2f;
			}
		}
		else
		{
			NoButton->ButtonSprite->ScaleX = 1.0f;
			NoButton->ButtonSprite->ScaleY = 1.0f;
		}
	}
	//Mouse clicks for the regular buttons
	else if(FoxInput_MouseTriggered(MOUSE_BUTTON_LEFT))
	{
		//Get mouse position
		int worldX, worldY;
		Vec2 MouseClick;

		FoxInput_GetWorldPosition(&worldX, &worldY);
		Vec2Set(&MouseClick, (float)worldX, (float)worldY);
		//New game button
		if(PointRectCollision(&NewGameButton->ButtonCollider, &MouseClick))
		{
			//If a save file exists bring up the save game deletion stuff
			if(!canLoad)
			{
				SetNextState(GS_CharacterSelect);
			}
			else
			{
				deleteSave = TRUE;
				BlackBackground->Visible = TRUE;
				DeleteText->Visible = TRUE;
				YesButton->ButtonSprite->Visible = TRUE;
				NoButton->ButtonSprite->Visible = TRUE;
			}
		}
		//Load game button only activates if there is a save game file
		else if(canLoad && PointRectCollision(&LoadGameButton->ButtonCollider, &MouseClick))
		{
			//Loads the map level with the player at the correct spot
			SetNextState(GS_MapLevel);
		}
		//Options button
		else if(PointRectCollision(&OptionsButton->ButtonCollider, &MouseClick))
		{
			SetNextState(GS_Options);
		}
		//Roll those credits!
		else if(PointRectCollision(&CreditsButton->ButtonCollider, &MouseClick))
		{
			// Load Game Function hurrr
			SetNextState(GS_Credits);
		}
		//No one ever wants to quit...
		else if(PointRectCollision(&QuitGameButton->ButtonCollider, &MouseClick))
		{
			//Quit game :(
			exitGame = TRUE;
			BlackBackground->Visible = TRUE;
			ExitConfirm->Visible = TRUE;
			ExitButton->ButtonSprite->Visible = TRUE;
			NoButton->ButtonSprite->Visible = TRUE;

			NoButton->ButtonSprite->ScaleX = 1.0f;
			NoButton->ButtonSprite->ScaleY = 1.0f;

			ExitButton->ButtonSprite->ScaleX = 1.0f;
			ExitButton->ButtonSprite->ScaleY = 1.0f;
		}
	}
	//Mouse hover stuff
	else 
	{
		// Mouse location data
		int worldX, worldY;
		Vec2 MouseHover;

		FoxInput_GetWorldPosition(&worldX, &worldY);
		Vec2Set(&MouseHover, (float)worldX, (float)worldY);
		//Adjust scales when mouse is on the new game button
		if(PointCircleCollision(&NewGameButton->ButtonCollider.Position, NewGameButton->ButtonSprite->Width / 2.0f, &MouseHover))
		{
			NewGameButton->ButtonSprite->ScaleX = 1.1f;
			NewGameButton->ButtonSprite->ScaleY = 1.1f;

			LoadGameButton->ButtonSprite->ScaleX = 1.0f;
			LoadGameButton->ButtonSprite->ScaleY = 1.0f;

			OptionsButton->ButtonSprite->ScaleX = 1.0f;
			OptionsButton->ButtonSprite->ScaleY = 1.0f;

			CreditsButton->ButtonSprite->ScaleX = 1.0f;
			CreditsButton->ButtonSprite->ScaleY = 1.0f;

			QuitGameButton->ButtonSprite->ScaleX = 1.0f;
			QuitGameButton->ButtonSprite->ScaleY = 1.0f;
		}
		// Not the new game button
		else
		{
			//Scale back to normal size
			NewGameButton->ButtonSprite->ScaleX = 1.0f;
			NewGameButton->ButtonSprite->ScaleY = 1.0f;

			//Hover if mouse collision and you can load the game
			if(canLoad && PointRectCollision(&LoadGameButton->ButtonCollider, &MouseHover))
			{
				LoadGameButton->ButtonSprite->ScaleX = 1.2f;
				LoadGameButton->ButtonSprite->ScaleY = 1.2f;
			}
			// Back to normal
			else
			{
				LoadGameButton->ButtonSprite->ScaleX = 1.0f;
				LoadGameButton->ButtonSprite->ScaleY = 1.0f;
			}
			//Options hover effect
			if(PointRectCollision(&OptionsButton->ButtonCollider, &MouseHover))
			{
				OptionsButton->ButtonSprite->ScaleX = 1.2f;
				OptionsButton->ButtonSprite->ScaleY = 1.2f;
			}
			//Options back to normal
			else
			{
				OptionsButton->ButtonSprite->ScaleX = 1.0f;
				OptionsButton->ButtonSprite->ScaleY = 1.0f;
			}
			//Credits hover effect
			if(PointRectCollision(&CreditsButton->ButtonCollider, &MouseHover))
			{
				CreditsButton->ButtonSprite->ScaleX = 1.2f;
				CreditsButton->ButtonSprite->ScaleY = 1.2f;
			}
			//Credits back to normal
			else
			{
				CreditsButton->ButtonSprite->ScaleX = 1.0f;
				CreditsButton->ButtonSprite->ScaleY = 1.0f;
			}
			//I guess we should make the quit button have a hover effect
			if(PointRectCollision(&QuitGameButton->ButtonCollider, &MouseHover))
			{
				QuitGameButton->ButtonSprite->ScaleX = 1.2f;
				QuitGameButton->ButtonSprite->ScaleY = 1.2f;
			}
			//Yay! Back to normal!
			else
			{
				QuitGameButton->ButtonSprite->ScaleX = 1.0f;
				QuitGameButton->ButtonSprite->ScaleY = 1.0f;
			}
		}
	}

	// check if forcing the application to quit
	if (FoxInput_KeyTriggered(VK_ESCAPE))
	{
		if(!exitGame)
		{
			exitGame = TRUE;
			BlackBackground->Visible = TRUE;
			ExitConfirm->Visible = TRUE;
			ExitButton->ButtonSprite->Visible = TRUE;
			NoButton->ButtonSprite->Visible = TRUE;

			NoButton->ButtonSprite->ScaleX = 1.0f;
			NoButton->ButtonSprite->ScaleY = 1.0f;

			ExitButton->ButtonSprite->ScaleX = 1.0f;
			ExitButton->ButtonSprite->ScaleY = 1.0f;
		}
		else
		{
			exitGame = FALSE;
			BlackBackground->Visible = FALSE;
			ExitConfirm->Visible = FALSE;
			ExitButton->ButtonSprite->Visible = FALSE;
			NoButton->ButtonSprite->Visible = FALSE;
		}
	}
}