X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=ent_route.c;h=f5b51c5ec2ce520c74860ee04897d88ca214ef89;hb=304647a7672165dd35ffe54884ed9aedcc9bf363;hp=1f0bbeddf401c3ed6763dbf0608e4ecc4d35194e;hpb=1d8d9366022c064ef56d80d463c90a79721c6243;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/ent_route.c b/ent_route.c index 1f0bbed..f5b51c5 100644 --- a/ent_route.c +++ b/ent_route.c @@ -1,31 +1,50 @@ -#ifndef ENT_ROUTE_C -#define ENT_ROUTE_C - #include "ent_route.h" #include "input.h" #include "gui.h" -static void ent_route_call( world_instance *world, ent_call *call ){ +struct global_ent_route global_ent_route; + +entity_call_result ent_route_call( world_instance *world, ent_call *call ) +{ u32 index = mdl_entity_id_id( call->id ); ent_route *route = mdl_arritm( &world->ent_route, index ); - if( call->function == 0 ){ /* view() */ - if( localplayer.subsystem == k_player_subsystem_walk ){ - world_entity_focus( call->id ); + if( call->function == 0 ) + { /* view() */ + if( localplayer.subsystem == k_player_subsystem_walk ) + { + world_entity_set_focus( call->id ); + world_entity_focus_modal(); + + gui_helper_clear(); + vg_str text; + + if( (global_ent_route.helper_weekly = + gui_new_helper( input_button_list[k_srbind_mleft], &text ))) + vg_strcat( &text, "weekly" ); + + if( (global_ent_route.helper_alltime = + gui_new_helper( input_button_list[k_srbind_mright], &text ))) + vg_strcat( &text, "all time" ); + + if( gui_new_helper( input_button_list[k_srbind_mback], &text ) ) + vg_strcat( &text, "exit" ); } + + return k_entity_call_result_OK; } - else { - /* TODO: Comrpession */ - vg_print_backtrace(); - vg_error( "Unhandled function id: %u\n", call->function ); - } + + return k_entity_call_result_unhandled; } -/* TODO: these should recieve the world instance */ -static void ent_route_preupdate( ent_route *route, int active ){ - if( !active ) return; +void ent_route_preupdate( ent_focus_context *ctx ) +{ + if( !ctx->active ) + return; + + world_instance *world = ctx->world; + ent_route *route = mdl_arritm( &world->ent_route, ctx->index ); - world_instance *world = world_current_instance(); u32 cam_id = 0; if( __builtin_expect( world->meta.info.version >= 103, 1 ) ) @@ -33,10 +52,6 @@ static void ent_route_preupdate( ent_route *route, int active ){ world_entity_focus_camera( world, cam_id ); - gui_helper_action( button_display_string( k_srbind_mleft ), "weekly" ); - gui_helper_action( button_display_string( k_srbind_mright ), "all time" ); - gui_helper_action( button_display_string( k_srbind_mback ), "exit" ); - if( button_down( k_srbind_mleft ) ){ world_sfd.view_weekly = 1; world_sfd_compile_active_scores(); @@ -47,10 +62,14 @@ static void ent_route_preupdate( ent_route *route, int active ){ world_sfd_compile_active_scores(); } - if( button_down( k_srbind_mback ) ){ - world_entity_unfocus(); + global_ent_route.helper_alltime->greyed =!world_sfd.view_weekly; + global_ent_route.helper_weekly->greyed = world_sfd.view_weekly; + + if( button_down( k_srbind_mback ) ) + { + world_entity_exit_modal(); + world_entity_clear_focus(); + gui_helper_clear(); return; } } - -#endif /* ENT_ROUTE_C */