restore achivements from steam
[carveJwlIkooP6JGAAIwe30JlM.git] / ent_region.c
1 #include "ent_region.h"
2 #include "gui.h"
3
4 static void ent_region_call( world_instance *world, ent_call *call ){
5 ent_region *region =
6 mdl_arritm( &world->ent_region, mdl_entity_id_id(call->id) );
7
8 if( !region->zone_volume )
9 return;
10
11 ent_volume *volume =
12 mdl_arritm( &world->ent_volume, mdl_entity_id_id(region->zone_volume) );
13
14 if( call->function == 0 ){ /* enter */
15 for( u32 i=0; i<mdl_arrcount(&world->ent_route); i ++ ){
16 ent_route *route = mdl_arritm( &world->ent_route, i );
17
18 v3f local;
19 m4x3_mulv( volume->to_local, route->board_transform[3], local );
20 if( (fabsf(local[0]) <= 1.0f) &&
21 (fabsf(local[1]) <= 1.0f) &&
22 (fabsf(local[2]) <= 1.0f) ){
23 route->flags &= ~k_ent_route_flag_out_of_zone;
24 }
25 else {
26 route->flags |= k_ent_route_flag_out_of_zone;
27 }
28 }
29
30 gui_location_print_ccmd( 1, (const char *[]){
31 mdl_pstr(&world->meta,region->pstr_title)} );
32 }
33 else if( call->function == 1 ){ /* leave */
34 for( u32 i=0; i<mdl_arrcount(&world->ent_route); i ++ ){
35 ent_route *route = mdl_arritm( &world->ent_route, i );
36 route->flags |= k_ent_route_flag_out_of_zone;
37 }
38 }
39 }
40
41 /*
42 * reevaluate all achievements to calculate the compiled achievement
43 */
44 static void ent_region_re_eval( world_instance *world ){
45 for( u32 i=0; i<mdl_arrcount(&world->ent_region); i ++ ){
46 ent_region *region = mdl_arritm(&world->ent_region, i);
47
48 if( !region->zone_volume )
49 continue;
50
51 ent_volume *volume = mdl_arritm(&world->ent_volume,
52 mdl_entity_id_id(region->zone_volume));
53
54 u32 combined = k_ent_route_flag_achieve_gold |
55 k_ent_route_flag_achieve_silver;
56
57 for( u32 j=0; j<mdl_arrcount(&world->ent_route); j ++ ){
58 ent_route *route = mdl_arritm(&world->ent_route, j );
59
60 v3f local;
61 m4x3_mulv( volume->to_local, route->board_transform[3], local );
62 if( !((fabsf(local[0]) <= 1.0f) &&
63 (fabsf(local[1]) <= 1.0f) &&
64 (fabsf(local[2]) <= 1.0f)) ){
65 continue;
66 }
67
68 combined &= route->flags;
69 }
70
71 region->flags = combined;
72
73 /* TODO: Challenges */
74 }
75 }