From 0e7235e427d15a31833ee0a7c612f2f45920d467 Mon Sep 17 00:00:00 2001 From: hgn Date: Thu, 6 Mar 2025 16:38:01 +0000 Subject: [PATCH] spawn filtering --- content_skaterift/maps/dev_hub/main.mdl | Bin 2113552 -> 2090496 bytes skaterift_blender/sr_main.py | 4 +++- skaterift_blender/sr_mdl.py | 1 + src/entity.h | 10 ++++++++++ src/skaterift_script.c | 19 +++++++++++++++++++ src/world_entity.c | 7 ++++++- src/world_map.c | 6 ++++++ 7 files changed, 45 insertions(+), 2 deletions(-) diff --git a/content_skaterift/maps/dev_hub/main.mdl b/content_skaterift/maps/dev_hub/main.mdl index 7bf820a4c0b944c4aa87bdb850c786cfe7c48a4c..8119612824db71f38cb3ac5f557cc91c03ce171c 100644 GIT binary patch delta 4087 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 THii?u-xSWkVvptjc|PWUY`RKM diff --git a/skaterift_blender/sr_main.py b/skaterift_blender/sr_main.py index cabbc96..3370d20 100644 --- a/skaterift_blender/sr_main.py +++ b/skaterift_blender/sr_main.py @@ -179,7 +179,8 @@ class mdl_texture(Structure): class ent_spawn(Structure): #{ _fields_ = [("transform",mdl_transform), - ("pstr_name",c_uint32)] + ("pstr_name",c_uint32), + ("flags",c_uint32)] #} class ent_light(Structure): @@ -1162,6 +1163,7 @@ def sr_on_type_change( _, context ): 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): diff --git a/skaterift_blender/sr_mdl.py b/skaterift_blender/sr_mdl.py index 3dc6dee..c352c86 100644 --- a/skaterift_blender/sr_mdl.py +++ b/skaterift_blender/sr_mdl.py @@ -679,6 +679,7 @@ def _mdl_compiler_compile_entities(): 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':#{ diff --git a/src/entity.h b/src/entity.h index e340efe..dc1a81c 100644 --- a/src/entity.h +++ b/src/entity.h @@ -135,9 +135,19 @@ enum entity_function 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{ diff --git a/src/skaterift_script.c b/src/skaterift_script.c index 9ba1abe..efa1b40 100644 --- a/src/skaterift_script.c +++ b/src/skaterift_script.c @@ -1793,6 +1793,25 @@ static bool _skaterift_script_hub_setup( enum escript_event ev, const char *inf 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; ient_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; } diff --git a/src/world_entity.c b/src/world_entity.c index 0136023..5a59acf 100644 --- a/src/world_entity.c +++ b/src/world_entity.c @@ -340,8 +340,13 @@ ent_spawn *world_find_closest_spawn( world_instance *world, v3f position ) ent_spawn *rp = NULL, *r; float min_dist = INFINITY; - for( u32 i=0; ient_spawn); i++ ){ + for( u32 i=0; ient_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 ){ diff --git a/src/world_map.c b/src/world_map.c index 0a618ac..76bbe5b 100644 --- a/src/world_map.c +++ b/src/world_map.c @@ -162,6 +162,9 @@ void render_world_map(void) { 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; @@ -246,6 +249,9 @@ void render_world_map(void) { 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; -- 2.25.1