From: hgn Date: Sat, 1 Apr 2023 20:50:24 +0000 (+0100) Subject: null X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=5f01e7ab4aad052faad262b55404819dac3d25ce;p=carveJwlIkooP6JGAAIwe30JlM.git null --- diff --git a/blender_export.py b/blender_export.py index a367cc1..0d4c63a 100644 --- a/blender_export.py +++ b/blender_export.py @@ -1265,6 +1265,15 @@ def sr_compile( collection ): elif obj_data.formato == '1': audio.flags |= 0x400 elif obj_data.formato == '2': audio.flags |= 0x1000 + audio.channel_behaviour = int(obj_data.channel_behaviour) + if audio.channel_behaviour >= 1:#{ + audio.group = obj_data.group + #} + if audio.channel_behaviour == 2:#{ + audio.crossfade = obj_data.transition_duration + #} + audio.probability_curve = int(obj_data.probability_curve) + for ci in range(audio.clip_count):#{ entry = obj_data.files[ci] clip = ent_audio_clip() @@ -1892,6 +1901,8 @@ class SR_OBJECT_ENT_AUDIO(bpy.types.PropertyGroup): flag_loop: bpy.props.BoolProperty( name="Loop",default=False ) flag_auto: bpy.props.BoolProperty( name="Play at start",default=False ) flag_nodoppler: bpy.props.BoolProperty( name="No Doppler",default=False ) + + group: bpy.props.IntProperty( name="Group ID", default=0 ) formato: bpy.props.EnumProperty( name="Format", items=[('0','Uncompressed Mono',''), @@ -1928,6 +1939,8 @@ class SR_OBJECT_ENT_AUDIO(bpy.types.PropertyGroup): c.prop( data[0], 'max_channels' ) c = split.column() c.prop( data[0], 'channel_behaviour', text='Behaviour' ) + if data[0].channel_behaviour >= '1': + box.prop( data[0], 'group' ) if data[0].channel_behaviour == '2': box.prop( data[0], 'transition_duration' ) diff --git a/entity.h b/entity.h index 490737d..5b0d4a7 100644 --- a/entity.h +++ b/entity.h @@ -176,10 +176,22 @@ struct ent_audio{ clip_start, clip_count; float volume, crossfade; - u32 channel_behaviour, + u32 behaviour, group, probability_curve, max_channels; }; +enum channel_behaviour{ + k_channel_behaviour_unlimited = 0, + k_channel_behaviour_discard_if_full = 1, + k_channel_behaviour_crossfade_if_full = 2 +}; + +enum probability_curve{ + k_probability_curve_constant = 0, + k_probability_curve_wildlife_day = 1, + k_probability_curve_wildlife_night = 2 +}; + #endif /* ENTITY_H */ diff --git a/maps_src/mp_gridmap.mdl b/maps_src/mp_gridmap.mdl index ceb3721..18f438e 100644 Binary files a/maps_src/mp_gridmap.mdl and b/maps_src/mp_gridmap.mdl differ diff --git a/world.h b/world.h index 08d3ca0..997ff31 100644 --- a/world.h +++ b/world.h @@ -118,6 +118,8 @@ struct world_instance tex_light_entities, tex_light_cubes; + float probabilities[3]; + v3i light_cubes; struct framebuffer heightmap; @@ -517,15 +519,40 @@ VG_STATIC void ent_audio_call( world_instance *world, ent_call *call ) ent_audio_clip *clip = mdl_arritm( &world->ent_audio_clip, audio->clip_start+i ); - bar += clip->probability; + float mod = world->probabilities[ audio->probability_curve ], + p = clip->probability * mod; + + bar += p; if( chance < bar ){ float *pos = call->data; audio_lock(); - audio_oneshot_3d( &clip->clip, pos, - audio->transform.s[0], - audio->volume ); + + if( audio->behaviour == k_channel_behaviour_unlimited ){ + audio_oneshot_3d( &clip->clip, pos, + audio->transform.s[0], + audio->volume ); + } + else if( audio->behaviour == k_channel_behaviour_discard_if_full ){ + audio_channel *ch = + audio_get_group_idle_channel( audio->group, + audio->max_channels ); + + if( ch ){ + audio_channel_init( ch, &clip->clip, audio->flags ); + audio_channel_group( ch, audio->group ); + audio_channel_set_spacial( ch, pos, audio->transform.s[0] ); + audio_channel_edit_volume( ch, audio->volume, 1 ); + ch = audio_relinquish_channel( ch ); + } + } + else if( audio->behaviour == k_channel_behaviour_crossfade_if_full){ + + } + + + audio_unlock(); break; } @@ -571,6 +598,15 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) v3_normalize( state->g_sun_dir ); + world->probabilities[ k_probability_curve_constant ] = 1.0f; + + float dp = state->g_day_phase; + + world->probabilities[ k_probability_curve_wildlife_day ] = + (dp*dp*0.8f+state->g_sunset_phase)*0.8f; + world->probabilities[ k_probability_curve_wildlife_night ] = + 1.0f-powf(fabsf((state->g_time_of_day-0.5f)*5.0f),5.0f); + glBindBuffer( GL_UNIFORM_BUFFER, world->ubo_lighting ); glBufferSubData( GL_UNIFORM_BUFFER, 0,