From d6c52cecdae1a4f7030fa312f546c146765764d8 Mon Sep 17 00:00:00 2001 From: Jason Hilder Date: Thu, 8 Oct 2026 07:43:00 +0200 Subject: [PATCH] Setup serve direction after scoring --- src/entity_ball.odin | 12 +++++++++--- src/level_manager.odin | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/entity_ball.odin b/src/entity_ball.odin index a4158e5..de86e2c 100644 --- a/src/entity_ball.odin +++ b/src/entity_ball.odin @@ -21,9 +21,13 @@ init_ball :: proc() -> Entity { } } -serve_ball :: proc(ball: ^Entity) { +serve_ball :: proc(ball: ^Entity, serve_dir: u8) { + dir_x: f32 = 0.0 // Randomize initial direction: -1.0 or 1.0 - dir_x := f32(rand.float32() > 0.5 ? 1 : -1) + if serve_dir == 0 do dir_x = f32(rand.float32() > 0.5 ? 1 : -1) + if serve_dir == 1 do dir_x = 1.0 + if serve_dir == 2 do dir_x = -1.0 + dir_y := rand.choice([]f32{-0.1, 0.1}) // Slightly angled launch ball.vel = rl.Vector2Normalize({dir_x, dir_y}) * ball.speed } @@ -45,7 +49,7 @@ update_ball :: proc(ball: ^Entity, level: ^Level, dt: f32) { level.serve_timer -= dt if level.serve_timer <= 0 { - serve_ball(ball) + serve_ball(ball, level.serve_dir) } return @@ -86,12 +90,14 @@ update_ball :: proc(ball: ^Entity, level: ^Level, dt: f32) { increment_score(&level.score_player, level.score_win, true, ball) reset_ball(ball) level.serve_timer = level.wait_time + level.serve_dir = 1 } if ball.pos.x <= field_bounds.x + ball.size.x { increment_score(&level.score_enemy, level.score_win, false, ball) reset_ball(ball) level.serve_timer = level.wait_time + level.serve_dir = 2 } ball.pos += ball.vel * dt diff --git a/src/level_manager.odin b/src/level_manager.odin index 6e6b14b..7a8ada8 100644 --- a/src/level_manager.odin +++ b/src/level_manager.odin @@ -21,6 +21,7 @@ Level :: struct { player: Entity, opponent: Entity, ball: Entity, + serve_dir: u8, serve_timer: f32, wait_time: f32, score_player: int, @@ -55,7 +56,7 @@ init_level :: proc() -> Level { ball = init_ball(), serve_timer = SERVE_WAIT_TIME, wait_time = SERVE_WAIT_TIME, - score_win = 1, + score_win = 3, score_player = 0, score_enemy = 0, particles = make([dynamic]Particle),