VG_VAR_F32( k_cam_punch );
VG_VAR_F32( k_cam_shake_strength );
VG_VAR_F32( k_cam_shake_trackspeed );
+ VG_VAR_I32( k_player_debug_info );
vg_console_reg_var( "cinema", &k_cinema, k_var_dtype_f32, 0 );
vg_console_reg_var( "cinema_fixed", &k_cinema_fixed, k_var_dtype_i32, 0 );
PLAYER_API
void player__debugtext( int size, const char *fmt, ... )
{
-#if 0
char buffer[ 1024 ];
va_list args;
vsnprintf( buffer, 1024, fmt, args );
va_end( args );
- ui_text( vg_uictx.cursor, buffer, size, k_text_align_right );
- vg_uictx.cursor[1] += 14*size;
-#endif
+ ui_text( g_player_debugger, buffer, size, k_ui_align_left, 0 );
+ g_player_debugger[1] += size*16;
}
/*
d[0] = atan2f( fwd_dir[2], fwd_dir[0] );
}
-PLAYER_API void player__im_gui( player_instance *player )
-{
-#if 0
- vg_uictx.cursor[0] = vg.window_x - 200;
- vg_uictx.cursor[1] = 0;
- vg_uictx.cursor[2] = 200;
- vg_uictx.cursor[3] = 200;
+PLAYER_API void player__im_gui( player_instance *player ){
+ if( !k_player_debug_info ) return;
+
+ ui_rect box = {
+ vg.window_x - 300,
+ 0,
+ 300,
+ vg.window_y
+ };
- struct ui_vert *b = ui_fill_rect( vg_uictx.cursor, 0x70000000 );
+ ui_fill( box, (ui_colour(k_ui_bg)&0x00ffffff)|0x50000000 );
- vg_uictx.cursor[0] = vg.window_x;
+ g_player_debugger[0] = box[0];
+ g_player_debugger[1] = 0;
+ g_player_debugger[2] = 300;
+ g_player_debugger[3] = 16;
player__debugtext( 1, "angles: " PRINTF_v3f( player->cam.angles ) );
player__debugtext( 1, "basis: " PRINTF_v4f( player->qbasis ) );
if( _player_im_gui[ player->subsystem ] )
_player_im_gui[ player->subsystem ]( player );
-
- b[2].co[1] = vg_uictx.cursor[1];
- b[3].co[1] = vg_uictx.cursor[1];
-#endif
}
VG_STATIC void global_skateshop_exit(void);
-PLAYER_API void player__spawn( player_instance *player,
- ent_spawn *rp )
-{
- v3_copy( rp->transform.co, player->rb.co );
+
+PLAYER_API void player__setpos( player_instance *player, v3f pos ){
+ v3_copy( pos, player->rb.co );
v3_zero( player->rb.v );
+ rb_update_transform( &player->rb );
+}
+
+PLAYER_API void player__spawn( player_instance *player, ent_spawn *rp ){
+ player__setpos( player, rp->transform.co );
v3_zero( player->rb.w );
q_identity( player->rb.q );
rb_update_transform( &player->rb );
}
-PLAYER_API void player__kill( player_instance *player )
-{
+PLAYER_API void player__kill( player_instance *player ){
}
static f32 k_cinema = 0.0f;
static i32 k_invert_y = 0;
-struct player_instance
-{
+struct player_instance{
/* transform definition */
rigidbody rb, rb_gate_storage;
v3f angles, angles_storage;
PLAYER_API void player__pass_gate( player_instance *player, ent_gate *gate );
PLAYER_API void player__im_gui( player_instance *player );
+PLAYER_API void player__setpos( player_instance *player, v3f pos );
PLAYER_API void player__spawn( player_instance *player, ent_spawn *rp );
PLAYER_API void player__kill( player_instance *player );
#include "player_api.h"
static v3f TEMP_TPV_EXTRA; /* TODO: what? */
-
-VG_STATIC float
+static float
k_cam_spring = 20.0f,
k_cam_damp = 6.7f,
k_cam_punch = -1.0f,
k_cam_shake_strength = 0.0001f,
k_cam_shake_trackspeed = 0.2f;
+static i32 k_player_debug_info = 0;
+static ui_rect g_player_debugger;
+
VG_STATIC void player_look( player_instance *player, v3f angles );
VG_STATIC void player__cam_iterate( player_instance *player );
VG_STATIC void player_vector_angles( v3f angles, v3f v, float C, float k );
}
}
-VG_STATIC void player__skate_im_gui( player_instance *player )
-{
+VG_STATIC void player__skate_im_gui( player_instance *player ){
struct player_skate *s = &player->_skate;
player__debugtext( 1, "V: %5.2f %5.2f %5.2f",player->rb.v[0],
player->rb.v[1],
localplayer.viewable_world = world_current_instance();
vg_msg_cmd position = vg_msg_seekkv( &world, "position", 0 );
- vg_msg_convert_num( &position, k_vg_msg_float|k_vg_msg_32b, 3,
- localplayer.rb.co );
+ v3f pos;
+ vg_msg_convert_num( &position, k_vg_msg_float|k_vg_msg_32b, 3, pos );
+ player__setpos( &localplayer, pos );
}
}
}
menu_render();
}
-#if 0
player__im_gui( &localplayer );
-#endif
world_instance *world = world_current_instance();
workshop_form_gui();
k_async_op_player_scan,
k_async_op_board_load,
k_async_op_write_savedata,
- k_workshop_form_op_loading_model,
- k_workshop_form_op_downloading_submission,
- k_workshop_form_op_publishing_update,
}
op;
}
/*
* Close the form and discard UGC query result
*/
-VG_STATIC void workshop_quit_form(void)
-{
+VG_STATIC void workshop_quit_form(void){
player_board_unload( &workshop_form.board_model );
workshop_form.file_intent = k_workshop_form_file_intent_none;
}
workshop_form.page = k_workshop_form_hidden;
+ workshop_form.op = k_workshop_op_none;
}
/*
/*
* Entry point for the publishing submission operation
*/
-VG_STATIC void workshop_op_submit(void)
-{
+VG_STATIC void workshop_op_submit(void){
/* TODO: Show these errors to the user */
if( workshop_form.submission.submit_title ){
if( !workshop_form.submission.title[0] ){
- vg_error( "Cannot submit because a title is required\n" );
+ ui_start_modal( "Cannot submit because a title is required\n",
+ UI_MODAL_WARN);
return;
}
}
if( workshop_form.submission.submit_description ){
if( !workshop_form.submission.description[0] ){
- vg_error( "Cannot submit because a description is required\n" );
+ ui_start_modal( "Cannot submit because a description is required\n",
+ UI_MODAL_WARN );
return;
}
}
if( workshop_form.submission.submit_file_and_image ){
if( workshop_form.file_intent == k_workshop_form_file_intent_none ){
- vg_error( "Cannot submit because the file is empty or unspecified\n" );
+ ui_start_modal( "Cannot submit because the file is "
+ "empty or unspecified\n", UI_MODAL_WARN );
return;
}
}
player_board_unload( &workshop_form.board_model );
workshop_form.file_intent = k_workshop_form_file_intent_none;
+ workshop_form.op = k_workshop_op_publishing_update;
vg_loader_start( _workshop_form_submit_thread, NULL );
}
mdl_arritm( &workshop_form.view_world->ent_swspreview, 0 );
}
else{
- vg_error( "There is no ent_swspreview in the level. "
- "Cannot publish here\n" );
+ ui_start_modal( "There is no ent_swspreview in the level. \n"
+ "Cannot publish here\n", UI_MODAL_BAD );
return;
}
+ workshop_form.op = k_workshop_op_loading_model;
vg_loader_start( _workshop_form_load_thread, NULL );
}
*/
VG_STATIC void workshop_op_download_and_view_submission( int result_index )
{
+ workshop_form.op = k_workshop_op_downloading_submission;
ISteamUGC *hSteamUGC = SteamAPI_SteamUGC();
ISteamRemoteStorage *hSteamRemoteStorage = SteamAPI_SteamRemoteStorage();
SteamUGCDetails_t details;
"the current operation that is running.";
switch( skaterift.op ){
- case k_workshop_form_op_loading_model:
+ case k_workshop_op_loading_model:
op_string = "Operation in progress: Loading model file.";
break;
- case k_workshop_form_op_publishing_update:
+ case k_workshop_op_publishing_update:
op_string = "Operation in progress: publishing submission update "
"to steam.";
break;
- case k_workshop_form_op_downloading_submission:
+ case k_workshop_op_downloading_submission:
op_string = "Operation in progress: downloading existing submission"
" from Steam services.";
break;
#define WORKSHOP_VIEW_PER_PAGE 15
struct workshop_form{
+ enum workshop_op {
+ k_workshop_op_none,
+ k_workshop_op_downloading_submission,
+ k_workshop_op_publishing_update,
+ k_workshop_op_loading_model
+ }
+ op;
+
struct {
char title[80];
char description[512];