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