X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_entity.h;h=c954052a4149ff924c0ddef42588e723c8630dac;hb=HEAD;hp=1e5e70c684d55e4ace42df0749ce31d008a602fb;hpb=4eb81766e4e7c54599b057ebf57b7fab01cd0726;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_entity.h b/world_entity.h index 1e5e70c..c954052 100644 --- a/world_entity.h +++ b/world_entity.h @@ -1,44 +1,46 @@ -#ifndef WORLD_ENTITY_H -#define WORLD_ENTITY_H - +#pragma once #include "world.h" #include "entity.h" -#include "bvh.h" -#include "save.h" +#include "vg/vg_bvh.h" #include "vg/vg_msg.h" -static void world_gen_entities_init( world_instance *world ); -static ent_spawn *world_find_spawn_by_name( world_instance *world, - const char *name ); -static ent_spawn *world_find_closest_spawn( world_instance *world, - v3f position ); -static void world_entity_start( world_instance *world, vg_msg *sav ); -static void world_entity_serialize( world_instance *world, vg_msg *sav ); - -static void ent_volume_call( world_instance *world, ent_call *call ); -static void ent_audio_call( world_instance *world, ent_call *call ); -static void ent_ccmd_call( world_instance *world, ent_call *call ); - -static void entity_bh_expand_bound( void *user, boxf bound, u32 item_index ); -static float entity_bh_centroid( void *user, u32 item_index, int axis ); -static void entity_bh_swap( void *user, u32 ia, u32 ib ); -static void entity_bh_debug( void *user, u32 item_index ); -static void entity_bh_closest( void *user, u32 item_index, v3f point, - v3f closest ); - -static void world_entity_focus( u32 entity_id ); -static void world_entity_focus_preupdate(void); -static void world_entity_focus_render(void); -static void world_entity_unfocus(); -static void world_entity_focus_camera( world_instance *world, u32 uid ); - -static bh_system bh_system_entity_list = { - .expand_bound = entity_bh_expand_bound, - .item_centroid = entity_bh_centroid, - .item_closest = entity_bh_closest, - .item_swap = entity_bh_swap, - .item_debug = entity_bh_debug, - .cast_ray = NULL +typedef struct ent_focus_context ent_focus_context; +struct ent_focus_context +{ + world_instance *world; + u32 index; /* Array index of the focused entity */ + bool active; }; -#endif /* WORLD_ENTITY_H */ +void world_gen_entities_init( world_instance *world ); +ent_spawn *world_find_spawn_by_name( world_instance *world, + const char *name ); +ent_spawn *world_find_closest_spawn( world_instance *world, + v3f position ); +void world_default_spawn_pos( world_instance *world, v3f pos ); +void world_entity_start( world_instance *world, vg_msg *sav ); +void world_entity_serialize( world_instance *world, vg_msg *sav ); + +entity_call_result ent_volume_call( world_instance *world, ent_call *call ); +entity_call_result ent_audio_call( world_instance *world, ent_call *call ); +entity_call_result ent_ccmd_call( world_instance *world, ent_call *call ); + +void entity_bh_expand_bound( void *user, boxf bound, u32 item_index ); +float entity_bh_centroid( void *user, u32 item_index, int axis ); +void entity_bh_swap( void *user, u32 ia, u32 ib ); +void entity_bh_debug( void *user, u32 item_index ); +void entity_bh_closest( void *user, u32 item_index, v3f point, + v3f closest ); + +void world_entity_set_focus( u32 entity_id ); +void world_entity_focus_modal(void); + +void world_entity_exit_modal(void); +void world_entity_clear_focus(void); + +void world_entity_focus_preupdate(void); +void world_entity_focus_render(void); +void world_entity_focus_camera( world_instance *world, u32 uid ); +void update_ach_models(void); + +extern bh_system bh_system_entity_list;