aboutsummaryrefslogtreecommitdiff
path: root/src/main.odin
blob: 41af6e327d8ad373e1c4be0a117baf524cc98315 (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
69
70
71
72
73
74
75
76
77
78
79
80
package demonchime

// import "core:math"
// import "core:math/rand"
// import "core:time"

import "base:runtime"

import sg "shared:sokol/gfx"
import sapp "shared:sokol/app"
import sglue "shared:sokol/glue"
import slog "shared:sokol/log"

import "draw"

Vec2 :: [2]f32

state: struct {
  player: Player,

  renderer: draw.Renderer,

  input: Input,
}

init :: proc "c" () {
  context = runtime.default_context()

  sg.setup({
    environment = sglue.environment(),
    logger = {func=slog.func},
  })

  init_keybinds(&state.input)

  draw.init(&state.renderer)

  init_player(&state.player)
}

frame :: proc "c" () {
  context = runtime.default_context()

  update_player(&state.player, f32(sapp.frame_duration()))

  draw.new_frame(&state.renderer)

  draw_player(state.player)

  draw.end_frame(&state.renderer)
}

event :: proc "c" (event: ^sapp.Event) {
  context = runtime.default_context()

  if event.type == .KEY_DOWN && event.key_code == .ESCAPE {
    sapp.quit()
  }

  input_event(event, &state.input)
}

cleanup :: proc "c" () {
  context = runtime.default_context()
  sg.shutdown()
}

main :: proc() {
  sapp.run({
    init_cb = init,
    frame_cb = frame,
    event_cb = event,
    cleanup_cb = cleanup,
    width = 800,
    height = 600,
    window_title = "Demonchime",
    icon = {sokol_default = true},
    logger = {func=slog.func},
  })
}