自动更新型DUI扩展,将Time变量挪出TImeline UI,Effect效果容器修缮,移除Note的transform模块,Scene Camera优化
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -18,11 +18,6 @@ namespace Ichni.Editor
|
|||||||
/// 参数名,通过反射获取饿修改对应变量的值
|
/// 参数名,通过反射获取饿修改对应变量的值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string parameterName;
|
public string parameterName;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否始终更新,如果子类可能用到此变量,则在子类中写Update即可(注意,如果最后仅有Text用到此变量,直接移动它到Text即可)
|
|
||||||
/// </summary>
|
|
||||||
public bool isAlwaysUpdated;
|
|
||||||
|
|
||||||
public virtual void Initialize(IBaseElement baseElement, string title, string parameterName)
|
public virtual void Initialize(IBaseElement baseElement, string title, string parameterName)
|
||||||
{
|
{
|
||||||
@@ -54,4 +49,21 @@ namespace Ichni.Editor
|
|||||||
|
|
||||||
//public abstract void ApplyParameters();
|
//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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -8,18 +8,51 @@ using UnityEngine.Events;
|
|||||||
|
|
||||||
namespace Ichni.Editor
|
namespace Ichni.Editor
|
||||||
{
|
{
|
||||||
public class DynamicUIParameterInputField : DynamicUIElement
|
public class DynamicUIInputField : DynamicUIElement, IHaveAutoUpdate
|
||||||
{
|
{
|
||||||
public TMP_InputField inputField;
|
public TMP_InputField inputField;
|
||||||
|
public bool isAutoUpdate { get; set; }
|
||||||
|
public bool isReceiving { get; set; }
|
||||||
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
|
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
|
||||||
{
|
{
|
||||||
base.Initialize(baseElement, title, 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)
|
private void ApplyParameters(string text)
|
||||||
{
|
{
|
||||||
Type type = connectedBaseElement.GetType().GetField(parameterName).FieldType;
|
Type type = connectedBaseElement.GetType().GetField(parameterName).FieldType;
|
||||||
@@ -7,22 +7,32 @@ using UnityEngine;
|
|||||||
|
|
||||||
namespace Ichni.Editor
|
namespace Ichni.Editor
|
||||||
{
|
{
|
||||||
public class DynamicUIParameterText : DynamicUIElement
|
public class DynamicUIParameterText : DynamicUIElement, IHaveAutoUpdate
|
||||||
{
|
{
|
||||||
public TMP_Text text;
|
public TMP_Text text;
|
||||||
|
public bool isAutoUpdate { get; set; }
|
||||||
|
public bool isReceiving { get; set; }
|
||||||
|
|
||||||
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
|
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
|
||||||
{
|
{
|
||||||
base.Initialize(baseElement, title, parameterName);
|
base.Initialize(baseElement, title, parameterName);
|
||||||
text.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString();
|
ApplyContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
if (isAlwaysUpdated)
|
(this as IHaveAutoUpdate).UpdateContent();
|
||||||
{
|
}
|
||||||
text.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString();
|
|
||||||
}
|
public void SetAutoUpdate(bool enable)
|
||||||
|
{
|
||||||
|
isAutoUpdate = enable;
|
||||||
|
isReceiving = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ApplyContent()
|
||||||
|
{
|
||||||
|
text.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Ichni.RhythmGame;
|
using Ichni.RhythmGame;
|
||||||
@@ -10,27 +11,66 @@ using UnityEngine.UIElements.Experimental;
|
|||||||
|
|
||||||
namespace Ichni.Editor
|
namespace Ichni.Editor
|
||||||
{
|
{
|
||||||
public class DynamicUIVector3InputField : DynamicUIElement
|
public class DynamicUIVector3InputField : DynamicUIElement, IHaveAutoUpdate
|
||||||
{
|
{
|
||||||
public TMP_InputField inputFieldX;
|
public TMP_InputField inputFieldX;
|
||||||
public TMP_InputField inputFieldY;
|
public TMP_InputField inputFieldY;
|
||||||
public TMP_InputField inputFieldZ;
|
public TMP_InputField inputFieldZ;
|
||||||
|
public bool isAutoUpdate { get; set; }
|
||||||
|
public bool isReceiving { get; set; }
|
||||||
|
|
||||||
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
|
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
|
||||||
{
|
{
|
||||||
base.Initialize(baseElement, title, 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); //获取对应变量的值
|
Vector3 pos = (Vector3)connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement); //获取对应变量的值
|
||||||
inputFieldX.text = pos.x.ToString();
|
inputFieldX.text = pos.x.ToString();
|
||||||
inputFieldY.text = pos.y.ToString();
|
inputFieldY.text = pos.y.ToString();
|
||||||
inputFieldZ.text = pos.z.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()
|
private void ApplyParameters()
|
||||||
{
|
{
|
||||||
Vector3 newValue = new Vector3(float.Parse(inputFieldX.text), float.Parse(inputFieldY.text), float.Parse(inputFieldZ.text));
|
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());
|
inputFieldY.onEndEdit.AddListener(_ => action());
|
||||||
inputFieldZ.onEndEdit.AddListener(_ => action());
|
inputFieldZ.onEndEdit.AddListener(_ => action());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void DeviverSet(int i){
|
||||||
|
//我什么也不做
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -66,38 +66,49 @@ namespace Ichni.Editor
|
|||||||
return toggle;
|
return toggle;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicUIGetterInputField GenerateGetterInputField(DynamicUIContainer container,
|
public DynamicUIInputField GenerateInputField(DynamicUIContainer container,
|
||||||
string title, string defaultText)
|
string title, string defaultText = "") //不与参数绑定的InputField
|
||||||
{
|
{
|
||||||
DynamicUIGetterInputField getterInputField = Object
|
DynamicUIInputField inputField = Object
|
||||||
.Instantiate(EditorManager.instance.basePrefabs.getterInputField, container.rect)
|
.Instantiate(EditorManager.instance.basePrefabs.parameterInputField, container.rect)
|
||||||
.GetComponent<DynamicUIGetterInputField>();
|
.GetComponent<DynamicUIInputField>();
|
||||||
getterInputField.Initialize(null, title, string.Empty);
|
inputField.Initialize(null, title, string.Empty);
|
||||||
getterInputField.SetDefaultText(defaultText);
|
inputField.SetDefaultValue(defaultText);
|
||||||
container.dynamicUIElements.Add(getterInputField);
|
container.dynamicUIElements.Add(inputField);
|
||||||
return getterInputField;
|
return inputField;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DynamicUIParameterInputField GenerateParameterInputField(IBaseElement baseElement,
|
public DynamicUIInputField GenerateInputField(IBaseElement baseElement,
|
||||||
DynamicUIContainer container,
|
DynamicUIContainer container, string title, string parameterName, bool isAutoUpdate = false) //与参数绑定的InputField
|
||||||
string title, string parameterName)
|
|
||||||
{
|
{
|
||||||
DynamicUIParameterInputField parameterInputField = Object
|
DynamicUIInputField inputField = Object
|
||||||
.Instantiate(EditorManager.instance.basePrefabs.parameterInputField, container.rect)
|
.Instantiate(EditorManager.instance.basePrefabs.parameterInputField, container.rect)
|
||||||
.GetComponent<DynamicUIParameterInputField>();
|
.GetComponent<DynamicUIInputField>();
|
||||||
parameterInputField.Initialize(baseElement, title, parameterName);
|
inputField.Initialize(baseElement, title, parameterName);
|
||||||
container.dynamicUIElements.Add(parameterInputField);
|
container.dynamicUIElements.Add(inputField);
|
||||||
return parameterInputField;
|
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,
|
public DynamicUIVector3InputField GenerateVector3InputField(IBaseElement baseElement,
|
||||||
DynamicUIContainer container,
|
DynamicUIContainer container, string title, string parameterName, bool isAutoUpdate = false)
|
||||||
string title, string parameterName)
|
|
||||||
{
|
{
|
||||||
DynamicUIVector3InputField vector3InputField =
|
DynamicUIVector3InputField vector3InputField =
|
||||||
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, container.rect)
|
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, container.rect)
|
||||||
.GetComponent<DynamicUIVector3InputField>();
|
.GetComponent<DynamicUIVector3InputField>();
|
||||||
vector3InputField.Initialize(baseElement, title, parameterName);
|
vector3InputField.Initialize(baseElement, title, parameterName);
|
||||||
|
vector3InputField.SetAutoUpdate(isAutoUpdate);
|
||||||
container.dynamicUIElements.Add(vector3InputField);
|
container.dynamicUIElements.Add(vector3InputField);
|
||||||
return vector3InputField;
|
return vector3InputField;
|
||||||
}
|
}
|
||||||
@@ -148,14 +159,13 @@ namespace Ichni.Editor
|
|||||||
}
|
}
|
||||||
|
|
||||||
public DynamicUIParameterText GenerateParameterText(IBaseElement baseElement, DynamicUIContainer container,
|
public DynamicUIParameterText GenerateParameterText(IBaseElement baseElement, DynamicUIContainer container,
|
||||||
string title,
|
string title, string parameterName, bool isAutoUpdate = false)
|
||||||
string parameterName, bool isAlwaysUpdate = false)
|
|
||||||
{
|
{
|
||||||
DynamicUIParameterText parameterText = Object
|
DynamicUIParameterText parameterText = Object
|
||||||
.Instantiate(EditorManager.instance.basePrefabs.parameterText, container.rect)
|
.Instantiate(EditorManager.instance.basePrefabs.parameterText, container.rect)
|
||||||
.GetComponent<DynamicUIParameterText>();
|
.GetComponent<DynamicUIParameterText>();
|
||||||
parameterText.Initialize(baseElement, title, parameterName);
|
parameterText.Initialize(baseElement, title, parameterName);
|
||||||
parameterText.isAlwaysUpdated = isAlwaysUpdate;
|
parameterText.SetAutoUpdate(isAutoUpdate);
|
||||||
container.dynamicUIElements.Add(parameterText);
|
container.dynamicUIElements.Add(parameterText);
|
||||||
return parameterText;
|
return parameterText;
|
||||||
}
|
}
|
||||||
|
|||||||
23
Assets/Scripts/DynamicUI/Timeline/MusicPlayModule.cs
Normal file
23
Assets/Scripts/DynamicUI/Timeline/MusicPlayModule.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -44,9 +44,8 @@ namespace Ichni.Editor
|
|||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
if (timeline.musicPlayer.isPlaying)
|
if (EditorManager.instance.musicPlayer.isPlaying)
|
||||||
{
|
{
|
||||||
songInformation.songTime = timeline.musicPlayer.audioSource.time;
|
|
||||||
SetRange(songInformation.songTime);
|
SetRange(songInformation.songTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ using TMPro;
|
|||||||
using Unity.VisualScripting;
|
using Unity.VisualScripting;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.InputSystem;
|
using UnityEngine.InputSystem;
|
||||||
|
using UnityEngine.Serialization;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
|
|
||||||
namespace Ichni.Editor
|
namespace Ichni.Editor
|
||||||
@@ -23,7 +24,7 @@ namespace Ichni.Editor
|
|||||||
|
|
||||||
public GameObject timelineTabRect;
|
public GameObject timelineTabRect;
|
||||||
public TimePointerModule timePointerModule;
|
public TimePointerModule timePointerModule;
|
||||||
public MusicPlayer musicPlayer;
|
public MusicPlayModule musicPlayModule;
|
||||||
|
|
||||||
|
|
||||||
public TMP_InputField TimeField;
|
public TMP_InputField TimeField;
|
||||||
@@ -32,7 +33,7 @@ namespace Ichni.Editor
|
|||||||
public RectTransform GetinputArea;
|
public RectTransform GetinputArea;
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
if (musicPlayer.isPlaying) UpdateTime();
|
if (EditorManager.instance.musicPlayer.isPlaying) UpdateTime();
|
||||||
|
|
||||||
if (RectTransformUtility.RectangleContainsScreenPoint(GetinputArea, Mouse.current.position.ReadValue()))
|
if (RectTransformUtility.RectangleContainsScreenPoint(GetinputArea, Mouse.current.position.ReadValue()))
|
||||||
{
|
{
|
||||||
@@ -85,8 +86,8 @@ namespace Ichni.Editor
|
|||||||
|
|
||||||
public void SetTime(string time)
|
public void SetTime(string time)
|
||||||
{
|
{
|
||||||
musicPlayer.PauseMusic();
|
EditorManager.instance.musicPlayer.PauseMusic();
|
||||||
musicPlayer.audioSource.time = float.Parse(time);
|
EditorManager.instance.musicPlayer.audioSource.time = float.Parse(time);
|
||||||
EditorManager.instance.songInformation.songTime = float.Parse(time);
|
EditorManager.instance.songInformation.songTime = float.Parse(time);
|
||||||
|
|
||||||
timePointerModule.UpdatePointers();
|
timePointerModule.UpdatePointers();
|
||||||
@@ -95,15 +96,13 @@ namespace Ichni.Editor
|
|||||||
}
|
}
|
||||||
public void SetBeat(string beat)
|
public void SetBeat(string beat)
|
||||||
{
|
{
|
||||||
musicPlayer.PauseMusic();
|
EditorManager.instance.musicPlayer.PauseMusic();
|
||||||
musicPlayer.audioSource.time = float.Parse(beat) * timePerBeat;
|
EditorManager.instance.musicPlayer.audioSource.time = float.Parse(beat) * timePerBeat;
|
||||||
EditorManager.instance.songInformation.songTime = float.Parse(beat) * timePerBeat;
|
EditorManager.instance.songInformation.songTime = float.Parse(beat) * timePerBeat;
|
||||||
|
|
||||||
timePointerModule.UpdatePointers();
|
timePointerModule.UpdatePointers();
|
||||||
timePointerModule.SetRange(songTime);
|
timePointerModule.SetRange(songTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -91,8 +91,8 @@ namespace Ichni.RhythmGame
|
|||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Time Duration");
|
var container = inspector.GenerateContainer("Time Duration");
|
||||||
var overrideToggle = inspector.GenerateToggle(this, container, "Override Duration", nameof(isOverridingDuration));
|
var overrideToggle = inspector.GenerateToggle(this, container, "Override Duration", nameof(isOverridingDuration));
|
||||||
var startTimeInputField = inspector.GenerateParameterInputField(this, container, "Start Time", nameof(startTime));
|
var startTimeInputField = inspector.GenerateInputField(this, container, "Start Time", nameof(startTime));
|
||||||
var endTimeInputField = inspector.GenerateParameterInputField(this, container, "End Time", nameof(endTime));
|
var endTimeInputField = inspector.GenerateInputField(this, container, "End Time", nameof(endTime));
|
||||||
|
|
||||||
void SetInputFieldInteractable(bool interactable)
|
void SetInputFieldInteractable(bool interactable)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -56,22 +56,27 @@ namespace Ichni.Editor
|
|||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Background Setter");
|
var container = inspector.GenerateContainer("Background Setter");
|
||||||
var useSkyboxToggle = inspector.GenerateToggle(this, container, "Use Skybox", nameof(useSkybox));
|
var useSkyboxToggle = inspector.GenerateToggle(this, container, "Use Skybox", nameof(useSkybox));
|
||||||
var skyboxThemeBundleField = inspector.GenerateParameterInputField(this, container, "Skybox Theme Bundle", nameof(skyboxThemeBundleName));
|
var skyboxThemeBundleField = inspector.GenerateInputField(this, container, "Skybox Theme Bundle", nameof(skyboxThemeBundleName));
|
||||||
var skyboxMaterialNameField = inspector.GenerateParameterInputField(this, container, "Skybox Material", nameof(skyboxMaterialName));
|
var skyboxMaterialNameField = inspector.GenerateInputField(this, container, "Skybox Material", nameof(skyboxMaterialName));
|
||||||
var backgroundSpriteField = inspector.GenerateParameterInputField(this, container, "Background Sprite", nameof(backgroundSpriteName));
|
var backgroundSpriteField = inspector.GenerateInputField(this, container, "Background Sprite", nameof(backgroundSpriteName));
|
||||||
var applyButton = inspector.GenerateButton(this, container, "Apply", Refresh);
|
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;
|
skyboxThemeBundleField.inputField.interactable = value;
|
||||||
skyboxMaterialNameField.inputField.interactable = value;
|
skyboxMaterialNameField.inputField.interactable = value;
|
||||||
backgroundSpriteField.inputField.interactable = !value;
|
backgroundSpriteField.inputField.interactable = !value;
|
||||||
});
|
}
|
||||||
|
|
||||||
|
SetFields(useSkybox);
|
||||||
|
|
||||||
|
useSkyboxToggle.AddListenerFunction(value => EditorManager.instance.backgroundController.EnableBackground(!value));
|
||||||
|
useSkyboxToggle.AddListenerFunction(SetFields);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Refresh()
|
public override void Refresh()
|
||||||
{
|
{
|
||||||
EditorManager.instance.backgroundController.EnableBackground(useSkybox);
|
EditorManager.instance.backgroundController.EnableBackground(!useSkybox);
|
||||||
if (useSkybox)
|
if (useSkybox)
|
||||||
{
|
{
|
||||||
SetSkybox(skyboxThemeBundleName, skyboxMaterialName);
|
SetSkybox(skyboxThemeBundleName, skyboxMaterialName);
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ namespace Ichni.RhythmGame
|
|||||||
{
|
{
|
||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Element Info");
|
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 guidText = inspector.GenerateParameterText(this, container, "Element GUID", nameof(elementGuid));
|
||||||
var tagsListButton = inspector.GenerateButton(this, container, "Tags List", () =>
|
var tagsListButton = inspector.GenerateButton(this, container, "Tags List", () =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ namespace Ichni.RhythmGame
|
|||||||
{
|
{
|
||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Bloom Shake");
|
var container = inspector.GenerateContainer("Bloom Shake");
|
||||||
var effectTimeField = inspector.GenerateParameterInputField(this, container, "Bloom Time", nameof(bloomTime));
|
var effectTimeField = inspector.GenerateInputField(this, container, "Bloom Time", nameof(bloomTime));
|
||||||
var bloomPeakField = inspector.GenerateParameterInputField(this, container, "Bloom Peak", nameof(bloomPeak));
|
var bloomPeakField = inspector.GenerateInputField(this, container, "Bloom Peak", nameof(bloomPeak));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace Ichni.RhythmGame
|
|||||||
public partial class TimeEffectsCollection : GameElement, IHaveEffectSubmodule
|
public partial class TimeEffectsCollection : GameElement, IHaveEffectSubmodule
|
||||||
{
|
{
|
||||||
public EffectSubmodule effectSubmodule { get; set; }
|
public EffectSubmodule effectSubmodule { get; set; }
|
||||||
public float time;
|
public float time; //触发效果的时间
|
||||||
|
|
||||||
public static TimeEffectsCollection GenerateElement(string name, Guid guid, List<string> tags,
|
public static TimeEffectsCollection GenerateElement(string name, Guid guid, List<string> tags,
|
||||||
bool isFirstGenerated, GameElement parentElement, float time)
|
bool isFirstGenerated, GameElement parentElement, float time)
|
||||||
@@ -26,6 +26,7 @@ namespace Ichni.RhythmGame
|
|||||||
protected override void SetDefaultSubmodules()
|
protected override void SetDefaultSubmodules()
|
||||||
{
|
{
|
||||||
effectSubmodule = new EffectSubmodule(this);
|
effectSubmodule = new EffectSubmodule(this);
|
||||||
|
submoduleList.Add(effectSubmodule);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
@@ -38,18 +39,30 @@ namespace Ichni.RhythmGame
|
|||||||
{
|
{
|
||||||
public override void SaveBM()
|
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()
|
public override void SetUpInspector()
|
||||||
{
|
{
|
||||||
|
base.SetUpInspector();
|
||||||
|
|
||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
|
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Time Effects Collection");
|
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", () =>
|
var addEffectButton = inspector.GenerateButton(this, container, "Add Effect", () =>
|
||||||
{
|
{
|
||||||
IHaveEffectSubmodule.EffectCollection.TryGetValue("BloomShake", out var effect);
|
if (IHaveEffectSubmodule.EffectCollection.TryGetValue(effectNameInputField.GetValue<string>(), out var effect))
|
||||||
effectSubmodule.effectCollection["Default"].Add(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"])
|
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;
|
time = timeEffectsCollection.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public override void ExecuteBM()
|
public override void ExecuteBM()
|
||||||
{
|
{
|
||||||
matchedElement = TimeEffectsCollection.GenerateElement("Time Effects Collection", elementGuid,
|
matchedElement = TimeEffectsCollection.GenerateElement(elementName, elementGuid,
|
||||||
tags, false, GetElement(attachedElementGuid), time);
|
tags, false, GetElement(attachedElementGuid), time);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override GameElement DuplicateBM(GameElement attached)
|
public override GameElement DuplicateBM(GameElement attached)
|
||||||
{
|
{
|
||||||
return TimeEffectsCollection.GenerateElement("Time Effects Collection", elementGuid,
|
return TimeEffectsCollection.GenerateElement(elementName, elementGuid,
|
||||||
tags, false, attached, time);
|
tags, false, attached, time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ namespace Ichni.RhythmGame
|
|||||||
flick.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
|
flick.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
|
||||||
flick.exactJudgeTime = exactJudgeTime;
|
flick.exactJudgeTime = exactJudgeTime;
|
||||||
flick.availableFlickDirections = directions;
|
flick.availableFlickDirections = directions;
|
||||||
flick.transformSubmodule = new TransformSubmodule(flick);
|
|
||||||
flick.timeDurationSubmodule = new TimeDurationSubmodule(flick);
|
|
||||||
|
|
||||||
if (parentElement.TryGetComponent(out Track track))
|
if (parentElement.TryGetComponent(out Track track))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ using UnityEngine;
|
|||||||
|
|
||||||
namespace Ichni.RhythmGame
|
namespace Ichni.RhythmGame
|
||||||
{
|
{
|
||||||
public abstract partial class NoteBase : GameElement, IHaveTransformSubmodule, IHaveTimeDurationSubmodule
|
public abstract partial class NoteBase : GameElement, IHaveTimeDurationSubmodule
|
||||||
{
|
{
|
||||||
[Title("Basic Info")]
|
[Title("Basic Info")]
|
||||||
public float exactJudgeTime;
|
public float exactJudgeTime;
|
||||||
@@ -22,7 +22,6 @@ namespace Ichni.RhythmGame
|
|||||||
public NoteVisualBase noteVisual;
|
public NoteVisualBase noteVisual;
|
||||||
|
|
||||||
[Title("Submodules")]
|
[Title("Submodules")]
|
||||||
public TransformSubmodule transformSubmodule { get; set; }
|
|
||||||
public TimeDurationSubmodule timeDurationSubmodule { get; set; }
|
public TimeDurationSubmodule timeDurationSubmodule { get; set; }
|
||||||
public NoteJudgeSubmodule noteJudgeSubmodule { get; set; }
|
public NoteJudgeSubmodule noteJudgeSubmodule { get; set; }
|
||||||
|
|
||||||
@@ -57,11 +56,9 @@ namespace Ichni.RhythmGame
|
|||||||
|
|
||||||
protected override void SetDefaultSubmodules()
|
protected override void SetDefaultSubmodules()
|
||||||
{
|
{
|
||||||
transformSubmodule = new TransformSubmodule(this);
|
|
||||||
timeDurationSubmodule = new TimeDurationSubmodule(this);
|
timeDurationSubmodule = new TimeDurationSubmodule(this);
|
||||||
noteJudgeSubmodule = new NoteJudgeSubmodule(this);
|
noteJudgeSubmodule = new NoteJudgeSubmodule(this);
|
||||||
|
|
||||||
submoduleList.Add(transformSubmodule);
|
|
||||||
submoduleList.Add(timeDurationSubmodule);
|
submoduleList.Add(timeDurationSubmodule);
|
||||||
submoduleList.Add(noteJudgeSubmodule);
|
submoduleList.Add(noteJudgeSubmodule);
|
||||||
}
|
}
|
||||||
@@ -139,14 +136,14 @@ namespace Ichni.RhythmGame
|
|||||||
//我想把时间放在第一层菜单所以
|
//我想把时间放在第一层菜单所以
|
||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Element Info");
|
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 guidText = inspector.GenerateParameterText(this, container, "Element GUID", nameof(elementGuid));
|
||||||
var tagsListButton = inspector.GenerateButton(this, container, "Tags List", () =>
|
var tagsListButton = inspector.GenerateButton(this, container, "Tags List", () =>
|
||||||
{
|
{
|
||||||
inspector.GenerateCompositeParameterWindow(this, "Tags List", nameof(tags)).SetAsStringList();
|
inspector.GenerateCompositeParameterWindow(this, "Tags List", nameof(tags)).SetAsStringList();
|
||||||
});
|
});
|
||||||
var exactJudgeTimeInputField =
|
var exactJudgeTimeInputField =
|
||||||
inspector.GenerateParameterInputField(this, container, "exactJudgeTime", nameof(exactJudgeTime));
|
inspector.GenerateInputField(this, container, "exactJudgeTime", nameof(exactJudgeTime));
|
||||||
exactJudgeTimeInputField.AddListenerFunction(_ => UpdateNoteInTrack());
|
exactJudgeTimeInputField.AddListenerFunction(_ => UpdateNoteInTrack());
|
||||||
|
|
||||||
foreach (var submodule in submoduleList)
|
foreach (var submodule in submoduleList)
|
||||||
|
|||||||
@@ -17,9 +17,7 @@ namespace Ichni.RhythmGame
|
|||||||
Stay stay = Instantiate(EditorManager.instance.basePrefabs.tapNote, parentElement.transform).GetComponent<Stay>();
|
Stay stay = Instantiate(EditorManager.instance.basePrefabs.tapNote, parentElement.transform).GetComponent<Stay>();
|
||||||
stay.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
|
stay.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
|
||||||
stay.exactJudgeTime = exactJudgeTime;
|
stay.exactJudgeTime = exactJudgeTime;
|
||||||
stay.transformSubmodule = new TransformSubmodule(stay);
|
|
||||||
stay.timeDurationSubmodule = new TimeDurationSubmodule(stay);
|
|
||||||
|
|
||||||
if (parentElement.TryGetComponent(out Track track))
|
if (parentElement.TryGetComponent(out Track track))
|
||||||
{
|
{
|
||||||
if (track.trackTimeSubmodule != null)
|
if (track.trackTimeSubmodule != null)
|
||||||
|
|||||||
@@ -19,8 +19,6 @@ namespace Ichni.RhythmGame
|
|||||||
.GetComponent<Tap>();
|
.GetComponent<Tap>();
|
||||||
tap.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
|
tap.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
|
||||||
tap.exactJudgeTime = exactJudgeTime;
|
tap.exactJudgeTime = exactJudgeTime;
|
||||||
tap.transformSubmodule = new TransformSubmodule(tap);
|
|
||||||
tap.timeDurationSubmodule = new TimeDurationSubmodule(tap);
|
|
||||||
|
|
||||||
if (parentElement.TryGetComponent(out Track track))
|
if (parentElement.TryGetComponent(out Track track))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ namespace Ichni.RhythmGame
|
|||||||
|
|
||||||
var generateButton = inspector.GenerateButton(this, container, "Generate", () =>
|
var generateButton = inspector.GenerateButton(this, container, "Generate", () =>
|
||||||
{
|
{
|
||||||
Delete();
|
EditorManager.instance.operationManager.CopyPasteDeleteModule.DeleteElement(this);
|
||||||
inspectorMain.ClearInspector();
|
inspectorMain.ClearInspector();
|
||||||
SubstantialObject.GenerateElement(elementName, elementGuid, tags, true, themeBundleName, objectName, parentElement);
|
SubstantialObject.GenerateElement(elementName, elementGuid, tags, true, themeBundleName, objectName, parentElement);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -198,17 +198,17 @@ namespace Ichni.RhythmGame
|
|||||||
{
|
{
|
||||||
IHaveInspection qcWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Quick Copy");
|
IHaveInspection qcWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Quick Copy");
|
||||||
var qcContainer = qcWindow.GenerateContainer();
|
var qcContainer = qcWindow.GenerateContainer();
|
||||||
var xField = qcWindow.GenerateGetterInputField(qcContainer, "X offset", "0");
|
var xField = qcWindow.GenerateInputField(qcContainer, "X offset", "0");
|
||||||
var yField = qcWindow.GenerateGetterInputField(qcContainer, "Y offset", "0");
|
var yField = qcWindow.GenerateInputField(qcContainer, "Y offset", "0");
|
||||||
var zField = qcWindow.GenerateGetterInputField(qcContainer, "Z offset", "0");
|
var zField = qcWindow.GenerateInputField(qcContainer, "Z offset", "0");
|
||||||
var timeField = qcWindow.GenerateGetterInputField(qcContainer, "Time offset", "0");
|
var timeField = qcWindow.GenerateInputField(qcContainer, "Time offset", "0");
|
||||||
var iterationField = qcWindow.GenerateGetterInputField(qcContainer, "Iteration", "0");
|
var iterationField = qcWindow.GenerateInputField(qcContainer, "Iteration", "0");
|
||||||
var includeAnimationToggle = qcWindow.GenerateToggle(null, qcContainer, "Include Animation", string.Empty);
|
var includeAnimationToggle = qcWindow.GenerateToggle(null, qcContainer, "Include Animation", string.Empty);
|
||||||
qcWindow.GenerateButton(this, qcContainer, "Copy", () =>
|
qcWindow.GenerateButton(this, qcContainer, "Copy", () =>
|
||||||
{
|
{
|
||||||
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>());
|
||||||
float timeOffset = timeField.GetResult<float>();
|
float timeOffset = timeField.GetValue<float>();
|
||||||
int iteration = iterationField.GetResult<int>();
|
int iteration = iterationField.GetValue<int>();
|
||||||
bool includeAnimation = includeAnimationToggle.toggle.isOn;
|
bool includeAnimation = includeAnimationToggle.toggle.isOn;
|
||||||
QuickCopy(positionOffset, timeOffset, includeAnimation, iteration);
|
QuickCopy(positionOffset, timeOffset, includeAnimation, iteration);
|
||||||
});
|
});
|
||||||
@@ -218,12 +218,12 @@ namespace Ichni.RhythmGame
|
|||||||
{
|
{
|
||||||
IHaveInspection wholeMoveWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Move");
|
IHaveInspection wholeMoveWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Move");
|
||||||
var wmContainer = wholeMoveWindow.GenerateContainer();
|
var wmContainer = wholeMoveWindow.GenerateContainer();
|
||||||
var xField = wholeMoveWindow.GenerateGetterInputField(wmContainer, "X offset", "0");
|
var xField = wholeMoveWindow.GenerateInputField(wmContainer, "X offset", "0");
|
||||||
var yField = wholeMoveWindow.GenerateGetterInputField(wmContainer, "Y offset", "0");
|
var yField = wholeMoveWindow.GenerateInputField(wmContainer, "Y offset", "0");
|
||||||
var zField = wholeMoveWindow.GenerateGetterInputField(wmContainer, "Z offset", "0");
|
var zField = wholeMoveWindow.GenerateInputField(wmContainer, "Z offset", "0");
|
||||||
wholeMoveWindow.GenerateButton(this, wmContainer, "Move", () =>
|
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);
|
WholeTrackMove(positionOffset);
|
||||||
});
|
});
|
||||||
}); //整体移动
|
}); //整体移动
|
||||||
@@ -232,39 +232,39 @@ namespace Ichni.RhythmGame
|
|||||||
{
|
{
|
||||||
IHaveInspection wholeSwirlWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Swirl");
|
IHaveInspection wholeSwirlWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Swirl");
|
||||||
var wsContainer = wholeSwirlWindow.GenerateContainer();
|
var wsContainer = wholeSwirlWindow.GenerateContainer();
|
||||||
var angleField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Angle", "0");
|
var angleField = wholeSwirlWindow.GenerateInputField(wsContainer, "Angle", "0");
|
||||||
var centerXField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Center X", "0");
|
var centerXField = wholeSwirlWindow.GenerateInputField(wsContainer, "Center X", "0");
|
||||||
var centerYField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Center Y", "0");
|
var centerYField = wholeSwirlWindow.GenerateInputField(wsContainer, "Center Y", "0");
|
||||||
var centerZField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Center Z", "0");
|
var centerZField = wholeSwirlWindow.GenerateInputField(wsContainer, "Center Z", "0");
|
||||||
var axisDirXField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Axis Direction X", "0");
|
var axisDirXField = wholeSwirlWindow.GenerateInputField(wsContainer, "Axis Direction X", "0");
|
||||||
var axisDirYField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Axis Direction Y", "0");
|
var axisDirYField = wholeSwirlWindow.GenerateInputField(wsContainer, "Axis Direction Y", "0");
|
||||||
var axisDirZField = wholeSwirlWindow.GenerateGetterInputField(wsContainer, "Axis Direction Z", "0");
|
var axisDirZField = wholeSwirlWindow.GenerateInputField(wsContainer, "Axis Direction Z", "0");
|
||||||
wholeSwirlWindow.GenerateButton(this, wsContainer, "Swirl", () =>
|
wholeSwirlWindow.GenerateButton(this, wsContainer, "Swirl", () =>
|
||||||
{
|
{
|
||||||
float angle = angleField.GetResult<float>();
|
float angle = angleField.GetValue<float>();
|
||||||
Vector3 center = new Vector3(centerXField.GetResult<float>(), centerYField.GetResult<float>(), centerZField.GetResult<float>());
|
Vector3 center = new Vector3(centerXField.GetValue<float>(), centerYField.GetValue<float>(), centerZField.GetValue<float>());
|
||||||
Vector3 axisDirection = new Vector3(axisDirXField.GetResult<float>(), axisDirYField.GetResult<float>(), axisDirZField.GetResult<float>());
|
Vector3 axisDirection = new Vector3(axisDirXField.GetValue<float>(), axisDirYField.GetValue<float>(), axisDirZField.GetValue<float>());
|
||||||
WholeTrackSwirl(angle, center, axisDirection);
|
WholeTrackSwirl(angle, center, axisDirection);
|
||||||
});
|
});
|
||||||
}); //整体旋转
|
}); //整体旋转
|
||||||
|
|
||||||
var wholeTrackFlipButton = inspector.GenerateButton(this, toolsContainerTrack, "Whole Track Flip", () =>
|
// var wholeTrackFlipButton = inspector.GenerateButton(this, toolsContainerTrack, "Whole Track Flip", () =>
|
||||||
{
|
// {
|
||||||
IHaveInspection wholeFlipWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Flip");
|
// IHaveInspection wholeFlipWindow = inspectorMain.GenerateSecondaryWindow(this, elementName + "'s Whole Track Flip");
|
||||||
var wfContainer = wholeFlipWindow.GenerateContainer();
|
// var wfContainer = wholeFlipWindow.GenerateContainer();
|
||||||
var axisStartXField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start X", "0");
|
// var axisStartXField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start X", "0");
|
||||||
var axisStartYField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start Y", "0");
|
// var axisStartYField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start Y", "0");
|
||||||
var axisStartZField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start Z", "0");
|
// var axisStartZField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis Start Z", "0");
|
||||||
var axisEndXField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End X", "0");
|
// var axisEndXField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End X", "0");
|
||||||
var axisEndYField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End Y", "0");
|
// var axisEndYField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End Y", "0");
|
||||||
var axisEndZField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End Z", "0");
|
// var axisEndZField = wholeFlipWindow.GenerateGetterInputField(wfContainer, "Axis End Z", "0");
|
||||||
wholeFlipWindow.GenerateButton(this, wfContainer, "Flip", () =>
|
// wholeFlipWindow.GenerateButton(this, wfContainer, "Flip", () =>
|
||||||
{
|
// {
|
||||||
Vector3 axisStart = new Vector3(axisStartXField.GetResult<float>(), axisStartYField.GetResult<float>(), axisStartZField.GetResult<float>());
|
// 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>());
|
// Vector3 axisEnd = new Vector3(axisEndXField.GetResult<float>(), axisEndYField.GetResult<float>(), axisEndZField.GetResult<float>());
|
||||||
WholeTrackFlip(axisStart, axisEnd);
|
// WholeTrackFlip(axisStart, axisEnd);
|
||||||
});
|
// });
|
||||||
}); //整体翻转
|
// }); //整体翻转
|
||||||
|
|
||||||
var toolsContainerPathNode = inspector.GenerateContainer("Path Node Tools"); //路径点快捷工具
|
var toolsContainerPathNode = inspector.GenerateContainer("Path Node Tools"); //路径点快捷工具
|
||||||
var setAllPathNodeSphereButton = inspector.GenerateButton(this, toolsContainerPathNode,
|
var setAllPathNodeSphereButton = inspector.GenerateButton(this, toolsContainerPathNode,
|
||||||
|
|||||||
@@ -76,10 +76,10 @@ namespace Ichni.RhythmGame
|
|||||||
|
|
||||||
var container = inspector.GenerateContainer("Track Time Movable");
|
var container = inspector.GenerateContainer("Track Time Movable");
|
||||||
var startTimeInputField =
|
var startTimeInputField =
|
||||||
inspector.GenerateParameterInputField(this, container, "Start Time", nameof(trackStartTime));
|
inspector.GenerateInputField(this, container, "Start Time", nameof(trackStartTime));
|
||||||
var endTimeInputField = inspector.GenerateParameterInputField(this, container, "End Time", nameof(trackEndTime));
|
var endTimeInputField = inspector.GenerateInputField(this, container, "End Time", nameof(trackEndTime));
|
||||||
var visibleTimeInputField =
|
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",
|
var animationCurveDropdown = inspector.GenerateDropdown(this, container, "Animation Curve",
|
||||||
typeof(AnimationCurveType), nameof(animationCurveType));
|
typeof(AnimationCurveType), nameof(animationCurveType));
|
||||||
var deleteButton = inspector.GenerateButton(this, container, "Delete",
|
var deleteButton = inspector.GenerateButton(this, container, "Delete",
|
||||||
@@ -162,7 +162,7 @@ namespace Ichni.RhythmGame
|
|||||||
|
|
||||||
var container = inspector.GenerateContainer("Track Time Static");
|
var container = inspector.GenerateContainer("Track Time Static");
|
||||||
var totalTimeInputField =
|
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",
|
var animationCurveDropdown = inspector.GenerateDropdown(this, container, "Animation Curve",
|
||||||
typeof(AnimationCurveType), nameof(animationCurveType));
|
typeof(AnimationCurveType), nameof(animationCurveType));
|
||||||
var deleteButton = inspector.GenerateButton(this, container, "Delete",
|
var deleteButton = inspector.GenerateButton(this, container, "Delete",
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace Ichni.Editor
|
|||||||
var container = inspector.GenerateContainer("Camera Manager");
|
var container = inspector.GenerateContainer("Camera Manager");
|
||||||
var cameraTypeText = inspector.GenerateHintText(this, container, ShowCameraType);
|
var cameraTypeText = inspector.GenerateHintText(this, container, ShowCameraType);
|
||||||
var switchCameraButton = inspector.GenerateButton(this, container, "Switch Camera", SwitchCamera);
|
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();
|
sceneCamera.SetUpInspector();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ namespace Ichni
|
|||||||
public static EditorManager instance;
|
public static EditorManager instance;
|
||||||
|
|
||||||
public ProjectManager projectManager;
|
public ProjectManager projectManager;
|
||||||
|
public MusicPlayer musicPlayer;
|
||||||
public EditorUIManager uiManager;
|
public EditorUIManager uiManager;
|
||||||
public EditorSettings editorSettings;
|
public EditorSettings editorSettings;
|
||||||
public OperationManager operationManager;
|
public OperationManager operationManager;
|
||||||
@@ -53,7 +54,7 @@ namespace Ichni
|
|||||||
uiManager.hierarchy.GenerateTab(this, null);
|
uiManager.hierarchy.GenerateTab(this, null);
|
||||||
|
|
||||||
projectManager.loadManager.Load("TestProject");
|
projectManager.loadManager.Load("TestProject");
|
||||||
uiManager.timeline.musicPlayer.audioSource.clip = songInformation.song;
|
musicPlayer.audioSource.clip = songInformation.song;
|
||||||
|
|
||||||
beatmapContainer.gameElementList.ForEach(gameElement =>
|
beatmapContainer.gameElementList.ForEach(gameElement =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,8 +16,10 @@ namespace Ichni.Editor
|
|||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
if (EditorManager.instance.cameraManager.isSceneCameraActive ||
|
bool isPointerOverUI = IsPointerOverUI(out GameObject hoveredUI);
|
||||||
!Keyboard.current.leftCtrlKey.isPressed) // 场景相机的移动和旋转
|
|
||||||
|
if (EditorManager.instance.cameraManager.isSceneCameraActive &&
|
||||||
|
!Keyboard.current.leftCtrlKey.isPressed && !isPointerOverUI) // 场景相机的移动和旋转
|
||||||
{
|
{
|
||||||
float cameraMoveSpeed = EditorManager.instance.cameraManager.sceneCameraMoveSpeed * Time.deltaTime;
|
float cameraMoveSpeed = EditorManager.instance.cameraManager.sceneCameraMoveSpeed * Time.deltaTime;
|
||||||
Transform sceneCameraTransform = EditorManager.instance.cameraManager.sceneCamera.transform;
|
Transform sceneCameraTransform = EditorManager.instance.cameraManager.sceneCamera.transform;
|
||||||
@@ -46,8 +48,6 @@ namespace Ichni.Editor
|
|||||||
sceneCameraTransform.position -= sceneCameraTransform.up * cameraMoveSpeed;
|
sceneCameraTransform.position -= sceneCameraTransform.up * cameraMoveSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isPointerOverUI = IsPointerOverUI(out GameObject hoveredUI);
|
|
||||||
|
|
||||||
if (Mouse.current.rightButton.isPressed && !isPointerOverUI)
|
if (Mouse.current.rightButton.isPressed && !isPointerOverUI)
|
||||||
{
|
{
|
||||||
float cameraRotateSpeed = EditorManager.instance.cameraManager.sceneCameraRotateSpeed * Time.deltaTime;
|
float cameraRotateSpeed = EditorManager.instance.cameraManager.sceneCameraRotateSpeed * Time.deltaTime;
|
||||||
@@ -61,16 +61,15 @@ namespace Ichni.Editor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eventSystem.currentSelectedGameObject == null &&
|
if (!isPointerOverUI && Keyboard.current.enterKey.wasPressedThisFrame) // 播放或暂停音乐
|
||||||
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
|
else
|
||||||
{
|
{
|
||||||
EditorManager.instance.uiManager.timeline.musicPlayer.PauseMusic();
|
EditorManager.instance.musicPlayer.PauseMusic();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,7 +97,7 @@ namespace Ichni.Editor
|
|||||||
}
|
}
|
||||||
else if (Keyboard.current.dKey.wasPressedThisFrame)
|
else if (Keyboard.current.dKey.wasPressedThisFrame)
|
||||||
{
|
{
|
||||||
EditorManager.instance.operationManager.currentSelectedElement.Delete();
|
EditorManager.instance.operationManager.CopyPasteDeleteModule.DeleteElement(EditorManager.instance.operationManager.currentSelectedElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 开关移动设备分辨率提示
|
// 开关移动设备分辨率提示
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ using System.Collections;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Ichni.RhythmGame;
|
using Ichni.RhythmGame;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
|
||||||
|
|
||||||
namespace Ichni.Editor
|
namespace Ichni.Editor
|
||||||
{
|
{
|
||||||
@@ -12,16 +11,12 @@ namespace Ichni.Editor
|
|||||||
public bool isPlaying;
|
public bool isPlaying;
|
||||||
public AudioSource audioSource;
|
public AudioSource audioSource;
|
||||||
|
|
||||||
public Button playButton;
|
private void Update()
|
||||||
public Button pauseButton;
|
|
||||||
public Button stopButton;
|
|
||||||
|
|
||||||
private void Awake()
|
|
||||||
{
|
{
|
||||||
audioSource = GetComponent<AudioSource>();
|
if (isPlaying)
|
||||||
playButton.onClick.AddListener(PlayMusic);
|
{
|
||||||
pauseButton.onClick.AddListener(PauseMusic);
|
EditorManager.instance.songInformation.songTime = EditorManager.instance.musicPlayer.audioSource.time;
|
||||||
stopButton.onClick.AddListener(StopMusic);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PlayMusic()
|
public void PlayMusic()
|
||||||
@@ -29,8 +24,8 @@ namespace Ichni.Editor
|
|||||||
isPlaying = !isPlaying;
|
isPlaying = !isPlaying;
|
||||||
Trail.SetAllTrails(true, false);
|
Trail.SetAllTrails(true, false);
|
||||||
EditorManager.instance.songInformation.songTime = audioSource.time;
|
EditorManager.instance.songInformation.songTime = audioSource.time;
|
||||||
if( isPlaying)audioSource.Play();
|
if(isPlaying)audioSource.Play();
|
||||||
else audioSource.Pause();
|
else audioSource.Pause();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PauseMusic()
|
public void PauseMusic()
|
||||||
11
Assets/Scripts/Manager/MusicPlayer.cs.meta
Normal file
11
Assets/Scripts/Manager/MusicPlayer.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6c12bb7674cd5416f8d846e62018a96d
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -17,38 +17,36 @@ namespace Ichni.Editor
|
|||||||
|
|
||||||
public BaseElement_BM matchedBM { get; set; }
|
public BaseElement_BM matchedBM { get; set; }
|
||||||
|
|
||||||
|
[HideInInspector]
|
||||||
|
public Vector3 cameraPosition; //注意,这里的Position和EulerAngles,是transform的中介变量,仅能用于Inspector显示!
|
||||||
|
[HideInInspector]
|
||||||
|
public Vector3 cameraEulerAngles;
|
||||||
|
|
||||||
public void SetUpInspector()
|
public void SetUpInspector()
|
||||||
{
|
{
|
||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Scene Camera");
|
var container = inspector.GenerateContainer("Scene Camera");
|
||||||
var viewTypeDropdown = inspector.GenerateDropdown(this, container, "View Type", typeof(GameCamera.CameraViewType), nameof(viewType));
|
var viewTypeDropdown = inspector.GenerateDropdown(this, container, "View Type", typeof(GameCamera.CameraViewType), nameof(viewType));
|
||||||
var perspectiveAngleField = inspector.GenerateParameterInputField(this, container, "Perspective Angle", nameof(perspectiveAngle));
|
var perspectiveAngleField = inspector.GenerateInputField(this, container, "Perspective Angle", nameof(perspectiveAngle));
|
||||||
var orthographicSizeField = inspector.GenerateParameterInputField(this, container, "Orthographic Size", nameof(orthographicSize));
|
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(_ =>
|
var positionInputFields = inspector.GenerateVector3InputField(this, container, "Position", nameof(cameraPosition), true);
|
||||||
{
|
positionInputFields.AddListenerFunction(() => camera.transform.position = cameraPosition);
|
||||||
camera.orthographic = viewType == GameCamera.CameraViewType.Orthographic;
|
|
||||||
});
|
var eulerAnglesInputFields = inspector.GenerateVector3InputField(this, container, "Euler Angles", nameof(cameraEulerAngles), true);
|
||||||
|
eulerAnglesInputFields.AddListenerFunction(() => camera.transform.eulerAngles = cameraEulerAngles);
|
||||||
perspectiveAngleField.AddListenerFunction(_ =>
|
|
||||||
{
|
|
||||||
camera.fieldOfView = perspectiveAngle;
|
container.SetDeviver(1);
|
||||||
});
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MoveCamera(Vector3 delta)
|
private void Update()
|
||||||
{
|
{
|
||||||
camera.transform.position += delta;
|
cameraPosition = camera.transform.position;
|
||||||
|
cameraEulerAngles = camera.transform.eulerAngles;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -43,112 +43,6 @@
|
|||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "ac931bb4-963e-473f-9ec6-4eb2121aed7d"
|
"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",
|
"__type" : "Ichni.RhythmGame.Beatmap.Track_BM,Assembly-CSharp",
|
||||||
"elementName" : "Track",
|
"elementName" : "Track",
|
||||||
@@ -404,26 +298,6 @@
|
|||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "04f7a1d6-76f2-4b15-9632-494515114d5d"
|
"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",
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
"isOverridingDuration" : false,
|
"isOverridingDuration" : false,
|
||||||
@@ -626,6 +500,36 @@
|
|||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "04f7a1d6-76f2-4b15-9632-494515114d5d"
|
"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",
|
"__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp",
|
||||||
"originalPosition" : {
|
"originalPosition" : {
|
||||||
@@ -644,7 +548,7 @@
|
|||||||
"z" : 1
|
"z" : 1
|
||||||
},
|
},
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
|
"value" : "cb918977-3e38-4d90-be47-b2170285fd71"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp",
|
||||||
@@ -652,15 +556,124 @@
|
|||||||
"startTime" : -32767,
|
"startTime" : -32767,
|
||||||
"endTime" : 32767,
|
"endTime" : 32767,
|
||||||
"attachedElementGuid" : {
|
"attachedElementGuid" : {
|
||||||
"value" : "49905a7f-456c-491d-a607-0aebebd5ab7f"
|
"value" : "cb918977-3e38-4d90-be47-b2170285fd71"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
"__type" : "Ichni.RhythmGame.Beatmap.NoteJudgeSubmodule_BM,Assembly-CSharp",
|
"__type" : "Ichni.RhythmGame.Beatmap.ColorSubmodule_BM,Assembly-CSharp",
|
||||||
"judgeUnitList" : [
|
"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" : {
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
|
|||||||
{
|
{
|
||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Basic Note Bad Expand");
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
|
|||||||
{
|
{
|
||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Basic Note Generate Expand");
|
var container = inspector.GenerateContainer("Basic Note Generate Expand");
|
||||||
var generateTimeField = inspector.GenerateParameterInputField(this, container, "Generate Time", nameof(generateTime));
|
var generateTimeField = inspector.GenerateInputField(this, container, "Generate Time", nameof(generateTime));
|
||||||
var effectTimeField = inspector.GenerateParameterInputField(this, container, "Effect Time", nameof(effectTime));
|
var effectTimeField = inspector.GenerateInputField(this, container, "Effect Time", nameof(effectTime));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
|
|||||||
{
|
{
|
||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Basic Note Good Burst");
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
|
|||||||
{
|
{
|
||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Basic Note Miss Pale");
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
|
|||||||
{
|
{
|
||||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||||
var container = inspector.GenerateContainer("Basic Note Perfect Burst");
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user