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) {
|
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()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user