This commit is contained in:
2026-08-03 21:11:00 +03:00
parent 8f596735e1
commit 06e41fc7da
33 changed files with 2180 additions and 356 deletions
+72
View File
@@ -0,0 +1,72 @@
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,
Attack,
}
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
case Attack:
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
}