blob: b491bd596cdf3f646d90f407bee6b39e56198ec0 (
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
|
package demonchime
import "core:math/linalg"
import "core:log"
import "phys"
Upgrade_Type :: enum {
Dash = 0,
Double_Jump,
}
upgrade: struct {
active: bool,
image_id: Image_Id,
flag: ^bool,
pos: Vec2,
}
update_upgrade :: proc(_: f32) {
player_pos := phys.get_position(player.body)
if linalg.length2(player_pos - upgrade.pos) > 16*16 {
return
}
upgrade.flag^ = true
upgrade.active = false
}
draw_upgrade :: proc() {
if !upgrade.active {
return
}
draw_texture(get_image(upgrade.image_id), upgrade.pos)
}
object_spawner_upgrade :: proc(obj: Object_Resource) {
type_name_int, has_type_name := obj.properties["type"].(i32)
if has_type_name {
type_name := cast(Upgrade_Type)type_name_int
switch type_name {
case .Dash:
upgrade.flag = &player.owns_dash
case .Double_Jump:
upgrade.flag = &player.owns_double_jump
case:
log.warnf("property 'type' is an invalid enum (%v) %v", type_name_int, type_name)
return
}
} else {
log.warnf("property 'type' must be a string")
return
}
if upgrade.flag^ {
return
}
upgrade.pos = obj.pos
image_path, has_image_path := obj.properties["image"].(string)
if !has_image_path {
log.warnf("property 'image' must be a path or string")
return
}
image_id, has_image_id := path_to_resource_id[image_path].(Image_Id)
if !has_image_id {
log.warnf("property 'image' must point to an image resource")
return
}
upgrade.image_id = image_id
upgrade.active = true
}
|