Files
ichni_Creator_Studio/Assets/Scripts/EditorGame/GameElements/SubstantialObject.cs

80 lines
3.1 KiB
C#
Raw Normal View History

2025-02-02 08:34:54 -05:00
using System;
using System.Collections;
using System.Collections.Generic;
using Lean.Pool;
using UnityEngine;
namespace Ichni.RhythmGame
{
public abstract class SubstantialObject : GameElement, IHaveTransformSubmodule, IHaveTimeDurationSubmodule, IHaveColorSubmodule
{
public string themeBundleName, objectName;
2025-02-28 20:08:00 +08:00
public TransformSubmodule transformSubmodule { get; set; }
public TimeDurationSubmodule timeDurationSubmodule { get; set; }
public ColorSubmodule colorSubmodule { get; set; }
2025-03-08 14:21:10 -05:00
public bool haveEmission => false;
public static SubstantialObject GenerateElement(string elementName, Guid id, List<string> tags, bool isFirstGenerated,
2025-02-09 23:47:42 -05:00
string themeBundleName, string objectName, GameElement parentElement)
{
GameObject themeBundleObject = ThemeBundleManager.instance.GetObject<GameObject>(themeBundleName, objectName);
2025-02-28 20:08:00 +08:00
2025-02-09 23:47:42 -05:00
SubstantialObject substantialObject = Instantiate(themeBundleObject, parentElement.transform).GetComponent<SubstantialObject>();
substantialObject.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
substantialObject.themeBundleName = themeBundleName;
substantialObject.objectName = objectName;
substantialObject.FirstSetUpObject(isFirstGenerated);
return substantialObject;
}
/// <summary>
/// 初次生成继承自SubstantialObject的对象时生成方法必然使用SubstantialObject中的GenerateElement方法。
/// 因此对于需要进行特殊处理的子类需要重写FirstSetUpObject方法。
/// 在读取Beatmap时生成物体则使用子类本身的GenerateElement方法。
/// </summary>
public virtual void FirstSetUpObject(bool isFirstGenerated)
{
2025-02-28 20:08:00 +08:00
}
protected override void SetDefaultSubmodules()
{
transformSubmodule = new TransformSubmodule(this);
timeDurationSubmodule = new TimeDurationSubmodule(this);
colorSubmodule = new ColorSubmodule(this);
}
}
namespace Beatmap
{
public class SubstantialObject_BM : GameElement_BM
{
public string themeBundleName;
public string objectName;
public SubstantialObject_BM()
{
2025-02-28 20:08:00 +08:00
}
public SubstantialObject_BM(string elementName, Guid elementGuid, List<string> tags, GameElement_BM attachedElement,
string themeBundleName, string objectName)
: base(elementName, elementGuid, tags, attachedElement)
{
this.themeBundleName = themeBundleName;
this.objectName = objectName;
}
public override void ExecuteBM()
{
throw new NotImplementedException();
}
public override GameElement DuplicateBM(GameElement attached)
{
throw new NotImplementedException();
}
}
}
}