51 lines
2.3 KiB
C++
51 lines
2.3 KiB
C++
#include "steam_audio_source.hpp"
|
|
|
|
using namespace godot;
|
|
|
|
// Static vector to track all active audio sources
|
|
Vector<SteamAudioSource *> SteamAudioSource::_instances;
|
|
|
|
// Constructor/Destructor
|
|
SteamAudioSource::SteamAudioSource() {
|
|
// Disable default attenuation since Steam Audio handles it
|
|
set_attenuation_model(ATTENUATION_DISABLED);
|
|
_instances.push_back(this);
|
|
}
|
|
|
|
SteamAudioSource::~SteamAudioSource() {
|
|
// Remove this instance from tracking vector
|
|
_instances.erase(this);
|
|
}
|
|
|
|
// Static method to get all active audio sources
|
|
const Vector<SteamAudioSource *> &SteamAudioSource::get_all_sources() {
|
|
return _instances;
|
|
}
|
|
|
|
// Godot virtual methods
|
|
void SteamAudioSource::_bind_methods() {
|
|
// Bind directivity methods to make them accessible from GDScript
|
|
ClassDB::bind_method(D_METHOD("set_dipole_weight", "weight"), &SteamAudioSource::set_dipole_weight);
|
|
ClassDB::bind_method(D_METHOD("get_dipole_weight"), &SteamAudioSource::get_dipole_weight);
|
|
ClassDB::bind_method(D_METHOD("set_dipole_power", "power"), &SteamAudioSource::set_dipole_power);
|
|
ClassDB::bind_method(D_METHOD("get_dipole_power"), &SteamAudioSource::get_dipole_power);
|
|
ClassDB::bind_method(D_METHOD("set_directivity_enabled", "arg"), &SteamAudioSource::set_directivity_enabled);
|
|
ClassDB::bind_method(D_METHOD("is_directivity_enabled"), &SteamAudioSource::get_is_directivity_enabled);
|
|
|
|
// Add properties to editor interface
|
|
ADD_GROUP("Directivity", "directivity_");
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "directivity_enabled"), "set_directivity_enabled",
|
|
"is_directivity_enabled");
|
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "directivity_dipole_weight", PROPERTY_HINT_RANGE, "0,1,0.01"),
|
|
"set_dipole_weight", "get_dipole_weight");
|
|
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "directivity_dipole_power", PROPERTY_HINT_RANGE, "0,10,0.1"),
|
|
"set_dipole_power", "get_dipole_power");
|
|
}
|
|
|
|
// Hide default AudioStreamPlayer3D properties that we don't use
|
|
void SteamAudioSource::_validate_property(PropertyInfo &property) const {
|
|
if (property.name == StringName("attenuation_model") || property.name == StringName("unit_size") ||
|
|
property.name.begins_with("attenuation") || property.name.begins_with("emission_")) {
|
|
property.usage = PROPERTY_USAGE_NO_EDITOR;
|
|
}
|
|
} |