# This file is part of Korman. # # Korman is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Korman is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Korman. If not, see . import bpy from .. import ui_list def random_sound(modifier, layout, context): parent_bo = modifier.id_data.parent collision_bad = (modifier.mode == "collision" and (parent_bo is None or not parent_bo.plasma_modifiers.collision.enabled)) layout.alert = collision_bad layout.prop(modifier, "mode") if collision_bad: layout.label(icon="ERROR", text="Sound emitter must be parented to a collider.") layout.alert = False layout.separator() if modifier.mode == "random": split = layout.split() col = split.column() col.prop(modifier, "play_mode", text="") col.prop(modifier, "auto_start") col = col.column() col.active = not modifier.stop_after_play col.prop(modifier, "stop_after_set") col = split.column() col.prop(modifier, "stop_after_play") col = col.column(align=True) col.active = not modifier.stop_after_play col.alert = modifier.min_delay > modifier.max_delay col.prop(modifier, "min_delay") col.prop(modifier, "max_delay") elif modifier.mode == "collision": layout.prop(modifier, "play_on") # Ugh, Blender... layout.alert = len(modifier.surfaces) == 0 layout.prop_menu_enum(modifier, "surfaces") def _draw_fade_ui(modifier, layout, label): layout.label(label) layout.prop(modifier, "fade_type", text="") layout.prop(modifier, "length") class SoundListUI(bpy.types.UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_property, index=0, flt_flag=0): if item.sound: layout.prop(item, "name", emboss=False, icon="SOUND", text="") layout.prop(item, "enabled", text="") else: layout.label("[Empty]") def soundemit(modifier, layout, context): ui_list.draw_modifier_list(layout, "SoundListUI", modifier, "sounds", "active_sound_index", rows=2, maxrows=3) try: sound = modifier.sounds[modifier.active_sound_index] except: pass else: split = layout.split(percentage=0.75) col = split.column() # Sound datablock picker row = col.row(align=True) row.prop(sound, "sound", text="") open_op = row.operator("sound.plasma_open", icon="FILESEL", text="") open_op.data_path = repr(sound) open_op.sound_property = "sound" # Pack/Unpack data = sound.sound if data is not None: if data.packed_file is None: row.operator("sound.plasma_pack", icon="UGLYPACKAGE", text="") else: row.operator_menu_enum("sound.plasma_unpack", "method", icon="PACKAGE", text="") col = split.column() col.enabled = data is not None col.prop(sound, "package", text="Export") # If an invalid sound data block is spec'd, let them know about it. if data and not sound.is_valid: layout.label(text="Invalid sound specified", icon="ERROR") # Core Props row = layout.row() row.prop(sound, "sfx_type", text="") row.prop_menu_enum(sound, "channel") split = layout.split() col = split.column() col.label("Playback:") col.prop(sound, "auto_start") col.prop(sound, "incidental") col.prop(sound, "loop") col.prop(sound, "local_only") col.separator() _draw_fade_ui(sound.fade_in, col, "Fade In:") col.separator() _draw_fade_ui(sound.fade_out, col, "Fade Out:") col = split.column() col.label("Cone Effect:") col.prop(sound, "inner_cone") col.prop(sound, "outer_cone") col.prop(sound, "outside_volume", text="Volume") col.separator() col.label("Volume Falloff:") col.prop(sound, "min_falloff", text="Begin") col.prop(sound, "max_falloff", text="End") col.prop(sound, "volume", text="Max Volume") # Only allow SoftVolume spec if this is not an FX and this object is not an SV itself sv = modifier.id_data.plasma_modifiers.softvolume if not sv.enabled: col.separator() col.label("Soft Region:") col.prop(sound, "sfx_region", text="")