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 } }