using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Ichni.RhythmGame.Beatmap; using UnityEngine; namespace Ichni.RhythmGame { public abstract class SubmoduleBase : IBaseElement { #region [基础属性] Essential Properties public GameElement attachedGameElement; public BaseElement_BM matchedBM { get; set; } /// /// 在生成时检测是否已经有重复的submodule /// public bool HaveSameSubmodule { get; set; } #endregion #region [生命周期与初始化] Lifecycle & Initialization public SubmoduleBase(GameElement attachedGameElement) { this.attachedGameElement = attachedGameElement; HaveSameSubmodule = attachedGameElement.submoduleList.Any(x => x.GetType() == this.GetType()); if (HaveSameSubmodule) { Debug.LogAssertion($"存在重复的Submodule: {GetType()},此操作无效"); return; } this.attachedGameElement.submoduleList.Add(this); } public virtual void OnDelete() { } public virtual void Delete() { OnDelete(); attachedGameElement.submoduleList.Remove(this); } public virtual void Refresh() { } public virtual void CheckAndRemoveObservers() { } #endregion } }