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 // 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 dir_y := rand.choice([]f32{-0.1, 0.1}) // Slightly angled launch
ball.vel = rl.Vector2Normalize({dir_x, dir_y}) * ball.speed 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 level.serve_timer -= dt
if level.serve_timer <= 0 { if level.serve_timer <= 0 {
serve_ball(ball) serve_ball(ball, level.serve_dir)
} }
return return
@@ -86,12 +90,14 @@ update_ball :: proc(ball: ^Entity, level: ^Level, dt: f32) {
increment_score(&level.score_player, level.score_win, true, ball) increment_score(&level.score_player, level.score_win, true, ball)
reset_ball(ball) reset_ball(ball)
level.serve_timer = level.wait_time level.serve_timer = level.wait_time
level.serve_dir = 1
} }
if ball.pos.x <= field_bounds.x + ball.size.x { if ball.pos.x <= field_bounds.x + ball.size.x {
increment_score(&level.score_enemy, level.score_win, false, ball) increment_score(&level.score_enemy, level.score_win, false, ball)
reset_ball(ball) reset_ball(ball)
level.serve_timer = level.wait_time level.serve_timer = level.wait_time
level.serve_dir = 2
} }
ball.pos += ball.vel * dt ball.pos += ball.vel * dt
+2 -1
View File
@@ -21,6 +21,7 @@ Level :: struct {
player: Entity, player: Entity,
opponent: Entity, opponent: Entity,
ball: Entity, ball: Entity,
serve_dir: u8,
serve_timer: f32, serve_timer: f32,
wait_time: f32, wait_time: f32,
score_player: int, score_player: int,
@@ -55,7 +56,7 @@ init_level :: proc() -> Level {
ball = init_ball(), ball = init_ball(),
serve_timer = SERVE_WAIT_TIME, serve_timer = SERVE_WAIT_TIME,
wait_time = SERVE_WAIT_TIME, wait_time = SERVE_WAIT_TIME,
score_win = 1, score_win = 3,
score_player = 0, score_player = 0,
score_enemy = 0, score_enemy = 0,
particles = make([dynamic]Particle), particles = make([dynamic]Particle),