#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 } );
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" );
+
+ 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 ){
+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;
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 );
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;
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 );
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; i<mdl_arrcount(&dest_world->ent_challenge); i++ ){
ent_challenge *challenge = mdl_arritm( &dest_world->ent_challenge, i );
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; i<mdl_arrcount(&dest_world->ent_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; i<mdl_arrcount(&dest_world->ent_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);
}
}
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];
(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);
}