Files

74 lines
1.9 KiB
C#

using System.Linq;
using DG.Tweening;
using UnityEngine;
namespace Dott
{
public partial class DOTweenFrame : MonoBehaviour
{
[SerializeField] private string id;
[Min(0), SerializeField] private float delay;
[SerializeField] private FrameProperty[] properties = new FrameProperty[1];
private Sequence tween;
public FrameProperty[] Properties => properties;
public Tween CreateTween(bool regenerateIfExists, bool andPlay = true)
{
if (tween != null)
{
if (tween.IsActive())
{
if (!regenerateIfExists)
{
return tween;
}
tween.Kill();
}
tween = null;
}
tween = DOTween.Sequence().SetDelay(delay);
var scopes = GenerateScopes();
var isScopeOpen = false;
tween.OnComplete(() =>
{
if (isScopeOpen)
{
return;
}
isScopeOpen = true;
foreach (var scope in scopes)
{
scope.Open();
}
});
tween.OnRewind(() =>
{
// Sequences starts without real delay, so onRewind can be called before onComplete
if (!isScopeOpen)
{
return;
}
isScopeOpen = false;
foreach (var scope in scopes)
{
scope.Close();
}
});
return tween;
}
private PropertyScope[] GenerateScopes()
{
return properties.Select(CreateScope).Where(scope => scope != null).ToArray();
}
}
}