Files
agame/addons/raytraced_audio/plugin.gd
T
2026-09-13 00:17:24 +08:00

84 lines
2.7 KiB
GDScript

@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)