{
.optimization = 0,
.debug_asan = 0,
- .pdb = 1,
.platform = k_platform_windows,
.arch = k_architecture_x86_64,
.compiler = k_compiler_zigcc,
vg_compiler_run( &test_proj, &vg_test_env, &conf, sources.buffer, "dbtest", k_obj_type_exe );
}
-#include "vg/vg_kv.h"
-#include "vg/vg_kv.c"
-
int main( int argc, const char *argv[] )
{
vg_log_init();
_vg_opt_init( argc, argv );
- vg_stack_allocator stacky;
- vg_stack_init( &stacky, NULL, 0, "Stacky" );
- vg_stack_set_flags( &stacky, VG_STACK_ALLOCATOR_METADATA|VG_STACK_ALLOCATOR_DOUBLE_IF_FULL );
- u32 size;
- const char *src = vg_file_read( &stacky, "/home/harry/Documents/vg_res/test.kv", &size, 1 );
-
- if( src )
- {
- vg_kvs kvs;
- vg_kv_parse( &kvs, src, &stacky );
- vg_kv_print_info( &kvs );
- vg_kv_print_tree( &kvs, 0, 0 );
-
- u32 db = vg_kv_find( &kvs, 0, "skaterift_database" );
- if( db )
- {
- vg_success( "Found db\n" );
-
- u32 users = vg_kv_find( &kvs, db, "users" );
- if( users )
- {
- vg_success( "Found users\n" );
-
- u32 vt = vg_kv_find( &kvs, users, "value_type" );
- if( vt )
- {
- u32 val_length;
- const char *val = vg_kv_value( &kvs, vt, &val_length );
-
- if( val )
- vg_success( "-> %.*s\n", val_length, val );
- }
- }
- }
- }
-
- return 0;
-
const char *arg;
if( (arg = vg_long_opt_arg( "glsl-dir", "Specify output directory for preprocessed GLSL" )) )
if( vg_opt('r', NULL) )
vg_test_env.optimization = 3;
+ if( vg_long_opt( "tsan", NULL ) )
+ {
+ vg_test_env.debug_asan = 0;
+ vg_test_env.thread_san = 1;
+ }
+
if( vg_long_opt( "no-asan", NULL ) )
vg_test_env.debug_asan = 0;
vg_audio_lock();
air_audio_data.channel_id = vg_audio_get_first_idle_channel();
VG_ASSERT( air_audio_data.channel_id );
-
vg_audio_set_channel_clip( air_audio_data.channel_id, &air_synth );
vg_audio_start_channel( air_audio_data.channel_id );
vg_audio_unlock();
struct _compass _compass = { .alpha = 1 };
+void compass_register(void)
+{
+ vg_console_reg_var( "compass_alpha", &_compass.alpha, k_var_dtype_f32, VG_VAR_PERSISTENT );
+}
+
void compass_init(void)
{
mdl_context *mdl = &_compass.mdl;
_compass.sm_comp_w = mdl_get_submesh_index( mdl, "comp_w" );
_compass.sm_comp_objective = mdl_get_submesh_index( mdl, "comp_objective" );
mdl_close( mdl );
-
- vg_console_reg_var( "compass_alpha", &_compass.alpha, k_var_dtype_f32, VG_VAR_PERSISTENT );
}
static void compass_project( m3x3f base_projection, f32 x, f32 height )
extern _compass;
void compass_init(void);
+void compass_register(void);
void compass_render_texture(void);
void compass_render_imgui( ui_context *ctx );
}
}
+void control_overlay_register(void)
+{
+ vg_console_reg_var( "control_overlay", &control_overlay.enabled, k_var_dtype_i32, VG_VAR_PERSISTENT );
+}
+
void control_overlay_init(void)
{
mdl_context *mdl = &control_overlay.mdl;
mdl_async_full_load_std( mdl, NULL );
mdl_close( mdl );
vg_async_call( &vg.main_tasks, control_overlay_init_finish, NULL );
-
- vg_console_reg_var( "control_overlay", &control_overlay.enabled, k_var_dtype_i32, VG_VAR_PERSISTENT );
}
static void draw_key( bool press, bool wide )
void control_overlay_render(void);
void control_overlay_init(void);
+void control_overlay_register(void);
}
}
-void _ent_atom_init(void)
+void _ent_atom_register(void)
{
vg_console_reg_cmd( "atom", _ent_atom_ccmd, _ent_atom_ccmd_poll );
}
void _atom_notify_list( enum e_atom_list list );
entity_event_result _ent_atom_event( ent_event *event );
-void _ent_atom_init(void);
+void _ent_atom_register(void);
return 1;
}
-void _ent_challenge_init(void)
+void _ent_challenge_register(void)
{
vg_console_reg_cmd( "challenge", _skaterift_challenge_ccmd, NULL );
}
void _restart_active_challenge(void);
void _ent_challenge_complete( ent_challenge *challenge );
void _ent_challenge_win(void);
-void _ent_challenge_init(void);
+void _ent_challenge_register(void);
k_tornado_ratio = 0.5f,
k_tornado_range = 10.f;
-void ent_tornado_init(void)
+void ent_tornado_register(void)
{
vg_console_reg_var( "k_tonado_strength", &k_tornado_strength,
k_var_dtype_f32, VG_VAR_PERSISTENT|VG_VAR_CHEAT );
#pragma once
-void ent_tornado_init(void);
+void ent_tornado_register(void);
void ent_tornado_debug(void);
void ent_tornado_forces( v3f co, v3f cv, v3f out_a );
void ent_tornado_pre_update(void);
v4_copy( colour, gui.cur_icon_colour );
}
+void gui_register(void)
+{
+ vg_console_reg_cmd( "gui_location", gui_location_print_ccmd, NULL );
+}
+
static void gui_init(void)
{
font3d_load( &gui.font, "models/rs_font.mdl", &vg.rtmem );
- vg_console_reg_cmd( "gui_location", gui_location_print_ccmd, NULL );
/* load icons */
mdl_context *mdl = &gui.model_icons;
return 1;
}
-void menu_init(void)
+void menu_register(void)
{
vg_console_reg_var( "skip_starter_menu", &menu.skip_starter, k_var_dtype_i32, VG_VAR_PERSISTENT );
vg_console_reg_cmd( "menu_impromptu", cmd_menu_impromptu, NULL );
+}
+void menu_init(void)
+{
u32 flags = VG_TEX2D_CLAMP|VG_TEX2D_NOMIP|VG_TEX2D_NEAREST;
vg_tex2d_load_qoi_async_file( "textures/prem.qoi", flags, &menu.prem_tex );
vg_tex2d_load_qoi_async_file( "textures/guide_pump.qoi", flags, &menu.guide_pump_tex );
}
extern menu;
+void menu_register(void);
void menu_init(void);
void menu_at_begin(void);
void menu_gui( ui_context *ctx );
{
vg_info( "Unloading cutscene\n" );
vg_audio_lock();
- vg_audio_fadeout_flagged_audio( AUDIO_FLAG_CUTSCENE, 1.0f );
vg_audio_set_flagged_pause( AUDIO_FLAG_CUTSCENE, 0 );
+ vg_audio_fadeout_flagged_audio( AUDIO_FLAG_CUTSCENE, 1.0f );
vg_audio_unlock();
for( u32 i=0; i<_cutscene.unique_refs; i ++ )
struct cutscene_load_info *info = (void *)task->data;
vg_info( "Loading cutscene: %s\n", info->path );
- _cutscene.stack = vg_stack_make_substack( &vg.rtmem, VG_MB(20), "Cutscene Stack" );
- metascene_load( &_cutscene.meta, info->path, _cutscene.stack );
+ vg_stack_init( &_cutscene.stack, NULL, VG_MB(20), "Cutscene Stack" );
+ metascene_load( &_cutscene.meta, info->path, &_cutscene.stack );
_cutscene.instance_count = af_arrcount( &_cutscene.meta.instances );
- _cutscene.instances = vg_stack_allocate( _cutscene.stack, sizeof(struct cs_instance) * _cutscene.instance_count,
+ _cutscene.instances = vg_stack_allocate( &_cutscene.stack, sizeof(struct cs_instance) * _cutscene.instance_count,
8, "Instances" );
- _cutscene.refs = vg_stack_allocate( _cutscene.stack, 0, 8, "References" );
+ _cutscene.refs = vg_stack_allocate( &_cutscene.stack, 0, 8, "References" );
_cutscene.unique_refs = 0;
for( u32 i=0; i < _cutscene.instance_count; i ++ )
{
if( !ref )
{
- _cutscene.refs = vg_stack_extend_last( _cutscene.stack, sizeof(struct model_ref) );
+ _cutscene.refs = vg_stack_extend_last( &_cutscene.stack, sizeof(struct model_ref) );
ref_id = _cutscene.unique_refs;
ref = &_cutscene.refs[ ref_id ];
ref->name = name;
vg_strcat( &mdl_path, ".mdl" );
vg_info( "Loading instance model: %s\n", mdl_path.buffer );
- mdl_open( &ref->mdl, mdl_path.buffer, _cutscene.stack );
- mdl_load_metadata_block( &ref->mdl, _cutscene.stack );
+ mdl_open( &ref->mdl, mdl_path.buffer, &_cutscene.stack );
+ mdl_load_metadata_block( &ref->mdl, &_cutscene.stack );
mdl_async_full_load_std( &ref->mdl, NULL );
mdl_close( &ref->mdl );
u32 skeleton_count = ref->mdl.armature_count;
if( skeleton_count )
{
- ref->skeletons = vg_stack_allocate( _cutscene.stack, sizeof(struct cs_skeleton) * skeleton_count, 8, "Skeletons" );
+ ref->skeletons = vg_stack_allocate( &_cutscene.stack, sizeof(struct cs_skeleton) * skeleton_count, 8, "Skeletons" );
ref->total_skinning_bones = 0;
for( u32 j=0; j<skeleton_count; j ++ )
{
struct cs_skeleton *skele = &ref->skeletons[ j ];
- skeleton_setup( &skele->sk, &ref->mdl, j, _cutscene.stack );
+ skeleton_setup( &skele->sk, &ref->mdl, j, &_cutscene.stack );
skele->skinning_offset = ref->total_skinning_bones;
ref->total_skinning_bones += skele->sk.bone_count;
}
struct cs_instance *ins = &_cutscene.instances[ i ];
struct model_ref *ref = &_cutscene.refs[ ins->ref_id ];
- ins->skinning_data = vg_stack_allocate( _cutscene.stack, sizeof(m4x3f) * ref->total_skinning_bones,
+ ins->skinning_data = vg_stack_allocate( &_cutscene.stack, sizeof(m4x3f) * ref->total_skinning_bones,
8, "Skinning Data" );
for( u32 j=0; j<ref->total_skinning_bones; j ++ )
m4x3_identity( ins->skinning_data[ j ] );
clip->_.clip.size = 0;
}
- audio_clip_load( &clip->_.clip, _cutscene.stack );
+ audio_clip_load( &clip->_.clip, &_cutscene.stack );
}
}
return;
}
- vg_stack_free( _cutscene.stack );
+ vg_stack_free( &_cutscene.stack );
_cutscene.state = k_cutscene_state_none;
_cutscene.marker_this_frame = NULL;
_cutscene.subtitle = NULL;
return 1;
}
-void cutscene_init(void)
+void cutscene_register(void)
{
vg_console_reg_cmd( "cutscene_play", cmd_cutscene_play, NULL );
vg_console_reg_cmd( "cutscene_inspector", cmd_cutscene_inspector, NULL );
struct _cutscene
{
ms_context meta;
- vg_stack_allocator *stack;
+ vg_stack_allocator stack;
enum cutscene_state
{
extern _cutscene;
void metascene_load( ms_context *ms, const char *path, void *alloc );
-void cutscene_init(void);
+void cutscene_register(void);
void cutscene_render( world_instance *world, vg_camera *cam );
void cutscene_render_fadeout(void);
bool _cutscene_load_and_play( const char *path, bool freeze_player, u32 raiser_entity );
}
}
-static void request_auth_ticket(void)
+void request_auth_ticket(void)
{
/*
* TODO Check for one thats cached on the disk and load it.
skaterift.rt_textures[ k_skaterift_rt_server_status ] = g_render.fb_network_status->attachments[0].id;
}
-static void on_server_connect_status( CallbackMsg_t *msg )
+void on_server_connect_status( CallbackMsg_t *msg )
{
SteamNetConnectionStatusChangedCallback_t *info = (void *)msg->m_pubParam;
vg_info( " Connection status changed for %lu\n", info->m_hConn );
render_server_status_gui();
}
-static void on_persona_state_change( CallbackMsg_t *msg )
+void on_persona_state_change( CallbackMsg_t *msg )
{
if( !network_connected() )
return;
return 0;
}
-void network_init(void)
+void network_register(void)
{
vg_console_reg_var( "auto_connect", &network_client.auto_connect, k_var_dtype_i32, VG_VAR_PERSISTENT );
- if( steam_ready )
- {
- _net_requests_init();
- steam_register_callback( k_iSteamNetConnectionStatusChangedCallBack, on_server_connect_status );
- steam_register_callback( k_iPersonaStateChange, on_persona_state_change );
- request_auth_ticket();
+ vg_console_reg_cmd( "rcon", cmd_network_send_rcon, NULL );
+}
- vg_console_reg_cmd( "rcon", cmd_network_send_rcon, NULL );
- }
+void network_init(void)
+{
+ _net_requests_init();
}
void network_end(void)
* Interface
*/
+/* TEMP!!!!!!!!!!!! */
+void on_server_connect_status( CallbackMsg_t *msg );
+void on_persona_state_change( CallbackMsg_t *msg );
+void request_auth_ticket(void);
+
/* Call it at start; Connects us to the gameserver */
+void network_register(void);
void network_init(void);
/* Run this from main loop */
#include "player_walk.h"
#include "player_dead.h"
-#include "player_drive.h"
#include "player_skate.h"
#include "player_basic_info.h"
#include "player_glide.h"
.immunity = 1 /* just for one frame */
};
-struct player_subsystem_interface *player_subsystems[] =
+struct player_subsystem_interface *player_subsystems[k_player_subsystem_max] =
{
[k_player_subsystem_walk] = &player_subsystem_walk,
[k_player_subsystem_dead] = &player_subsystem_dead,
- [k_player_subsystem_drive] = &player_subsystem_drive,
[k_player_subsystem_skate] = &player_subsystem_skate,
[k_player_subsystem_basic_info]=&player_subsystem_basic_info,
[k_player_subsystem_glide] = &player_subsystem_glide,
return 1;
}
-void player_init(void)
+void player_register(void)
{
- for( u32 i=0; i<k_player_subsystem_max; i++ )
- {
- struct player_subsystem_interface *sys = player_subsystems[i];
- if( sys->system_register )
- sys->system_register();
- }
-
vg_console_reg_var( "player_battery", &localplayer.has_battery, k_var_dtype_i32, 0 );
vg_console_reg_cmd( "respawn", localplayer_cmd_respawn, NULL );
VG_VAR_F32( k_cam_damp );
#endif
vg_console_reg_var( "invert_y", &k_invert_y, k_var_dtype_i32, VG_VAR_PERSISTENT );
+ for( u32 i=0; i<k_player_subsystem_max; i++ )
+ {
+ struct player_subsystem_interface *sys = player_subsystems[i];
+ if( sys && sys->system_register )
+ sys->system_register();
+ }
+}
+
+void player_init(void)
+{
mdl_context *mdl = &localplayer.battery;
mdl_open( mdl, "models/battery.mdl", &vg.rtmem );
mdl_load_metadata_block( mdl, &vg.rtmem );
for( u32 i=0; i<k_player_subsystem_max; i++ )
{
struct player_subsystem_interface *sys = player_subsystems[i];
-
- if( sys->bind ) sys->bind();
+ if( sys && sys->bind )
+ sys->bind();
}
}
* ---------------------------------------------------------
*/
+void player_register(void);
void player_init(void);
void player__debugtext( ui_context *ctx, int size, const char *fmt, ... );
void player__use_mesh( glmesh *mesh );
k_player_subsystem_walk = 0,
k_player_subsystem_skate = 1,
k_player_subsystem_dead = 2,
- k_player_subsystem_drive = 3,
+ k_player_subsystem_REMOVED0 = 3,
k_player_subsystem_basic_info = 4,
k_player_subsystem_glide = 5,
k_player_subsystem_max,
.network_animator_exchange = player_glide_animator_exchange,
.im_gui = player_glide_im_gui,
.bind = player_glide_bind,
+ .system_register = player_glide_register,
.animator_data = &player_glide.animator,
.animator_size = sizeof(player_glide.animator),
return 0;
}
-void player_glide_bind(void)
+void player_glide_register(void)
{
u32 mask = VG_VAR_CHEAT|VG_VAR_PERSISTENT;
VG_VAR_F32( k_glide_steer, flags=mask );
VG_VAR_I32( k_glide_pause, flags=mask );
VG_VAR_F32( k_glide_balance, flags=mask );
VG_VAR_F32( k_glide_wing_orient, flags=mask );
-
vg_console_reg_cmd( "spawn_glider", ccmd_player_glider_spawn, NULL );
+}
+void player_glide_bind(void)
+{
f32 mass = 0.0f,k_density = 8.0f;
m3x3f I;
m3x3_zero( I );
extern player_glide;
extern struct player_subsystem_interface player_subsystem_glide;
+void player_glide_register(void);
void player_glide_pre_update(void);
void player_glide_update(void);
void player_glide_post_update(void);
return 0;
}
-void player_ragdoll_init(void)
+void player_ragdoll_register(void)
{
VG_VAR_F32( k_ragdoll_active_threshold );
VG_VAR_F32( k_ragdoll_angular_drag );
k_player_die_type_water
};
-void player_ragdoll_init(void);
+void player_ragdoll_register(void);
void player_init_ragdoll_bone_collider( struct skeleton_bone *bone,
struct ragdoll_part *rp );
u32 ragdoll_bone_parent( struct player_ragdoll *rd, u32 bone_id );
return 1;
}
-void remote_players_init(void)
+void remote_players_register(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 );
+}
+
+void remote_players_init(void)
+{
for( u32 i=0; i<NETWORK_SFX_QUEUE_LENGTH; i ++ )
netplayers.sfx_queue[i].system = k_player_subsystem_invalid;
}
void render_remote_players( world_instance *world, vg_camera *cam );
void relink_all_remote_player_worlds(void);
void player_remote_update_friendflags( struct network_player *remote );
+void remote_players_register(void);
void remote_players_init(void);
void remote_sfx_pre_update(void);
void remote_players_imgui_world( ui_context *ctx, world_instance *world, m4x4f pv, f32 max_dist, int geo_cull );
g_render.ready = 1;
}
-void render_init(void)
+void render_register(void)
{
- THREAD_1;
-
vg_console_reg_var( "fov", &k_fov, k_var_dtype_f32, VG_VAR_PERSISTENT );
vg_console_reg_var( "cam_height", &k_cam_height, k_var_dtype_f32, VG_VAR_PERSISTENT );
+}
+
+void render_init(void)
+{
+ THREAD_1;
/*
* Workshop preview
}
static g_render;
+void render_register(void);
void render_init(void);
void render_fsquad(void);
void render_fsquad1(void);
return 1;
}
-void _replay2_init(void)
+void _replay2_register(void)
{
vg_console_reg_cmd( "replay2_watch", cmd_replay2_manual_download, NULL );
+}
+void _replay2_init(void)
+{
u32 MB = 1024*1024,
size = 4*MB;
}
extern _replay2;
+void _replay2_register(void);
void _replay2_init(void);
void _replay2_pre_update(void);
void _replay2_imgui( ui_context *ctx );
#include "player.h"
#include "network.h"
#include "menu.h"
-#include "vehicle.h"
#include "save.h"
#include "player_remote.h"
#include "particle.h"
co_thread( co, 1, &vg.loader_tasks );
}
+ if( co_step( co, 0 ) )
+ {
+ if( !g_client.nosteam )
+ {
+ steam_init();
+ steam_register_callback( k_iSteamNetConnectionStatusChangedCallBack, on_server_connect_status );
+ steam_register_callback( k_iPersonaStateChange, on_persona_state_change );
+ request_auth_ticket();
+ }
+ }
+
if( co_step( co, 1 ) )
{
vg_loader_step( render_init, NULL );
vg_loader_step( remote_players_init, NULL );
if( !g_client.nosteam )
- {
- steam_init();
vg_loader_step( NULL, steam_end );
- }
vg_loader_step( network_init, network_end );
-
vg_loader_set_user_information( "Initializing subsystems" );
- vg_console_reg_cmd( "quit", skaterift_quit_command, NULL );
- vg_console_reg_cmd( "load_world", skaterift_load_world_command, NULL );
- vg_console_reg_var( "immobile", &localplayer.immobile, k_var_dtype_i32, 0 );
- vg_console_reg_var( "allow_resume", &skaterift.allow_replay_resume, k_var_dtype_i32, VG_VAR_CHEAT );
- vg_console_reg_var( "boost_scale", &skaterift.boost_scale, k_var_dtype_f32, VG_VAR_CHEAT );
vg_loader_step( menu_init, NULL );
vg_loader_step( _user_profile_init, NULL );
vg_loader_step( control_overlay_init, NULL );
vg_loader_step( world_init, NULL );
- vg_loader_step( vehicle_init, NULL );
vg_loader_step( gui_init, NULL );
vg_loader_step( compass_init, NULL );
vg_loader_step( player_init, NULL );
- vg_loader_step( player_ragdoll_init, NULL );
- vg_loader_step( cutscene_init, NULL );
/* content stuff */
vg_loader_step( addon_system_init, NULL );
- vg_loader_step( workshop_init, NULL );
vg_loader_step( skateshop_init, NULL );
vg_loader_step( world_map_init, NULL );
- vg_loader_step( ent_tornado_init, NULL );
vg_loader_step( skaterift_load_player_content, NULL );
vg_loader_step( _replay2_init, NULL );
vg_loader_step( _ent_npc_init, NULL );
- vg_loader_step( _ent_atom_init, NULL );
- vg_loader_step( _ent_challenge_init, NULL );
vg_loader_set_user_information( "Compiling shaders" );
vg_bake_shaders();
_world.default_hub_addon = _addon_mount_from_folder_path( "maps/dev_hub", k_addon_type_world, ".mdl" );
VG_ASSERT( _world.default_hub_addon );
- vg_console_load_autos();
vg_loader_set_user_information( "Mounting addons" );
_addon_mount_content_folder( k_addon_type_player, "playermodels", ".mdl" );
_addon_mount_content_folder( k_addon_type_board, "boards", ".mdl" );
world_routes_fixedupdate( &_world.main );
player__update();
- vehicle_update_fixed();
}
void vg_post_update(void)
v3_copy( localplayer.rb.v, _vg_audio.controls.listener_velocity );
vg_audio_unlock();
- vehicle_update_post();
skaterift_autosave_update();
localplayer.immunity = 0;
#include "player.c"
#include "player_common.c"
#include "player_dead.c"
-#include "player_drive.c"
#include "player_effects.c"
#include "player_glide.c"
#include "player_ragdoll.c"
#include "scene.c"
#include "steam.c"
#include "trail.c"
-#include "vehicle.c"
#include "workshop.c"
#include "world_audio.c"
#include "world.c"
_vg_tower_mask( vg.sig_engine ) |
_vg_tower_mask( vg.sig_client );
_vg_tower_register_trigger( _vg_tower_mask( vg.sig_engine ), _handle_vg_signal );
+
+ vg_console_reg_cmd( "quit", skaterift_quit_command, NULL );
+ vg_console_reg_cmd( "load_world", skaterift_load_world_command, NULL );
+ vg_console_reg_var( "immobile", &localplayer.immobile, k_var_dtype_i32, 0 );
+ vg_console_reg_var( "allow_resume", &skaterift.allow_replay_resume, k_var_dtype_i32, VG_VAR_CHEAT );
+ vg_console_reg_var( "boost_scale", &skaterift.boost_scale, k_var_dtype_f32, VG_VAR_CHEAT );
+
+ /* TODO Modules that do this automatically.... */
+ render_register();
+ remote_players_register();
+ network_register();
+ menu_register();
+ control_overlay_register();
+ world_render_register();
+ gui_register();
+ compass_register();
+ player_register();
+ player_ragdoll_register();
+ cutscene_register();
+ workshop_register();
+ ent_tornado_register();
+ _replay2_register();
+ _ent_atom_register();
+ _ent_challenge_register();
+
vg_run();
return 0;
}
int steam_achievement_ccmd( int argc, char const *argv[] )
{
- if( !(steam_ready && steam_stats_ready) ) return 1;
+ if( !(steam_ready && steam_stats_ready) )
+ return 1;
if( argc == 1 ){
if( !strcmp( argv[0], "list" ) ){
return j;
}
+void steam_register(void)
+{
+ vg_console_reg_cmd( "ach", steam_achievement_ccmd, NULL );
+}
+
int steam_init(void)
{
const char *username = "offline player";
}
steam_ready = 1;
-
SteamAPI_ManualDispatch_Init();
/* Connect interfaces */
* --------------------------------------------------------
*/
hSteamUserStats = SteamAPI_SteamUserStats();
- steam_register_callback( k_iUserStatsReceived,
- steam_on_recieve_current_stats );
+ steam_register_callback( k_iUserStatsReceived, steam_on_recieve_current_stats );
if( !SteamAPI_ISteamUserStats_RequestCurrentStats( hSteamUserStats ) )
vg_warn( "No Steam Logon: Cannot request stats\n" );
-
- vg_console_reg_cmd( "ach", steam_achievement_ccmd, NULL );
-
/* TODO: On username update callback */
- str_utf8_collapse( username, steam_username_at_startup,
- VG_ARRAY_LEN(steam_username_at_startup) );
-
+ str_utf8_collapse( username, steam_username_at_startup, VG_ARRAY_LEN(steam_username_at_startup) );
return 1;
}
void steam_update(void)
{
- if( steam_ready ){
+ if( steam_ready )
steamworks_event_loop( hSteamClientPipe );
- }
}
void steam_end(void)
{
- if( steam_ready ){
+ if( steam_ready )
+ {
vg_info( "Shutting down\n..." );
SteamAPI_Shutdown();
}
extern void *hSteamNetworkingSockets, *hSteamUser, *hSteamUserStats;
extern char steam_username_at_startup[128];
+void steam_register(void);
int steam_init(void);
void steam_update(void);
void steam_end(void);
return 0;
}
-void workshop_init(void)
+void workshop_register(void)
{
vg_console_reg_cmd( "workshop_submit", workshop_submit_command, NULL );
}
}
extern workshop_form;
-void workshop_init(void);
+void workshop_register(void);
int workshop_submit_command( int argc, const char *argv[] );
void async_workshop_get_filepath( void *data, u32 len );
void async_workshop_get_installed_files( void *data, u32 len );
_cutscene_unload();
vg_audio_lock();
- vg_audio_fadeout_flagged_audio( AUDIO_FLAG_WORLD, 1.0f );
vg_audio_set_flagged_pause( AUDIO_FLAG_WORLD, 0 );
+ vg_audio_fadeout_flagged_audio( AUDIO_FLAG_WORLD, 1.0f );
vg_audio_unlock();
}
glBindBufferBase( GL_UNIFORM_BUFFER, 0, world->ubo_lighting );
}
-void world_render_init(void)
+void world_render_register(void)
{
VG_VAR_F32( k_day_length );
VG_VAR_I32( k_debug_light_indices );
VG_VAR_I32( k_light_editor );
vg_console_reg_cmd( "set_time", ccmd_set_time, NULL );
vg_console_reg_cmd( "render_portals", ccmd_render_portals, NULL );
+}
+void world_render_init(void)
+{
vg_info( "Loading world resources\n" );
vg_stack_clear( &vg.scratch );
}
extern world_render;
+void world_render_register(void);
void world_render_init(void);
void world_prerender( world_instance *world );