You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
2.7 KiB

using System.Collections.Generic;
using uc;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(RawImage))]
public class MoviePlayerCanvas : ActivityBase
{
//public List<string> filenames;
public List<DShowClip> filenames;
public bool loop;
RawImage raw_image;
Texture origin_tex;
List<MoviePlayerBase> movies;
int index = -1;
MoviePlayerBase current_movie { get { return (index < 0) ? null : movies[index]; } }
void Awake()
{
raw_image = GetComponent<RawImage>();
origin_tex = raw_image.mainTexture;
movies = new List<MoviePlayerBase>();
}
void Start()
{
if (filenames.Count == 0 && origin_tex != null)
{
//filenames.Add(origin_tex.name + ".mov");
}
foreach (var fs in filenames)
{
movies.Add(MoviePlayerPool.Singleton.GetMoviePlayer(fs, false));
}
if (movies.Count > 0)
{
var m = movies[movies.Count - 1];
m.Loop = loop;
}
}
private void OnEnable()
{
index = -1;
}
protected override void OnEnter()
{
}
protected override void OnUpdate()
{
if (IsEntering == false)
return;
if (movies.Count > 0)
{
if (index < 0)
{
index = 0;
if (current_movie != null)
{
current_movie.Play();
current_movie.Frame = 0;
}
}
else
{
if (current_movie != null)
{
bool is_stopped = current_movie.IsPaused;
if (is_stopped)
{
if (index < movies.Count - 1)
{
//print("next movie");
movies[++index].Play();
is_stopped = false;
}
}
raw_image.texture = current_movie.IsLoaded ? current_movie.Texture : origin_tex;
if (current_movie.Loop == false)
IsFinished = is_stopped && (index == movies.Count - 1);
}
}
if (IsFinished)
{
Finish();
}
}
}
void OnDisable()
{
if (movies.Count > 0)
{
if (index > -1)
{
foreach (var m in movies)
{
m.Stop();
m.Frame = 0;
}
}
}
}
protected override void OnLeave()
{
}
protected override void OnKilled()
{
}
}