storytelling-assistant/addons/event_audio/EventAudio.cs

56 lines
1.5 KiB
C#
Raw Normal View History

using Godot;
public partial class EventAudio : Node {
static private EventAudio _instance;
private GodotObject _eventAudio;
private Callable _play3DMethod;
private Callable _play2DMethod;
private Callable _stopMethod;
// Simple 'handle' class for managing Godot audio emitters.
public class EventAudioEmitter {
public GodotObject Emitter;
public EventAudioEmitter(GodotObject emitter) {
Emitter = emitter;
}
}
public override void _Ready() {
base._Ready();
_eventAudio = GetParent().GetNode("EventAudio");
_play3DMethod = _eventAudio.Get("play_3d").AsCallable();
_play2DMethod = _eventAudio.Get("play_2d").AsCallable();
_stopMethod = _eventAudio.Get("stop").AsCallable();
_instance = this;
}
public static EventAudio Instance {
get {
return _instance;
}
}
public EventAudioEmitter Play2D(string trigger, Node3D source) {
var result = _play2DMethod.Call(trigger, source);
var godotEmitter = result.AsGodotObject();
if (godotEmitter != null) {
return new EventAudioEmitter(godotEmitter);
}
return null;
}
public EventAudioEmitter Play3D(string trigger, Node3D source) {
var result = _play3DMethod.Call(trigger, source);
var godotEmitter = result.AsGodotObject();
if (godotEmitter != null) {
return new EventAudioEmitter(godotEmitter);
}
return null;
}
public void Stop(EventAudioEmitter emitter) {
_stopMethod.Call(emitter.Emitter);
}
}