74 lines
1.9 KiB
C#
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();
|
|
}
|
|
}
|
|
} |