#include "entity.h"
#include "ent_miniworld.h"
#include "world_render.h"
+#include "input.h"
static void ent_miniworld_call( world_instance *world, ent_call *call ){
ent_miniworld *miniworld = mdl_arritm( &world->ent_miniworld,
const char *uid = mdl_pstr( &world->meta, miniworld->pstr_world );
skaterift_load_world_command( 1, (const char *[]){ uid } );
- global_miniworld.active_id = call->id;
+ global_miniworld.active = miniworld;
}
-}
+ else if( call->function == 1 ){
+ global_miniworld.active = NULL;
-static void ent_miniworld_render( world_instance *host_world ){
- u32 entity_id = global_miniworld.active_id;
+ if( miniworld->proxy ){
+ ent_prop *prop = mdl_arritm( &world->ent_prop,
+ mdl_entity_id_id(miniworld->proxy) );
+ prop->flags &= ~0x1;
+ }
+ }
+}
- if( !entity_id )
+static void ent_miniworld_render( world_instance *host_world, camera *cam ){
+ if( host_world != &world_static.instances[k_world_purpose_hub] )
return;
-
- ent_miniworld *miniworld = mdl_arritm( &host_world->ent_miniworld,
- mdl_entity_id_id(entity_id) );
- if( miniworld->purpose == k_world_purpose_invalid )
+ ent_miniworld *miniworld = global_miniworld.active;
+
+ if( !miniworld )
return;
- world_instance *dest_world = &world_static.instances[miniworld->purpose];
+ world_instance *dest_world = &world_static.instances[k_world_purpose_client];
+
+ int rendering = 1;
+ if( dest_world->status != k_world_status_loaded )
+ rendering = 0;
+ if( miniworld->proxy ){
+ ent_prop *prop = mdl_arritm( &host_world->ent_prop,
+ mdl_entity_id_id(miniworld->proxy) );
+ if( !rendering )
+ prop->flags &= ~0x1;
+ else
+ prop->flags |= 0x1;
+ }
+
+
+ if( !rendering )
+ return;
m4x3f mmdl;
mdl_transform_m4x3( &miniworld->transform, mmdl );
- render_world_override( dest_world, host_world, mmdl );
-
+ render_world_override( dest_world, host_world, mmdl, cam );
//render_world_routes( , &skaterift.cam, 1 );
}
+
+static void ent_miniworld_preupdate(void){
+ if( world_static.active_instance == k_world_purpose_client ){
+ if( button_down(k_srbind_mleft) ){
+ global_miniworld.transition = -1;
+ global_miniworld.t = 1.0f;
+
+ global_miniworld.cam = skaterift.cam;
+ m4x3_transform_camera( global_miniworld.mmdl, &global_miniworld.cam );
+ world_switch_instance(0);
+ }
+ }
+
+ ent_miniworld *miniworld = global_miniworld.active;
+ if( !miniworld )
+ return;
+
+ world_instance *world = world_current_instance();
+
+ if( global_miniworld.transition ){
+ }
+ else {
+ int rendering = 1;
+ if( world_static.instances[k_world_purpose_client].status
+ == k_world_status_loaded ){
+ if( button_down( k_srbind_mright ) ){
+ global_miniworld.transition = 1;
+ global_miniworld.t = 0.0f;
+ global_miniworld.cam = skaterift.cam;
+
+ mdl_transform_m4x3( &miniworld->transform, global_miniworld.mmdl );
+ world_switch_instance(1);
+ }
+ }
+ }
+}