/* * Copyright 2017-2018, Intel Corporation * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the copyright holder nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "GameView.hpp" GameView::GameView(sf::Font &font) { sf::Color elementsColor(224, 224, 224); scoreP1.setFont(font); scoreP2.setFont(font); scoreP1.setCharacterSize(GAMEVIEW_SCORE_FONTSIZE); scoreP2.setCharacterSize(GAMEVIEW_SCORE_FONTSIZE); scoreP1.setPosition(WINDOW_WIDTH / 2 - SCORE_VIEW_OFFSET, SCORE_VIEW_OFFSET); scoreP2.setPosition(WINDOW_WIDTH / 2 + SCORE_VIEW_OFFSET - scoreP2.getGlobalBounds().width, SCORE_VIEW_OFFSET); scoreP1.setFillColor(sf::Color::Green); scoreP2.setFillColor(sf::Color::Green); upperLine.setPosition(VERTICAL_LINE_OFFSET, scoreP1.getPosition().y + HORIZONAL_LINE_OFFSET); upperLine.setSize(sf::Vector2f(WINDOW_WIDTH - 2 * VERTICAL_LINE_OFFSET, LINE_THICKNESS)); upperLine.setFillColor(elementsColor); downLine.setPosition(VERTICAL_LINE_OFFSET, WINDOW_HEIGHT - HORIZONAL_LINE_OFFSET); downLine.setSize(sf::Vector2f(WINDOW_WIDTH - 2 * VERTICAL_LINE_OFFSET + LINE_THICKNESS, LINE_THICKNESS)); downLine.setFillColor(elementsColor); leftLine.setPosition(VERTICAL_LINE_OFFSET, scoreP1.getPosition().y + HORIZONAL_LINE_OFFSET); leftLine.setSize(sf::Vector2f( LINE_THICKNESS, WINDOW_HEIGHT - (scoreP1.getPosition().y + 2 * HORIZONAL_LINE_OFFSET))); leftLine.setFillColor(elementsColor); rightLine.setPosition(WINDOW_WIDTH - VERTICAL_LINE_OFFSET, scoreP1.getPosition().y + HORIZONAL_LINE_OFFSET); rightLine.setSize(sf::Vector2f( LINE_THICKNESS, WINDOW_HEIGHT - (scoreP1.getPosition().y + 2 * HORIZONAL_LINE_OFFSET))); rightLine.setFillColor(elementsColor); court.setPosition(VERTICAL_LINE_OFFSET + LINE_THICKNESS, scoreP1.getPosition().y + HORIZONAL_LINE_OFFSET); court.setSize(sf::Vector2f( WINDOW_WIDTH - 2 * VERTICAL_LINE_OFFSET, WINDOW_HEIGHT - (scoreP1.getPosition().y + 2 * HORIZONAL_LINE_OFFSET))); court.setFillColor(sf::Color(60, 132, 48)); ballShape.setRadius(BALL_SIZE); ballShape.setPosition(sf::Vector2f(0, 0)); ballShape.setFillColor(elementsColor); rightPaddleShape.setSize(sf::Vector2f(PADDLE_WIDTH, PADDLE_HEIGHT)); leftPaddleShape.setSize(sf::Vector2f(PADDLE_WIDTH, PADDLE_HEIGHT)); leftPaddleShape.setPosition(sf::Vector2f(0, 0)); rightPaddleShape.setPosition(sf::Vector2f(0, 0)); leftPaddleShape.setFillColor(sf::Color::Red); rightPaddleShape.setFillColor(sf::Color::Red); } GameView::~GameView() { } void GameView::prepareView(PongGameStatus &gameStatus) { scoreP1.setString(std::to_string(gameStatus.getPlayer1()->getPoints())); scoreP2.setString(std::to_string(gameStatus.getPlayer2()->getPoints())); ballShape.setPosition( sf::Vector2f((float)gameStatus.getBall()->getX(), (float)gameStatus.getBall()->getY())); leftPaddleShape.setPosition( sf::Vector2f((float)gameStatus.getPlayer1()->getX(), (float)gameStatus.getPlayer1()->getY())); rightPaddleShape.setPosition( sf::Vector2f((float)gameStatus.getPlayer2()->getX(), (float)gameStatus.getPlayer2()->getY())); } void GameView::displayView(sf::RenderWindow *gameWindow) { gameWindow->clear(); gameWindow->draw(court); gameWindow->draw(upperLine); gameWindow->draw(leftLine); gameWindow->draw(downLine); gameWindow->draw(rightLine); gameWindow->draw(scoreP1); gameWindow->draw(scoreP2); gameWindow->draw(ballShape); gameWindow->draw(leftPaddleShape); gameWindow->draw(rightPaddleShape); gameWindow->display(); }