+/*
+ * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved
+ */
+
#ifndef WORLD_GEN_H
#define WORLD_GEN_H
-#include "world.h"
+/*
+ * FUTURE:
+ * If we have multiple levels, write an unloader
+ */
+#include "world.h"
static void world_add_all_if_material( m4x3f transform, scene *pscene,
mdl_header *mdl, u32 id )
}
}
- free( mfoliage );
+ vg_free( mfoliage );
}
static void world_load(void)
if( sm )
{
-
- if( vg_acquire_thread_sync(1) )
+ vg_acquire_thread_sync();
{
glmesh surf;
- if( mdl_unpack_submesh( mworld, &surf, sm ) )
- {
- water_set_surface( &surf, pnode->co[1] );
- }
-
- vg_release_thread_sync(1);
+ mdl_unpack_submesh( mworld, &surf, sm );
+ water_set_surface( &surf, pnode->co[1] );
}
+ vg_release_thread_sync();
}
}
else if( pnode->classtype == k_classtype_car_path )
}
}
}
+ else if( pnode->classtype == k_classtype_achievement_box )
+ {
+ world.achievement_zones =
+ buffer_reserve( world.achievement_zones,
+ world.achievement_zones_count,
+ &world.achievement_zones_cap, 1,
+ sizeof(struct achievement_zone) );
+
+ struct achievement_zone *zone = &world.achievement_zones[
+ world.achievement_zones_count ++ ];
+
+
+ struct classtype_achievement_box *box = mdl_get_entdata(mworld,pnode);
+
+ mdl_node_transform( pnode, zone->transform );
+ m4x3_invert_full( zone->transform, zone->inv_transform );
+ vg_strncpy( mdl_pstr(mworld, box->pstr_name), zone->name, 31 );
+ zone->name[31] = 0x00;
+ zone->triggered = 0;
+ }
}
world.instance_cache = buffer_fix( world.instance_cache,
world_add_all_if_material( midentity, &world.geo,mworld,mat_vertex_blend);
scene_copy_slice( &world.geo, &world.sm_geo_vb );
- if( vg_acquire_thread_sync(1) )
- {
- if( !scene_upload( &world.geo ) )
- {
-
- }
-
- vg_release_thread_sync(1);
- }
+ vg_acquire_thread_sync();
+ scene_upload( &world.geo );
+ vg_release_thread_sync();
scene_bh_create( &world.geo );
scene_copy_slice( &world.foliage, &world.sm_graffiti );
- if( vg_acquire_thread_sync(1) )
+ vg_acquire_thread_sync();
{
- if( !scene_upload( &world.foliage ) )
- {
-
- }
+ scene_upload( &world.foliage );
/*
* Rendering the depth map
winfo->g_water_fog = 0.04f;
render_update_lighting_ub();
-
- vg_release_thread_sync(1);
}
+ vg_release_thread_sync();
+
world_routes_loadfrom( mworld );
for( int i=0; i<world.instance_cache_count; i++ )
- free( world.instance_cache[i].mdl );
+ vg_free( world.instance_cache[i].mdl );
- free( world.instance_cache );
- free( mworld );
+ vg_free( world.instance_cache );
+ vg_free( mworld );
scene_free_offline_buffers( &world.foliage );
/*