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
|
// 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
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
Reference in New Issue
Block a user