X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=respawn.c;h=5abb042f7a54ad92cd348e5e7e2f9af421ec153c;hb=137d40d96fe923600d8378b8e138e3c276f27ff4;hp=98b9bcd43ba07cc0d3a1a33866f1771c3e63c188;hpb=f2c3e6ffba0231be14961f0149106cecbade8124;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/respawn.c b/respawn.c index 98b9bcd..5abb042 100644 --- a/respawn.c +++ b/respawn.c @@ -9,7 +9,7 @@ #include "menu.h" #include "scene.h" -VG_STATIC void respawn_chooser_get_dir( v3f dir ){ +static void respawn_chooser_get_dir( v3f dir ){ /* idk */ dir[0] = -sqrtf(0.5f); dir[2] = sqrtf(0.5f); @@ -17,7 +17,7 @@ VG_STATIC void respawn_chooser_get_dir( v3f dir ){ v3_normalize(dir); } -VG_STATIC void respawn_chooser_get_plane( v4f plane ){ +static void respawn_chooser_get_plane( v4f plane ){ world_instance *world = &world_static.instances[ respawn_chooser.world_id ]; f32 h = localplayer.rb.co[1]; if( respawn_chooser.world_id != world_static.active_instance ) @@ -26,7 +26,7 @@ VG_STATIC void respawn_chooser_get_plane( v4f plane ){ v4_copy( (v4f){0.0f,1.0f,0.0f,h}, plane ); } -VG_STATIC void respawn_world_to_plane_pos( v3f pos, v2f plane_pos ){ +static void respawn_world_to_plane_pos( v3f pos, v2f plane_pos ){ v3f dir; respawn_chooser_get_dir( dir ); v3_negate(dir,dir); @@ -40,7 +40,7 @@ VG_STATIC void respawn_world_to_plane_pos( v3f pos, v2f plane_pos ){ plane_pos[1] = co[2]; } -VG_STATIC void respawn_chooser_setworld( u32 next ){ +static void respawn_chooser_setworld( u32 next ){ world_instance *nw = &world_static.instances[next]; if( nw->status == k_world_status_loaded ){ respawn_chooser.world_id = next; @@ -56,7 +56,7 @@ VG_STATIC void respawn_chooser_setworld( u32 next ){ } } -VG_STATIC void respawn_chooser_gohome(void){ +static void respawn_chooser_gohome(void){ respawn_chooser_setworld(0); world_instance *world = &world_static.instances[ respawn_chooser.world_id ]; @@ -73,21 +73,31 @@ VG_STATIC void respawn_chooser_gohome(void){ gui_location_print_ccmd( 1, (const char *[]){ "Invalid home ID" } ); } +static void respawn_map_draw_icon( camera *cam, + enum gui_icon icon, v3f pos ){ + v4f v; + v3_copy( pos, v ); + v[3] = 1.0f; + m4x4_mulv( cam->mtx.pv, v, v ); + v2_divs( v, v[3], v ); -VG_STATIC void respawn_chooser_pre_update(void){ + gui_draw_icon( icon, (v2f){ v[0]*0.5f+0.5f,v[1]*0.5f+0.5f }, 1.0f ); +} + +static void respawn_chooser_pre_update(void){ if( skaterift.activity != k_skaterift_respawning ) return; gui_helper_action( joystick_display_string(k_srjoystick_steer,2), "move" ); if( world_static.instances[0].status == k_world_status_loaded ) - gui_helper_action( axis_display_string(k_sraxis_mbrowse_h), "world" ); + gui_helper_action( axis_display_string(k_sraxis_mworld_h), "world" ); gui_helper_action( button_display_string(k_srbind_maccept), "spawn" ); - gui_helper_action( axis_display_string(k_sraxis_mbrowse_v), "home" ); + gui_helper_action( button_display_string(k_srbind_home), "home" ); if( button_down( k_srbind_mback ) ){ srinput.enabled = 0; skaterift.activity = k_skaterift_menu; menu.page = 0xffffffff; - menu_open_page( "Main Menu" ); + menu_open_page( "Main Menu", k_ent_menuitem_stack_append ); return; } @@ -99,35 +109,28 @@ VG_STATIC void respawn_chooser_pre_update(void){ world_static.active_instance = respawn_chooser.world_id; localplayer.viewable_world = &world_static.instances[ respawn_chooser.world_id ]; - player__spawn( &localplayer, respawn_chooser.spawn ); + player__spawn( respawn_chooser.spawn ); } return; } - if( button_down( k_srbind_mleft ) ){ + 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_mright ) ){ + 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_mup) ){ + 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(); } - else if( button_down(k_srbind_mdown) ){ - if( respawn_chooser.home_select == 0 ) - respawn_chooser.home_select = vg_list_size(respawn_homes)-1; - else - respawn_chooser.home_select --; - respawn_chooser_gohome(); - } world_instance *world = &world_static.instances[ respawn_chooser.world_id ]; v3f *bbx = world->scene_geo.bbx; @@ -180,6 +183,7 @@ VG_STATIC void respawn_chooser_pre_update(void){ v3_copy( spawn->transform.co, v ); v[3] = 1.0f; m4x4_mulv( cam->mtx.pv, v, v ); + v2_divs( v, v[3], v ); f32 d2 = v2_length2(v); if( d2 < closest2 ){ @@ -188,12 +192,48 @@ VG_STATIC void respawn_chooser_pre_update(void){ } } - if( respawn_chooser.spawn ){ - vg_line_cross( respawn_chooser.spawn->transform.co, VG__GREEN, 5.0f ); + /* icons + * ---------------------*/ + for( u32 i=0; ient_challenge); i++ ){ + ent_challenge *challenge = mdl_arritm( &world->ent_challenge, i ); + + enum gui_icon icon = k_gui_icon_exclaim; + if( challenge->status ) + icon = k_gui_icon_tick; + + respawn_map_draw_icon( cam, icon, challenge->transform.co ); + } + + for( u32 i=0; ient_skateshop); i++ ){ + ent_skateshop *shop = mdl_arritm( &world->ent_skateshop, i ); + if( shop->type == k_skateshop_type_boardshop ){ + respawn_map_draw_icon( cam, k_gui_icon_board, shop->transform.co ); + } + else if( shop->type == k_skateshop_type_worldshop ){ + respawn_map_draw_icon( cam, k_gui_icon_world, shop->transform.co ); + } + } + + for( u32 i=0; ient_gate); i++ ){ + ent_gate *gate = mdl_arritm( &world->ent_gate, i ); + if( gate->flags & k_ent_gate_nonlocal ){ + respawn_map_draw_icon( cam, k_gui_icon_rift, gate->co[0] ); + } + } + + for( u32 i=0; ient_route); i++ ){ + ent_route *route = mdl_arritm( &world->ent_route, i ); + + v4f colour; + 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, + route->board_transform[3] ); } } -VG_STATIC void respawn_begin_chooser(void){ +static void respawn_begin_chooser(void){ skaterift.activity = k_skaterift_respawning; respawn_chooser.world_id = world_static.active_instance; @@ -205,7 +245,7 @@ VG_STATIC void respawn_begin_chooser(void){ respawn_chooser.home_select = 0; } -VG_STATIC void respawn_chooser_shader_uniforms(void){ +static void respawn_chooser_shader_uniforms(void){ v4f uPlayerPos, uSpawnPos; v4_zero( uPlayerPos ); v4_zero( uSpawnPos ); @@ -215,6 +255,9 @@ VG_STATIC void respawn_chooser_shader_uniforms(void){ if( respawn_chooser.spawn ) v3_copy( respawn_chooser.spawn->transform.co, uSpawnPos ); + uPlayerPos[3] = v3_dist(uPlayerPos,uSpawnPos); + uSpawnPos[3] = 1.0f/uPlayerPos[3]; + shader_scene_override_uPlayerPos( uPlayerPos ); shader_scene_override_uSpawnPos( uSpawnPos ); }