aboutsummaryrefslogtreecommitdiff
path: root/src/player.odin
diff options
context:
space:
mode:
Diffstat (limited to 'src/player.odin')
-rw-r--r--src/player.odin68
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,
+ )
+}