Editor UI - Hierarchy

This commit is contained in:
SoulliesOfficial
2025-02-09 23:47:42 -05:00
parent 3b0c65e277
commit d3928be99f
44 changed files with 2533 additions and 138 deletions

View File

@@ -17,9 +17,8 @@ namespace Ichni.RhythmGame
{
ElementFolder elementFolder = Instantiate(EditorManager.instance.basePrefabs.elementFolder).GetComponent<ElementFolder>();
elementFolder.Initialize(name, id, tags, isFirstGenerated);
elementFolder.SetParent(parentElement);
elementFolder.Initialize(name, id, tags, isFirstGenerated, parentElement);
//elementFolder.GenerateTab(parentElement);
return elementFolder;

View File

@@ -12,13 +12,13 @@ namespace Ichni.RhythmGame
public bool isStatic;
public static SubstantialObject GenerateElement(string elementName, Guid id, List<string> tags,
bool isFirstGenerated, GameElement parent, string themeBundleName, string objectName, bool isStatic)
bool isFirstGenerated, GameElement parentElement, string themeBundleName, string objectName, bool isStatic)
{
EnvironmentObject themeBundleObject =
ThemeBundleManager.instance.GetObject<EnvironmentObject>(themeBundleName, objectName);
EnvironmentObject environmentObject =
Instantiate(themeBundleObject, parent.transform).GetComponent<EnvironmentObject>();
environmentObject.Initialize(elementName, id, tags, isFirstGenerated);
Instantiate(themeBundleObject, parentElement.transform).GetComponent<EnvironmentObject>();
environmentObject.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
environmentObject.isStatic = isStatic;
return environmentObject;
}

View File

@@ -31,7 +31,7 @@ namespace Ichni.RhythmGame
GameCamera gameCamera =
Instantiate(EditorManager.instance.basePrefabs.gameCamera).GetComponent<GameCamera>();
gameCamera.Initialize(elementName, id, tags, isFirstGenerated);
gameCamera.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
gameCamera.parentElement = parentElement;
gameCamera.cameraViewType = cameraViewType;
gameCamera.camera.orthographic = cameraViewType == CameraViewType.Orthographic;
@@ -39,8 +39,6 @@ namespace Ichni.RhythmGame
gameCamera.orthographicSize = orthographicSize;
gameCamera.cameraTransform = gameCamera.transform;
gameCamera.SetParent(parentElement);
return gameCamera;
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Ichni.Editor;
using Ichni.RhythmGame.Beatmap;
using Sirenix.OdinInspector;
using UnityEngine;
@@ -21,6 +22,9 @@ namespace Ichni.RhythmGame
//父游戏物体
public GameElement parentElement;
//与游戏物体连接的Tab
public HierarchyTab connectedTab;
//子物体列表
public List<GameElement> childElementList = new List<GameElement>();
@@ -34,17 +38,17 @@ namespace Ichni.RhythmGame
/// 首次初始化
/// </summary>
/// <param name="name">物体名</param>
public virtual void Initialize(string name, Guid elementGuid, List<string> tags, bool isFirstGenerated)
public virtual void Initialize(string name, Guid elementGuid, List<string> tags,
bool isFirstGenerated, GameElement parentElement)
{
this.elementName = name;
this.elementGuid = elementGuid;
this.tags = tags;
EditorManager.instance.beatmapContainer.gameElementList.Add(this);
submoduleList = new List<SubmoduleBase>();
if (isFirstGenerated)
{
SetDefaultSubmodules();
}
if (isFirstGenerated) SetDefaultSubmodules();
SetParent(parentElement);
EditorManager.instance.uiManager.hierarchy.GenerateTab(this, parentElement);
//GameManager.beatMapContainer.beatMapElementList.Add(this);
//serialNumber = totalSerialNumber++;
//SetTransformObserver();

View File

@@ -18,12 +18,11 @@ namespace Ichni.RhythmGame
{
Flick flick = Instantiate(EditorManager.instance.basePrefabs.tapNote, parentElement.transform)
.GetComponent<Flick>();
flick.Initialize(elementName, id, tags, isFirstGenerated);
flick.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
flick.exactJudgeTime = exactJudgeTime;
flick.availableFlickDirections = directions;
flick.transformSubmodule = new TransformSubmodule(flick);
flick.timeDurationSubmodule = new TimeDurationSubmodule(flick);
flick.SetParent(parentElement);
if (parentElement.TryGetComponent(out Track track))
{

View File

@@ -15,12 +15,11 @@ namespace Ichni.RhythmGame
GameElement parentElement, float exactJudgeTime)
{
Stay stay = Instantiate(EditorManager.instance.basePrefabs.tapNote, parentElement.transform).GetComponent<Stay>();
stay.Initialize(elementName, id, tags, isFirstGenerated);
stay.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
stay.exactJudgeTime = exactJudgeTime;
stay.transformSubmodule = new TransformSubmodule(stay);
stay.timeDurationSubmodule = new TimeDurationSubmodule(stay);
stay.SetParent(parentElement);
if (parentElement.TryGetComponent(out Track track))
{
if (track.trackTimeSubmodule != null)

View File

@@ -16,11 +16,10 @@ namespace Ichni.RhythmGame
{
Tap tap = Instantiate(EditorManager.instance.basePrefabs.tapNote, parentElement.transform)
.GetComponent<Tap>();
tap.Initialize(elementName, id, tags, isFirstGenerated);
tap.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
tap.exactJudgeTime = exactJudgeTime;
tap.transformSubmodule = new TransformSubmodule(tap);
tap.timeDurationSubmodule = new TimeDurationSubmodule(tap);
tap.SetParent(parentElement);
if (parentElement.TryGetComponent(out Track track))
{

View File

@@ -15,12 +15,11 @@ namespace Ichni.RhythmGame
public ColorSubmodule colorSubmodule { get; set; }
public static SubstantialObject GenerateElement(string elementName, Guid id, List<string> tags, bool isFirstGenerated,
string themeBundleName, string objectName, GameElement parent)
string themeBundleName, string objectName, GameElement parentElement)
{
GameObject themeBundleObject = ThemeBundleManager.instance.GetObject<GameObject>(themeBundleName, objectName);
SubstantialObject substantialObject = Instantiate(themeBundleObject, parent.transform).GetComponent<SubstantialObject>();
substantialObject.Initialize(elementName, id, tags, isFirstGenerated);
substantialObject.SetParent(parent);
SubstantialObject substantialObject = Instantiate(themeBundleObject, parentElement.transform).GetComponent<SubstantialObject>();
substantialObject.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
return substantialObject;
}

View File

@@ -29,13 +29,11 @@ namespace Ichni.RhythmGame
PathNode pathNode = Instantiate(EditorManager.instance.basePrefabs.pathNode, track.transform)
.GetComponent<PathNode>();
pathNode.Initialize(elementName, id, tags, isFirstGenerated);
pathNode.Initialize(elementName, id, tags, isFirstGenerated, track);
pathNode.track = track;
track.trackPathSubmodule.pathNodeList.Add(pathNode);
pathNode.SetParent(track);
return pathNode;
}

View File

@@ -15,13 +15,12 @@ namespace Ichni.RhythmGame
public TrackTimeSubmodule trackTimeSubmodule { get; set; }
public TrackRendererSubmodule trackRendererSubmodule { get; set; }
public static Track GenerateElement(string elementName, Guid id, List<string> tags, bool isFirstGenerated, GameElement parent)
public static Track GenerateElement(string elementName, Guid id, List<string> tags, bool isFirstGenerated, GameElement parentElement)
{
Track track = Instantiate(EditorManager.instance.basePrefabs.track, parent.transform).GetComponent<Track>();
Track track = Instantiate(EditorManager.instance.basePrefabs.track, parentElement.transform).GetComponent<Track>();
track.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
track.Initialize(elementName, id, tags, isFirstGenerated);
track.SetParent(parent);
return track;
}

View File

@@ -21,18 +21,16 @@ namespace Ichni.RhythmGame
public TimeDurationSubmodule timeDurationSubmodule { get; set; }
public static CrossTrackPoint GenerateElement(string elementName, Guid id, List<string> tags,
bool isFirstGenerated,
ElementFolder elementFolder, FlexibleInt trackSwitch, FlexibleFloat trackPercent)
bool isFirstGenerated, ElementFolder elementFolder, FlexibleInt trackSwitch, FlexibleFloat trackPercent)
{
CrossTrackPoint point = Instantiate(EditorManager.instance.basePrefabs.emptyObject, elementFolder.transform)
.AddComponent<CrossTrackPoint>();
point.Initialize(elementName, id, tags, isFirstGenerated);
point.Initialize(elementName, id, tags, isFirstGenerated, elementFolder);
point.trackPositioner = point.gameObject.AddComponent<SplinePositioner>();
point.nowAttachedTrackIndex = -1;
point.trackListFolder = elementFolder;
point.trackSwitch = trackSwitch;
point.trackPercent = trackPercent;
point.SetParent(elementFolder);
return point;
}

View File

@@ -22,12 +22,11 @@ namespace Ichni.RhythmGame
TrackHeadPoint head = Instantiate(EditorManager.instance.basePrefabs.emptyObject, track.transform)
.AddComponent<TrackHeadPoint>();
head.Initialize(elementName, id, tags, isFirstGenerated);
head.Initialize(elementName, id, tags, isFirstGenerated, track);
head.track = track;
head.trackPositioner = head.gameObject.AddComponent<SplinePositioner>();
head.trackPositioner.spline = track.trackPathSubmodule.path;
head.trackTimeSubmoduleMovable = track.trackTimeSubmodule as TrackTimeSubmoduleMovable;
head.SetParent(track);
return head;
}

View File

@@ -30,12 +30,11 @@ namespace Ichni.RhythmGame
TrackPercentPoint point = Instantiate(EditorManager.instance.basePrefabs.emptyObject, track.transform)
.AddComponent<TrackPercentPoint>();
point.Initialize(elementName, id, tags, isFirstGenerated);
point.Initialize(elementName, id, tags, isFirstGenerated, track);
point.track = track;
point.trackPositioner = point.gameObject.AddComponent<SplinePositioner>();
point.trackPositioner.spline = track.trackPathSubmodule.path;
point.trackPercent = trackPercent;
point.SetParent(track);
point.isBeyond1 = trackPercent.animations.Any(animation => animation.endValue > 1); //判断是否有超过1的动画超过1将会循环

View File

@@ -21,12 +21,11 @@ namespace Ichni.RhythmGame
Trail trail = Instantiate(EditorManager.instance.basePrefabs.trail).GetComponent<Trail>();
trail.trailRenderer = trail.GetComponent<TrailRenderer>();
trail.Initialize(name, id, tags, isFirstGenerated);
trail.Initialize(name, id, tags, isFirstGenerated, parentElement);
trail.renderMaterial =
material == null ? EditorManager.instance.basePrefabs.defaultTrailMaterial : material;
trail.trailRenderer.material = trail.renderMaterial;
trail.visibleTimeLength = visibleTimeLength;
trail.SetParent(parentElement);
return trail;
}