handlemap rewrite init
This commit is contained in:
+19
-30
@@ -3,36 +3,25 @@ package main
|
||||
import hm "core:container/handle_map"
|
||||
import rl "vendor:raylib"
|
||||
|
||||
Enemy :: struct {
|
||||
using actor: Actor,
|
||||
touch_dmg: i32,
|
||||
// ИИ врага — летит к игроку. Вызывается из диспатчера 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)
|
||||
}
|
||||
|
||||
enemy_update :: proc(state: ^GameState, p, e: ^Entity) {
|
||||
p := hm.get(&state.entities, state.player)
|
||||
// Мёртвые враги → лут
|
||||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// sys_enemy_ai :: proc(state: ^GameState) {
|
||||
// for &enemy in &state.enemies {
|
||||
// dir := state.player.pos - enemy.pos
|
||||
// set_vel(cast(^Entity2)&enemy, dir, enemy.speed)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// sys_death :: proc(state: ^GameState3) {
|
||||
// for &enemy in &state.enemies {
|
||||
// if enemy.hp > 0 || enemy.marked do continue
|
||||
// enemy.marked = true
|
||||
// init_entity(
|
||||
// state,
|
||||
// GroundItem3 {
|
||||
// ent = Entity2 {
|
||||
// GroundItem3 = enemy.pos,
|
||||
// GroundItem3 = {GroundItem3 = GfxCircle{GroundItem3 = {0, 0}, GroundItem3 = 6, GroundItem3 = {255, 220, 50, 255}}},
|
||||
// GroundItem3 = 10,
|
||||
// },
|
||||
// heal = 25,
|
||||
// },
|
||||
// )
|
||||
// }
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user