#include "gui.h"
#include "menu.h"
-static void miniworld_helper_default(void){
- gui_helper_clear();
- vg_str text;
-
- if( gui_new_helper( input_button_list[k_srbind_miniworld_teleport],&text))
- vg_strcat( &text, "Teleport" );
-
- if( gui_new_helper( input_button_list[k_srbind_miniworld_resume], &text ))
- vg_strcat( &text, "Enter World" );
-}
-
-static void miniworld_helper_tele(void){
- gui_helper_clear();
- vg_str text;
- if( gui_new_helper( input_button_list[k_srbind_miniworld_resume], &text ))
- vg_strcat( &text, "Confirm" );
-
- if( gui_new_helper( input_button_list[k_srbind_mback],&text))
- vg_strcat( &text, "Cancel" );
-}
-
static void ent_miniworld_call( world_instance *world, ent_call *call ){
ent_miniworld *miniworld = mdl_arritm( &world->ent_miniworld,
mdl_entity_id_id(call->id) );
mdl_transform_m4x3( &miniworld->transform, global_miniworld.mmdl );
global_miniworld.active = miniworld;
- global_miniworld.mode = 0;
- global_miniworld.dest_spawn = NULL;
- miniworld_helper_default();
+
+ gui_helper_clear();
+ vg_str text;
+
+ if( gui_new_helper( input_button_list[k_srbind_miniworld_resume], &text ))
+ vg_strcat( &text, "Enter World" );
}
else if( call->function == 1 ){
global_miniworld.active = NULL;
- global_miniworld.mode = 0;
- global_miniworld.dest_spawn = NULL;
gui_helper_clear();
if( miniworld->proxy ){
return;
render_world_override( dest_world, host_world, global_miniworld.mmdl, cam,
- global_miniworld.dest_spawn );
+ NULL, 0.0f );
render_world_routes( dest_world, host_world,
global_miniworld.mmdl, cam, 0, 1 );
(world_static.active_instance != k_world_purpose_hub) ||
(!miniworld) ||
(dest->status != k_world_status_loaded) ){
-
- if( global_miniworld.mode ){
- global_miniworld.mode = 0;
- global_miniworld.dest_spawn = 0;
- menu.disable_open = 0;
- srinput.state = k_input_state_resume;
- gui_helper_clear();
- }
return;
}
if( button_down( k_srbind_miniworld_resume ) ){
- global_miniworld.mode = 0;
global_miniworld.transition = 1;
global_miniworld.t = 0.0f;
global_miniworld.cam = skaterift.cam;
-
- if( global_miniworld.dest_spawn ){
- v3_copy( global_miniworld.dest_spawn->transform.co,
- dest->player_co );
- }
world_switch_instance(1);
- global_miniworld.dest_spawn = NULL;
srinput.state = k_input_state_resume;
menu.disable_open = 0;
gui_helper_clear();
audio_oneshot( &audio_ui[2], 1.0f, 0.0f );
audio_unlock();
}
- else {
- if( global_miniworld.mode == 1 ){
- if( button_down(k_srbind_mback) ){
- global_miniworld.mode = 0;
- global_miniworld.dest_spawn = NULL;
- menu.disable_open = 0;
- srinput.state = k_input_state_resume;
- miniworld_helper_default();
- }
- else {
- m4x3f mmdl_inv;
- m4x3_invert_full( global_miniworld.mmdl, mmdl_inv );
- v3f lco;
- m4x3_mulv( mmdl_inv, localplayer.rb.co, lco );
- global_miniworld.dest_spawn = world_find_closest_spawn( dest, lco );
- }
- }
- else {
- if( button_down( k_srbind_miniworld_teleport ) ){
- global_miniworld.mode = 1;
- menu.disable_open = 1;
- miniworld_helper_tele();
- }
- }
- }
}
static void ent_miniworld_goback(void){
struct {
ent_miniworld *active;
int transition;
- int mode;
f32 t;
m4x3f mmdl;
camera cam;
-
- ent_spawn *dest_spawn;
}
static global_miniworld;
enum gui_icon {
k_gui_icon_tick = 0,
+ k_gui_icon_tick_2d,
k_gui_icon_exclaim,
+ k_gui_icon_exclaim_2d,
k_gui_icon_board,
k_gui_icon_world,
k_gui_icon_rift,
k_gui_icon_rift_run,
+ k_gui_icon_rift_run_2d,
k_gui_icon_friend,
k_gui_icon_player,
mdl_load_metadata_block( &gui.model_icons, alloc );
gui.icons[ k_gui_icon_tick ] = gui_find_icon( "icon_tick" );
+ gui.icons[ k_gui_icon_tick_2d ] = gui_find_icon( "icon_tick2d" );
gui.icons[ k_gui_icon_exclaim ] = gui_find_icon( "icon_exclaim" );
+ gui.icons[ k_gui_icon_exclaim_2d ] = gui_find_icon( "icon_exclaim2d" );
gui.icons[ k_gui_icon_board ] = gui_find_icon( "icon_board" );
gui.icons[ k_gui_icon_world ] = gui_find_icon( "icon_world" );
gui.icons[ k_gui_icon_rift ] = gui_find_icon( "icon_rift" );
gui.icons[ k_gui_icon_rift_run ] = gui_find_icon( "icon_rift_run" );
+ gui.icons[ k_gui_icon_rift_run_2d ] = gui_find_icon( "icon_rift_run2d" );
gui.icons[ k_gui_icon_friend ] = gui_find_icon( "icon_friend" );
gui.icons[ k_gui_icon_player ] = gui_find_icon( "icon_player" );
[k_sraxis_mbrowse_h] = (vg_input_op[]){
vg_mode_sub, vg_keyboard, SDLK_LEFT,
vg_mode_add, vg_keyboard, SDLK_RIGHT,
- vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTX,
+ vg_mode_add, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTX,
vg_end
},
[k_sraxis_mbrowse_v] = (vg_input_op[]){
vg_mode_add, vg_keyboard, SDLK_UP,
vg_mode_sub, vg_keyboard, SDLK_DOWN,
- vg_mode_absmax, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTY,
+ vg_mode_sub, vg_joy_axis, SDL_CONTROLLER_AXIS_LEFTY,
vg_end
},
[k_sraxis_replay_h] = (vg_input_op[]){
}
else if( MDL_CONST_PSTREQ( &menu.model, q, "reset" ) ){
+
+ /* FIXME: Should only be availible in CLIENT WORLD */
+
+ menu_close();
+ respawn_begin_chooser();
+
+ /* FIXME: Need a back to hub button */
+#if 0
srinput.state = k_input_state_resume;
menu_close();
ent_miniworld_goback();
+#endif
}
else if( MDL_CONST_PSTREQ( &menu.model, q, "credits" ) ){
[k_skaterift_replay] = "replay",
[k_skaterift_ent_focus] = "ent_focus",
[k_skaterift_default] = "default",
+ [k_skaterift_respawning]= "map"
} [skaterift.activity] );
player__debugtext( 1, "time_rate: %.4f", skaterift.time_rate );
#ifndef RESPAWN_C
#define RESPAWN_C
-#if 0
+#if 1
#include "respawn.h"
#include "skaterift.h"
#include "world.h"
if( skaterift.activity != k_skaterift_respawning ) return;
if( button_down( k_srbind_mback ) ){
+ gui_helper_clear();
srinput.state = k_input_state_resume;
skaterift.activity = k_skaterift_menu;
menu.page = 0xffffffff;
return;
}
- if( button_down( k_srbind_world_left ) ){
- if( respawn_chooser.world_id > 0 )
- respawn_chooser_setworld( respawn_chooser.world_id-1 );
- }
-
- if( button_down( k_srbind_world_right ) ){
- u32 next = respawn_chooser.world_id+1;
- if( next < vg_list_size(world_static.instances) )
- respawn_chooser_setworld( next );
- }
-
- if( button_down(k_srbind_home) ){
- respawn_chooser.home_select ++;
- if( respawn_chooser.home_select >= vg_list_size(respawn_homes) )
- respawn_chooser.home_select = 0;
- respawn_chooser_gohome();
- }
-
world_instance *world = &world_static.instances[ respawn_chooser.world_id ];
v3f *bbx = world->scene_geo.bbx;
f32 *pos = respawn_chooser.plane_pos;
for( u32 i=0; i<mdl_arrcount(&world->ent_challenge); i++ ){
ent_challenge *challenge = mdl_arritm( &world->ent_challenge, i );
- enum gui_icon icon = k_gui_icon_exclaim;
+ enum gui_icon icon = k_gui_icon_exclaim_2d;
if( challenge->status )
- icon = k_gui_icon_tick;
+ icon = k_gui_icon_tick_2d;
respawn_map_draw_icon( cam, icon, challenge->transform.co );
}
v4_copy( route->colour, colour );
v3_muls( colour, 1.6666f, colour );
gui_icon_setcolour( colour );
- respawn_map_draw_icon( cam, k_gui_icon_rift_run,
+ respawn_map_draw_icon( cam, k_gui_icon_rift_run_2d,
route->board_transform[3] );
}
}
if( gui_new_helper( input_joy_list[k_srjoystick_steer], &text ) )
vg_strcat( &text, "move" );
- if( gui_new_helper( input_button_list[k_srbind_mleft], &text ) )
- vg_strcat( &text, "world" );
-
if( gui_new_helper( input_button_list[k_srbind_maccept], &text ) )
vg_strcat( &text, "spawn" );
- if( gui_new_helper( input_button_list[k_srbind_home], &text ) )
- vg_strcat( &text, "home" );
+ if( gui_new_helper( input_button_list[k_srbind_mback], &text ) )
+ vg_strcat( &text, "exit" );
}
#if 0
uniform vec4 uPlayerPos; /* w: distance to uSpawnPos */
uniform vec4 uSpawnPos; /* w: inverse distance to uPlayerPos */
uniform bool uAlphatest;
+uniform float uIsoAmt;
#include "common_scene.glsl"
#include "motion_vectors_fs.glsl"
float d3 = distance(p0,aCo);
emit += vec3(fract(t*0.2-g_realtime+d3*0.2)*max(0.0,1.0-d3*0.2));
- oColour = vec4( vfrag+emit, 1.0 );
+ vfrag += emit;
+
+ if( uIsoAmt > 0.0 ){
+ float height = fract( aCo.y * 0.1 );
+ float lg = 2.0*length(vec2(dFdx(height), dFdy(height)));
+ vfrag *= 1.0f+(lg*0.4*uIsoAmt);
+ }
+
+
+ oColour = vec4( vfrag, 1.0 );
//oColour = vec4( vfrag, 1.0 );
}
"uniform vec4 uPlayerPos; /* w: distance to uSpawnPos */\n"
"uniform vec4 uSpawnPos; /* w: inverse distance to uPlayerPos */\n"
"uniform bool uAlphatest;\n"
+"uniform float uIsoAmt;\n"
"\n"
"#line 1 1 \n"
"// :D\n"
" return world_compute_lighting( diffuse, normal, co, compute_board_shadow() );\n"
"}\n"
"\n"
-"#line 11 0 \n"
+"#line 12 0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 12 0 \n"
+"#line 13 0 \n"
"\n"
"vec2 smin( float a, float b, float k ){\n"
" float h = max( k-abs(a-b), 0.0 )/k;\n"
" float d3 = distance(p0,aCo);\n"
" emit += vec3(fract(t*0.2-g_realtime+d3*0.2)*max(0.0,1.0-d3*0.2));\n"
"\n"
+" if( uIsoAmt > 0.0 ){\n"
+" float height = fract( aCo.y * 0.1 );\n"
+" float lg = 2.0*length(vec2(dFdx(height), dFdy(height)));\n"
+" emit += vec3(lg*0.1*uIsoAmt);\n"
+" }\n"
+"\n"
" oColour = vec4( vfrag+emit, 1.0 );\n"
" //oColour = vec4( vfrag, 1.0 );\n"
"}\n"
static GLuint _uniform_scene_override_uPlayerPos;
static GLuint _uniform_scene_override_uSpawnPos;
static GLuint _uniform_scene_override_uAlphatest;
+static GLuint _uniform_scene_override_uIsoAmt;
static GLuint _uniform_scene_override_g_world_depth;
static GLuint _uniform_scene_override_uLightsArray;
static GLuint _uniform_scene_override_uLightsIndex;
static void shader_scene_override_uAlphatest(int b){
glUniform1i(_uniform_scene_override_uAlphatest,b);
}
+static void shader_scene_override_uIsoAmt(float f){
+ glUniform1f(_uniform_scene_override_uIsoAmt,f);
+}
static void shader_scene_override_g_world_depth(int i){
glUniform1i(_uniform_scene_override_g_world_depth,i);
}
_uniform_scene_override_uPlayerPos = glGetUniformLocation( _shader_scene_override.id, "uPlayerPos" );
_uniform_scene_override_uSpawnPos = glGetUniformLocation( _shader_scene_override.id, "uSpawnPos" );
_uniform_scene_override_uAlphatest = glGetUniformLocation( _shader_scene_override.id, "uAlphatest" );
+ _uniform_scene_override_uIsoAmt = glGetUniformLocation( _shader_scene_override.id, "uIsoAmt" );
_uniform_scene_override_g_world_depth = glGetUniformLocation( _shader_scene_override.id, "g_world_depth" );
_uniform_scene_override_uLightsArray = glGetUniformLocation( _shader_scene_override.id, "uLightsArray" );
_uniform_scene_override_uLightsIndex = glGetUniformLocation( _shader_scene_override.id, "uLightsIndex" );
/* time rate */
f32 target = 1;
- if( skaterift.activity & (k_skaterift_replay|k_skaterift_menu) ){
+ if( skaterift.activity & (k_skaterift_replay|k_skaterift_menu|
+ k_skaterift_respawning) ){
target = 0;
}
world_update( world_current_instance(), localplayer.rb.co );
audio_ambient_sprites_update( world_current_instance(), localplayer.rb.co );
+ respawn_chooser_pre_update();
}
static void vg_fixed_update(void){
}
}
+ if( skaterift.activity == k_skaterift_respawning ){
+ world_instance *world = world_current_instance();
+ glDrawBuffers( 1, (GLenum[]){ GL_COLOR_ATTACHMENT0 } );
+
+ v3f bg;
+ v3_muls( world->ub_lighting.g_daysky_colour,
+ world->ub_lighting.g_day_phase -
+ world->ub_lighting.g_sunset_phase*0.1f, bg );
+
+ v3_muladds( bg, world->ub_lighting.g_sunset_colour,
+ (1.0f-0.5f)*world->ub_lighting.g_sunset_phase, bg );
+
+ v3_muladds( bg, world->ub_lighting.g_nightsky_colour,
+ (1.0f-world->ub_lighting.g_day_phase), bg );
+
+ glClearColor( bg[0], bg[1], bg[2], 0.0f );
+ glClear( GL_COLOR_BUFFER_BIT );
+ glDrawBuffers( 2, (GLenum[]){ GL_COLOR_ATTACHMENT0,
+ GL_COLOR_ATTACHMENT1 } );
+
+ m4x3f identity;
+ m4x3_identity( identity );
+ render_world_override( world, world, identity, &skaterift.cam,
+ respawn_chooser.spawn, 1.0f );
+ render_world_routes( world, world, identity, &skaterift.cam, 0, 1 );
+ return;
+ }
+
render_world( world_current_instance(), &skaterift.cam, 0, 0, 1, 1 );
world_instance *holdout_world = NULL;
skaterift.cam.nearz = 0.1f;
skaterift.cam.farz = 2100.0f;
+ if( skaterift.activity == k_skaterift_respawning ){
+ camera_copy( &respawn_chooser.cam, &skaterift.cam );
+ skaterift.cam.nearz = 4.0f;
+ skaterift.cam.farz = 3100.0f;
+ }
+
if( global_miniworld.transition ){
f32 dt = vg.time_frame_delta / 2.0f,
s = vg_signf( global_miniworld.transition );
skaterift_composite_maincamera();
/* --------------------------------------------------------------------- */
- render_world_cubemaps( world_current_instance() );
+ if( skaterift.activity != k_skaterift_respawning )
+ render_world_cubemaps( world_current_instance() );
/* variable res target */
render_fb_bind( gpipeline.fb_main, 1 );
portals */
/* continue with variable rate */
- if( !global_miniworld.transition ){
+ if( !global_miniworld.transition &&
+ (skaterift.activity != k_skaterift_respawning) ){
render_fb_bind( gpipeline.fb_main, 1 );
render_world_gates( world_current_instance(), &skaterift.cam );
}
render_view_framebuffer_ui();
remote_player_network_imgui( vg.pv );
- remote_players_chat_imgui(); /* TODO: conditional */
- remote_players_imgui_world( world_current_instance(), vg.pv, 100.0f, 1 );
+ if( skaterift.activity == k_skaterift_respawning ){
+ remote_players_imgui_world( world_current_instance(), vg.pv, 2000.0f, 0 );
+ remote_players_imgui_lobby();
+ }
+ else {
+ remote_players_chat_imgui(); /* TODO: conditional */
+ remote_players_imgui_world( world_current_instance(), vg.pv, 100.0f, 1 );
+ }
}
k_skaterift_replay = 0x01,
k_skaterift_ent_focus = 0x02,
k_skaterift_menu = 0x04,
- k_skaterift_respawning_DELETED = 0x08,
+ k_skaterift_respawning = 0x08,
}
activity;
world_instance *lighting_source,
m4x3f mmdl,
camera *cam,
- ent_spawn *dest_spawn ){
+ ent_spawn *dest_spawn, f32 iso_amt ){
struct world_pass pass = {
.cam = cam,
.fn_bind_textures = bindpoint_override,
shader_scene_override_uTexGarbage(0);
shader_scene_override_uTexMain(1);
shader_scene_override_uPv( pass.cam->mtx.pv );
+ shader_scene_override_uIsoAmt( iso_amt );
WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( lighting_source, scene_override );
bind_terrain_noise();
world_instance *lighting_source,
m4x3f mmdl,
camera *cam,
- ent_spawn *dest_spawn );
+ ent_spawn *dest_spawn, f32 iso_amt );
#define WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( WORLD, SHADER ) \
world_link_lighting_ub( WORLD, _shader_##SHADER.id ); \