diff options
| author | Xander Swan <email> | 2025-12-03 09:52:13 -0500 |
|---|---|---|
| committer | Xander Swan <email> | 2025-12-03 09:52:13 -0500 |
| commit | b6cf1d104da53ec9c30dc45c35d9de48812f0afc (patch) | |
| tree | 49421206d8d866e82a8a743cba5ced494cbfc785 /src/player.odin | |
Initial commit
Diffstat (limited to 'src/player.odin')
| -rw-r--r-- | src/player.odin | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/player.odin b/src/player.odin new file mode 100644 index 0000000..01bc02b --- /dev/null +++ b/src/player.odin @@ -0,0 +1,68 @@ +package demonchime + +import "core:fmt" +import "core:math" +import "core:math/linalg" + +import sapp "shared:sokol/app" + +import "draw" + +Player :: struct { + pos: Vec2, + anim: draw.Animation, + sprite: draw.Sprite, +} + +init_player :: proc(player: ^Player) { + anim_ok := draw.init_anim_data(&player.anim, "res/robot2.json") + if !anim_ok { + fmt.println("coult not load animation") + sapp.quit() + return + } + + draw.init_sprite(&player.sprite, player.anim.image_path, player.anim) +} + +deinit_player :: proc(player: ^Player) { + draw.delete_anim_data(player.anim) +} + +update_player :: proc(player: ^Player, dt: f32) { + SPEED :: 100 + + input: Vec2 + + if is_keybind_down(state.input, state.input.move_up) { + input.y -= 1 + } + if is_keybind_down(state.input, state.input.move_left) { + input.x -= 1 + } + if is_keybind_down(state.input, state.input.move_down) { + input.y += 1 + } + if is_keybind_down(state.input, state.input.move_right) { + input.x += 1 + } + + if linalg.length2(input) > 0 { + input = linalg.normalize(input) + draw.set_sprite_active_tag(&player.sprite, "down_run") + } else { + draw.set_sprite_active_tag(&player.sprite, "down_idle") + } + + player.pos += input * SPEED * dt + + draw.update_sprite(&player.sprite, dt) +} + +draw_player :: proc(player: Player) { + draw.draw_sprite( + &state.renderer, + player.sprite, + player.pos, + ) +} |
