Setup serve direction after scoring
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user