28 lines
695 B
Odin
28 lines
695 B
Odin
package main
|
|
|
|
import hm "core:container/handle_map"
|
|
import rl "vendor:raylib"
|
|
|
|
// ИИ врага — летит к игроку. Вызывается из диспатчера sys_update
|
|
enemy_update :: proc(state: ^GameState, e: ^Enemy, h: Handle, dt: f32) {
|
|
pe := get_entity(state, state.player)
|
|
if pe == nil do return
|
|
|
|
dir := get_base(pe).pos - e.pos
|
|
set_vel(&e.base, dir, e.speed)
|
|
}
|
|
|
|
// Мёртвые враги → лут
|
|
sys_death :: proc(state: ^GameState) {
|
|
it := hm.iterator_make(&state.entities)
|
|
for e, _ in hm.iterate(&it) {
|
|
#partial switch &v in e.v {
|
|
case Enemy:
|
|
if v.hp <= 0 && !v.marked {
|
|
v.marked = true
|
|
spawn(state, make_ground_item(v.pos))
|
|
}
|
|
}
|
|
}
|
|
}
|