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 } tex := get_image(upgrade.image_id) draw_texture( tex, upgrade.pos, offset = linalg.round(Vec2{f32(tex.width), f32(tex.height)} * 0.5) ) } 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_id, has_image_id := convert_path_to_resource(obj, "image").(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 }