X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=respawn.c;h=d8c470a83679fdfaa35d38c5796863313c3602dc;hb=e311bbe2fa903a7e2a922f202f389b799193195d;hp=0cee183b94755a9300bb21e69d599707acea82dc;hpb=f0c064ff3c9bb162db39bf533e5df973816621c0;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/respawn.c b/respawn.c index 0cee183..d8c470a 100644 --- a/respawn.c +++ b/respawn.c @@ -1,6 +1,7 @@ #ifndef RESPAWN_C #define RESPAWN_C +#if 1 #include "respawn.h" #include "skaterift.h" #include "world.h" @@ -9,7 +10,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 +18,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 +27,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 +41,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 +57,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,55 +74,40 @@ 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){ - if( skaterift.activity != k_skaterift_respawning ) return; + gui_draw_icon( icon, (v2f){ v[0]*0.5f+0.5f,v[1]*0.5f+0.5f }, 1.0f ); +} - 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_mworld_h), "world" ); - gui_helper_action( button_display_string(k_srbind_maccept), "spawn" ); - gui_helper_action( button_display_string(k_srbind_home), "home" ); +static void respawn_chooser_pre_update(void){ + if( skaterift.activity != k_skaterift_respawning ) return; if( button_down( k_srbind_mback ) ){ - srinput.enabled = 0; + gui_helper_clear(); + srinput.state = k_input_state_resume; skaterift.activity = k_skaterift_menu; menu.page = 0xffffffff; - menu_open_page( "Main Menu" ); + menu_open_page( "Main Menu", k_ent_menuitem_stack_append ); return; } if( button_down( k_srbind_maccept ) ){ skaterift.activity = k_skaterift_default; - srinput.enabled = 0; + srinput.state = k_input_state_resume; if( respawn_chooser.spawn ){ 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_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; @@ -173,6 +159,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 ){ @@ -181,12 +168,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_2d; + if( challenge->status ) + icon = k_gui_icon_tick_2d; + + 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_2d, + 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; @@ -196,9 +219,22 @@ VG_STATIC void respawn_begin_chooser(void){ respawn_world_to_plane_pos( localplayer.rb.co, respawn_chooser.plane_pos ); respawn_chooser.boom_dist = 400.0f; respawn_chooser.home_select = 0; + + gui_helper_clear(); + + vg_str text; + if( gui_new_helper( input_joy_list[k_srjoystick_steer], &text ) ) + vg_strcat( &text, "move" ); + + if( gui_new_helper( input_button_list[k_srbind_maccept], &text ) ) + vg_strcat( &text, "spawn" ); + + if( gui_new_helper( input_button_list[k_srbind_mback], &text ) ) + vg_strcat( &text, "exit" ); } -VG_STATIC void respawn_chooser_shader_uniforms(void){ +#if 0 +static void respawn_chooser_shader_uniforms(void){ v4f uPlayerPos, uSpawnPos; v4_zero( uPlayerPos ); v4_zero( uSpawnPos ); @@ -214,5 +250,7 @@ VG_STATIC void respawn_chooser_shader_uniforms(void){ shader_scene_override_uPlayerPos( uPlayerPos ); shader_scene_override_uSpawnPos( uSpawnPos ); } +#endif +#endif #endif /* RESPAWN_C */