diff --git a/.gitignore b/.gitignore index 2780213..9ac9953 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /assetsviewer +/topdown diff --git a/Assets/reticle.png b/Assets/reticle.png new file mode 100644 index 0000000..e251be2 Binary files /dev/null and b/Assets/reticle.png differ diff --git a/assetsviewer.odin b/assetsviewer.odin index eea9839..ba2ac1e 100644 --- a/assetsviewer.odin +++ b/assetsviewer.odin @@ -47,10 +47,11 @@ init_state :: proc() -> ^AppState { for path in state.image_paths { path := strings.clone_to_cstring(path) + defer delete(path) img := rl.LoadImage(path) + defer rl.UnloadImage(img) tex := rl.LoadTextureFromImage(img) append(&state.textures, tex) - rl.UnloadImage(img) } set_sprite_info(&state) diff --git a/topdown.odin b/topdown.odin index 5694cb4..bc0069a 100644 --- a/topdown.odin +++ b/topdown.odin @@ -7,33 +7,77 @@ import "core:fmt" Vec2 :: [2]f32 Rect :: rl.Rectangle +Img :: rl.Image +Tex :: rl.Texture +Key :: rl.KeyboardKey SCREEN_WIDTH : i32 = 1000 SCREEN_HEIGHT : i32 = 800 BW := f32(SCREEN_WIDTH) BH := f32(SCREEN_HEIGHT) +Soldier :: struct { + position: Vec2, + velocity: Vec2, +} + GameState :: struct { dt: f32, + keymap: map[string]Key, + reticle: Tex, + idle: Tex, + run: Tex, + player: Soldier, } init_state :: proc() -> ^GameState { - state := GameState {} + idle := rl.LoadImage("./Assets/Enemies/Jungle&City variant/Assault Soldier/idle.png") + defer rl.UnloadImage(idle) + run := rl.LoadImage("./Assets/Enemies/Jungle&City variant/Assault Soldier/walk.png") + defer rl.UnloadImage(run) + reticle := rl.LoadImage("Assets/reticle.png") + defer rl.UnloadImage(reticle) + + keymap := make(map[string]Key) + keymap["Left"] = .A + keymap["Right"] = .D + keymap["Up"] = .W + keymap["Down"] = .S + + state := GameState { + reticle = rl.LoadTextureFromImage(reticle), + idle = rl.LoadTextureFromImage(idle), + run = rl.LoadTextureFromImage(run), + keymap = keymap + } return new_clone(state) } player_input :: proc(s: ^GameState) { + horizontal := rl.IsKeyDown(s.keymap["Left"]) ? -1 : rl.IsKeyDown(s.keymap["Right"]) ? 1 : 0 + vertical := rl.IsKeyDown(s.keymap["Up"]) ? -1 : rl.IsKeyDown(s.keymap["Down"]) ? 1 : 0 + dir := rl.Vector2Normalize({f32(horizontal), f32(vertical)}) + s.player.position += dir * (250 * s.dt) } update :: proc(s: ^GameState) { } draw2d :: proc(s: ^GameState) { + pos := rl.GetMousePosition() - {f32(s.reticle.width) / 2, f32(s.reticle.height) / 2} + // rl.DrawTextureEx(s.idle, s.player.position, 0, 4, rl.WHITE) + w :f32 = 16 + src := Rect{0, 0, pos.x < s.player.position.x ? -w + 1 : w, w} + dst := Rect{s.player.position.x, s.player.position.y, w * 4, w * 4} + rl.DrawTexturePro(s.idle, src, dst, {0,0}, 0, rl.WHITE) + + rl.DrawTextureV(s.reticle, pos, rl.WHITE); } main :: proc() { rl.SetTraceLogLevel(.ERROR) rl.InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Asteroids") + rl.HideCursor() rl.SetTargetFPS(60) state := init_state() @@ -47,12 +91,13 @@ main :: proc() { update(state) rl.BeginDrawing() - rl.ClearBackground(rl.BLACK) + rl.ClearBackground(rl.RAYWHITE) draw2d(state) rl.EndDrawing() } + rl.UnloadTexture(state.reticle) rl.CloseWindow() }