diff options
Diffstat (limited to 'src/games/pong')
| -rw-r--r-- | src/games/pong/Pong.cpp | 140 | ||||
| -rw-r--r-- | src/games/pong/Pong.hpp | 42 |
2 files changed, 0 insertions, 182 deletions
diff --git a/src/games/pong/Pong.cpp b/src/games/pong/Pong.cpp deleted file mode 100644 index 9a77f38..0000000 --- a/src/games/pong/Pong.cpp +++ /dev/null @@ -1,140 +0,0 @@ -#include "games/pong/Pong.hpp" -#include "games/Game.hpp" -#include "common/shapes.hpp" -#include "renderer/Renderer.hpp" - - -void -Pong::Start() -{ - m_paddles[0].dir = NONE; - m_paddles[0].y = 1.5f; - - m_paddles[1].dir = NONE; - m_paddles[1].y = 1.5f; - - m_ball.circle.x = 2.0f; - m_ball.circle.y = 1.5f; - m_ball.circle.r = 0.1f; - - m_ball.velocity.x = 1.0f; - m_ball.velocity.y = 0.0f; - - m_game_status = game_resume; -} - -void -Pong::ProcessEvent(SDL_Event& event) -{ - switch (event.type) { - case SDL_EVENT_KEY_DOWN: { - auto key = event.key.key; - if (key == SDLK_ESCAPE) { - m_game_status = game_pause; - } - else if (key == SDLK_W) { - m_paddles[0].dir = UP; - } - else if (key == SDLK_S) { - m_paddles[0].dir = DOWN; - } - else if (key == SDLK_UP) { - m_paddles[1].dir = UP; - } - else if (key == SDLK_DOWN) { - m_paddles[1].dir = DOWN; - } - } break; - - case SDL_EVENT_KEY_UP: { - auto key = event.key.key; - if (key == SDLK_W && m_paddles[0].dir == UP) { - m_paddles[0].dir = NONE; - } - else if (key == SDLK_S && m_paddles[0].dir == DOWN) { - m_paddles[0].dir = NONE; - } - else if (key == SDLK_UP && m_paddles[1].dir == UP) { - m_paddles[1].dir = NONE; - } - else if (key == SDLK_DOWN && m_paddles[1].dir == DOWN) { - m_paddles[1].dir = NONE; - } - } break; - - default:; - } -} - -void -Pong::FinishUpdate(float dt) -{ - MoveBall(dt); - MovePaddle(m_paddles[0], dt); - MovePaddle(m_paddles[1], dt); -} - -void -Pong::MovePaddle(Paddle& paddle, float dt) -{ - if (paddle.dir) { - paddle.y += (float)paddle.dir * (PADDLE_SPEED * dt); - } - - if (paddle.y <= 0.0f) { - paddle.y = 0.0f; - } - if (paddle.y + PADDLE_HEIGHT > 3.0f) { - paddle.y = 3.0f - PADDLE_HEIGHT; - } -} - -void -Pong::MoveBall(float dt) -{ - // Todo: do physics! find trajectories, find intersection, bounce off properly - - m_ball.circle.x += m_ball.velocity.x * dt; - m_ball.circle.y += m_ball.velocity.y * dt; - if (m_ball.circle.x - m_ball.circle.r <= PADDLE_WIDTH) { - m_ball.circle.x = PADDLE_WIDTH + m_ball.circle.r; - m_ball.velocity.x *= -1.0f; - m_ball.velocity.y *= -1.0f; - } - if (m_ball.circle.x + m_ball.circle.r > 4.0f - PADDLE_WIDTH) { - m_ball.circle.x = 4.0f - PADDLE_WIDTH - m_ball.circle.r; - m_ball.velocity.x *= -1.0f; - m_ball.velocity.y *= -1.0f; - } -} - -void -Pong::Draw() -{ - Color paddle_color = {0.6f, 0.3f, 0.3f, 1.0f}; - Rectangle paddle1_rect = { - 0.0f, - m_paddles[0].y, - 0.0f + PADDLE_WIDTH, - m_paddles[0].y + PADDLE_HEIGHT - }; - Rectangle paddle2_rect = { - 4.0f - PADDLE_WIDTH, - m_paddles[1].y, - 4.0f, - m_paddles[1].y + PADDLE_HEIGHT - }; - g_renderer.PushRectangle(paddle1_rect, paddle_color, z_layer1); - g_renderer.PushRectangle(paddle2_rect, paddle_color, z_layer1); - - // Todo: draw a circle - Rectangle ball_rectangle = { - m_ball.circle.x - m_ball.circle.r, - m_ball.circle.y - m_ball.circle.r, - m_ball.circle.x + m_ball.circle.r, - m_ball.circle.y + m_ball.circle.r - }; - Color ball_color = {0.3f, 0.5f, 0.3f, 1.0f}; - g_renderer.PushRectangle(ball_rectangle, ball_color, z_layer1); -} - diff --git a/src/games/pong/Pong.hpp b/src/games/pong/Pong.hpp deleted file mode 100644 index ec6145b..0000000 --- a/src/games/pong/Pong.hpp +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include "games/Game.hpp" -#include "common/shapes.hpp" - - -class Pong : public Game { - enum PaddleDirection { - NONE = 0, - UP = 1, - DOWN = -1 - }; - - struct Paddle { - float y; - PaddleDirection dir; - }; - - struct Ball { - Circle circle; - V2F32 velocity; - }; - - static constexpr float PADDLE_HEIGHT = 0.5f; - static constexpr float PADDLE_WIDTH = 0.2f; - static constexpr float PADDLE_SPEED = 1.0f; - -private: - void Start() override; - void ProcessEvent(SDL_Event& event) override; - void FinishUpdate(float dt) override; - void Draw() override; - -private: - void MovePaddle(Paddle& paddle, float dt); - void MoveBall(float dt); - -private: - Paddle m_paddles[2]; - Ball m_ball; -}; - |
