update helpers/location to 'frosted' ui
[carveJwlIkooP6JGAAIwe30JlM.git] / ent_route.c
index fa1d66900c452edbf58f5641cf8351f5d1a574c7..8564eed3c5c8c60400c2eb69e5a71b7ad599e1b1 100644 (file)
@@ -1,45 +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" );
+            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" );
+            vg_strcat( &text, "All time" );
 
          if( gui_new_helper( input_button_list[k_srbind_mback], &text ) )
-            vg_strcat( &text, "exit" );
+            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 ) )
@@ -60,11 +65,11 @@ static void ent_route_preupdate( ent_route *route, int active ){
    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_unfocus();
+   if( button_down( k_srbind_mback ) )
+   {
+      world_entity_exit_modal();
+      world_entity_clear_focus();
       gui_helper_clear();
       return;
    }
 }
-
-#endif /* ENT_ROUTE_C */