using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Ichni.RhythmGame
{
public abstract partial class AnimationBase : GameElement, IHaveTimeDurationSubmodule
{
#region [属性和相关对象] Attributes & Related Objects
public GameElement animatedObject;
public FlexibleReturnType animationReturnType;
#endregion
#region [子模块接口] Submodule Interfaces
public TimeDurationSubmodule timeDurationSubmodule { get; set; }
public override void SetDefaultSubmodules()
{
timeDurationSubmodule = new TimeDurationSubmodule(this);
}
#endregion
#region [生命周期与控制管理] Lifecycle & Management
public override void AfterInitialize()
{
base.AfterInitialize();
// 【新增】受管家管控
GameManager.Instance.animationManager.RegisterAnimation(this);
float delay = GameManager.Instance.songInformation.delay;
if (timeDurationSubmodule.CheckTimeInDuration(-delay))
{
ManualUpdate(-delay, true);
}
}
///
/// 更新动画
///
/// 歌曲时间
protected abstract void UpdateAnimation(float songTime, bool forceUpdate);
public virtual void ManualUpdate(float currentSongTime, bool forceUpdate = false)
{
if (timeDurationSubmodule.CheckTimeInDuration(currentSongTime))
{
UpdateAnimation(currentSongTime, forceUpdate);
}
if (timeDurationSubmodule.CheckAfterEndTime(currentSongTime))
{
GameManager.Instance.animationManager.UnregisterAnimation(this);
}
}
///
/// 施加时间偏移,即移动所有Flexible参数的时间
///
///
public virtual void ApplyTimeOffset(float offset)
{
timeDurationSubmodule.startTime += offset;
timeDurationSubmodule.endTime += offset;
}
#endregion
}
}