X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=ent_miniworld.c;h=2fed03137313e7549a36cfee7939cd716ca2491c;hb=HEAD;hp=e425fa2da2212d24651e1cf91a0f56496c23ee81;hpb=bdd98e4458be4a143cd415e5077b373129b1b0d9;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/ent_miniworld.c b/ent_miniworld.c index e425fa2..2fed031 100644 --- a/ent_miniworld.c +++ b/ent_miniworld.c @@ -1,17 +1,23 @@ #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; + +entity_call_result ent_miniworld_call( world_instance *world, ent_call *call ) +{ ent_miniworld *miniworld = mdl_arritm( &world->ent_miniworld, mdl_entity_id_id(call->id) ); int world_id = world - world_static.instances; - if( call->function == 0 ){ /* zone() */ + if( call->function == 0 ) /* zone() */ + { const char *uid = mdl_pstr( &world->meta, miniworld->pstr_world ); skaterift_load_world_command( 1, (const char *[]){ uid } ); @@ -23,20 +29,30 @@ static void ent_miniworld_call( world_instance *world, ent_call *call ){ if( gui_new_helper( input_button_list[k_srbind_miniworld_resume], &text )) vg_strcat( &text, "Enter World" ); + + return k_entity_call_result_OK; } - else if( call->function == 1 ){ + else if( call->function == 1 ) + { global_miniworld.active = NULL; gui_helper_clear(); - if( miniworld->proxy ){ + if( miniworld->proxy ) + { ent_prop *prop = mdl_arritm( &world->ent_prop, mdl_entity_id_id(miniworld->proxy) ); prop->flags &= ~0x1; } + + return k_entity_call_result_OK; } + else + return k_entity_call_result_unhandled; } -static void miniworld_icon( camera *cam, enum gui_icon icon, v3f pos, f32 size){ +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; @@ -58,7 +74,8 @@ static void miniworld_icon( camera *cam, enum gui_icon icon, v3f pos, f32 size){ 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; @@ -87,7 +104,7 @@ static void ent_miniworld_render( world_instance *host_world, camera *cam ){ return; render_world_override( dest_world, host_world, global_miniworld.mmdl, cam, - NULL, (v4f){-10000.0f,10000.0f,0.0f,0.0f} ); + 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 ); @@ -114,6 +131,19 @@ static void ent_miniworld_render( world_instance *host_world, camera *cam ){ miniworld_icon( cam, icon, challenge->transform.co, 1.0f ); } + 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( route->flags & k_ent_route_flag_achieve_silver ){ + miniworld_icon( cam, k_gui_icon_rift_run_silver, + route->board_transform[3],1.0f); + } + } + for( u32 i=0; ient_route); i++ ){ ent_route *route = mdl_arritm( &dest_world->ent_route, i ); @@ -125,7 +155,8 @@ static void ent_miniworld_render( world_instance *host_world, camera *cam ){ } } -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,11 +166,21 @@ static void ent_miniworld_preupdate(void){ (global_miniworld.transition) || (world_static.active_instance != k_world_purpose_hub) || (!miniworld) || - (dest->status != k_world_status_loaded) ){ + (dest->status != k_world_status_loaded) || + (skaterift.activity != k_skaterift_default)) { return; } if( button_down( k_srbind_miniworld_resume ) ){ + 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; @@ -154,7 +195,8 @@ static void ent_miniworld_preupdate(void){ } } -static void ent_miniworld_goback(void){ +void ent_miniworld_goback(void) +{ audio_lock(); audio_oneshot( &audio_ui[2], 1.0f, 0.0f ); audio_unlock(); @@ -163,6 +205,6 @@ static void ent_miniworld_goback(void){ 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); }