//============= Copyright (c) Ludic GmbH, All rights reserved. ============== // // Purpose: Part of the My Behaviour Tree Controller Code // //============================================================================= using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Video; using UnityEngine.UI; using MyBT; #if FMOD_AVAILABLE using FMOD; using FMODUnity; #endif #if UNITY_EDITOR using UnityEditor; [CustomEditor(typeof(NamedStudioEventEmitter))] public class NamedStudioEventEmitterInspector : ComponentHandlerInspector { } #endif [System.Serializable] public class NamedStudioEventEmitter : ComponentHandler { #if FMOD_AVAILABLE public override string TypeLabel () { return "StudioEventEmitter"; } public override string ContentLabel() { UpdateComponent(); /* string[] eventName = studioEventEmitter.EventReference.Path.Split('/'); string sndName = eventName[eventName.Length - 1]; if (sndName.Trim().Length == 0) { sndName = "undefined"; } // if (manualNamePost.Trim().Length > 0) { // sndName += "_" + manualNamePost; // } return sndName;*/ return objName; } public override void UpdateComponent() { base.UpdateComponent(); studioEventEmitter = GetComponent(); } public StudioEventEmitter studioEventEmitter; public string objName = "FMODAudio"; public override string titleText { get { return "Run (Play) Fmod Sound"; } } public override string[][] helpText { get { return new string[][] { new string[] {"Run", null, $"BTC.Run(\"{roomId}\", \"{gameObject.name}\")"}, }; } } public override void Run(MyBT.NodeState nodeState) { // whan aborting if (nodeState == NodeState.Aborting) { bool isOneShot; studioEventEmitter.EventDescription.isOneshot(out isOneShot); if (isOneShot) { studioEventEmitter.Stop(); } return; } // at start if (nodeState == NodeState.FirstRun) { studioEventEmitter.Play(); UnityEngine.Debug.Log($"NamedStudioEventEmitter: Event from {gameObject.name} start playing."); } // during runtime if (nodeState == NodeState.Running) { bool isOneShot; studioEventEmitter.EventDescription.isOneshot(out isOneShot); if (!isOneShot) { Task.SetSucceeded(); return; } if (!studioEventEmitter.IsPlaying()) { Task.SetSucceeded(); return; } } } // For Looping Sounds public override void StopSound(MyBT.NodeState nodeState) { if (nodeState == NodeState.FirstRun) { studioEventEmitter.Stop(); Task.SetSucceeded(); return; } } #else [Header("FMod Support disabled: Window->MyBT->PreCompiler Definitions")] public string dummy; #endif }