3d
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user