新增射线追踪音频插件
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
@tool
|
||||
extends EditorPlugin
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
_setup_settings()
|
||||
|
||||
# For some reason, adding custom types like this fails to generate documentation sometimes??
|
||||
# add_custom_type(
|
||||
# "RaytracedAudioListener",
|
||||
# "AudioListener3D",
|
||||
# load("res://addons/raytraced_audio/raytraced_audio_listener.gd"),
|
||||
# null
|
||||
# )
|
||||
# add_custom_type(
|
||||
# "RaytracedAudioPlayer3D",
|
||||
# "AudioStreamPlayer3D",
|
||||
# load("res://addons/raytraced_audio/raytraced_audio_player_3d.gd"),
|
||||
# null
|
||||
# )
|
||||
|
||||
_setup_audio_buses()
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
# remove_custom_type("RaytracedAudioListener")
|
||||
# remove_custom_type("RaytracedAudioPlayer3D")
|
||||
|
||||
_clean_up_settings()
|
||||
_clean_up_audio_buses()
|
||||
|
||||
|
||||
func _setup_settings() -> void:
|
||||
ProjectSettings.set_setting("raytraced_audio/reverb_bus", &"RaytracedReverb")
|
||||
ProjectSettings.set_setting("raytraced_audio/ambient_bus", &"RaytracedAmbient")
|
||||
|
||||
if ProjectSettings.get_setting("audio/general/3d_panning_strength") < 1.0:
|
||||
print("[INFO] RaytracedAudio: I recommend setting Audio/General/3d_panning_strength in Project Settings to 1.0 or above")
|
||||
|
||||
|
||||
func _clean_up_settings() -> void:
|
||||
ProjectSettings.set_setting("raytraced_audio/reverb_bus", null)
|
||||
ProjectSettings.set_setting("raytraced_audio/ambient_bus", null)
|
||||
|
||||
|
||||
func _setup_audio_buses() -> void:
|
||||
print("[INFO] Raytraced Audio: setting up audio buses")
|
||||
_clean_up_audio_buses()
|
||||
|
||||
# Reverb
|
||||
var i: int = AudioServer.bus_count
|
||||
AudioServer.add_bus()
|
||||
AudioServer.set_bus_name(i, ProjectSettings.get_setting("raytraced_audio/reverb_bus", &"RaytracedReverb"))
|
||||
AudioServer.set_bus_send(i, &"Master")
|
||||
var reverb: AudioEffectReverb = AudioEffectReverb.new()
|
||||
reverb.hipass = 1.0
|
||||
reverb.resource_name = "reverb"
|
||||
AudioServer.add_bus_effect(i, reverb)
|
||||
|
||||
# Ambient
|
||||
i = AudioServer.bus_count
|
||||
AudioServer.add_bus()
|
||||
AudioServer.set_bus_name(i, ProjectSettings.get_setting("raytraced_audio/ambient_bus", &"RaytracedAmbient"))
|
||||
AudioServer.set_bus_send(i, &"Master")
|
||||
var panner: AudioEffectPanner = AudioEffectPanner.new()
|
||||
panner.resource_name = "pan"
|
||||
AudioServer.add_bus_effect(i, panner)
|
||||
|
||||
# There's a bug in Godot that makes it so the ambient bus doesnt show properly in the editor
|
||||
# This is "fixable" by adding a temporary bus afterwards and deleting it immediately because ofc.
|
||||
# fuck you (respectfully)
|
||||
i = AudioServer.bus_count
|
||||
AudioServer.add_bus()
|
||||
AudioServer.remove_bus(i)
|
||||
|
||||
|
||||
func _clean_up_audio_buses() -> void:
|
||||
var i: int = AudioServer.get_bus_index(ProjectSettings.get_setting("raytraced_audio/reverb_bus", &"RaytracedReverb"))
|
||||
if i != -1:
|
||||
AudioServer.remove_bus(i)
|
||||
i = AudioServer.get_bus_index(ProjectSettings.get_setting("raytraced_audio/ambient_bus", &"RaytracedAmbient"))
|
||||
if i != -1:
|
||||
AudioServer.remove_bus(i)
|
||||
Reference in New Issue
Block a user