UP-Viagg-io/Viagg-io/Assets/Packages/MyBT/BTC/Handlers/NamedAVProMediaPlayer.cs

146 lines
3.9 KiB
C#

//============= 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<MediaPlayer>();
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:
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;
}
}
}