MXVK Vulkan Framework 0.33.1
C++20 Vulkan rendering framework for practical 2D and 3D application development with SDL3.
Loading...
Searching...
No Matches
anonymous_namespace{main.cpp}::PongGame Class Reference

Public Member Functions

const mxvk::vec4Dball () const
float computer_position () const
bool is_paused () const
int left_score () const
void move_player (float movement)
float player_position () const
 PongGame ()
void reset ()
int right_score () const
void set_player_position (float position)
void toggle_pause ()
void update (float delta_seconds)

Detailed Description

Definition at line 350 of file main.cpp.

Constructor & Destructor Documentation

◆ PongGame()

anonymous_namespace{main.cpp}::PongGame::PongGame ( )
inline

Definition at line 352 of file main.cpp.

353 : random_engine(std::random_device{}()) {
354 reset();
355 }

Member Function Documentation

◆ ball()

const mxvk::vec4D & anonymous_namespace{main.cpp}::PongGame::ball ( ) const
inlinenodiscard

Definition at line 411 of file main.cpp.

411{ return ball_position; }

◆ computer_position()

float anonymous_namespace{main.cpp}::PongGame::computer_position ( ) const
inlinenodiscard

Definition at line 410 of file main.cpp.

410{ return computer_y; }

◆ is_paused()

bool anonymous_namespace{main.cpp}::PongGame::is_paused ( ) const
inlinenodiscard

Definition at line 414 of file main.cpp.

414{ return paused; }

◆ left_score()

int anonymous_namespace{main.cpp}::PongGame::left_score ( ) const
inlinenodiscard

Definition at line 412 of file main.cpp.

412{ return player_score; }

◆ move_player()

void anonymous_namespace{main.cpp}::PongGame::move_player ( float movement)
inline

Definition at line 374 of file main.cpp.

374 {
375 set_player_position(player_y + movement);
376 }
void set_player_position(float position)
Definition main.cpp:370

◆ player_position()

float anonymous_namespace{main.cpp}::PongGame::player_position ( ) const
inlinenodiscard

Definition at line 409 of file main.cpp.

409{ return player_y; }

◆ reset()

void anonymous_namespace{main.cpp}::PongGame::reset ( )
inline

Definition at line 357 of file main.cpp.

357 {
358 player_y = 0.0f;
359 computer_y = 0.0f;
360 player_score = 0;
361 computer_score = 0;
362 paused = false;
363 reset_ball(random_direction());
364 }

◆ right_score()

int anonymous_namespace{main.cpp}::PongGame::right_score ( ) const
inlinenodiscard

Definition at line 413 of file main.cpp.

413{ return computer_score; }

◆ set_player_position()

void anonymous_namespace{main.cpp}::PongGame::set_player_position ( float position)
inline

Definition at line 370 of file main.cpp.

370 {
371 player_y = std::clamp(position, paddle_minimum_y(), paddle_maximum_y());
372 }

◆ toggle_pause()

void anonymous_namespace{main.cpp}::PongGame::toggle_pause ( )
inline

Definition at line 366 of file main.cpp.

366 {
367 paused = !paused;
368 }

◆ update()

void anonymous_namespace{main.cpp}::PongGame::update ( float delta_seconds)
inline

Definition at line 378 of file main.cpp.

378 {
379 if (paused) {
380 return;
381 }
382
383 const float target = ball_position.y;
384 const float difference = target - computer_y;
385 const float computer_movement = std::clamp(difference, -AI_SPEED * delta_seconds, AI_SPEED * delta_seconds);
386 computer_y = std::clamp(computer_y + computer_movement, paddle_minimum_y(), paddle_maximum_y());
387
388 ball_position += ball_velocity * delta_seconds;
389 if (ball_position.y + BALL_RADIUS >= COURT_HALF_HEIGHT) {
390 ball_position.y = COURT_HALF_HEIGHT - BALL_RADIUS;
391 ball_velocity.y = -std::abs(ball_velocity.y);
392 } else if (ball_position.y - BALL_RADIUS <= -COURT_HALF_HEIGHT) {
393 ball_position.y = -COURT_HALF_HEIGHT + BALL_RADIUS;
394 ball_velocity.y = std::abs(ball_velocity.y);
395 }
396
397 collide_with_paddle(-PADDLE_X, player_y, 1.0f);
398 collide_with_paddle(PADDLE_X, computer_y, -1.0f);
399
400 if (ball_position.x < -COURT_HALF_WIDTH - BALL_RADIUS) {
401 ++computer_score;
402 reset_ball(1.0f);
403 } else if (ball_position.x > COURT_HALF_WIDTH + BALL_RADIUS) {
404 ++player_score;
405 reset_ball(-1.0f);
406 }
407 }
constexpr float BALL_RADIUS
Definition main.cpp:35
constexpr float COURT_HALF_HEIGHT
Definition main.cpp:31
constexpr float PADDLE_X
Definition main.cpp:32
constexpr float COURT_HALF_WIDTH
Definition main.cpp:30

The documentation for this class was generated from the following file: