Setup serve direction after scoring

This commit is contained in:
2026-10-08 07:43:00 +02:00
parent 25bd7a85a1
commit d6c52cecda
2 changed files with 11 additions and 4 deletions
+9 -3
View File
@@ -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