X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world.h;h=7f8432ab08d9f0630777be8aa1e33db78cac529f;hb=15beb60ade240af4e00b0d204f7e89a4d35dca36;hp=a7b5a587b1e0a55318dc1de1990de5db456579f4;hpb=0481656712bdc72d2a7ffa80f74702f87b20e051;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world.h b/world.h index a7b5a58..7f8432a 100644 --- a/world.h +++ b/world.h @@ -58,6 +58,17 @@ static struct gworld spawns[32]; u32 spawn_count; + struct achievement_zone + { + m4x3f transform, inv_transform; + char name[32]; + int triggered; + } + * achievement_zones; + + u32 achievement_zones_count, + achievement_zones_cap; + struct subworld_routes { struct route_node @@ -288,12 +299,15 @@ static void world_free( void *_ ) { mesh_free( &world.cars ); mesh_free( &world.skydome ); + vg_free( world.achievement_zones ); } static void world_update( v3f pos ) { world_routes_update(); +#if 0 world_routes_debug(); +#endif int closest = 0; float min_dist = INFINITY; @@ -329,6 +343,30 @@ static void world_update( v3f pos ) } } } + + for( int i=0; itriggered ) + continue; + + v3f local; + m4x3_mulv( zone->inv_transform, pos, local ); + + if( (fabsf(local[0]) <= 1.0f) && + (fabsf(local[1]) <= 1.0f) && + (fabsf(local[2]) <= 1.0f) ) + { + zone->triggered = 1; + steam_set_achievement( zone->name ); + steam_store_achievements(); + } + + vg_line_boxf_transformed( zone->transform, (boxf){{-1.0f,-1.0f,-1.0f}, + { 1.0f, 1.0f, 1.0f}}, + 0xff00ff00 ); + } sfd_update( &world.sfd.tester ); }