56 lines
1.3 KiB
Odin
56 lines
1.3 KiB
Odin
package main
|
|
|
|
import rl "vendor:raylib"
|
|
|
|
SCREEN_W :: 1280
|
|
SCREEN_H :: 720
|
|
TARGET_FPS :: 60
|
|
|
|
main :: proc() {
|
|
rl.InitWindow(SCREEN_W, SCREEN_H, "ARPG Demo")
|
|
rl.SetTargetFPS(TARGET_FPS)
|
|
defer rl.CloseWindow()
|
|
|
|
gfx := gfx_init()
|
|
defer gfx_free(gfx)
|
|
|
|
camera := rl.Camera3D {
|
|
position = {0, 80, 80},
|
|
target = {0, 0, 0},
|
|
up = {0, 1, 0},
|
|
fovy = 400,
|
|
projection = .ORTHOGRAPHIC,
|
|
}
|
|
|
|
state := new(GameState)
|
|
state.camera = camera
|
|
state.collisions = make([dynamic]CollisionPair)
|
|
defer delete(state.collisions)
|
|
|
|
state.player = spawn(state, make_player(&gfx))
|
|
|
|
// spawn(state, make_enemy({400, 300}, .Brute))
|
|
// spawn(state, make_enemy({-400, 200}, .Scout))
|
|
// spawn(state, make_enemy({300, -350}, .Grunt))
|
|
// spawn(state, make_enemy({-300, -300}, .Scout))
|
|
// spawn(state, make_enemy({100, 400}, .Grunt))
|
|
// spawn(state, make_enemy({-150, 350}, .Grunt))
|
|
// spawn(state, make_enemy({450, -150}, .Brute))
|
|
// spawn(state, make_enemy({-450, 100}, .Scout))
|
|
|
|
for !rl.WindowShouldClose() {
|
|
dt := rl.GetFrameTime()
|
|
|
|
sys_input(state, dt)
|
|
sys_update(state, dt)
|
|
sys_sweep(state)
|
|
|
|
if pe := get_entity(state, state.player); pe != nil {
|
|
p := get_base(pe).pos
|
|
state.camera.target = {p.x, 0, p.y}
|
|
state.camera.position = state.camera.target + {600, 600, 600}
|
|
}
|
|
sys_draw(state)
|
|
}
|
|
}
|