X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=ent_region.c;h=5e0ec03dd2349891f09ee00bfca3c07aa3a19081;hb=304647a7672165dd35ffe54884ed9aedcc9bf363;hp=44d49a096637bff1f4e6777aedb38e7820fcf12f;hpb=217627b6b4eef904ac89b5f7f7f819b3a0970b20;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/ent_region.c b/ent_region.c index 44d49a0..5e0ec03 100644 --- a/ent_region.c +++ b/ent_region.c @@ -3,7 +3,10 @@ #include "network_common.h" #include "network.h" -static u32 region_spark_colour( u32 flags ){ +struct global_ent_region global_ent_region; + +u32 region_spark_colour( u32 flags ) +{ if( flags & k_ent_route_flag_achieve_gold ) return 0xff8ce0fa; else if( flags & k_ent_route_flag_achieve_silver ) @@ -12,28 +15,33 @@ static u32 region_spark_colour( u32 flags ){ return 0x00; } -static void ent_region_call( world_instance *world, ent_call *call ){ +entity_call_result ent_region_call( world_instance *world, ent_call *call ) +{ ent_region *region = mdl_arritm( &world->ent_region, mdl_entity_id_id(call->id) ); if( !region->zone_volume ) - return; + return k_entity_call_result_invalid; ent_volume *volume = mdl_arritm( &world->ent_volume, mdl_entity_id_id(region->zone_volume) ); - if( call->function == 0 ){ /* enter */ - for( u32 i=0; ient_route); i ++ ){ + if( call->function == 0 ) /* enter */ + { + for( u32 i=0; ient_route); i ++ ) + { ent_route *route = mdl_arritm( &world->ent_route, i ); v3f local; m4x3_mulv( volume->to_local, route->board_transform[3], local ); if( (fabsf(local[0]) <= 1.0f) && (fabsf(local[1]) <= 1.0f) && - (fabsf(local[2]) <= 1.0f) ){ + (fabsf(local[2]) <= 1.0f) ) + { route->flags &= ~k_ent_route_flag_out_of_zone; } - else { + else + { route->flags |= k_ent_route_flag_out_of_zone; } } @@ -48,20 +56,27 @@ static void ent_region_call( world_instance *world, ent_call *call ){ network_send_region(); localplayer.effect_data.spark.colour = region_spark_colour(region->flags); + return k_entity_call_result_OK; } - else if( call->function == 1 ){ /* leave */ - for( u32 i=0; ient_route); i ++ ){ + else if( call->function == 1 ) /* leave */ + { + for( u32 i=0; ient_route); i ++ ) + { ent_route *route = mdl_arritm( &world->ent_route, i ); route->flags |= k_ent_route_flag_out_of_zone; } localplayer.effect_data.spark.colour = 0x00; + return k_entity_call_result_OK; } + else + return k_entity_call_result_unhandled; } /* * reevaluate all achievements to calculate the compiled achievement */ -static void ent_region_re_eval( world_instance *world ){ +void ent_region_re_eval( world_instance *world ) +{ u32 world_total = k_ent_route_flag_achieve_gold | k_ent_route_flag_achieve_silver;