X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=ent_miniworld.c;h=fcdba0b12c20cf62967d84c6037cda3ab9d97fe1;hb=b440efbe5785d114d08bb3f5ec0e09cad943006d;hp=802bd8b6eaeebd6a7db39a30b090077cea8420af;hpb=00653e446d6b1310fa89d3aace70800f9fef4122;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/ent_miniworld.c b/ent_miniworld.c index 802bd8b..fcdba0b 100644 --- a/ent_miniworld.c +++ b/ent_miniworld.c @@ -1,11 +1,16 @@ #include "entity.h" #include "ent_miniworld.h" #include "world_render.h" +#include "world_load.h" #include "input.h" #include "gui.h" #include "menu.h" +#include "audio.h" -static void ent_miniworld_call( world_instance *world, ent_call *call ){ +struct global_miniworld global_miniworld; + +void ent_miniworld_call( world_instance *world, ent_call *call ) +{ ent_miniworld *miniworld = mdl_arritm( &world->ent_miniworld, mdl_entity_id_id(call->id) ); @@ -17,9 +22,16 @@ static void ent_miniworld_call( world_instance *world, ent_call *call ){ mdl_transform_m4x3( &miniworld->transform, global_miniworld.mmdl ); global_miniworld.active = miniworld; + + 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; + gui_helper_clear(); if( miniworld->proxy ){ ent_prop *prop = mdl_arritm( &world->ent_prop, @@ -29,7 +41,9 @@ static void ent_miniworld_call( world_instance *world, ent_call *call ){ } } -static void miniworld_icon( camera *cam, enum gui_icon icon, v3f pos ){ +static void miniworld_icon( vg_camera *cam, enum gui_icon icon, + v3f pos, f32 size) +{ m4x3f mmdl; v3_copy( cam->transform[2], mmdl[2] ); mmdl[2][1] = 0.0f; @@ -39,7 +53,7 @@ static void miniworld_icon( camera *cam, enum gui_icon icon, v3f pos ){ m4x3_mulv( global_miniworld.mmdl, pos, mmdl[3] ); shader_model_font_uMdl( mmdl ); - shader_model_font_uOffset( (v4f){0,0,0,20} ); + shader_model_font_uOffset( (v4f){0,0,0,20.0f*size} ); m4x4f m4mdl; m4x3_expand( mmdl, m4mdl ); @@ -51,7 +65,8 @@ static void miniworld_icon( camera *cam, enum gui_icon icon, v3f pos ){ mdl_draw_submesh( sm ); } -static void ent_miniworld_render( world_instance *host_world, camera *cam ){ +void ent_miniworld_render( world_instance *host_world, vg_camera *cam ) +{ if( host_world != &world_static.instances[k_world_purpose_hub] ) return; @@ -80,7 +95,7 @@ static void ent_miniworld_render( world_instance *host_world, camera *cam ){ return; render_world_override( dest_world, host_world, global_miniworld.mmdl, cam, - global_miniworld.dest_spawn ); + NULL, (v4f){dest_world->tar_min,10000.0f,0.0f,0.0f} ); render_world_routes( dest_world, host_world, global_miniworld.mmdl, cam, 0, 1 ); @@ -94,6 +109,9 @@ static void ent_miniworld_render( world_instance *host_world, camera *cam ){ shader_model_font_uTexMain( 0 ); shader_model_font_uColour( (v4f){1,1,1,1} ); + miniworld_icon( cam, k_gui_icon_player, dest_world->player_co, + 1.0f + sinf(vg.time)*0.2f ); + for( u32 i=0; ient_challenge); i++ ){ ent_challenge *challenge = mdl_arritm( &dest_world->ent_challenge, i ); @@ -101,16 +119,19 @@ static void ent_miniworld_render( world_instance *host_world, camera *cam ){ if( challenge->status ) icon = k_gui_icon_tick; - miniworld_icon( cam, icon, challenge->transform.co ); + miniworld_icon( cam, icon, challenge->transform.co, 1.0f ); } - for( u32 i=0; ient_skateshop); i++ ){ - ent_skateshop *shop = mdl_arritm( &dest_world->ent_skateshop, i ); - if( shop->type == k_skateshop_type_boardshop ){ - miniworld_icon( cam, k_gui_icon_board, shop->transform.co ); + for( u32 i=0; ient_route); i++ ){ + ent_route *route = mdl_arritm( &dest_world->ent_route, i ); + + if( route->flags & k_ent_route_flag_achieve_gold ){ + miniworld_icon( cam, k_gui_icon_rift_run_gold, + route->board_transform[3],1.0f); } - else if( shop->type == k_skateshop_type_worldshop ){ - miniworld_icon( cam, k_gui_icon_world, shop->transform.co ); + else if( route->flags & k_ent_route_flag_achieve_silver ){ + miniworld_icon( cam, k_gui_icon_rift_run_silver, + route->board_transform[3],1.0f); } } @@ -121,11 +142,12 @@ static void ent_miniworld_render( world_instance *host_world, camera *cam ){ v4_copy( route->colour, colour ); v3_muls( colour, 1.6666f, colour ); shader_model_font_uColour( colour ); - miniworld_icon( cam, k_gui_icon_rift_run, route->board_transform[3] ); + miniworld_icon( cam, k_gui_icon_rift_run, route->board_transform[3],1.0f); } } -static void ent_miniworld_preupdate(void){ +void ent_miniworld_preupdate(void) +{ world_instance *hub = world_current_instance(), *dest = &world_static.instances[k_world_purpose_client]; @@ -135,62 +157,45 @@ static void ent_miniworld_preupdate(void){ (global_miniworld.transition) || (world_static.active_instance != k_world_purpose_hub) || (!miniworld) || - (dest->status != k_world_status_loaded) ){ - - if( global_miniworld.mode ){ - global_miniworld.mode = 0; - menu.disable_open = 0; - srinput.state = k_input_state_resume; - } + (dest->status != k_world_status_loaded) || + (skaterift.activity != k_skaterift_default)) { return; } if( button_down( k_srbind_miniworld_resume ) ){ - global_miniworld.mode = 0; + if( skaterift.demo_mode ){ + if( world_static.instance_addons[1]->flags & ADDON_REG_PREMIUM ){ + skaterift.activity = k_skaterift_menu; + menu.page = 0xffffffff; + menu_open_page( "Premium", k_ent_menuitem_stack_append ); + return; + } + } + 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; - } - 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; - } - 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; - } - } + gui_helper_clear(); + audio_lock(); + audio_oneshot( &audio_ui[2], 1.0f, 0.0f ); + audio_unlock(); } } -static void ent_miniworld_goback(void){ +void ent_miniworld_goback(void) +{ + audio_lock(); + audio_oneshot( &audio_ui[2], 1.0f, 0.0f ); + audio_unlock(); + global_miniworld.transition = -1; global_miniworld.t = 1.0f; global_miniworld.cam = skaterift.cam; - m4x3_transform_camera( global_miniworld.mmdl, &global_miniworld.cam ); + vg_m4x3_transform_camera( global_miniworld.mmdl, &global_miniworld.cam ); world_switch_instance(0); }