Split init into its own function

This commit is contained in:
Joseph Ferano 2024-08-25 19:19:45 +07:00
parent 53d6837328
commit 4fec0fda01

View File

@ -82,6 +82,39 @@ swap_n_pop :: proc(bullets: ^[dynamic]$T, idx: int) {
} }
} }
init_game :: proc() -> ^GameState {
start_pos := Vec2{BW / 2 - SHIP_W / 2, BH / 2 - SHIP_H / 2}
state := GameState {
dt = rl.GetFrameTime(),
player_state = Player {
pos = start_pos,
angle = -math.PI / 2,
},
bullets = make([dynamic]Bullet, 0, 64),
asteroids = make([dynamic]Asteroid, 0, 64),
asteroid_pop_idxs = make([dynamic]int, 0, 64),
bullet_pop_idxs = make([dynamic]int, 0, 64),
}
get_rand_angle :: proc(min: i32, max: i32) -> f32 {
return f32(rl.GetRandomValue(min, max)) * rl.DEG2RAD
}
for i := 0; i < 5; i += 1 {
rand_angle := get_rand_angle(-50, 50)
rand_pos := Vec2{ f32(rl.GetRandomValue(0, i32(BW))), -50 }
rand_size := f32(rl.GetRandomValue(25, 60))
rand_vy := f32(rl.GetRandomValue(1, 2)) * 0.5
asteroid := Asteroid {
rect = {rand_pos.x,rand_pos.y,rand_size,rand_size},
vel = Vec2{rand_angle, rand_vy} * 50,
rot = 0,
}
append(&state.asteroids, asteroid)
}
return new_clone(state)
}
player_input :: proc(s: ^GameState) { player_input :: proc(s: ^GameState) {
switch &player in s.player_state { switch &player in s.player_state {
case Player: case Player:
@ -189,47 +222,19 @@ main :: proc() {
rl.InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Asteroids") rl.InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Asteroids")
rl.SetTargetFPS(60) rl.SetTargetFPS(60)
start_pos := Vec2{BW / 2 - SHIP_W / 2, BH / 2 - SHIP_H / 2} state := init_game()
s := GameState{
dt = rl.GetFrameTime(),
player_state = Player {
pos = start_pos,
angle = -math.PI / 2,
},
bullets = make([dynamic]Bullet, 0, 64),
asteroids = make([dynamic]Asteroid, 0, 64),
asteroid_pop_idxs = make([dynamic]int, 0, 64),
bullet_pop_idxs = make([dynamic]int, 0, 64),
}
get_rand_angle :: proc(min: i32, max: i32) -> f32 {
return f32(rl.GetRandomValue(min, max)) * rl.DEG2RAD
}
for i := 0; i < 5; i += 1 {
rand_angle := get_rand_angle(-50, 50)
rand_pos := Vec2{ f32(rl.GetRandomValue(0, i32(BW))), -50 }
rand_size := f32(rl.GetRandomValue(25, 60))
rand_vy := f32(rl.GetRandomValue(1, 2)) * 0.5
asteroid := Asteroid {
rect = {rand_pos.x,rand_pos.y,rand_size,rand_size},
vel = Vec2{rand_angle, rand_vy} * 50,
rot = 0,
}
append(&s.asteroids, asteroid)
}
for !rl.WindowShouldClose() { for !rl.WindowShouldClose() {
s.dt = rl.GetFrameTime() state.dt = rl.GetFrameTime()
player_input(&s) player_input(state)
update(&s) update(state)
rl.BeginDrawing() rl.BeginDrawing()
rl.ClearBackground(rl.BLACK) rl.ClearBackground(rl.BLACK)
draw2d(&s) draw2d(state)
rl.EndDrawing() rl.EndDrawing()
} }