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; }
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; } } }