using System; using System.Collections; using System.Collections.Generic; using Ichni.RhythmGame.Beatmap; using Sirenix.OdinInspector; using UniRx; using UnityEngine; namespace Ichni.RhythmGame { public partial class TimeEffectsCollection : GameElement, IHaveTransformSubmodule, IHaveEffectSubmodule { #region [暴露属性字段] Essential Configs public float time; //触发效果的时间 #endregion #region [子模块接口] Submodules public TransformSubmodule transformSubmodule { get; set; } public EffectSubmodule effectSubmodule { get; set; } #endregion #region [生命周期] Lifecycle & Factory public static TimeEffectsCollection GenerateElement(string name, Guid guid, List tags, bool isFirstGenerated, GameElement parentElement, float time) { TimeEffectsCollection timeEffectsCollection = Instantiate(GameManager.Instance.basePrefabs.emptyObject).AddComponent(); timeEffectsCollection.Initialize(name, guid, tags, isFirstGenerated, parentElement); timeEffectsCollection.time = time; return timeEffectsCollection; } public override void SetDefaultSubmodules() { transformSubmodule = new TransformSubmodule(this); effectSubmodule = new EffectSubmodule(this); } #endregion #region [轮询更新] Main Update private void Update() { if (!GameManager.Instance.songPlayer.isUpdating || effectSubmodule == null) { return; } foreach (EffectBase effect in effectSubmodule.effectCollection["Prior"]) { effect.UpdateEffect(time); } foreach (EffectBase effect in effectSubmodule.effectCollection["Default"]) { effect.UpdateEffect(time); } foreach (EffectBase effect in effectSubmodule.effectCollection["Late"]) { effect.UpdateEffect(time); } } #endregion } }