chaos pt 2
[carveJwlIkooP6JGAAIwe30JlM.git] / ent_miniworld.c
index cd79b4552626ca5dda89aac1bbcd0b7d1ef63419..9c439c7c797a5c7f44bd7abc233f8d7540e93560 100644 (file)
@@ -13,14 +13,10 @@ static void ent_miniworld_call( world_instance *world, ent_call *call ){
       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 ){
-
-      if( global_miniworld.active_id == call->id )
-         global_miniworld.active_id = 0;
-      else 
-         vg_warn( "bad call\n" );
+      global_miniworld.active = NULL;
 
       if( miniworld->proxy ){
          ent_prop *prop = mdl_arritm( &world->ent_prop, 
@@ -30,17 +26,19 @@ static void ent_miniworld_call( world_instance *world, ent_call *call ){
    }
 }
 
-static void ent_miniworld_render( world_instance *host_world ){
-   u32 entity_id = global_miniworld.active_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 = global_miniworld.active;
 
-   if( !entity_id )
+   if( !miniworld )
       return;
-   
-   ent_miniworld *miniworld = mdl_arritm( &host_world->ent_miniworld, 
-                                          mdl_entity_id_id(entity_id) );
+
+   world_instance *dest_world = &world_static.instances[k_world_purpose_client];
 
    int rendering = 1;
-   if( miniworld->purpose == k_world_purpose_invalid )
+   if( dest_world->status != k_world_status_loaded )
       rendering = 0;
 
    if( miniworld->proxy ){
@@ -52,24 +50,48 @@ static void ent_miniworld_render( world_instance *host_world ){
          prop->flags |= 0x1;
    }
 
+
    if( !rendering )
       return;
 
-   world_instance *dest_world = &world_static.instances[miniworld->purpose];
-
-
    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( !global_miniworld.active_id )
+   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;
 
-   if( button_down( k_srbind_use ) ){
-      
+   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);
+         }
+      }
    }
 }