proxy models
[carveJwlIkooP6JGAAIwe30JlM.git] / ent_miniworld.c
1 #include "entity.h"
2 #include "ent_miniworld.h"
3 #include "world_render.h"
4
5 static void ent_miniworld_call( world_instance *world, ent_call *call ){
6 ent_miniworld *miniworld = mdl_arritm( &world->ent_miniworld,
7 mdl_entity_id_id(call->id) );
8
9 int world_id = world - world_static.instances;
10
11 if( call->function == 0 ){ /* zone() */
12 const char *uid = mdl_pstr( &world->meta, miniworld->pstr_world );
13 skaterift_load_world_command( 1, (const char *[]){ uid } );
14
15 global_miniworld.active_id = call->id;
16 }
17 else if( call->function == 1 ){
18
19 if( global_miniworld.active_id == call->id )
20 global_miniworld.active_id = 0;
21 else
22 vg_warn( "bad call\n" );
23
24 if( miniworld->proxy ){
25 ent_prop *prop = mdl_arritm( &world->ent_prop,
26 mdl_entity_id_id(miniworld->proxy) );
27 prop->flags &= ~0x1;
28 }
29 }
30 }
31
32 static void ent_miniworld_render( world_instance *host_world ){
33 u32 entity_id = global_miniworld.active_id;
34
35 if( !entity_id )
36 return;
37
38 ent_miniworld *miniworld = mdl_arritm( &host_world->ent_miniworld,
39 mdl_entity_id_id(entity_id) );
40
41 int rendering = 1;
42 if( miniworld->purpose == k_world_purpose_invalid )
43 rendering = 0;
44
45 if( miniworld->proxy ){
46 ent_prop *prop = mdl_arritm( &host_world->ent_prop,
47 mdl_entity_id_id(miniworld->proxy) );
48 if( !rendering )
49 prop->flags &= ~0x1;
50 else
51 prop->flags |= 0x1;
52 }
53
54 if( !rendering )
55 return;
56
57 world_instance *dest_world = &world_static.instances[miniworld->purpose];
58
59
60 m4x3f mmdl;
61 mdl_transform_m4x3( &miniworld->transform, mmdl );
62 render_world_override( dest_world, host_world, mmdl );
63
64 //render_world_routes( , &skaterift.cam, 1 );
65 }