move cutscene ui and network ui to magi
authorhgn <hgodden00@gmail.com>
Wed, 2 Oct 2024 11:12:41 +0000 (12:12 +0100)
committerhgn <hgodden00@gmail.com>
Wed, 2 Oct 2024 11:12:41 +0000 (12:12 +0100)
src/client.c
src/client.h
src/metascene.c
src/metascene.h
src/network.c
src/network.h
src/player_remote.c
src/player_remote.h
src/skaterift.c

index 595afcfa667c31ea650578829cae8ef9d4188992..f5351325bce5dd87b4c4e0df5597ca788c40867d 100644 (file)
@@ -55,8 +55,12 @@ vg_info("            '        ' '--' [] '----- '----- '     ' '---'  "
 
    vg_loader_step( remote_players_init, NULL );
 
-   steam_init();
-   vg_loader_step( NULL, steam_end );
+   if( !g_client.nosteam )
+   {
+      steam_init();
+      vg_loader_step( NULL, steam_end );
+   }
+
    vg_loader_step( network_init, network_end );
 }
 
@@ -73,6 +77,9 @@ void vg_launch_opt(void)
    if( vg_long_opt( "demo" ) )
       g_client.demo_mode = 1;
 
+   if( vg_long_opt( "nosteam" ) )
+      g_client.nosteam = 1;
+
    game_launch_opt();
 }
 
index e3435b9046908c8e2fd7a59e2d80f81c1aa0c535..d3f3608a5a17df7a29b0a3aabfa568e786890c82 100644 (file)
@@ -9,7 +9,7 @@
 
 struct game_client
 {
-   bool loaded, demo_mode;
+   bool loaded, demo_mode, nosteam;
 }
 extern g_client;
 
index ffe0f362345968c982920e74e76830afc9212e26..5556566e70ad0fc0b3179bcb66181dd66e798132 100644 (file)
@@ -1,4 +1,5 @@
 #include "metascene.h"
+#include "vg/vg_magi.h"
 
 void metascene_load( ms_context *ms, const char *path, void *alloc )
 {
@@ -86,46 +87,6 @@ struct
 }
 _cutscene;
 
-void cutscene_debug_ui( ui_context *ctx )
-{
-   ms_strip *usage[8];
-   for( u32 i=0; i<VG_ARRAY_LEN(usage); i ++ ) usage[i] = NULL;
-
-   for( u32 i=0; i<af_arrcount(&_cutscene.meta.strips); i ++ )
-   {
-      ms_strip *strip = af_arritm(&_cutscene.meta.strips, i );
-      
-      u32 layer = 0;
-      for( u32 k=0; k<VG_ARRAY_LEN(usage); k ++ )
-      {
-         if( usage[k] )
-         {
-            if( usage[k]->offset + usage[k]->length < strip->offset )
-            {
-               usage[k] = NULL;
-            }
-         }
-
-         if( !usage[k] )
-         {
-            usage[k] = strip;
-            layer = k;
-            break;
-         }
-      }
-
-      ui_rect box = { strip->offset, layer*32, strip->length, 30 };
-      u32 colour = af_str_hash( &_cutscene.meta.af, strip->pstr_name );
-
-      ui_fill( ctx, box, colour | 0xff000000 );
-      ui_text( ctx, box, af_str( &_cutscene.meta.af, strip->pstr_name ), 1,
-               k_ui_align_middle_center, 0 );
-   }
-
-   ui_fill( ctx, (ui_rect){ (f32)_cutscene.time*_cutscene.meta.info.framerate,
-                            0, 1, VG_ARRAY_LEN(usage)*32 }, 0xffffffff );
-}
-
 /*
  * Find associated entity data. We should also probably do this on the world
  * thingy
@@ -333,7 +294,7 @@ static void cutscene_load_thread( void *data )
    vg_async_call( sync_cutscene_loaded, NULL, 0 );
 }
 
-static int ccmd_cutscene_play( int argc, const char *argv[] )
+static int cmd_cutscene_play( int argc, const char *argv[] )
 {
    if( argc == 1 )
    {
@@ -373,11 +334,6 @@ static int ccmd_cutscene_play( int argc, const char *argv[] )
    }
 }
 
-void cutscene_init(void)
-{
-   vg_console_reg_cmd( "cutscene", ccmd_cutscene_play, NULL );
-}
-
 /*
  * Currently draws everything as skinned meshes.
  */
@@ -588,3 +544,77 @@ void cutscene_render( world_instance *world, vg_camera *cam )
       }
    }
 }
+
+/* cutscene magi 
+ * ----------------------------------------------------------------------------
+ */
+
+static void cb_cutscene_view( ui_context *ctx, ui_rect rect, 
+                              struct vg_magi_panel *magi )
+{
+   ms_strip *usage[8];
+   for( u32 i=0; i<VG_ARRAY_LEN(usage); i ++ ) usage[i] = NULL;
+
+   ui_px root[2] = { rect[0]+8, rect[1]+8 };
+
+   for( u32 i=0; i<af_arrcount(&_cutscene.meta.strips); i ++ )
+   {
+      ms_strip *strip = af_arritm(&_cutscene.meta.strips, i );
+      
+      u32 layer = 0;
+      for( u32 k=0; k<VG_ARRAY_LEN(usage); k ++ )
+      {
+         if( usage[k] )
+         {
+            if( usage[k]->offset + usage[k]->length < strip->offset )
+            {
+               usage[k] = NULL;
+            }
+         }
+
+         if( !usage[k] )
+         {
+            usage[k] = strip;
+            layer = k;
+            break;
+         }
+      }
+
+      ui_rect box = { strip->offset, layer*32, strip->length, 30 };
+      box[0] += root[0];
+      box[1] += root[1];
+
+      if( ui_clip( rect, box, box ) )
+      {
+         u32 colour = af_str_hash( &_cutscene.meta.af, strip->pstr_name );
+
+         ui_fill( ctx, box, colour | 0xff000000 );
+         ui_text( ctx, box, af_str( &_cutscene.meta.af, strip->pstr_name ), 1,
+                  k_ui_align_middle_center, 0 );
+      }
+   }
+
+   ui_rect cursor = { (f32)_cutscene.time*_cutscene.meta.info.framerate,
+                      0, 1, VG_ARRAY_LEN(usage)*32 };
+   cursor[0] += root[0];
+   cursor[1] += root[1];
+   if( ui_clip( rect, cursor, cursor ) )
+      ui_fill( ctx, cursor, 0xffffffff );
+}
+
+static int cmd_cutscene_inspector( int argc, const char *argv[] )
+{
+   ui_px w = 800, h = 400;
+   struct vg_magi_panel *magi = _vg_magi_open( w, h, VG_MAGI_ALL );
+   magi->title = "Cutscene Inpsector";
+   magi->data = NULL;
+   magi->ui_cb = cb_cutscene_view;
+   magi->close_cb = NULL;
+   return 1;
+}
+
+void cutscene_init(void)
+{
+   vg_console_reg_cmd( "cutscene", cmd_cutscene_play, NULL );
+   vg_console_reg_cmd( "cutscene_inspector", cmd_cutscene_inspector, NULL );
+}
index cd57bff074ac98a7665cc5e2945714c3d53c034b..abcc7c250171d9db82a13b03c06b017248650cbb 100644 (file)
@@ -75,5 +75,4 @@ struct ms_curve_keyframe
 void metascene_load( ms_context *ms, const char *path, void *alloc );
 void cutscene_init(void);
 void cutscene_render( world_instance *world, vg_camera *cam );
-void cutscene_debug_ui( ui_context *ctx );
 void cutscene_update( f32 delta );
index 0869612fca9a91e6fafd93cd41f7713fa4910470..7a7e4973e12bccb440b81b62644dfe7830840b38 100644 (file)
@@ -750,8 +750,6 @@ static int cmd_network_send_message( int argc, const char *argv[] ){
 
 void network_init(void)
 {
-   vg_console_reg_var( "network_info", &network_client.network_info,
-                       k_var_dtype_i32, VG_VAR_PERSISTENT );
    vg_console_reg_var( "auto_connect", &network_client.auto_connect,
                        k_var_dtype_i32, VG_VAR_PERSISTENT );
    if( steam_ready ){
index 6af51af6ccf94de2896f35e056ed803d8400c34b..5152c361a6416f33070c22e1759c146cece2d157 100644 (file)
@@ -52,7 +52,6 @@ struct network_client
    f64 last_attempt, last_frame;
    u32 retries;
 
-   i32 network_info;
    i32 auto_connect;
 
    struct network_request {
index 6fdf04f7f1191df9348dd101e8e3569667406533..c191c034c0d223e34e0e90986a42c1553a1ba2ca 100644 (file)
@@ -10,6 +10,7 @@
 #include "ent_region.h"
 #include "shaders/model_entity.h"
 #include "vg/vg_steam_friends.h"
+#include "vg/vg_magi.h"
 
 struct global_netplayers netplayers;
 
@@ -393,126 +394,6 @@ void remote_player_send_playerframe(void)
    }
 }
 
-/*
- * Updates network traffic stats
- */
-void remote_player_debug_update(void)
-{
-   if( (vg.time_real - netplayers.last_data_measurement) > 1.0 ){
-      netplayers.last_data_measurement = vg.time_real;
-      u32 total_down = 0;
-
-      for( u32 i=0; i<VG_ARRAY_LEN(netplayers.list); i++ ){
-         struct network_player *player = &netplayers.list[i];
-         if( player->active ){
-            total_down += player->down_bytes;
-            player->down_kbs = ((f32)player->down_bytes)/1024.0f;
-            player->down_bytes = 0;
-         }
-      }
-
-      netplayers.down_kbs = ((f32)total_down)/1024.0f;
-      netplayers.up_kbs = ((f32)netplayers.up_bytes)/1024.0f;
-      netplayers.up_bytes = 0;
-   }
-}
-
-/*
- * Debugging information
- */
-void remote_player_network_imgui( ui_context *ctx, m4x4f pv )
-{
-   if( network_client.user_intent == k_server_intent_online )
-   {
-      if( !(steam_ready &&
-         (network_client.state == k_ESteamNetworkingConnectionState_Connected)))
-      {
-         char buf[128];
-         vg_str str;
-         vg_strnull( &str, buf, sizeof(buf) );
-         u32 fg = 0;
-         network_status_string( &str, &fg );
-         ui_text( ctx, (ui_rect){ vg.window_x - 200, 0, 200, 48 }, buf, 1, 
-                  k_ui_align_middle_center, fg );
-      }
-   }
-
-   if( !network_client.network_info ) 
-      return;
-
-   ui_rect panel = { (vg.window_x / 2) - 200, 0, 400, 600 };
-   ui_fill( ctx, panel, (ui_colour(ctx, k_ui_bg)&0x00ffffff)|0x50000000 );
-
-   ctx->font = &vgf_default_title;
-   ui_info( ctx, panel, "Network" );
-   ctx->font = &vgf_default_large;
-   ui_info( ctx, panel, "Status" );
-   ctx->font = &vgf_default_small;
-
-   char buf[512];
-   const char *netstatus = "PROGRAMMING ERROR";
-
-   struct { enum ESteamNetworkingConnectionState state; const char *str; }
-   states[] = {
-          { k_ESteamNetworkingConnectionState_None, "None" },
-          { k_ESteamNetworkingConnectionState_Connecting, 
-         (const char *[]){"Connecting -",
-                          "Connecting /",
-                          "Connecting |",
-                          "Connecting \\",
-                          }[(u32)(vg.time_real/0.25) & 0x3 ] },
-          { k_ESteamNetworkingConnectionState_FindingRoute, "Finding Route" },
-          { k_ESteamNetworkingConnectionState_Connected, "Connected" },
-          { k_ESteamNetworkingConnectionState_ClosedByPeer, "Closed by peer" },
-          { k_ESteamNetworkingConnectionState_ProblemDetectedLocally, 
-         "Problem Detected Locally" },
-          { k_ESteamNetworkingConnectionState_FinWait, "Fin Wait" },
-          { k_ESteamNetworkingConnectionState_Linger, "Linger" },
-          { k_ESteamNetworkingConnectionState_Dead, "Dead" }
-   };
-   for( u32 i=0; i<VG_ARRAY_LEN(states); i ++ )
-   {
-      if( states[i].state == network_client.state )
-      {
-         netstatus = states[i].str;
-         break;
-      }
-   }
-   snprintf( buf, 512, "Network: %s", netstatus );
-   ui_info( ctx, panel, buf );
-   ui_info( ctx, panel, "---------------------" );
-
-   if( network_client.state == k_ESteamNetworkingConnectionState_Connected )
-   {
-      ui_info( ctx, panel, "#-1: localplayer" );
-      
-      snprintf( buf, 512, "U%.3f/D%.3fkbs", 
-                netplayers.up_kbs, netplayers.down_kbs );
-      ui_info( ctx, panel, buf );
-
-      for( u32 i=0; i<VG_ARRAY_LEN(netplayers.list); i++ )
-      {
-         struct network_player *player = &netplayers.list[i];
-         if( player->active )
-         {
-            const char *sysname = "invalid";
-
-            if( player->subsystem < k_player_subsystem_max )
-            {
-               sysname = player_subsystems[ player->subsystem ]->name;
-            }
-            snprintf( buf, 512, "#%u: %s [%s] D%.1fkbs", 
-                      i, player->username, sysname, player->down_kbs );
-            ui_info( ctx, panel, buf );
-         }
-      }
-   }
-   else 
-   {
-      ui_info( ctx, panel, "offline" );
-   }
-}
-
 static void remote_player_effect( struct network_player *player, 
                                   player_pose *final_pose ){
    /* effects */
@@ -805,16 +686,6 @@ static int remote_players_randomize( int argc, const char *argv[] ){
    return 0;
 }
 
-void remote_players_init(void)
-{
-   vg_console_reg_cmd( "add_test_players", remote_players_randomize, NULL );
-   vg_console_reg_var( "k_show_own_name", &k_show_own_name, 
-                       k_var_dtype_i32, 0 );
-   for( u32 i=0; i<NETWORK_SFX_QUEUE_LENGTH; i ++ ){
-      netplayers.sfx_queue[i].system = k_player_subsystem_invalid;
-   }
-}
-
 void remote_sfx_pre_update(void)
 {
    for( u32 i=0; i<NETWORK_SFX_QUEUE_LENGTH; i ++ ){
@@ -1157,3 +1028,131 @@ void remote_players_chat_imgui( ui_context *ctx )
       }
    }
 }
+
+/*
+ * Debugging 
+ * -----------------------------------------------------------------------------
+ */
+
+/*
+ * Updates network traffic stats
+ */
+void remote_player_debug_update(void)
+{
+   if( (vg.time_real - netplayers.last_data_measurement) > 1.0 ){
+      netplayers.last_data_measurement = vg.time_real;
+      u32 total_down = 0;
+
+      for( u32 i=0; i<VG_ARRAY_LEN(netplayers.list); i++ ){
+         struct network_player *player = &netplayers.list[i];
+         if( player->active ){
+            total_down += player->down_bytes;
+            player->down_kbs = ((f32)player->down_bytes)/1024.0f;
+            player->down_bytes = 0;
+         }
+      }
+
+      netplayers.down_kbs = ((f32)total_down)/1024.0f;
+      netplayers.up_kbs = ((f32)netplayers.up_bytes)/1024.0f;
+      netplayers.up_bytes = 0;
+   }
+}
+
+/*
+ * Debugging information
+ */
+static void cb_network_view( ui_context *ctx, ui_rect rect,
+                             struct vg_magi_panel *magi )
+{
+   ctx->font = &vgf_default_title;
+   ui_info( ctx, rect, "Network" );
+   ctx->font = &vgf_default_large;
+   ui_info( ctx, rect, "Status" );
+   ctx->font = &vgf_default_small;
+
+   char buf[512];
+   const char *netstatus = "PROGRAMMING ERROR";
+
+   struct { enum ESteamNetworkingConnectionState state; const char *str; }
+   states[] = {
+          { k_ESteamNetworkingConnectionState_None, "None" },
+          { k_ESteamNetworkingConnectionState_Connecting, 
+         (const char *[]){"Connecting -",
+                          "Connecting /",
+                          "Connecting |",
+                          "Connecting \\",
+                          }[(u32)(vg.time_real/0.25) & 0x3 ] },
+          { k_ESteamNetworkingConnectionState_FindingRoute, "Finding Route" },
+          { k_ESteamNetworkingConnectionState_Connected, "Connected" },
+          { k_ESteamNetworkingConnectionState_ClosedByPeer, "Closed by peer" },
+          { k_ESteamNetworkingConnectionState_ProblemDetectedLocally, 
+         "Problem Detected Locally" },
+          { k_ESteamNetworkingConnectionState_FinWait, "Fin Wait" },
+          { k_ESteamNetworkingConnectionState_Linger, "Linger" },
+          { k_ESteamNetworkingConnectionState_Dead, "Dead" }
+   };
+   for( u32 i=0; i<VG_ARRAY_LEN(states); i ++ )
+   {
+      if( states[i].state == network_client.state )
+      {
+         netstatus = states[i].str;
+         break;
+      }
+   }
+   snprintf( buf, 512, "Network: %s", netstatus );
+   ui_info( ctx, rect, buf );
+   ui_info( ctx, rect, "---------------------" );
+
+   if( network_client.state == k_ESteamNetworkingConnectionState_Connected )
+   {
+      ui_info( ctx, rect, "#-1: localplayer" );
+      
+      snprintf( buf, 512, "U%.3f/D%.3fkbs", 
+                netplayers.up_kbs, netplayers.down_kbs );
+      ui_info( ctx, rect, buf );
+
+      for( u32 i=0; i<VG_ARRAY_LEN(netplayers.list); i++ )
+      {
+         struct network_player *player = &netplayers.list[i];
+         if( player->active )
+         {
+            const char *sysname = "invalid";
+
+            if( player->subsystem < k_player_subsystem_max )
+            {
+               sysname = player_subsystems[ player->subsystem ]->name;
+            }
+            snprintf( buf, 512, "#%u: %s [%s] D%.1fkbs", 
+                      i, player->username, sysname, player->down_kbs );
+            ui_info( ctx, rect, buf );
+         }
+      }
+   }
+   else 
+   {
+      ui_info( ctx, rect, "offline" );
+   }
+}
+
+static int cmd_network_info( int argc, const char *argv[] )
+{
+   ui_px w = 500, h = 400;
+   struct vg_magi_panel *magi = _vg_magi_open( w, h, VG_MAGI_ALL );
+   magi->title = "Network Info";
+   magi->data = NULL;
+   magi->ui_cb = cb_network_view;
+   magi->close_cb = NULL;
+   return 1;
+}
+
+void remote_players_init(void)
+{
+   vg_console_reg_cmd( "network_info", cmd_network_info, NULL );
+   vg_console_reg_cmd( "add_test_players", remote_players_randomize, NULL );
+   vg_console_reg_var( "k_show_own_name", &k_show_own_name, 
+                       k_var_dtype_i32, 0 );
+   for( u32 i=0; i<NETWORK_SFX_QUEUE_LENGTH; i ++ ){
+      netplayers.sfx_queue[i].system = k_player_subsystem_invalid;
+   }
+}
+
index 3e4b67e773dcad826ff66a7229ac2d4e497eeb80..4bd7351f126e4a2ba3eaaea26e424f57f437084b 100644 (file)
@@ -100,7 +100,6 @@ void relink_all_remote_player_worlds(void);
 void player_remote_update_friendflags( struct network_player *remote );
 void remote_players_init(void);
 void remote_sfx_pre_update(void);
-void remote_player_network_imgui( ui_context *ctx, m4x4f pv );
 void remote_players_imgui_world( ui_context *ctx, world_instance *world, 
                                  m4x4f pv, f32 max_dist, int geo_cull );
 void remote_players_imgui_lobby( ui_context *ctx );
index 742938b14fa0000c0d5af4b996c09e342ff08ee7..27dd7234b953f8cb6dc5ceed3e32bab9d631417b 100644 (file)
@@ -611,8 +611,6 @@ void vg_gui( ui_context *ctx )
    world_routes_imgui( ctx, world );
    skaterift_replay_imgui( ctx );
    workshop_form_gui( ctx );
-   remote_player_network_imgui( ctx, vg.pv );
-   cutscene_debug_ui( ctx );
 
    if( menu_viewing_map() )
    {