Files
2026-08-03 21:11:00 +03:00

45 lines
1.0 KiB
Odin

package main
import rl "vendor:raylib"
// Навыки: Q — рывок, W — спин (AoE), E — хил
cast_skill :: proc(state: ^GameState, p: ^Player, kind: SkillKind) {
slot := skill_slot(p, kind)
if slot == -1 do return
s := &p.skills[slot]
if s.timer > 0 do return
s.timer = s.cd
switch kind {
case .Dash:
p.dash_timer = 0.2
p.vel = p.aim * 750
p.invuln_timer = 0.25
case .Spin:
init_attack(state, Attack{
parent = state.player,
dir = {1, 0},
dmg = player_total_dmg(p) * 2,
crit = player_crit(p),
radius = p.attack_range * 1.2,
arc = 6.28,
lifetime = 0.4,
color = {255, 200, 60, 80},
})
case .Heal:
p.hp = min(p.hp + player_max_hp(p) / 3, player_max_hp(p))
init_fx(state, FX{
parent = state.player,
lifetime = 0.5,
base = BaseEntity{gfx = {0 = GfxCircle{pos = {}, radius = 20, color = {80, 255, 120, 50}}}},
})
}
}
skill_slot :: proc(p: ^Player, kind: SkillKind) -> int {
for i in 0 ..< SKILL_COUNT {
if p.skills[i].kind == kind do return i
}
return -1
}