aboutsummaryrefslogtreecommitdiff
path: root/src/player.odin
blob: 01bc02b9f386a01bd31160a9e73b039c9fe98556 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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,
  )
}