Split init into its own function
This commit is contained in:
parent
53d6837328
commit
4fec0fda01
71
game.odin
71
game.odin
@ -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) {
|
||||
switch &player in s.player_state {
|
||||
case Player:
|
||||
@ -189,47 +222,19 @@ main :: proc() {
|
||||
rl.InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Asteroids")
|
||||
rl.SetTargetFPS(60)
|
||||
|
||||
start_pos := Vec2{BW / 2 - SHIP_W / 2, BH / 2 - SHIP_H / 2}
|
||||
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)
|
||||
}
|
||||
state := init_game()
|
||||
|
||||
for !rl.WindowShouldClose() {
|
||||
s.dt = rl.GetFrameTime()
|
||||
state.dt = rl.GetFrameTime()
|
||||
|
||||
player_input(&s)
|
||||
player_input(state)
|
||||
|
||||
update(&s)
|
||||
update(state)
|
||||
|
||||
rl.BeginDrawing()
|
||||
rl.ClearBackground(rl.BLACK)
|
||||
|
||||
draw2d(&s)
|
||||
draw2d(state)
|
||||
|
||||
rl.EndDrawing()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user