#include "metascene.h"
+#include "vg/vg_magi.h"
void metascene_load( ms_context *ms, const char *path, void *alloc )
{
}
_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
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 )
{
}
}
-void cutscene_init(void)
-{
- vg_console_reg_cmd( "cutscene", ccmd_cutscene_play, NULL );
-}
-
/*
* Currently draws everything as skinned meshes.
*/
}
}
}
+
+/* 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 );
+}
#include "ent_region.h"
#include "shaders/model_entity.h"
#include "vg/vg_steam_friends.h"
+#include "vg/vg_magi.h"
struct global_netplayers netplayers;
}
}
-/*
- * 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 */
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 ++ ){
}
}
}
+
+/*
+ * 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;
+ }
+}
+