Cross Track Point和Trail的进一步制作,修复Duplicate的Guid Bug

Ctrl+M切摄像机
This commit is contained in:
SoulliesOfficial
2025-03-01 00:28:26 -05:00
parent 210e594808
commit 191be59c3d
33 changed files with 790 additions and 1604 deletions

View File

@@ -129,7 +129,7 @@ namespace Ichni.RhythmGame
public override GameElement DuplicateBM(GameElement parent)
{
return PathNode.GenerateElement(elementName, elementGuid, tags, false, parent as Track, isShowingSphere);
return PathNode.GenerateElement(elementName, Guid.NewGuid(), tags, false, parent as Track, isShowingSphere);
}
}
}

View File

@@ -21,6 +21,8 @@ namespace Ichni.RhythmGame
Track track = Instantiate(EditorManager.instance.basePrefabs.track, parentElement.transform).GetComponent<Track>();
track.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
if(parentElement is ElementFolder folder) folder.trackList.Add(track);
return track;
}
@@ -60,6 +62,11 @@ namespace Ichni.RhythmGame
trackTimeSubmodule?.Refresh();
trackRendererSubmodule?.Refresh();
}
public override void OnDelete()
{
if (parentElement is ElementFolder folder) folder.trackList.Remove(this);
}
}
public partial class Track
@@ -114,21 +121,18 @@ namespace Ichni.RhythmGame
if (trackPathSubmodule != null)
{
trackPathButton.button.interactable = false;
trackPathSubmodule.SetUpInspector();
}
if (trackTimeSubmodule != null)
{
trackTimeMovableButton.button.interactable = false;
trackTimeStaticButton.button.interactable = false;
trackTimeSubmodule.SetUpInspector();
}
if (trackRendererSubmodule != null)
{
trackRendererAutoOrientButton.button.interactable = false;
trackRendererPathGeneratorButton.button.interactable = false;
trackRendererSubmodule.SetUpInspector();
}
var generateContainer = inspector.GenerateContainer("Generate Elements"); //物体生成
@@ -317,7 +321,7 @@ namespace Ichni.RhythmGame
public override GameElement DuplicateBM(GameElement parent)
{
return Track.GenerateElement(elementName, elementGuid, tags, false, parent);
return Track.GenerateElement(elementName, Guid.NewGuid(), tags, false, parent);
}
}
}

View File

@@ -54,14 +54,15 @@ namespace Ichni.RhythmGame
private void SetPoint()
{
if (nowAttachedTrackIndex != trackSwitch.value && trackSwitch.value >= 0 &&
if (nowAttachedTrackIndex != trackSwitch.value &&
trackSwitch.value >= 0 &&
trackSwitch.value < trackListFolder.trackList.Count)
{
nowAttachedTrack = trackListFolder.trackList[trackSwitch.value];
nowAttachedTrackIndex = trackSwitch.value;
trackPositioner.spline = trackListFolder.trackList[trackSwitch.value].trackPathSubmodule.path;
}
trackPositioner.SetPercent(trackPercent.value);
}
@@ -111,6 +112,9 @@ namespace Ichni.RhythmGame
var generateCameraButton = inspector.GenerateButton(this, generateContainer, "Game Camera",
() => GameCamera.GenerateElement("New Game Camera", Guid.NewGuid(), new List<string>(),
true, this, GameCamera.CameraViewType.Perspective, 60, 10));
var generateTrailButton = inspector.GenerateButton(this, generateContainer, "Trail",
() => Trail.GenerateElement("New Trail", Guid.NewGuid(), new List<string>(),
true, this, 1, true, 1, AnimationCurve.Constant(0,1,1)));
}
}
@@ -142,7 +146,7 @@ namespace Ichni.RhythmGame
public override GameElement DuplicateBM(GameElement parent)
{
return CrossTrackPoint.GenerateElement(elementName, elementGuid, tags, false,
return CrossTrackPoint.GenerateElement(elementName, Guid.NewGuid(), tags, false,
parent as ElementFolder, trackSwitch, trackPercent);
}
}

View File

@@ -76,7 +76,7 @@ namespace Ichni.RhythmGame
public override GameElement DuplicateBM(GameElement parent)
{
return TrackHeadPoint.GenerateElement(elementName, elementGuid, tags, false, parent as Track);
return TrackHeadPoint.GenerateElement(elementName, Guid.NewGuid(), tags, false, parent as Track);
}
}
}

View File

@@ -123,7 +123,7 @@ namespace Ichni.RhythmGame
public override GameElement DuplicateBM(GameElement parent)
{
return TrackPercentPoint.GenerateElement(elementName, elementGuid, tags, false, parent as Track,
return TrackPercentPoint.GenerateElement(elementName, Guid.NewGuid(), tags, false, parent as Track,
trackPercent.ConvertToGameType());
}
}

View File

@@ -4,6 +4,7 @@ using Dreamteck.Splines;
using Ichni.Editor;
using Unity.VisualScripting;
using UnityEngine;
using Inspector = Ichni.Editor.Inspector;
namespace Ichni.RhythmGame
{
@@ -65,7 +66,16 @@ namespace Ichni.RhythmGame
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Track Renderer Auto Orient");
var deleteButton = inspector.GenerateButton(this, container, "Delete",
() =>
{
Delete();
track.trackRendererSubmodule = null;
inspectorMain.SetInspector(track);
track.Refresh();
});
}
}
@@ -91,14 +101,12 @@ namespace Ichni.RhythmGame
attachedElement = GameElement_BM.GetElement(attachedElementGuid);
Track track = attachedElement as Track;
track.trackRendererSubmodule = new TrackRendererSubmoduleAutoOrient(track); //TODO: Implement Material
track.submoduleList.Add(track.trackRendererSubmodule);
}
public override void DuplicateBM(GameElement attached)
{
Track track = attached as Track;
track.trackRendererSubmodule = new TrackRendererSubmoduleAutoOrient(track); //TODO: Implement Material
track.submoduleList.Add(track.trackRendererSubmodule);
}
}
}
@@ -146,7 +154,16 @@ namespace Ichni.RhythmGame
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Track Renderer Path Generator");
var deleteButton = inspector.GenerateButton(this, container, "Delete",
() =>
{
Delete();
track.trackRendererSubmodule = null;
inspectorMain.SetInspector(track);
track.Refresh();
});
}
}
@@ -172,14 +189,12 @@ namespace Ichni.RhythmGame
attachedElement = GameElement_BM.GetElement(attachedElementGuid);
Track track = attachedElement as Track;
track.trackRendererSubmodule = new TrackRendererSubmodulePathGenerator(track);//TODO: Implement Material
track.submoduleList.Add(track.trackRendererSubmodule);
}
public override void DuplicateBM(GameElement attached)
{
Track track = attached as Track;
track.trackRendererSubmodule = new TrackRendererSubmodulePathGenerator(track);//TODO: Implement Material
track.submoduleList.Add(track.trackRendererSubmodule);
}
}
}

View File

@@ -34,7 +34,6 @@ namespace Ichni.RhythmGame
public TrackTimeSubmoduleMovable(Track track, float trackStartTime, float trackEndTime,
float visibleTrackTimeLength, AnimationCurveType animationCurveType) : base(track)
{
this.track.trackTimeSubmodule = this;
this.trackStartTime = trackStartTime;
this.trackEndTime = trackEndTime;
this.trackTotalTime = trackEndTime - trackStartTime;

View File

@@ -66,8 +66,14 @@ namespace Ichni.RhythmGame
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Trail");
var visibleTimeLengthInputField = inspector.GenerateInputField(this, container, "Visible Time Length", nameof(visibleTimeLength));
visibleTimeLengthInputField.AddListenerFunction(_ => trailRenderer.time = visibleTimeLength);
var isAutoOrientToggle = inspector.GenerateToggle(this, container, "Is Auto Orient", nameof(isAutoOrient));
isAutoOrientToggle.AddListenerFunction(_ => trailRenderer.alignment = isAutoOrient ? LineAlignment.View : LineAlignment.TransformZ);
var widthMultiplierInputField = inspector.GenerateInputField(this, container, "Width Multiplier", nameof(widthMultiplier));
widthMultiplierInputField.AddListenerFunction(_ => trailRenderer.widthMultiplier = widthMultiplier);
var widthCurveButton = inspector.GenerateButton(this, container, "Width Curve", () =>
{
var widthCurveWindow = inspector.GenerateCompositeParameterWindow(this, "Width Curve", nameof(widthCurve));
@@ -128,7 +134,7 @@ namespace Ichni.RhythmGame
public override GameElement DuplicateBM(GameElement parent)
{
return Trail.GenerateElement(elementName, elementGuid, tags,
return Trail.GenerateElement(elementName, Guid.NewGuid(), tags,
false, parent, visibleTimeLength,
isAutoOrient, widthMultiplier, widthCurve);
}