class ent_spawn(Structure):
#{
_fields_ = [("transform",mdl_transform),
- ("pstr_name",c_uint32)]
+ ("pstr_name",c_uint32),
+ ("flags",c_uint32)]
#}
class ent_light(Structure):
class SR_OBJECT_ENT_SPAWN(bpy.types.PropertyGroup):
#{
alias: bpy.props.StringProperty( name='alias' )
+ flags: bpy.props.IntProperty()
#}
class SR_OBJECT_ENT_GATE(bpy.types.PropertyGroup):
compile_obj_transform( obj, spawn.transform )
obj_data = obj.SR_data.ent_spawn[0]
spawn.pstr_name = _af_pack_string( obj_data.alias )
+ spawn.flags = obj_data.flags
sr_ent_push( spawn )
#}
elif ent_type == 'ent_water':#{
k_ent_function_trigger_leave
};
+enum ent_spawn_flag
+{
+ k_ent_spawn_flag_locked = 0x1,
+ k_ent_spawn_flag_group_1 = 0x10,
+ k_ent_spawn_flag_group_2 = 0x20,
+ k_ent_spawn_flag_group_3 = 0x40,
+ k_ent_spawn_flag_group_4 = 0x80
+};
+
struct ent_spawn{
mdl_transform transform;
u32 pstr_name;
+ u32 flags;
};
enum light_type{
if( unlock_valley )
prop->flags |= k_prop_flag_hidden;
}
+
+ u32 spawns_allowed = 0;
+ if( unlock_mtzero ) spawns_allowed |= k_ent_spawn_flag_group_1;
+ if( unlock_city ) spawns_allowed |= k_ent_spawn_flag_group_2;
+ if( unlock_valley ) spawns_allowed |= k_ent_spawn_flag_group_3;
+
+ for( u32 i=0; i<af_arrcount(&world->ent_spawn); i++ )
+ {
+ ent_spawn *spawn = af_arritm( &world->ent_spawn, i );
+
+ bool allow = 0;
+
+ if( spawn->flags == 0 ) allow = 1;
+ if( spawn->flags & spawns_allowed ) allow = 1;
+
+ if( allow ) spawn->flags &= ~(u32)k_ent_spawn_flag_locked;
+ else spawn->flags |= k_ent_spawn_flag_locked;
+ }
+
return 1;
}
ent_spawn *rp = NULL, *r;
float min_dist = INFINITY;
- for( u32 i=0; i<af_arrcount(&world->ent_spawn); i++ ){
+ for( u32 i=0; i<af_arrcount(&world->ent_spawn); i++ )
+ {
r = af_arritm( &world->ent_spawn, i );
+
+ if( r->flags & k_ent_spawn_flag_locked )
+ continue;
+
float d = v3_dist2( r->transform.co, position );
if( d < min_dist ){
{
ent_spawn *spawn = af_arritm(&world->ent_spawn,i);
+ if( spawn->flags & k_ent_spawn_flag_locked )
+ continue;
+
if( world_map.sel_spawn )
{
spawn->transform.s[0] = ( spawn == world_map.sel_spawn )? 0.0f: 10000.0f;
{
ent_spawn *spawn = af_arritm( &world->ent_spawn, i );
+ if( spawn->flags & k_ent_spawn_flag_locked )
+ continue;
+
if( spawn->transform.s[0] > 0.3f )
continue;