144 lines
4.7 KiB
C#
144 lines
4.7 KiB
C#
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.Video;
|
||
|
using BITKit;
|
||
|
using System.Threading.Tasks;
|
||
|
using UnityEngine.UIElements;
|
||
|
using Cysharp.Threading.Tasks;
|
||
|
namespace BITKit.UX
|
||
|
{
|
||
|
public class UXVideoPlayer : UXElement<VisualElement>, IProvider<VideoClip>
|
||
|
{
|
||
|
const string _minimizeContainer = "minimize-container";
|
||
|
const string _maximizeContainer = "maximize-container";
|
||
|
const string _closeButton = "close-button";
|
||
|
const string _maximizeButton = "maximize-button";
|
||
|
const string _minimizeButton = "minimize-button";
|
||
|
const string _videoName = "videoName-label";
|
||
|
const string _playerSlider = "player-slider";
|
||
|
const string _playButton = "play-button";
|
||
|
const string _totalTimeLabel = "totalTime-label";
|
||
|
const string _currentTimeLabel = "currentTime-label";
|
||
|
[Header(Constant.Header.Settings)]
|
||
|
public bool isMaximize;
|
||
|
public bool log;
|
||
|
public bool autoPlay;
|
||
|
[Header(Constant.Header.Components)]
|
||
|
public BITKit.Media.VideoPlayer videoPlayer;
|
||
|
[Header(Constant.Header.InternalVariables)]
|
||
|
Vector2 windowPosition;
|
||
|
VisualElement minimizeContainer;
|
||
|
VisualElement maximizeContainer;
|
||
|
|
||
|
public void Play(VideoClip clip)
|
||
|
{
|
||
|
videoPlayer.Stop();
|
||
|
Set(clip);
|
||
|
videoPlayer.player.Prepare();
|
||
|
videoPlayer.player.time = 0;
|
||
|
if (autoPlay)
|
||
|
{
|
||
|
videoPlayer.Play();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
videoPlayer.Prepare();
|
||
|
}
|
||
|
foreach (var x in visualElement.Query<Label>(_videoName).ToList())
|
||
|
{
|
||
|
x.text = clip.name;
|
||
|
}
|
||
|
SetActive(true);
|
||
|
if (isMaximize)
|
||
|
{
|
||
|
Maximize();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Minimize();
|
||
|
}
|
||
|
}
|
||
|
public override void OnStart()
|
||
|
{
|
||
|
document.sortingOrder = 8;
|
||
|
base.OnStart();
|
||
|
|
||
|
minimizeContainer = visualElement.Q(_minimizeContainer);
|
||
|
maximizeContainer = visualElement.Q(_maximizeContainer);
|
||
|
|
||
|
foreach (var x in visualElement.Query<Button>(_minimizeButton).ToList())
|
||
|
{
|
||
|
x.clicked += Minimize;
|
||
|
}
|
||
|
foreach (var x in visualElement.Query<Button>(_maximizeButton).ToList())
|
||
|
{
|
||
|
x.clicked += Maximize;
|
||
|
}
|
||
|
foreach (var x in visualElement.Query<Button>(_closeButton).ToList())
|
||
|
{
|
||
|
x.clicked += Close;
|
||
|
}
|
||
|
|
||
|
foreach (var x in visualElement.Query<Button>(_playButton).ToList())
|
||
|
{
|
||
|
videoPlayer.onPlay.AddListener(SwitchToPlaying);
|
||
|
videoPlayer.onStartPlay.AddListener(SwitchToPlaying);
|
||
|
videoPlayer.onPause.AddListener(SwitchToStop);
|
||
|
videoPlayer.onStopPlay.AddListener(SwitchToStop);
|
||
|
x.clicked += videoPlayer.PlayOrPause;
|
||
|
void SwitchToPlaying()
|
||
|
{
|
||
|
x.AddToClassList("paused");
|
||
|
|
||
|
}
|
||
|
void SwitchToStop()
|
||
|
{
|
||
|
x.RemoveFromClassList("paused");
|
||
|
}
|
||
|
}
|
||
|
foreach (var x in visualElement.Query<Slider>(_playerSlider).ToList())
|
||
|
{
|
||
|
x.RegisterValueChangedCallback(x =>
|
||
|
{
|
||
|
videoPlayer.SetNormalizeTime(x.newValue);
|
||
|
});
|
||
|
videoPlayer.onTime.AddListener(x.SetValueWithoutNotify);
|
||
|
videoPlayer.onStopPlay.AddListener(() => x.SetValueWithoutNotify(0));
|
||
|
}
|
||
|
foreach (var x in visualElement.Query<Label>(_totalTimeLabel).ToList())
|
||
|
{
|
||
|
videoPlayer.onSetTotalTimeAsString.AddListener(y => x.text = y);
|
||
|
}
|
||
|
foreach (var x in visualElement.Query<Label>(_currentTimeLabel).ToList())
|
||
|
{
|
||
|
videoPlayer.onTimeAsString.AddListener(y => x.text = y);
|
||
|
}
|
||
|
|
||
|
Close();
|
||
|
}
|
||
|
VideoClip IProvider<VideoClip>.Get()
|
||
|
{
|
||
|
return videoPlayer.player.clip;
|
||
|
}
|
||
|
public void Set(VideoClip t)
|
||
|
{
|
||
|
videoPlayer.player.clip = t;
|
||
|
}
|
||
|
void Close()
|
||
|
{
|
||
|
videoPlayer.Stop();
|
||
|
SetActive(false);
|
||
|
}
|
||
|
void Minimize()
|
||
|
{
|
||
|
minimizeContainer.SetActive(true);
|
||
|
maximizeContainer.SetActive(false);
|
||
|
}
|
||
|
void Maximize()
|
||
|
{
|
||
|
minimizeContainer.SetActive(false);
|
||
|
maximizeContainer.SetActive(true);
|
||
|
}
|
||
|
}
|
||
|
}
|