//============= 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 MyBT; using RenderHeads.Media.AVProVideo; #if UNITY_EDITOR using UnityEditor; [CustomEditor(typeof(NamedAVProMediaPlayer))] public class NamedAVProMediaPlayerInspector : ComponentHandlerInspector { } #endif [System.Serializable] public class NamedAVProMediaPlayer : ComponentHandler { public override string TypeLabel() { return "MediaPlayer"; } public override string ContentLabel() { UpdateComponent(); return videoName; } public override void UpdateComponent() { base.UpdateComponent(); _mediaPlayer = GetComponent(); if (_mediaPlayer == null) { Debug.Log($"NamedAVProMediaPlayer.UpdateComponent mediaPlayer is null"); } } //public Depthkit.Clip depthkitClip; public string videoPath; public string videoName = "Video"; MediaPlayer _mediaPlayer; public override string titleText { get { return "Show/Hide, Run AVPro Video"; } } public override string[][] helpText { get { return new string[][] { new string[] {"Show", null, $"BTC.Show(\"{roomId}\", \"{gameObject.name}\")"}, new string[] {"Hide", null, $"BTC.Hide(\"{roomId}\", \"{gameObject.name}\")"}, new string[] {"Run", null, $"BTC.Run(\"{roomId}\", \"{gameObject.name}\")"} }; } } public override void Run(MyBT.NodeState nodeState) { if (_mediaPlayer == null) { Debug.Log("NamedAVProMediaPlayer.Running: MediaPlayer is null."); return; } switch (nodeState) { case NodeState.FirstRun: _mediaPlayer.OpenMedia(new MediaPath(videoPath, MediaPathType.RelativeToPersistentDataFolder)); break; case NodeState.Running: if (_mediaPlayer.Loop && _mediaPlayer.Control.IsPlaying()) { Task.SetSucceeded(); return; } if (_mediaPlayer.Control.IsFinished()) { _mediaPlayer.CloseMedia(); _mediaPlayer.ForceDispose(); Task.SetSucceeded(); return; } break; } } public override void Show(MyBT.NodeState nodeState) { switch (nodeState) { case NodeState.FirstRun: gameObject.SetActive(true); if (_mediaPlayer != null) { _mediaPlayer.OpenMedia(new MediaPath(videoPath, MediaPathType.RelativeToPersistentDataFolder), autoPlay: false); } goto case NodeState.Running; case NodeState.Running: Task.SetSucceeded(); break; case NodeState.Aborting: break; } } public override void Hide(MyBT.NodeState nodeState) { switch (nodeState) { case NodeState.FirstRun: if (_mediaPlayer != null) { if (_mediaPlayer.Control.IsPlaying()) { _mediaPlayer.Stop(); _mediaPlayer.CloseMedia(); } _mediaPlayer.ForceDispose(); } Task.SetSucceeded(); break; case NodeState.Aborting: break; case NodeState.NotRunning: break; } } }