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()
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',''),
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' )
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 */
tex_light_entities,
tex_light_cubes;
+ float probabilities[3];
+
v3i light_cubes;
struct framebuffer heightmap;
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;
}
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,