X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=entity.c;h=ffb5deed5d9c0c9e905e1c39335b80c8173e04fe;hb=HEAD;hp=44b00df235f0f1d9e8ddc4d60f17390abd109c32;hpb=fdfd087053eb596f1e9123951af8acee94d8cd99;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/entity.c b/entity.c index 44b00df..ffb5dee 100644 --- a/entity.c +++ b/entity.c @@ -1,24 +1,24 @@ -#ifndef ENTITY_C -#define ENTITY_C - #include "world.h" #include "entity.h" #include "world_entity.h" -#include "ent_skateshop.c" -#include "ent_objective.c" -#include "ent_challenge.c" -#include "ent_relay.c" -#include "ent_route.c" -#include "ent_portal.c" -#include "ent_miniworld.c" -#include "ent_region.c" -#include "ent_traffic.c" +#include "ent_objective.h" +#include "ent_skateshop.h" +#include "ent_relay.h" +#include "ent_challenge.h" +#include "ent_route.h" +#include "ent_miniworld.h" +#include "ent_region.h" +#include "ent_glider.h" +#include "ent_npc.h" +#include "world_water.h" -typedef void (*fn_entity_call_handler)( world_instance *, ent_call *); +#include -static void entity_call( world_instance *world, ent_call *call ){ - u32 type = mdl_entity_id_type( call->id ); +void entity_call( world_instance *world, ent_call *call ) +{ + u32 type = mdl_entity_id_type( call->id ), + index = mdl_entity_id_id( call->id ); fn_entity_call_handler table[] = { [k_ent_volume] = ent_volume_call, @@ -31,7 +31,10 @@ static void entity_call( world_instance *world, ent_call *call ){ [k_ent_challenge] = ent_challenge_call, [k_ent_route] = ent_route_call, [k_ent_miniworld] = ent_miniworld_call, - [k_ent_region] = ent_region_call + [k_ent_region] = ent_region_call, + [k_ent_glider] = ent_glider_call, + [k_ent_npc] = ent_npc_call, + [k_ent_water] = ent_water_call, }; if( type >= vg_list_size(table) ){ @@ -41,12 +44,34 @@ static void entity_call( world_instance *world, ent_call *call ){ fn_entity_call_handler fn = table[ type ]; - if( !fn ){ - vg_error( "call to entity type: %u is undefined\n", type ); + if( !fn ) + { + vg_error( "Entity type %u does not have a call handler, " + "but was called anyway\n", type ); return; } - fn( world, call ); + enum entity_call_result res = fn( world, call ); + + if( res == k_entity_call_result_unhandled ) + { + vg_warn( "Call to entity %u#%u was unhandled.\n", type, index ); + } +} + +ent_marker *ent_find_marker( mdl_context *mdl, mdl_array_ptr *arr, + const char *alias ) +{ + for( u32 i=0; ipstr_alias ), alias ) ) + { + return marker; + } + } + + return NULL; } -#endif /* ENTITY_C */