Files
ichni_Official/Assets/Scripts/Game/Animations/AnimationBase.cs

71 lines
2.2 KiB
C#
Raw Normal View History

2025-06-03 02:42:28 -04:00
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Ichni.RhythmGame
{
public abstract partial class AnimationBase : GameElement, IHaveTimeDurationSubmodule
{
2026-03-14 03:13:10 -04:00
#region [] Attributes & Related Objects
2025-06-03 02:42:28 -04:00
public GameElement animatedObject;
public FlexibleReturnType animationReturnType;
2026-03-14 03:13:10 -04:00
#endregion
2025-06-03 02:42:28 -04:00
2026-03-14 03:13:10 -04:00
#region [] Submodule Interfaces
2025-06-03 02:42:28 -04:00
public TimeDurationSubmodule timeDurationSubmodule { get; set; }
public override void SetDefaultSubmodules()
{
timeDurationSubmodule = new TimeDurationSubmodule(this);
}
2026-03-14 03:13:10 -04:00
#endregion
2025-07-21 05:42:20 -04:00
2026-03-14 03:13:10 -04:00
#region [] Lifecycle & Management
2025-07-21 05:42:20 -04:00
public override void AfterInitialize()
{
base.AfterInitialize();
2026-03-14 03:13:10 -04:00
// 【新增】受管家管控
GameManager.Instance.animationManager.RegisterAnimation(this);
float delay = GameManager.Instance.songInformation.delay;
2026-04-03 10:53:11 -04:00
if (timeDurationSubmodule.CheckTimeInDuration(-delay))
2025-07-21 05:42:20 -04:00
{
2026-04-03 10:53:11 -04:00
ManualUpdate(-delay, true);
2025-07-21 05:42:20 -04:00
}
}
2025-06-03 02:42:28 -04:00
/// <summary>
/// 更新动画
/// </summary>
/// <param name="songTime">歌曲时间</param>
2026-04-03 10:53:11 -04:00
protected abstract void UpdateAnimation(float songTime, bool forceUpdate);
2025-06-03 02:42:28 -04:00
2026-04-03 10:53:11 -04:00
public virtual void ManualUpdate(float currentSongTime, bool forceUpdate = false)
2025-06-03 02:42:28 -04:00
{
2026-03-14 03:13:10 -04:00
if (timeDurationSubmodule.CheckTimeInDuration(currentSongTime))
2025-07-08 14:28:40 -04:00
{
2026-04-03 10:53:11 -04:00
UpdateAnimation(currentSongTime, forceUpdate);
2025-07-08 14:28:40 -04:00
}
2026-03-14 03:13:10 -04:00
if (timeDurationSubmodule.CheckAfterEndTime(currentSongTime))
2025-06-03 02:42:28 -04:00
{
2026-03-14 03:13:10 -04:00
GameManager.Instance.animationManager.UnregisterAnimation(this);
2025-06-03 02:42:28 -04:00
}
}
/// <summary>
/// 施加时间偏移即移动所有Flexible参数的时间
/// </summary>
/// <param name="offset"></param>
public virtual void ApplyTimeOffset(float offset)
{
timeDurationSubmodule.startTime += offset;
timeDurationSubmodule.endTime += offset;
}
2026-03-14 03:13:10 -04:00
#endregion
2025-06-03 02:42:28 -04:00
}
}