Files
odin-iso-test/src/entity.odin
T
2026-08-03 21:11:00 +03:00

70 lines
1.1 KiB
Odin

package main
import hm "core:container/handle_map"
import rl "vendor:raylib"
MAX_GFX :: 2
Handle :: hm.Handle32
MAX_ENTITIES :: 1024
BaseEntity :: struct {
pos: rl.Vector2,
vel: rl.Vector2,
col_size: f32,
marked: bool,
gfx: [MAX_GFX]Graphics,
}
Actor :: struct {
using base: BaseEntity,
hp: i32,
max_hp: i32,
speed: f32,
}
EntityVariant :: union {
Player,
Enemy,
GroundItem,
FX,
}
Entity :: struct {
handle: Handle,
v: EntityVariant,
}
get_base :: proc(e: ^Entity) -> ^BaseEntity {
#partial switch &v in e.v {
case Player:
return cast(^BaseEntity)&v
case Enemy:
return cast(^BaseEntity)&v
case GroundItem:
return cast(^BaseEntity)&v
case FX:
return cast(^BaseEntity)&v
}
return nil
}
get_actor :: proc(e: ^Entity) -> ^Actor {
#partial switch &v in e.v {
case Player:
return &v.actor
case Enemy:
return &v.actor
}
return nil
}
get_player :: proc(state: ^GameState) -> (^Entity, ^Player) {
e := get_entity(state, state.player)
if e == nil do return nil, nil
p, ok := &e.v.(Player)
if !ok do return nil, nil
return e, p
}