39 lines
730 B
Odin
39 lines
730 B
Odin
package main
|
|
import rl "vendor:raylib"
|
|
|
|
Enemy :: struct {
|
|
using actor: Actor,
|
|
touch_dmg: i32,
|
|
}
|
|
|
|
make_enemy :: proc(pos: rl.Vector2) -> Entity {
|
|
return Entity {
|
|
v = Enemy {
|
|
actor = Actor {
|
|
base = BaseEntity {
|
|
pos = pos,
|
|
col_size = 16,
|
|
gfx = {0 = GfxCircle{pos = {}, radius = 11, color = {220, 70, 70, 255}}},
|
|
},
|
|
hp = 40,
|
|
max_hp = 40,
|
|
speed = 55,
|
|
},
|
|
touch_dmg = 10,
|
|
},
|
|
}
|
|
}
|
|
|
|
enemy_update :: proc(state: ^GameState, e: ^Enemy, h: Handle, dt: f32) {
|
|
pe := get_entity(state, state.player)
|
|
if pe != nil {
|
|
dir := get_base(pe).pos - e.pos
|
|
e.vel = rl.Vector2Normalize(dir) * e.speed
|
|
}
|
|
|
|
if e.hp <= 0 && !e.marked {
|
|
e.marked = true
|
|
spawn(state, make_ground_item(e.pos))
|
|
}
|
|
}
|