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
{
public GameElement attachedGameElement;
public BaseElement_BM matchedBM { get; set; }
///
/// 在生成时检测是否已经有重复的submodule
///
public bool HaveSameSubmodule { get; set; }
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 abstract void SaveBM();
public virtual void OnDelete()
{
}
public virtual void Delete()
{
OnDelete();
attachedGameElement.submoduleList.Remove(this);
}
public virtual void Refresh()
{
}
public virtual void CheckAndRemoveObservers()
{
}
}
namespace Beatmap
{
public abstract class Submodule_BM : BaseElement_BM
{
[System.NonSerialized] protected GameElement attachedElement; //存档类对应的游戏物体
public Submodule_BM()
{
}
public Submodule_BM(GameElement attachedElement)
{
this.attachedElement = attachedElement;
attachedElementGuid = attachedElement.elementGuid;
}
///
/// 复制物体
///
/// (对于物体)父物体,(对于次级模块)或挂载物体
public abstract void DuplicateBM(GameElement attached);
}
}
}