148 lines
3.9 KiB
C#
148 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:
|
|
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;
|
|
|
|
}
|
|
}
|
|
}
|
|
|