自动更新型DUI扩展,将Time变量挪出TImeline UI,Effect效果容器修缮,移除Note的transform模块,Scene Camera优化

This commit is contained in:
SoulliesOfficial
2025-02-26 00:52:08 -05:00
parent 1b4637ae95
commit 1e69a44327
36 changed files with 607 additions and 425 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -18,11 +18,6 @@ namespace Ichni.Editor
/// 参数名,通过反射获取饿修改对应变量的值
/// </summary>
public string parameterName;
/// <summary>
/// 是否始终更新如果子类可能用到此变量则在子类中写Update即可注意如果最后仅有Text用到此变量直接移动它到Text即可
/// </summary>
public bool isAlwaysUpdated;
public virtual void Initialize(IBaseElement baseElement, string title, string parameterName)
{
@@ -54,4 +49,21 @@ namespace Ichni.Editor
//public abstract void ApplyParameters();
}
public interface IHaveAutoUpdate
{
public bool isAutoUpdate { get; set; }
public bool isReceiving { get; set; }
public void SetAutoUpdate(bool enable);
public void UpdateContent()
{
if(isAutoUpdate && isReceiving)
{
ApplyContent();
}
}
public void ApplyContent();
}
}

View File

@@ -8,18 +8,51 @@ using UnityEngine.Events;
namespace Ichni.Editor
{
public class DynamicUIParameterInputField : DynamicUIElement
public class DynamicUIInputField : DynamicUIElement, IHaveAutoUpdate
{
public TMP_InputField inputField;
public bool isAutoUpdate { get; set; }
public bool isReceiving { get; set; }
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
{
base.Initialize(baseElement, title, parameterName);
inputField.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString(); //获取对应变量的值
inputField.onEndEdit.AddListener(ApplyParameters);
if (parameterName != string.Empty)
{
ApplyContent();
inputField.onEndEdit.AddListener(ApplyParameters);
}
}
private void Update()
{
(this as IHaveAutoUpdate).UpdateContent();
}
public void SetDefaultValue(string text)
{
inputField.text = text;
}
public T GetValue<T>()
{
return (T)Convert.ChangeType(inputField.text, typeof(T));
}
public void SetAutoUpdate(bool enable)
{
isAutoUpdate = enable;
isReceiving = true;
inputField.onSelect.AddListener(_ => isReceiving = false);
inputField.onDeselect.AddListener(_ => isReceiving = true);
}
public void ApplyContent()
{
inputField.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString(); //获取对应变量的值
}
private void ApplyParameters(string text)
{
Type type = connectedBaseElement.GetType().GetField(parameterName).FieldType;

View File

@@ -7,22 +7,32 @@ using UnityEngine;
namespace Ichni.Editor
{
public class DynamicUIParameterText : DynamicUIElement
public class DynamicUIParameterText : DynamicUIElement, IHaveAutoUpdate
{
public TMP_Text text;
public bool isAutoUpdate { get; set; }
public bool isReceiving { get; set; }
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
{
base.Initialize(baseElement, title, parameterName);
text.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString();
ApplyContent();
}
private void Update()
{
if (isAlwaysUpdated)
{
text.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString();
}
(this as IHaveAutoUpdate).UpdateContent();
}
public void SetAutoUpdate(bool enable)
{
isAutoUpdate = enable;
isReceiving = true;
}
public void ApplyContent()
{
text.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString();
}
}
}

View File

@@ -1,3 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
@@ -10,27 +11,66 @@ using UnityEngine.UIElements.Experimental;
namespace Ichni.Editor
{
public class DynamicUIVector3InputField : DynamicUIElement
public class DynamicUIVector3InputField : DynamicUIElement, IHaveAutoUpdate
{
public TMP_InputField inputFieldX;
public TMP_InputField inputFieldY;
public TMP_InputField inputFieldZ;
public bool isAutoUpdate { get; set; }
public bool isReceiving { get; set; }
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
{
base.Initialize(baseElement, title, parameterName);
if (parameterName != string.Empty)
{
ApplyContent();
inputFieldX.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldY.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldZ.onEndEdit.AddListener(_ => ApplyParameters());
}
}
private void Update()
{
(this as IHaveAutoUpdate).UpdateContent();
}
public void SetDefaultValue(Vector3 value)
{
inputFieldX.text = value.x.ToString();
inputFieldY.text = value.y.ToString();
inputFieldZ.text = value.z.ToString();
}
public Vector3 GetValue()
{
return new Vector3(float.Parse(inputFieldX.text), float.Parse(inputFieldY.text), float.Parse(inputFieldZ.text));
}
public void SetAutoUpdate(bool enable)
{
isAutoUpdate = enable;
isReceiving = true;
inputFieldX.onSelect.AddListener(_ => isReceiving = false);
inputFieldY.onSelect.AddListener(_ => isReceiving = false);
inputFieldZ.onSelect.AddListener(_ => isReceiving = false);
inputFieldX.onDeselect.AddListener(_ => isReceiving = true);
inputFieldY.onDeselect.AddListener(_ => isReceiving = true);
inputFieldZ.onDeselect.AddListener(_ => isReceiving = true);
}
public void ApplyContent()
{
Vector3 pos = (Vector3)connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement); //获取对应变量的值
inputFieldX.text = pos.x.ToString();
inputFieldY.text = pos.y.ToString();
inputFieldZ.text = pos.z.ToString();
inputFieldX.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldY.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldZ.onEndEdit.AddListener(_ => ApplyParameters());
}
public override void DeviverSet(int i){
//我什么也不做
}
private void ApplyParameters()
{
Vector3 newValue = new Vector3(float.Parse(inputFieldX.text), float.Parse(inputFieldY.text), float.Parse(inputFieldZ.text));
@@ -44,5 +84,9 @@ namespace Ichni.Editor
inputFieldY.onEndEdit.AddListener(_ => action());
inputFieldZ.onEndEdit.AddListener(_ => action());
}
public override void DeviverSet(int i){
//我什么也不做
}
}
}

View File

@@ -66,38 +66,49 @@ namespace Ichni.Editor
return toggle;
}
public DynamicUIGetterInputField GenerateGetterInputField(DynamicUIContainer container,
string title, string defaultText)
public DynamicUIInputField GenerateInputField(DynamicUIContainer container,
string title, string defaultText = "") //不与参数绑定的InputField
{
DynamicUIGetterInputField getterInputField = Object
.Instantiate(EditorManager.instance.basePrefabs.getterInputField, container.rect)
.GetComponent<DynamicUIGetterInputField>();
getterInputField.Initialize(null, title, string.Empty);
getterInputField.SetDefaultText(defaultText);
container.dynamicUIElements.Add(getterInputField);
return getterInputField;
DynamicUIInputField inputField = Object
.Instantiate(EditorManager.instance.basePrefabs.parameterInputField, container.rect)
.GetComponent<DynamicUIInputField>();
inputField.Initialize(null, title, string.Empty);
inputField.SetDefaultValue(defaultText);
container.dynamicUIElements.Add(inputField);
return inputField;
}
public DynamicUIParameterInputField GenerateParameterInputField(IBaseElement baseElement,
DynamicUIContainer container,
string title, string parameterName)
public DynamicUIInputField GenerateInputField(IBaseElement baseElement,
DynamicUIContainer container, string title, string parameterName, bool isAutoUpdate = false) //与参数绑定的InputField
{
DynamicUIParameterInputField parameterInputField = Object
DynamicUIInputField inputField = Object
.Instantiate(EditorManager.instance.basePrefabs.parameterInputField, container.rect)
.GetComponent<DynamicUIParameterInputField>();
parameterInputField.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(parameterInputField);
return parameterInputField;
.GetComponent<DynamicUIInputField>();
inputField.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(inputField);
return inputField;
}
public DynamicUIVector3InputField GenerateVector3InputField(DynamicUIContainer container, string title,
Vector3 defaultVector3 = default)
{
DynamicUIVector3InputField vector3InputField =
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, container.rect)
.GetComponent<DynamicUIVector3InputField>();
vector3InputField.Initialize(null, title, string.Empty);
vector3InputField.SetDefaultValue(defaultVector3);
container.dynamicUIElements.Add(vector3InputField);
return vector3InputField;
}
public DynamicUIVector3InputField GenerateVector3InputField(IBaseElement baseElement,
DynamicUIContainer container,
string title, string parameterName)
DynamicUIContainer container, string title, string parameterName, bool isAutoUpdate = false)
{
DynamicUIVector3InputField vector3InputField =
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, container.rect)
.GetComponent<DynamicUIVector3InputField>();
vector3InputField.Initialize(baseElement, title, parameterName);
vector3InputField.SetAutoUpdate(isAutoUpdate);
container.dynamicUIElements.Add(vector3InputField);
return vector3InputField;
}
@@ -148,14 +159,13 @@ namespace Ichni.Editor
}
public DynamicUIParameterText GenerateParameterText(IBaseElement baseElement, DynamicUIContainer container,
string title,
string parameterName, bool isAlwaysUpdate = false)
string title, string parameterName, bool isAutoUpdate = false)
{
DynamicUIParameterText parameterText = Object
.Instantiate(EditorManager.instance.basePrefabs.parameterText, container.rect)
.GetComponent<DynamicUIParameterText>();
parameterText.Initialize(baseElement, title, parameterName);
parameterText.isAlwaysUpdated = isAlwaysUpdate;
parameterText.SetAutoUpdate(isAutoUpdate);
container.dynamicUIElements.Add(parameterText);
return parameterText;
}

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.UI;
namespace Ichni.Editor
{
public class MusicPlayModule : MonoBehaviour
{
public Button playButton;
public Button pauseButton;
public Button stopButton;
private void Start()
{
playButton.onClick.AddListener(EditorManager.instance.musicPlayer.PlayMusic);
pauseButton.onClick.AddListener(EditorManager.instance.musicPlayer.PauseMusic);
stopButton.onClick.AddListener(EditorManager.instance.musicPlayer.StopMusic);
}
}
}

View File

@@ -44,9 +44,8 @@ namespace Ichni.Editor
private void Update()
{
if (timeline.musicPlayer.isPlaying)
if (EditorManager.instance.musicPlayer.isPlaying)
{
songInformation.songTime = timeline.musicPlayer.audioSource.time;
SetRange(songInformation.songTime);
}

View File

@@ -8,6 +8,7 @@ using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Serialization;
using UnityEngine.UI;
namespace Ichni.Editor
@@ -23,7 +24,7 @@ namespace Ichni.Editor
public GameObject timelineTabRect;
public TimePointerModule timePointerModule;
public MusicPlayer musicPlayer;
public MusicPlayModule musicPlayModule;
public TMP_InputField TimeField;
@@ -32,7 +33,7 @@ namespace Ichni.Editor
public RectTransform GetinputArea;
public void Update()
{
if (musicPlayer.isPlaying) UpdateTime();
if (EditorManager.instance.musicPlayer.isPlaying) UpdateTime();
if (RectTransformUtility.RectangleContainsScreenPoint(GetinputArea, Mouse.current.position.ReadValue()))
{
@@ -85,8 +86,8 @@ namespace Ichni.Editor
public void SetTime(string time)
{
musicPlayer.PauseMusic();
musicPlayer.audioSource.time = float.Parse(time);
EditorManager.instance.musicPlayer.PauseMusic();
EditorManager.instance.musicPlayer.audioSource.time = float.Parse(time);
EditorManager.instance.songInformation.songTime = float.Parse(time);
timePointerModule.UpdatePointers();
@@ -95,15 +96,13 @@ namespace Ichni.Editor
}
public void SetBeat(string beat)
{
musicPlayer.PauseMusic();
musicPlayer.audioSource.time = float.Parse(beat) * timePerBeat;
EditorManager.instance.musicPlayer.PauseMusic();
EditorManager.instance.musicPlayer.audioSource.time = float.Parse(beat) * timePerBeat;
EditorManager.instance.songInformation.songTime = float.Parse(beat) * timePerBeat;
timePointerModule.UpdatePointers();
timePointerModule.SetRange(songTime);
}
}

View File

@@ -91,8 +91,8 @@ namespace Ichni.RhythmGame
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Time Duration");
var overrideToggle = inspector.GenerateToggle(this, container, "Override Duration", nameof(isOverridingDuration));
var startTimeInputField = inspector.GenerateParameterInputField(this, container, "Start Time", nameof(startTime));
var endTimeInputField = inspector.GenerateParameterInputField(this, container, "End Time", nameof(endTime));
var startTimeInputField = inspector.GenerateInputField(this, container, "Start Time", nameof(startTime));
var endTimeInputField = inspector.GenerateInputField(this, container, "End Time", nameof(endTime));
void SetInputFieldInteractable(bool interactable)
{

View File

@@ -56,22 +56,27 @@ namespace Ichni.Editor
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Background Setter");
var useSkyboxToggle = inspector.GenerateToggle(this, container, "Use Skybox", nameof(useSkybox));
var skyboxThemeBundleField = inspector.GenerateParameterInputField(this, container, "Skybox Theme Bundle", nameof(skyboxThemeBundleName));
var skyboxMaterialNameField = inspector.GenerateParameterInputField(this, container, "Skybox Material", nameof(skyboxMaterialName));
var backgroundSpriteField = inspector.GenerateParameterInputField(this, container, "Background Sprite", nameof(backgroundSpriteName));
var skyboxThemeBundleField = inspector.GenerateInputField(this, container, "Skybox Theme Bundle", nameof(skyboxThemeBundleName));
var skyboxMaterialNameField = inspector.GenerateInputField(this, container, "Skybox Material", nameof(skyboxMaterialName));
var backgroundSpriteField = inspector.GenerateInputField(this, container, "Background Sprite", nameof(backgroundSpriteName));
var applyButton = inspector.GenerateButton(this, container, "Apply", Refresh);
useSkyboxToggle.AddListenerFunction(EditorManager.instance.backgroundController.EnableBackground);
useSkyboxToggle.AddListenerFunction(value =>
void SetFields(bool value)
{
skyboxThemeBundleField.inputField.interactable = value;
skyboxMaterialNameField.inputField.interactable = value;
backgroundSpriteField.inputField.interactable = !value;
});
}
SetFields(useSkybox);
useSkyboxToggle.AddListenerFunction(value => EditorManager.instance.backgroundController.EnableBackground(!value));
useSkyboxToggle.AddListenerFunction(SetFields);
}
public override void Refresh()
{
EditorManager.instance.backgroundController.EnableBackground(useSkybox);
EditorManager.instance.backgroundController.EnableBackground(!useSkybox);
if (useSkybox)
{
SetSkybox(skyboxThemeBundleName, skyboxMaterialName);

View File

@@ -150,7 +150,7 @@ namespace Ichni.RhythmGame
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Element Info");
var nameInputField = inspector.GenerateParameterInputField(this, container, GetType().Name + "'s Name", nameof(elementName));
var nameInputField = inspector.GenerateInputField(this, container, GetType().Name + "'s Name", nameof(elementName));
var guidText = inspector.GenerateParameterText(this, container, "Element GUID", nameof(elementGuid));
var tagsListButton = inspector.GenerateButton(this, container, "Tags List", () =>
{

View File

@@ -40,8 +40,8 @@ namespace Ichni.RhythmGame
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Bloom Shake");
var effectTimeField = inspector.GenerateParameterInputField(this, container, "Bloom Time", nameof(bloomTime));
var bloomPeakField = inspector.GenerateParameterInputField(this, container, "Bloom Peak", nameof(bloomPeak));
var effectTimeField = inspector.GenerateInputField(this, container, "Bloom Time", nameof(bloomTime));
var bloomPeakField = inspector.GenerateInputField(this, container, "Bloom Peak", nameof(bloomPeak));
}
}

View File

@@ -11,7 +11,7 @@ namespace Ichni.RhythmGame
public partial class TimeEffectsCollection : GameElement, IHaveEffectSubmodule
{
public EffectSubmodule effectSubmodule { get; set; }
public float time;
public float time; //触发效果的时间
public static TimeEffectsCollection GenerateElement(string name, Guid guid, List<string> tags,
bool isFirstGenerated, GameElement parentElement, float time)
@@ -26,6 +26,7 @@ namespace Ichni.RhythmGame
protected override void SetDefaultSubmodules()
{
effectSubmodule = new EffectSubmodule(this);
submoduleList.Add(effectSubmodule);
}
private void Update()
@@ -38,18 +39,30 @@ namespace Ichni.RhythmGame
{
public override void SaveBM()
{
matchedBM = new TimeEffectsCollection_BM(this);
matchedBM = new TimeEffectsCollection_BM(elementName, elementGuid, tags,
parentElement.matchedBM as GameElement_BM, this);
}
public override void SetUpInspector()
{
base.SetUpInspector();
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Time Effects Collection");
var timeInputField = inspector.GenerateParameterInputField(this, container, "Time", nameof(time));
var timeInputField = inspector.GenerateInputField(this, container, "Time", nameof(time));
var effectNameInputField = inspector.GenerateInputField(container, "Effect Name");
var addEffectButton = inspector.GenerateButton(this, container, "Add Effect", () =>
{
IHaveEffectSubmodule.EffectCollection.TryGetValue("BloomShake", out var effect);
effectSubmodule.effectCollection["Default"].Add(effect);
if (IHaveEffectSubmodule.EffectCollection.TryGetValue(effectNameInputField.GetValue<string>(), out var effect))
{
effectSubmodule.effectCollection["Default"].Add(effect);
inspectorMain.SetInspector(this);
}
else
{
LogWindow.Log("Effect Type not found.", Color.red);
}
});
foreach (var effect in effectSubmodule.effectCollection["Default"])
@@ -69,21 +82,24 @@ namespace Ichni.RhythmGame
{
}
public TimeEffectsCollection_BM(TimeEffectsCollection timeEffectsCollection)
public TimeEffectsCollection_BM(string elementName, Guid elementGuid, List<string> tags,
GameElement_BM attachedElement, TimeEffectsCollection timeEffectsCollection)
: base(elementName, elementGuid, tags, attachedElement)
{
time = timeEffectsCollection.time;
}
public override void ExecuteBM()
{
matchedElement = TimeEffectsCollection.GenerateElement("Time Effects Collection", elementGuid,
matchedElement = TimeEffectsCollection.GenerateElement(elementName, elementGuid,
tags, false, GetElement(attachedElementGuid), time);
}
public override GameElement DuplicateBM(GameElement attached)
{
return TimeEffectsCollection.GenerateElement("Time Effects Collection", elementGuid,
return TimeEffectsCollection.GenerateElement(elementName, elementGuid,
tags, false, attached, time);
}
}

View File

@@ -21,8 +21,6 @@ namespace Ichni.RhythmGame
flick.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
flick.exactJudgeTime = exactJudgeTime;
flick.availableFlickDirections = directions;
flick.transformSubmodule = new TransformSubmodule(flick);
flick.timeDurationSubmodule = new TimeDurationSubmodule(flick);
if (parentElement.TryGetComponent(out Track track))
{

View File

@@ -8,7 +8,7 @@ using UnityEngine;
namespace Ichni.RhythmGame
{
public abstract partial class NoteBase : GameElement, IHaveTransformSubmodule, IHaveTimeDurationSubmodule
public abstract partial class NoteBase : GameElement, IHaveTimeDurationSubmodule
{
[Title("Basic Info")]
public float exactJudgeTime;
@@ -22,7 +22,6 @@ namespace Ichni.RhythmGame
public NoteVisualBase noteVisual;
[Title("Submodules")]
public TransformSubmodule transformSubmodule { get; set; }
public TimeDurationSubmodule timeDurationSubmodule { get; set; }
public NoteJudgeSubmodule noteJudgeSubmodule { get; set; }
@@ -57,11 +56,9 @@ namespace Ichni.RhythmGame
protected override void SetDefaultSubmodules()
{
transformSubmodule = new TransformSubmodule(this);
timeDurationSubmodule = new TimeDurationSubmodule(this);
noteJudgeSubmodule = new NoteJudgeSubmodule(this);
submoduleList.Add(transformSubmodule);
submoduleList.Add(timeDurationSubmodule);
submoduleList.Add(noteJudgeSubmodule);
}
@@ -139,14 +136,14 @@ namespace Ichni.RhythmGame
//我想把时间放在第一层菜单所以
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Element Info");
var nameInputField = inspector.GenerateParameterInputField(this, container, GetType().Name + "'s Name", nameof(elementName));
var nameInputField = inspector.GenerateInputField(this, container, GetType().Name + "'s Name", nameof(elementName));
var guidText = inspector.GenerateParameterText(this, container, "Element GUID", nameof(elementGuid));
var tagsListButton = inspector.GenerateButton(this, container, "Tags List", () =>
{
inspector.GenerateCompositeParameterWindow(this, "Tags List", nameof(tags)).SetAsStringList();
});
var exactJudgeTimeInputField =
inspector.GenerateParameterInputField(this, container, "exactJudgeTime", nameof(exactJudgeTime));
inspector.GenerateInputField(this, container, "exactJudgeTime", nameof(exactJudgeTime));
exactJudgeTimeInputField.AddListenerFunction(_ => UpdateNoteInTrack());
foreach (var submodule in submoduleList)

View File

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

View File

@@ -19,8 +19,6 @@ namespace Ichni.RhythmGame
.GetComponent<Tap>();
tap.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
tap.exactJudgeTime = exactJudgeTime;
tap.transformSubmodule = new TransformSubmodule(tap);
tap.timeDurationSubmodule = new TimeDurationSubmodule(tap);
if (parentElement.TryGetComponent(out Track track))
{

View File

@@ -52,7 +52,7 @@ namespace Ichni.RhythmGame
var generateButton = inspector.GenerateButton(this, container, "Generate", () =>
{
Delete();
EditorManager.instance.operationManager.CopyPasteDeleteModule.DeleteElement(this);
inspectorMain.ClearInspector();
SubstantialObject.GenerateElement(elementName, elementGuid, tags, true, themeBundleName, objectName, parentElement);
});

View File

@@ -198,17 +198,17 @@ namespace Ichni.RhythmGame
{
IHaveInspection qcWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Quick Copy");
var qcContainer = qcWindow.GenerateContainer();
var xField = qcWindow.GenerateGetterInputField(qcContainer, "X offset", "0");
var yField = qcWindow.GenerateGetterInputField(qcContainer, "Y offset", "0");
var zField = qcWindow.GenerateGetterInputField(qcContainer, "Z offset", "0");
var timeField = qcWindow.GenerateGetterInputField(qcContainer, "Time offset", "0");
var iterationField = qcWindow.GenerateGetterInputField(qcContainer, "Iteration", "0");
var xField = qcWindow.GenerateInputField(qcContainer, "X offset", "0");
var yField = qcWindow.GenerateInputField(qcContainer, "Y offset", "0");
var zField = qcWindow.GenerateInputField(qcContainer, "Z offset", "0");
var timeField = qcWindow.GenerateInputField(qcContainer, "Time offset", "0");
var iterationField = qcWindow.GenerateInputField(qcContainer, "Iteration", "0");
var includeAnimationToggle = qcWindow.GenerateToggle(null, qcContainer, "Include Animation", string.Empty);
qcWindow.GenerateButton(this, qcContainer, "Copy", () =>
{
Vector3 positionOffset = new Vector3(xField.GetResult<float>(), yField.GetResult<float>(), zField.GetResult<float>());
float timeOffset = timeField.GetResult<float>();
int iteration = iterationField.GetResult<int>();
Vector3 positionOffset = new Vector3(xField.GetValue<float>(), yField.GetValue<float>(), zField.GetValue<float>());
float timeOffset = timeField.GetValue<float>();
int iteration = iterationField.GetValue<int>();
bool includeAnimation = includeAnimationToggle.toggle.isOn;
QuickCopy(positionOffset, timeOffset, includeAnimation, iteration);
});
@@ -218,12 +218,12 @@ namespace Ichni.RhythmGame
{
IHaveInspection wholeMoveWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Move");
var wmContainer = wholeMoveWindow.GenerateContainer();
var xField = wholeMoveWindow.GenerateGetterInputField(wmContainer, "X offset", "0");
var yField = wholeMoveWindow.GenerateGetterInputField(wmContainer, "Y offset", "0");
var zField = wholeMoveWindow.GenerateGetterInputField(wmContainer, "Z offset", "0");
var xField = wholeMoveWindow.GenerateInputField(wmContainer, "X offset", "0");
var yField = wholeMoveWindow.GenerateInputField(wmContainer, "Y offset", "0");
var zField = wholeMoveWindow.GenerateInputField(wmContainer, "Z offset", "0");
wholeMoveWindow.GenerateButton(this, wmContainer, "Move", () =>
{
Vector3 positionOffset = new Vector3(xField.GetResult<float>(), yField.GetResult<float>(), zField.GetResult<float>());
Vector3 positionOffset = new Vector3(xField.GetValue<float>(), yField.GetValue<float>(), zField.GetValue<float>());
WholeTrackMove(positionOffset);
});
}); //整体移动
@@ -232,39 +232,39 @@ namespace Ichni.RhythmGame
{
IHaveInspection wholeSwirlWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Swirl");
var wsContainer = wholeSwirlWindow.GenerateContainer();
var angleField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Angle", "0");
var centerXField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Center X", "0");
var centerYField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Center Y", "0");
var centerZField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Center Z", "0");
var axisDirXField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Axis Direction X", "0");
var axisDirYField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Axis Direction Y", "0");
var axisDirZField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Axis Direction Z", "0");
var angleField = wholeSwirlWindow.GenerateInputField(wsContainer, "Angle", "0");
var centerXField = wholeSwirlWindow.GenerateInputField(wsContainer, "Center X", "0");
var centerYField = wholeSwirlWindow.GenerateInputField(wsContainer, "Center Y", "0");
var centerZField = wholeSwirlWindow.GenerateInputField(wsContainer, "Center Z", "0");
var axisDirXField = wholeSwirlWindow.GenerateInputField(wsContainer, "Axis Direction X", "0");
var axisDirYField = wholeSwirlWindow.GenerateInputField(wsContainer, "Axis Direction Y", "0");
var axisDirZField = wholeSwirlWindow.GenerateInputField(wsContainer, "Axis Direction Z", "0");
wholeSwirlWindow.GenerateButton(this, wsContainer, "Swirl", () =>
{
float angle = angleField.GetResult<float>();
Vector3 center = new Vector3(centerXField.GetResult<float>(), centerYField.GetResult<float>(), centerZField.GetResult<float>());
Vector3 axisDirection = new Vector3(axisDirXField.GetResult<float>(), axisDirYField.GetResult<float>(), axisDirZField.GetResult<float>());
float angle = angleField.GetValue<float>();
Vector3 center = new Vector3(centerXField.GetValue<float>(), centerYField.GetValue<float>(), centerZField.GetValue<float>());
Vector3 axisDirection = new Vector3(axisDirXField.GetValue<float>(), axisDirYField.GetValue<float>(), axisDirZField.GetValue<float>());
WholeTrackSwirl(angle, center, axisDirection);
});
}); //整体旋转
var wholeTrackFlipButton = inspector.GenerateButton(this, toolsContainerTrack, "Whole Track Flip", () =>
{
IHaveInspection wholeFlipWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Flip");
var wfContainer = wholeFlipWindow.GenerateContainer();
var axisStartXField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start X", "0");
var axisStartYField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start Y", "0");
var axisStartZField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start Z", "0");
var axisEndXField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End X", "0");
var axisEndYField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End Y", "0");
var axisEndZField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End Z", "0");
wholeFlipWindow.GenerateButton(this, wfContainer, "Flip", () =>
{
Vector3 axisStart = new Vector3(axisStartXField.GetResult<float>(), axisStartYField.GetResult<float>(), axisStartZField.GetResult<float>());
Vector3 axisEnd = new Vector3(axisEndXField.GetResult<float>(), axisEndYField.GetResult<float>(), axisEndZField.GetResult<float>());
WholeTrackFlip(axisStart, axisEnd);
});
}); //整体翻转
// var wholeTrackFlipButton = inspector.GenerateButton(this, toolsContainerTrack, "Whole Track Flip", () =>
// {
// IHaveInspection wholeFlipWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Flip");
// var wfContainer = wholeFlipWindow.GenerateContainer();
// var axisStartXField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start X", "0");
// var axisStartYField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start Y", "0");
// var axisStartZField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start Z", "0");
// var axisEndXField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End X", "0");
// var axisEndYField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End Y", "0");
// var axisEndZField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End Z", "0");
// wholeFlipWindow.GenerateButton(this, wfContainer, "Flip", () =>
// {
// Vector3 axisStart = new Vector3(axisStartXField.GetResult<float>(), axisStartYField.GetResult<float>(), axisStartZField.GetResult<float>());
// Vector3 axisEnd = new Vector3(axisEndXField.GetResult<float>(), axisEndYField.GetResult<float>(), axisEndZField.GetResult<float>());
// WholeTrackFlip(axisStart, axisEnd);
// });
// }); //整体翻转
var toolsContainerPathNode = inspector.GenerateContainer("Path Node Tools"); //路径点快捷工具
var setAllPathNodeSphereButton = inspector.GenerateButton(this, toolsContainerPathNode,

View File

@@ -76,10 +76,10 @@ namespace Ichni.RhythmGame
var container = inspector.GenerateContainer("Track Time Movable");
var startTimeInputField =
inspector.GenerateParameterInputField(this, container, "Start Time", nameof(trackStartTime));
var endTimeInputField = inspector.GenerateParameterInputField(this, container, "End Time", nameof(trackEndTime));
inspector.GenerateInputField(this, container, "Start Time", nameof(trackStartTime));
var endTimeInputField = inspector.GenerateInputField(this, container, "End Time", nameof(trackEndTime));
var visibleTimeInputField =
inspector.GenerateParameterInputField(this, container, "Visible Time Length", nameof(visibleTrackTimeLength));
inspector.GenerateInputField(this, container, "Visible Time Length", nameof(visibleTrackTimeLength));
var animationCurveDropdown = inspector.GenerateDropdown(this, container, "Animation Curve",
typeof(AnimationCurveType), nameof(animationCurveType));
var deleteButton = inspector.GenerateButton(this, container, "Delete",
@@ -162,7 +162,7 @@ namespace Ichni.RhythmGame
var container = inspector.GenerateContainer("Track Time Static");
var totalTimeInputField =
inspector.GenerateParameterInputField(this, container, "Total Time", nameof(trackTotalTime));
inspector.GenerateInputField(this, container, "Total Time", nameof(trackTotalTime));
var animationCurveDropdown = inspector.GenerateDropdown(this, container, "Animation Curve",
typeof(AnimationCurveType), nameof(animationCurveType));
var deleteButton = inspector.GenerateButton(this, container, "Delete",

View File

@@ -42,7 +42,7 @@ namespace Ichni.Editor
var container = inspector.GenerateContainer("Camera Manager");
var cameraTypeText = inspector.GenerateHintText(this, container, ShowCameraType);
var switchCameraButton = inspector.GenerateButton(this, container, "Switch Camera", SwitchCamera);
var cameraMoveSpeedField = inspector.GenerateParameterInputField(this, container, "Scene Camera Move Speed", nameof(sceneCameraMoveSpeed));
var cameraMoveSpeedField = inspector.GenerateInputField(this, container, "Scene Camera Move Speed", nameof(sceneCameraMoveSpeed));
sceneCamera.SetUpInspector();
}
}

View File

@@ -15,6 +15,7 @@ namespace Ichni
public static EditorManager instance;
public ProjectManager projectManager;
public MusicPlayer musicPlayer;
public EditorUIManager uiManager;
public EditorSettings editorSettings;
public OperationManager operationManager;
@@ -53,7 +54,7 @@ namespace Ichni
uiManager.hierarchy.GenerateTab(this, null);
projectManager.loadManager.Load("TestProject");
uiManager.timeline.musicPlayer.audioSource.clip = songInformation.song;
musicPlayer.audioSource.clip = songInformation.song;
beatmapContainer.gameElementList.ForEach(gameElement =>
{

View File

@@ -16,8 +16,10 @@ namespace Ichni.Editor
private void Update()
{
if (EditorManager.instance.cameraManager.isSceneCameraActive ||
!Keyboard.current.leftCtrlKey.isPressed) // 场景相机的移动和旋转
bool isPointerOverUI = IsPointerOverUI(out GameObject hoveredUI);
if (EditorManager.instance.cameraManager.isSceneCameraActive &&
!Keyboard.current.leftCtrlKey.isPressed && !isPointerOverUI) // 场景相机的移动和旋转
{
float cameraMoveSpeed = EditorManager.instance.cameraManager.sceneCameraMoveSpeed * Time.deltaTime;
Transform sceneCameraTransform = EditorManager.instance.cameraManager.sceneCamera.transform;
@@ -46,8 +48,6 @@ namespace Ichni.Editor
sceneCameraTransform.position -= sceneCameraTransform.up * cameraMoveSpeed;
}
bool isPointerOverUI = IsPointerOverUI(out GameObject hoveredUI);
if (Mouse.current.rightButton.isPressed && !isPointerOverUI)
{
float cameraRotateSpeed = EditorManager.instance.cameraManager.sceneCameraRotateSpeed * Time.deltaTime;
@@ -61,16 +61,15 @@ namespace Ichni.Editor
}
}
if (eventSystem.currentSelectedGameObject == null &&
Keyboard.current.enterKey.wasPressedThisFrame) // 播放或暂停音乐
if (!isPointerOverUI && Keyboard.current.enterKey.wasPressedThisFrame) // 播放或暂停音乐
{
if (!EditorManager.instance.uiManager.timeline.musicPlayer.isPlaying)
if (!EditorManager.instance.musicPlayer.isPlaying)
{
EditorManager.instance.uiManager.timeline.musicPlayer.PlayMusic();
EditorManager.instance.musicPlayer.PlayMusic();
}
else
{
EditorManager.instance.uiManager.timeline.musicPlayer.PauseMusic();
EditorManager.instance.musicPlayer.PauseMusic();
}
}
@@ -98,7 +97,7 @@ namespace Ichni.Editor
}
else if (Keyboard.current.dKey.wasPressedThisFrame)
{
EditorManager.instance.operationManager.currentSelectedElement.Delete();
EditorManager.instance.operationManager.CopyPasteDeleteModule.DeleteElement(EditorManager.instance.operationManager.currentSelectedElement);
}
// 开关移动设备分辨率提示

View File

@@ -3,7 +3,6 @@ using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.UI;
namespace Ichni.Editor
{
@@ -12,16 +11,12 @@ namespace Ichni.Editor
public bool isPlaying;
public AudioSource audioSource;
public Button playButton;
public Button pauseButton;
public Button stopButton;
private void Awake()
private void Update()
{
audioSource = GetComponent<AudioSource>();
playButton.onClick.AddListener(PlayMusic);
pauseButton.onClick.AddListener(PauseMusic);
stopButton.onClick.AddListener(StopMusic);
if (isPlaying)
{
EditorManager.instance.songInformation.songTime = EditorManager.instance.musicPlayer.audioSource.time;
}
}
public void PlayMusic()
@@ -29,8 +24,8 @@ namespace Ichni.Editor
isPlaying = !isPlaying;
Trail.SetAllTrails(true, false);
EditorManager.instance.songInformation.songTime = audioSource.time;
if( isPlaying)audioSource.Play();
else audioSource.Pause();
if(isPlaying)audioSource.Play();
else audioSource.Pause();
}
public void PauseMusic()

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6c12bb7674cd5416f8d846e62018a96d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -17,38 +17,36 @@ namespace Ichni.Editor
public BaseElement_BM matchedBM { get; set; }
[HideInInspector]
public Vector3 cameraPosition; //注意这里的Position和EulerAngles是transform的中介变量仅能用于Inspector显示
[HideInInspector]
public Vector3 cameraEulerAngles;
public void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Scene Camera");
var viewTypeDropdown = inspector.GenerateDropdown(this, container, "View Type", typeof(GameCamera.CameraViewType), nameof(viewType));
var perspectiveAngleField = inspector.GenerateParameterInputField(this, container, "Perspective Angle", nameof(perspectiveAngle));
var orthographicSizeField = inspector.GenerateParameterInputField(this, container, "Orthographic Size", nameof(orthographicSize));
var perspectiveAngleField = inspector.GenerateInputField(this, container, "Perspective Angle", nameof(perspectiveAngle));
var orthographicSizeField = inspector.GenerateInputField(this, container, "Orthographic Size", nameof(orthographicSize));
viewTypeDropdown.AddListenerFunction(_ => camera.orthographic = viewType == GameCamera.CameraViewType.Orthographic);
perspectiveAngleField.AddListenerFunction(_ => camera.fieldOfView = perspectiveAngle);
orthographicSizeField.AddListenerFunction(_ => camera.orthographicSize = orthographicSize);
viewTypeDropdown.AddListenerFunction(_ =>
{
camera.orthographic = viewType == GameCamera.CameraViewType.Orthographic;
});
perspectiveAngleField.AddListenerFunction(_ =>
{
camera.fieldOfView = perspectiveAngle;
});
orthographicSizeField.AddListenerFunction(_ =>
{
camera.orthographicSize = orthographicSize;
});
string GetPosition() => $"Position: {camera.transform.position}";
var positionText = inspector.GenerateHintText(this, container, GetPosition);
string GetEulerAngles() => $"Euler Angles: {camera.transform.eulerAngles}";
var eulerAnglesText = inspector.GenerateHintText(this, container, GetEulerAngles);
var positionInputFields = inspector.GenerateVector3InputField(this, container, "Position", nameof(cameraPosition), true);
positionInputFields.AddListenerFunction(() => camera.transform.position = cameraPosition);
var eulerAnglesInputFields = inspector.GenerateVector3InputField(this, container, "Euler Angles", nameof(cameraEulerAngles), true);
eulerAnglesInputFields.AddListenerFunction(() => camera.transform.eulerAngles = cameraEulerAngles);
container.SetDeviver(1);
}
public void MoveCamera(Vector3 delta)
private void Update()
{
camera.transform.position += delta;
cameraPosition = camera.transform.position;
cameraEulerAngles = camera.transform.eulerAngles;
}
}
}

View File

@@ -43,112 +43,6 @@
"attachedElementGuid" : {
"value" : "ac931bb4-963e-473f-9ec6-4eb2121aed7d"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.Displacement_BM,Assembly-CSharp",
"positionX" : {
"animatedFloatList" : [
]
},
"positionY" : {
"animatedFloatList" : [
{
"startValue" : 0,
"endValue" : 10,
"startTime" : 0,
"endTime" : 2,
"animationCurveType" : 0
}
]
},
"positionZ" : {
"animatedFloatList" : [
]
},
"elementName" : "Displacement-0",
"tags" : [
],
"elementGuid" : {
"value" : "4e670cae-92bf-414d-98fe-5af126b8470c"
},
"attachedElementGuid" : {
"value" : "ac931bb4-963e-473f-9ec6-4eb2121aed7d"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "4e670cae-92bf-414d-98fe-5af126b8470c"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.Displacement_BM,Assembly-CSharp",
"positionX" : {
"animatedFloatList" : [
{
"startValue" : 0,
"endValue" : -4,
"startTime" : 0,
"endTime" : 0.5,
"animationCurveType" : 2
},{
"startValue" : -4,
"endValue" : 0,
"startTime" : 0.5,
"endTime" : 1,
"animationCurveType" : 1
},{
"startValue" : 0,
"endValue" : 4,
"startTime" : 1,
"endTime" : 1.5,
"animationCurveType" : 2
},{
"startValue" : 4,
"endValue" : 0,
"startTime" : 1.5,
"endTime" : 2,
"animationCurveType" : 1
}
]
},
"positionY" : {
"animatedFloatList" : [
{
"startValue" : 0,
"endValue" : -10,
"startTime" : 0,
"endTime" : 2,
"animationCurveType" : 0
}
]
},
"positionZ" : {
"animatedFloatList" : [
]
},
"elementName" : "Displacement-1",
"tags" : [
],
"elementGuid" : {
"value" : "08f7383b-ebca-49c7-b543-94811d625215"
},
"attachedElementGuid" : {
"value" : "ac931bb4-963e-473f-9ec6-4eb2121aed7d"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "08f7383b-ebca-49c7-b543-94811d625215"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.Track_BM,Assembly-CSharp",
"elementName" : "Track",
@@ -404,26 +298,6 @@
"attachedElementGuid" : {
"value" : "04f7a1d6-76f2-4b15-9632-494515114d5d"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalEulerAngles" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"originalScale" : {
"x" : 1,
"y" : 1,
"z" : 1
},
"attachedElementGuid" : {
"value" : "c5134d2c-c175-458c-99ff-07523169ec21"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
@@ -626,6 +500,36 @@
"attachedElementGuid" : {
"value" : "04f7a1d6-76f2-4b15-9632-494515114d5d"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteJudgeSubmodule_BM,Assembly-CSharp",
"judgeUnitList" : [
],
"attachedElementGuid" : {
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
}
},{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNoteVisual_BM,Assembly-CSharp",
"themeBundleName" : "departure_to_multiverse",
"objectName" : "DTM_NoteVisualTap",
"elementName" : "New Note Visual",
"tags" : [
],
"elementGuid" : {
"value" : "cb918977-3e38-4d90-be47-b2170285fd71"
},
"attachedElementGuid" : {
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
"originalPosition" : {
@@ -644,7 +548,7 @@
"z" : 1
},
"attachedElementGuid" : {
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
"value" : "cb918977-3e38-4d90-be47-b2170285fd71"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
@@ -652,15 +556,124 @@
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
"value" : "cb918977-3e38-4d90-be47-b2170285fd71"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.NoteJudgeSubmodule_BM,Assembly-CSharp",
"judgeUnitList" : [
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
"originalBaseColor" : {
"r" : 1,
"g" : 1,
"b" : 1,
"a" : 1
},
"emissionEnabled" : false,
"originalEmissionColor" : {
"r" : 0,
"g" : 0,
"b" : 0,
"a" : 1
},
"originalEmissionIntensity" : 0,
"attachedElementGuid" : {
"value" : "cb918977-3e38-4d90-be47-b2170285fd71"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
"effectCollection" : {"Generate":[
],"GeneralJudge":[
],"Holding":[
],"Perfect":[
{
"__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMNotePerfectBurst_BM,Assembly-CSharp",
"effectTime" : 0
}
],"Good":[
],"Bad":[
],"Miss":[
]
},
"attachedElementGuid" : {
"value" : "cb918977-3e38-4d90-be47-b2170285fd71"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.Displacement_BM,Assembly-CSharp",
"positionX" : {
"animatedFloatList" : [
]
},
"positionY" : {
"animatedFloatList" : [
{
"startValue" : 0,
"endValue" : 10,
"startTime" : 0,
"endTime" : 2,
"animationCurveType" : 0
},{
"startValue" : 10,
"endValue" : 0,
"startTime" : 2,
"endTime" : 4,
"animationCurveType" : 0
}
]
},
"positionZ" : {
"animatedFloatList" : [
]
},
"elementName" : "Displacement-0",
"tags" : [
],
"elementGuid" : {
"value" : "4e670cae-92bf-414d-98fe-5af126b8470c"
},
"attachedElementGuid" : {
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
"value" : "3fdf0e9f-2d69-4f55-8167-a77ade5ac0ac"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
"isOverridingDuration" : false,
"startTime" : -32767,
"endTime" : 32767,
"attachedElementGuid" : {
"value" : "4e670cae-92bf-414d-98fe-5af126b8470c"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.TimeEffectsCollection_BM,Assembly-CSharp",
"time" : 0.3,
"elementName" : "New Time Effects Collection",
"tags" : [
],
"elementGuid" : {
"value" : "c0e55af0-21a6-4d5e-bb5c-b08c28341fab"
},
"attachedElementGuid" : {
"value" : "ac931bb4-963e-473f-9ec6-4eb2121aed7d"
}
},{
"__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp",
"effectCollection" : {"Default":[
{
"__type" : "Ichni.RhythmGame.Beatmap.BloomShake_BM,Assembly-CSharp",
"bloomTime" : 0.2,
"bloomPeak" : 10,
"effectTime" : 0
}
]
},
"attachedElementGuid" : {
"value" : "c0e55af0-21a6-4d5e-bb5c-b08c28341fab"
}
}
]

View File

@@ -41,7 +41,7 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Bad Expand");
var effectTimeField = inspector.GenerateParameterInputField(this, container, "Effect Time", nameof(effectTime));
var effectTimeField = inspector.GenerateInputField(this, container, "Effect Time", nameof(effectTime));
}
}

View File

@@ -41,8 +41,8 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Generate Expand");
var generateTimeField = inspector.GenerateParameterInputField(this, container, "Generate Time", nameof(generateTime));
var effectTimeField = inspector.GenerateParameterInputField(this, container, "Effect Time", nameof(effectTime));
var generateTimeField = inspector.GenerateInputField(this, container, "Generate Time", nameof(generateTime));
var effectTimeField = inspector.GenerateInputField(this, container, "Effect Time", nameof(effectTime));
}
}

View File

@@ -46,7 +46,7 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Good Burst");
var effectTimeField = inspector.GenerateParameterInputField(this, container, "Effect Time", nameof(effectTime));
var effectTimeField = inspector.GenerateInputField(this, container, "Effect Time", nameof(effectTime));
}
}

View File

@@ -42,7 +42,7 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Miss Pale");
var effectTimeField = inspector.GenerateParameterInputField(this, container, "Effect Time", nameof(effectTime));
var effectTimeField = inspector.GenerateInputField(this, container, "Effect Time", nameof(effectTime));
}
}

View File

@@ -46,7 +46,7 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Perfect Burst");
var effectTimeField = inspector.GenerateParameterInputField(this, container, "Effect Time", nameof(effectTime));
var effectTimeField = inspector.GenerateInputField(this, container, "Effect Time", nameof(effectTime));
}
}