SteamAPI_ISteamUser_RequestEncryptedAppTicket( hSteamUser, NULL, 0 );
}
-#if 0
-static void send_score_request(void){
- vg_info( "Requesting scores\n" );
- netmsg_scores_request req;
- req.inetmsg_id = k_inetmsg_scores_request;
-
- SteamAPI_ISteamNetworkingSockets_SendMessageToConnection(
- hSteamNetworkingSockets, network_client.remote,
- &req, sizeof(netmsg_scores_request),
- k_nSteamNetworkingSend_Reliable, NULL );
-}
-
-static void send_score_update(void){
- vg_info( "Sending scores\n" );
- u32 size = sizeof(netmsg_set_score) +
- vg_list_size(track_infos)*sizeof(struct netmsg_score_record);
- netmsg_set_score *setscore = alloca( size );
- setscore->inetmsg_id = k_inetmsg_set_score;
-
- int count = 0;
- for( u32 i=0; i<vg_list_size(track_infos); i++ ){
- if( track_infos[i].push ){
- track_infos[i].push = 0;
-
-#if 0
- highscore_record *user_record = highscore_find_user_record( 0, i );
-
- if( !user_record ){
- vg_error( "No score set but tried to upload for track %u\n", i );
- continue;
- }
-#endif
- highscore_record *user_record = &track_infos[i].record;
-
- setscore->records[count].trackid = i;
- setscore->records[count].playerid = 0;
- setscore->records[count].points = user_record->points;
- setscore->records[count].time = user_record->time;
-
- count ++;
- }
- }
-
- if( count == 0 ) return;
- u32 send_size = sizeof(netmsg_set_score) +
- count*sizeof(struct netmsg_score_record);
- setscore->record_count = count;
-
- SteamAPI_ISteamNetworkingSockets_SendMessageToConnection(
- hSteamNetworkingSockets, network_client.remote, setscore, send_size,
- k_nSteamNetworkingSend_Reliable, NULL );
-}
-
-static void send_nickname(void){
- netmsg_set_nickname nick;
- nick.inetmsg_id = k_inetmsg_set_nickname;
-
- memset( nick.nickname, 0, 16 );
- vg_strncpy( steam_username_at_startup, nick.nickname, 16,
- k_strncpy_allow_cutoff );
-
- SteamAPI_ISteamNetworkingSockets_SendMessageToConnection(
- hSteamNetworkingSockets, network_client.remote,
- &nick, sizeof(netmsg_set_nickname),
- k_nSteamNetworkingSend_Reliable, NULL );
-
- network_client.name_update = 0;
-}
-#endif
-
-#if 0
-static void server_routine_update(void){
- send_score_update();
- send_score_request();
-}
-#endif
-
static void network_send_username(void){
netmsg_playerusername *update = alloca( sizeof(netmsg_playerusername)+
NETWORK_USERNAME_MAX );
static void network_connect(void){
/* Connect to server if not connected */
SteamNetworkingIPAddr remoteAddr;
-
-#ifdef SR_USE_LOCALHOST
- SteamAPI_SteamNetworkingIPAddr_SetIPv6LocalHost( &remoteAddr, 27402 );
-#else
- const char *server_lon1 = "46.101.34.155:27402";
- SteamAPI_SteamNetworkingIPAddr_ParseString( &remoteAddr, server_lon1 );
-#endif
- const char *server_lan = "192.168.1.32:27402";
- SteamAPI_SteamNetworkingIPAddr_ParseString( &remoteAddr, server_lan );
+ SteamAPI_SteamNetworkingIPAddr_ParseString( &remoteAddr,
+ network_client.server_adress );
char buf[256];
SteamAPI_SteamNetworkingIPAddr_ToString( &remoteAddr, buf, 256, 1 );
hSteamNetworkingSockets, &remoteAddr, 0, NULL );
}
-#if 0
-static void on_inet_scoreboard( SteamNetworkingMessage_t *msg ){
- netmsg_scoreboard *sb = msg->m_pData;
-
- u32 base_size = sizeof(netmsg_scoreboard)-
- sizeof(struct netmsg_board)*vg_list_size(track_infos),
- expected = base_size+sizeof(struct netmsg_board)*sb->board_count;
-
- if( msg->m_cbSize != expected ){
- vg_error( "Server scoreboard was corrupted. Size: %u != %u\n",
- msg->m_cbSize, expected );
- }
- else{
- if( vg_list_size(track_infos) > sb->board_count )
- vg_warn( "Server is out of date, not enough boards recieved\n");
- else if( vg_list_size(track_infos) < sb->board_count )
- vg_warn( "Client out of date, server sent more boards than we have\n");
- else
- vg_success( "Recieved new scoreboards from server\n" );
-
- for( int i=0; i < vg_min(sb->board_count,vg_list_size(track_infos)); i++){
- scoreboard_client_data.boards[i] = sb->boards[i];
- highscores_board_printf( stdout, sb->boards[i].data, 10 );
- }
- }
-
-#if 0
- /* We dont need to stay on the server currently */
- SteamAPI_ISteamNetworkingSockets_CloseConnection(
- hSteamNetworkingSockets, network_client.remote, 0, NULL, 1 );
-#endif
-
- network_scores_updated = 1;
-}
-#endif
-
static void poll_remote_connection(void){
SteamNetworkingMessage_t *messages[32];
int len;
}
*request_buffer;
vg_pool request_pool;
+
+ char server_adress[64];
}
static network_client = {
.auth_mode = eServerModeAuthentication,
.state = k_ESteamNetworkingConnectionState_None,
+ .server_adress = "46.101.34.155:27402"
};
static int packet_minsize( SteamNetworkingMessage_t *msg, u32 size );
static void player__kill(void){
}
-static void player__begin_holdout(void){
+static void player__begin_holdout( v3f offset ){
memcpy( &localplayer.holdout_pose, &localplayer.pose,
sizeof(localplayer.pose) );
+ v3_copy( offset, localplayer.holdout_pose.root_co );
localplayer.holdout_time = 1.0f;
}
static void player__setpos( v3f pos );
static void player__spawn( ent_spawn *rp );
static void player__kill(void);
-static void player__begin_holdout(void);
+static void player__begin_holdout( v3f offset );
static int localplayer_cmd_respawn( int argc, const char *argv[] );
static void player_apply_transport_to_cam( m4x3f transport );
v3f pco;
v4f pq;
rb_extrapolate( &localplayer.rb, pco, pq );
+ v3_muladds( pco, localplayer.holdout_pose.root_co,
+ localplayer.holdout_time, pco );
v3_lerp( cc->tpv_lpf, pco, 20.0f*vg.time_frame_delta, cc->tpv_lpf );
/* now move into world */
v3_muladds( tpv_offset, cc->cam_velocity_smooth, -0.025f, tpv_offset );
v3_add( tpv_origin, tpv_offset, tpv_pos );
-#if 0
- f32 t; v3f n;
- if( spherecast_world( world_current_instance(), tpv_origin, tpv_pos,
- 0.2f, &t, n ) != -1 ){
- v3_lerp( tpv_origin, tpv_pos, t, tpv_pos );
- }
-#endif
/*
* Blend cameras
#include "font.h"
#include "gui.h"
+static i32 k_show_own_name = 0;
+
static void player_remote_clear( struct network_player *player ){
addon_cache_unwatch( k_addon_type_player, player->playermodel_view_slot );
addon_cache_unwatch( k_addon_type_board, player->board_view_slot );
font3d_bind( &gui.font, k_font_shader_default, 1, NULL, &skaterift.cam );
font3d_setcolour( (v4f){1.0f,1.0f,1.0f,1.0f} );
- render_remote_player_nametag(
- localplayer.final_mtx[0][3],
- steam_username_at_startup );
+ if( k_show_own_name ){
+ render_remote_player_nametag(
+ localplayer.final_mtx[0][3],
+ steam_username_at_startup );
+ }
for( u32 i=0; i<NETWORK_MAX_PLAYERS; i ++ ){
struct network_player *player = &netplayers.list[i];
}
static void remote_players_init(void){
+ 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;
}
assert( sys->animator_data );
sys->animate();
- sys->pose( sys->animator_data, &localplayer.pose );
+
+ player_pose *pose = &localplayer.pose;
+ sys->pose( sys->animator_data, pose );
struct skeleton *sk = &localplayer.playeravatar->sk;
if( localplayer.holdout_time > 0.0f ){
- player_pose *pose = &localplayer.pose;
skeleton_lerp_pose( sk,
pose->keyframes,localplayer.holdout_pose.keyframes,
localplayer.holdout_time, pose->keyframes );
+
+ v3_muladds( pose->root_co, localplayer.holdout_pose.root_co,
+ localplayer.holdout_time, pose->root_co );
q_nlerp( pose->root_q, localplayer.holdout_pose.root_q,
localplayer.holdout_time, pose->root_q );
+
localplayer.holdout_time -= vg.time_frame_delta * 2.0f;
}
glUniformMatrix4x3fv( _uniform_model_character_view_uTransforms,
skeleton->bone_count,
0,
- (f32 *)final_mtx );
+ (const GLfloat *)final_mtx );
mesh_bind( &model->mdl.mesh );
mesh_draw( &model->mdl.mesh );
v3_copy( localplayer.cam.angles, localplayer.angles );
localplayer.angles[2] = 0.0f;
- player__begin_holdout();
+ v3f newpos, offset;
+ m4x3_mulv( localplayer.rb.to_world, (v3f){0.0f,1.0f,0.0f}, newpos );
+ v3_add( newpos, (v3f){0.0f,-1.0f,0.0f}, newpos );
+ v3_sub( localplayer.rb.co, newpos, offset );
+ v3_copy( newpos, localplayer.rb.co );
+
+ player__begin_holdout( offset );
player__skate_kill_audio();
player__walk_transition();
return;
(1.0f-fabsf(animator->slide)*0.9f);
animator->offset[1]=vg_clampf(animator->offset[1],-0.5f,0.0f);
- v3_muls( animator->offset, 0.3f, localplayer.cam_control.tpv_offset_extra );
+ v3f cam_offset;
+ v3_mul( animator->offset, (v3f){1.0f,0.3f,1.0f}, cam_offset );
+ v3_copy( cam_offset, localplayer.cam_control.tpv_offset_extra );
/* localized vectors */
m4x3_mulv( localplayer.rb.to_local, state->cog, animator->local_cog );
v3_copy( v, player_skate.state.cog_v );
v3_copy( v, localplayer.rb.v );
- player__begin_holdout();
+ player__begin_holdout( (v3f){0.0f,0.0f,0.0f} );
player__skate_reset_animator();
player__skate_clear_mechanics();
rb_update_transform( &localplayer.rb );
player_skate.state.activity_prev = k_skate_activity_ground;
player_skate.state.activity = k_skate_activity_ground;
- player__begin_holdout();
+ player__begin_holdout( (v3f){0.0f,0.0f,0.0f} );
player__skate_clear_mechanics();
player__skate_reset_animator();
static struct player_avatar localplayer_avatar;
int main( int argc, char *argv[] ){
-#if 0
- u8 buf[ 512 ];
- bitpack_ctx ctx = {
- .buffer = buf,
- .buffer_len = 512,
- .bytes = 0,
- .mode = k_bitpack_compress
- };
-
- v4f q = { 0.388, -0.565, 0.515, 0.515 };
- vg_info( "q: %f %f %f %f\n", q[0], q[1], q[2], q[3] );
-
- /* compress */
- bitpack_qquat( &ctx, q );
-
- vg_info( "compressed bytes: %u\n", ctx.bytes );
-
- /* decompress */
- ctx.bytes = 0;
- ctx.mode = k_bitpack_decompress;
-
- bitpack_qquat( &ctx, q );
- vg_info( "q: %f %f %f %f\n", q[0], q[1], q[2], q[3] );
-
- return 0;
-#endif
-
vg_mem.use_libc_malloc = 0;
vg_set_mem_quota( 160*1024*1024 );
vg_enter( argc, argv, "Voyager Game Engine" );
}
static void vg_launch_opt(void){
+ const char *arg;
if( vg_long_opt( "noauth" ) ){
network_client.auth_mode = eServerModeNoAuthentication;
}
+
+ if( (arg = vg_long_opt_arg( "server" )) ){
+ vg_strncpy( arg, network_client.server_adress, 64,
+ k_strncpy_overflow_fatal );
+ }
}
static void vg_preload(void){
/* apply a rotation from the perspective of root */
static void keyframe_rotate_around( mdl_keyframe *kf,
- v3f origin, v3f offset, v4f q )
+ v3f origin, v3f offset, v4f q )
{
v3f v0, co;
v3_add( kf->co, offset, co );
float *target = &world_sfd.buffer[i*2+0],
*cur = &world_sfd.buffer[i*2+1];
- float const rate = vg.time_delta * 15.2313131414f;
+ float const rate = vg.time_delta * 25.2313131414f;
float d1 = *target-*cur;
if( fabsf(d1) > rate ){