增加TubeGenerator,DUI架构调整
This commit is contained in:
@@ -60,7 +60,7 @@ namespace Ichni.Editor
|
||||
ApplyParameters();
|
||||
}
|
||||
|
||||
public void AddListenerFunction(UnityAction action)
|
||||
public override void AddListenerFunction(UnityAction action)
|
||||
{
|
||||
inputFieldBaseR.onEndEdit.AddListener(_ => action());
|
||||
inputFieldBaseG.onEndEdit.AddListener(_ => action());
|
||||
|
||||
@@ -13,10 +13,10 @@ namespace Ichni.Editor
|
||||
public Button button;
|
||||
public TMP_Text buttonText;
|
||||
|
||||
public void SetText(string buttonText, bool hasTitle)
|
||||
public void SetText(string buttonText, bool showTitle)
|
||||
{
|
||||
this.buttonText.text = buttonText;
|
||||
if(!hasTitle) title.gameObject.SetActive(false);
|
||||
if(!showTitle) title.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public void ApplyFunction(UnityAction function)
|
||||
@@ -27,5 +27,10 @@ namespace Ichni.Editor
|
||||
button.onClick.AddListener(connectedBaseElement.Refresh);
|
||||
}
|
||||
}
|
||||
|
||||
public override void AddListenerFunction(UnityAction action)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -34,6 +34,13 @@ namespace Ichni.Editor
|
||||
}
|
||||
}
|
||||
|
||||
public void Mark(IHaveInspection inspection, string mark)
|
||||
{
|
||||
inspection.MarkedElements.Add(mark, this);
|
||||
}
|
||||
|
||||
public abstract void AddListenerFunction(UnityAction action);
|
||||
|
||||
public virtual void DeviverSet(int DeviveNum){
|
||||
float o=2f/DeviveNum;//因为所有的单UI都是根据2栏来的
|
||||
Button[] childb=GetComponentsInChildren<Button>();
|
||||
|
||||
@@ -75,7 +75,7 @@ namespace Ichni.Editor
|
||||
ApplyParameters();
|
||||
}
|
||||
|
||||
public void AddListenerFunction(UnityAction action)
|
||||
public override void AddListenerFunction(UnityAction action)
|
||||
{
|
||||
inputFieldEmissionR.onEndEdit.AddListener(_ => action());
|
||||
inputFieldEmissionG.onEndEdit.AddListener(_ => action());
|
||||
|
||||
@@ -33,9 +33,9 @@ namespace Ichni.Editor
|
||||
connectedBaseElement.Refresh();
|
||||
}
|
||||
|
||||
public void AddListenerFunction(UnityAction<int> action)
|
||||
public override void AddListenerFunction(UnityAction action)
|
||||
{
|
||||
dropdown.onValueChanged.AddListener(action);
|
||||
dropdown.onValueChanged.AddListener(_ => action());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ using Ichni.RhythmGame;
|
||||
using TMPro;
|
||||
using UniRx;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
namespace Ichni.Editor
|
||||
{
|
||||
@@ -21,5 +22,10 @@ namespace Ichni.Editor
|
||||
{
|
||||
Observable.EveryUpdate().Subscribe(_ => text.text = content()).AddTo(gameObject);
|
||||
}
|
||||
|
||||
public override void AddListenerFunction(UnityAction action)
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -71,9 +71,9 @@ namespace Ichni.Editor
|
||||
connectedBaseElement.Refresh();
|
||||
}
|
||||
|
||||
public void AddListenerFunction(UnityAction<string> action)
|
||||
public override void AddListenerFunction(UnityAction action)
|
||||
{
|
||||
inputField.onEndEdit.AddListener(action);
|
||||
inputField.onEndEdit.AddListener(_ => action());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
||||
using Ichni.RhythmGame;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
namespace Ichni.Editor
|
||||
{
|
||||
@@ -34,5 +35,10 @@ namespace Ichni.Editor
|
||||
{
|
||||
text.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString();
|
||||
}
|
||||
|
||||
public override void AddListenerFunction(UnityAction action)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,9 +35,9 @@ namespace Ichni.Editor
|
||||
connectedBaseElement.Refresh();
|
||||
}
|
||||
|
||||
public void AddListenerFunction(UnityAction<int> action)
|
||||
public override void AddListenerFunction(UnityAction action)
|
||||
{
|
||||
dropdown.onValueChanged.AddListener(action);
|
||||
dropdown.onValueChanged.AddListener(_ => action());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,9 +31,9 @@ namespace Ichni.Editor
|
||||
connectedBaseElement.Refresh();
|
||||
}
|
||||
|
||||
public void AddListenerFunction(UnityAction<bool> action)
|
||||
public override void AddListenerFunction(UnityAction action)
|
||||
{
|
||||
toggle.onValueChanged.AddListener(action);
|
||||
toggle.onValueChanged.AddListener(_ => action());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,7 @@ namespace Ichni.Editor
|
||||
connectedBaseElement.Refresh();
|
||||
}
|
||||
|
||||
public void AddListenerFunction(UnityAction action)
|
||||
public override void AddListenerFunction(UnityAction action)
|
||||
{
|
||||
inputFieldX.onEndEdit.AddListener(_ => action());
|
||||
inputFieldY.onEndEdit.AddListener(_ => action());
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace Ichni.Editor
|
||||
{
|
||||
public RectTransform WindowRect { get; set; }
|
||||
public List<DynamicUIContainer> Containers { get; set; }
|
||||
public Dictionary<string, DynamicUIElement> MarkedElements { get; set; }
|
||||
|
||||
public CompositeParameterWindow GenerateCompositeParameterWindow(IBaseElement baseElement, string title,
|
||||
string parameterName)
|
||||
|
||||
@@ -17,11 +17,13 @@ namespace Ichni.Editor
|
||||
|
||||
public RectTransform WindowRect { get; set; }
|
||||
public List<DynamicUIContainer> Containers { get; set; }
|
||||
public Dictionary<string, DynamicUIElement> MarkedElements { get; set; }
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
WindowRect = inspectorRect;
|
||||
Containers = new List<DynamicUIContainer>();
|
||||
MarkedElements = new Dictionary<string, DynamicUIElement>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -39,6 +41,7 @@ namespace Ichni.Editor
|
||||
{
|
||||
Containers.ForEach(container => Destroy(container.gameObject));
|
||||
Containers.Clear();
|
||||
MarkedElements.Clear();
|
||||
}
|
||||
|
||||
public InspectorSecondaryWindow GenerateSecondaryWindow(GameElement gameElement, string title)
|
||||
|
||||
@@ -10,16 +10,17 @@ namespace Ichni.Editor
|
||||
public GameElement connectedGameElement;
|
||||
public RectTransform WindowRect { get; set; }
|
||||
public List<DynamicUIContainer> Containers { get; set; }
|
||||
public Dictionary<string, DynamicUIElement> MarkedElements { get; set; }
|
||||
|
||||
public void Initialize(GameElement gameElement, string titleText)
|
||||
{
|
||||
StartCoroutine(WindowAnim.ShowPanelOnScale(gameObject));
|
||||
WindowRect = windowRect;
|
||||
Containers = new List<DynamicUIContainer>();
|
||||
|
||||
MarkedElements = new Dictionary<string, DynamicUIElement>();
|
||||
|
||||
connectedGameElement = gameElement;
|
||||
InitializeWindow(titleText);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -91,9 +91,11 @@ namespace Ichni.RhythmGame
|
||||
{
|
||||
public override void SetUpInspector()
|
||||
{
|
||||
|
||||
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.GenerateInputField(this, container, "Start Time", nameof(startTime));
|
||||
var endTimeInputField = inspector.GenerateInputField(this, container, "End Time", nameof(endTime));
|
||||
|
||||
@@ -104,7 +106,7 @@ namespace Ichni.RhythmGame
|
||||
}
|
||||
|
||||
SetInputFieldInteractable(isOverridingDuration);
|
||||
overrideToggle.AddListenerFunction(SetInputFieldInteractable);
|
||||
overrideToggle.AddListenerFunction(() => SetInputFieldInteractable(isOverridingDuration));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -61,17 +61,17 @@ namespace Ichni.Editor
|
||||
var backgroundSpriteField = inspector.GenerateInputField(this, container, "Background Sprite", nameof(backgroundSpriteName));
|
||||
var applyButton = inspector.GenerateButton(this, container, "Apply", Refresh);
|
||||
|
||||
void SetFields(bool value)
|
||||
void SetInputFields(bool value) // 根据是否使用Skybox设置输入框的可交互性
|
||||
{
|
||||
skyboxThemeBundleField.inputField.interactable = value;
|
||||
skyboxMaterialNameField.inputField.interactable = value;
|
||||
backgroundSpriteField.inputField.interactable = !value;
|
||||
}
|
||||
|
||||
SetFields(useSkybox);
|
||||
SetInputFields(useSkybox);
|
||||
|
||||
useSkyboxToggle.AddListenerFunction(value => EditorManager.instance.backgroundController.EnableBackground(!value));
|
||||
useSkyboxToggle.AddListenerFunction(SetFields);
|
||||
useSkyboxToggle.AddListenerFunction(() => EditorManager.instance.backgroundController.EnableBackground(!useSkybox));
|
||||
useSkyboxToggle.AddListenerFunction(() => SetInputFields(useSkybox));
|
||||
}
|
||||
|
||||
public override void Refresh()
|
||||
|
||||
@@ -37,27 +37,34 @@ namespace Ichni.RhythmGame
|
||||
public override void SetUpInspector()
|
||||
{
|
||||
base.SetUpInspector();
|
||||
|
||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||
var container = inspector.GenerateContainer("Generate");
|
||||
|
||||
var environmentObjectButton = inspector.GenerateButton(this, container, "Environment Object",
|
||||
() => TemporaryObject.GenerateElement("New Environment Object", Guid.NewGuid(), new List<string>(),
|
||||
true, this));
|
||||
|
||||
var isStaticToggle = inspector.GenerateToggle(this, container, "Is Static", nameof(isStatic));
|
||||
isStaticToggle.AddListenerFunction(_ => gameObject.isStatic = isStatic);
|
||||
isStaticToggle.AddListenerFunction(() => gameObject.isStatic = isStatic);
|
||||
|
||||
var generateContainer = inspector.GenerateContainer("Generate");
|
||||
var generateDisplacementButton = inspector.GenerateButton(this, generateContainer, "Displacement",
|
||||
() => Displacement.GenerateElement("New Displacement", Guid.NewGuid(), new List<string>(), true,
|
||||
this, new FlexibleFloat(), new FlexibleFloat(), new FlexibleFloat()));
|
||||
|
||||
var generateSwirlButton = inspector.GenerateButton(this, generateContainer, "Swirl",
|
||||
() => Swirl.GenerateElement("New Swirl", Guid.NewGuid(), new List<string>(), true,
|
||||
this, new FlexibleFloat(), new FlexibleFloat(), new FlexibleFloat()));
|
||||
|
||||
var generateScaleButton = inspector.GenerateButton(this, generateContainer, "Scale",
|
||||
() => Scale.GenerateElement("New Scale", Guid.NewGuid(), new List<string>(), true,
|
||||
this, new FlexibleFloat(), new FlexibleFloat(), new FlexibleFloat()));
|
||||
|
||||
var generateBaseColorChangeButton = inspector.GenerateButton(this, generateContainer, "Base Color Change",
|
||||
() => BaseColorChange.GenerateElement("New Base Color Change", Guid.NewGuid(), new List<string>(), true,
|
||||
this, new FlexibleFloat(), new FlexibleFloat(), new FlexibleFloat(), new FlexibleFloat()));
|
||||
|
||||
if (haveEmission)
|
||||
{
|
||||
var generateEmissionColorChangeButton = inspector.GenerateButton(this, generateContainer, "Emission Color Change",
|
||||
|
||||
@@ -161,7 +161,8 @@ namespace Ichni.RhythmGame
|
||||
submodule.SetUpInspector();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有子GameElement
|
||||
/// </summary>
|
||||
|
||||
@@ -34,7 +34,8 @@ namespace Ichni.RhythmGame
|
||||
var container = inspector.GenerateContainer("Full Screen Near Time Judge Unit");
|
||||
|
||||
var isShowingJudgeField = inspector.GenerateToggle(this, container, "Is Showing Judge", nameof(isShowingJudge));
|
||||
isShowingJudgeField.AddListenerFunction((isOn) => SetShowingJudge(isShowingJudge));
|
||||
|
||||
isShowingJudgeField.AddListenerFunction(() => SetShowingJudge(isShowingJudge));
|
||||
|
||||
var removeButton = inspector.GenerateButton(this, container, "Remove", () =>
|
||||
{
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace Ichni.RhythmGame
|
||||
var container = inspector.GenerateContainer("Touch Area Judge Unit");
|
||||
|
||||
var isShowingJudgeField = inspector.GenerateToggle(this, container, "Is Showing Judge", nameof(isShowingJudge));
|
||||
isShowingJudgeField.AddListenerFunction((isOn) => SetShowingJudge(isShowingJudge));
|
||||
isShowingJudgeField.AddListenerFunction(() => SetShowingJudge(isShowingJudge));
|
||||
|
||||
var effectTimeField = inspector.GenerateInputField(this, container, "Area Radius", nameof(areaRadius));
|
||||
|
||||
|
||||
@@ -93,7 +93,14 @@ namespace Ichni.RhythmGame
|
||||
var container = inspector.GenerateContainer("Hold");
|
||||
|
||||
var holdEndTimeInputField = inspector.GenerateInputField(this, container, "holdEndTime", nameof(holdEndTime));
|
||||
holdEndTimeInputField.AddListenerFunction(_ =>
|
||||
holdEndTimeInputField.AddListenerFunction(() =>
|
||||
{
|
||||
noteVisual?.effectSubmodule.effectCollection["Holding"].ForEach(effect =>
|
||||
{
|
||||
effect.effectTime = holdEndTime - exactJudgeTime;
|
||||
});
|
||||
});
|
||||
inspector.MarkedElements["ExactJudgeTime"].AddListenerFunction(() =>
|
||||
{
|
||||
noteVisual?.effectSubmodule.effectCollection["Holding"].ForEach(effect =>
|
||||
{
|
||||
|
||||
@@ -150,9 +150,11 @@ namespace Ichni.RhythmGame
|
||||
|
||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||
var container = inspector.GenerateContainer("Note Info");
|
||||
|
||||
var exactJudgeTimeInputField =
|
||||
inspector.GenerateInputField(this, container, "exactJudgeTime", nameof(exactJudgeTime));
|
||||
exactJudgeTimeInputField.AddListenerFunction(_ => UpdateNoteInTrack());
|
||||
exactJudgeTimeInputField.AddListenerFunction(UpdateNoteInTrack);
|
||||
exactJudgeTimeInputField.Mark(inspector, "ExactJudgeTime");
|
||||
|
||||
var noteScreenPositionText = inspector.GenerateHintText(this, container, () => "Note Screen Position: " + noteScreenPosition);
|
||||
}
|
||||
|
||||
@@ -33,14 +33,14 @@ namespace Ichni.RhythmGame
|
||||
|
||||
var themeBundleDropdown = inspector.GenerateDropdown(this, container, "Theme Bundle",
|
||||
themeBundleList, nameof(themeBundleName));
|
||||
themeBundleDropdown.AddListenerFunction(_ => inspectorMain.SetInspector(this));
|
||||
themeBundleDropdown.AddListenerFunction(() => inspectorMain.SetInspector(this));
|
||||
|
||||
if (themeBundleName != String.Empty && ThemeBundleManager.instance.TryGetThemeBundle(themeBundleName, out ThemeBundle themeBundle))
|
||||
{
|
||||
objectNameList = themeBundle.assetList_GameObject.ConvertAll(x => x.name);
|
||||
var objectNameDropdown =
|
||||
inspector.GenerateDropdown(this, container, "Object Name", objectNameList, nameof(objectName));
|
||||
objectNameDropdown.AddListenerFunction(_ => inspectorMain.SetInspector(this));
|
||||
objectNameDropdown.AddListenerFunction(() => inspectorMain.SetInspector(this));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -98,7 +98,7 @@ namespace Ichni.RhythmGame
|
||||
var container = inspector.GenerateContainer("Path Node");
|
||||
var indexText = inspector.GenerateHintText(this, container, "Index: " + index);
|
||||
var isShowingSphereToggle = inspector.GenerateToggle(this, container, "Is Showing Sphere", nameof(isShowingSphere));
|
||||
isShowingSphereToggle.AddListenerFunction(SetPathNodeSphere);
|
||||
isShowingSphereToggle.AddListenerFunction(() => SetPathNodeSphere(isShowingSphere));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -118,6 +118,14 @@ namespace Ichni.RhythmGame
|
||||
trackRendererSubmodule = new TrackRendererSubmodulePathGenerator(this, false, 0);
|
||||
inspectorMain.SetInspector(this);
|
||||
});
|
||||
|
||||
var trackRenderTubeGeneratorButton = inspector.GenerateButton(this, trackSubmodulesContainer,
|
||||
"Track Renderer Tube Generator",
|
||||
() =>
|
||||
{
|
||||
trackRendererSubmodule = new TrackRendererSubmoduleTubeGenerator(this, false, 0, 4);
|
||||
inspectorMain.SetInspector(this);
|
||||
});
|
||||
|
||||
var trackRendererSurfaceButton = inspector.GenerateButton(this, trackSubmodulesContainer, "Track Renderer Surface",
|
||||
() =>
|
||||
@@ -207,6 +215,8 @@ namespace Ichni.RhythmGame
|
||||
{
|
||||
trackRendererAutoOrientButton.button.interactable = false;
|
||||
trackRendererPathGeneratorButton.button.interactable = false;
|
||||
trackRenderTubeGeneratorButton.button.interactable = false;
|
||||
trackRendererSurfaceButton.button.interactable = false;
|
||||
}
|
||||
|
||||
var toolsContainerTrack = inspector.GenerateContainer("Track Tools"); //轨道(整体)快捷工具
|
||||
|
||||
@@ -97,20 +97,24 @@ namespace Ichni.RhythmGame
|
||||
{
|
||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||
var container = inspector.GenerateContainer("Track Path");
|
||||
|
||||
var trackSpaceDropdown =
|
||||
inspector.GenerateDropdown(this, container, "Space Type", typeof(Track.TrackSpaceType), nameof(trackSpaceType));
|
||||
|
||||
var trackSamplingDropdown =
|
||||
inspector.GenerateDropdown(this, container, "Sampling Type", typeof(Track.TrackSamplingType), nameof(trackSamplingType));
|
||||
|
||||
var isClosedToggle =
|
||||
inspector.GenerateToggle(this, container, "Is Closed", nameof(isClosed));
|
||||
isClosedToggle.AddListenerFunction(_ => ClosePath());
|
||||
isClosedToggle.AddListenerFunction(ClosePath);
|
||||
|
||||
var generatePathNodeButton = inspector.GenerateButton(this, container, "Generate Path Node", () =>
|
||||
{
|
||||
PathNode.GenerateElement("New Path Node", Guid.NewGuid(), new List<string>(), true, track, true);
|
||||
});
|
||||
|
||||
var showDisplayToggle = inspector.GenerateToggle(this, container, "Show Display", nameof(isShowingDisplay));
|
||||
showDisplayToggle.AddListenerFunction(_ => SetDisplay(isShowingDisplay));
|
||||
showDisplayToggle.AddListenerFunction(() => SetDisplay(isShowingDisplay));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -111,19 +111,19 @@ namespace Ichni.RhythmGame
|
||||
var container = inspector.GenerateContainer("Track Renderer Auto Orient");
|
||||
|
||||
var enableEmissionToggle = inspector.GenerateToggle(this, container, "Enable Emission", nameof(enableEmission));
|
||||
enableEmissionToggle.AddListenerFunction(_ => SetEnableEmission());
|
||||
enableEmissionToggle.AddListenerFunction(SetEnableEmission);
|
||||
|
||||
var emissionIntensityInputField = inspector.GenerateInputField(this, container, "Emission Intensity", nameof(emissionIntensity));
|
||||
emissionIntensityInputField.AddListenerFunction(_ => SetEmissionIntensity());
|
||||
emissionIntensityInputField.AddListenerFunction(SetEmissionIntensity);
|
||||
|
||||
var themeBundleDropdown = inspector.GenerateDropdown(this, container, "Theme Bundle", ThemeBundleManager.instance.selectedThemeBundleList, nameof(materialThemeBundleName));
|
||||
themeBundleDropdown.AddListenerFunction(_ => inspectorMain.SetInspector(track));
|
||||
themeBundleDropdown.AddListenerFunction(() => inspectorMain.SetInspector(track));
|
||||
|
||||
if (materialThemeBundleName != String.Empty && ThemeBundleManager.instance.TryGetThemeBundle(materialThemeBundleName, out ThemeBundle themeBundle))
|
||||
{
|
||||
List<string> materialNameList = themeBundle.assetList_Material.ConvertAll(x => x.name);
|
||||
var objectNameDropdown = inspector.GenerateDropdown(this, container, "Material Name", materialNameList, nameof(materialName));
|
||||
objectNameDropdown.AddListenerFunction(_ => inspectorMain.SetInspector(track));
|
||||
objectNameDropdown.AddListenerFunction(() => inspectorMain.SetInspector(track));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -229,19 +229,19 @@ namespace Ichni.RhythmGame
|
||||
var container = inspector.GenerateContainer("Track Renderer Path Generator");
|
||||
|
||||
var enableEmissionToggle = inspector.GenerateToggle(this, container, "Enable Emission", nameof(enableEmission));
|
||||
enableEmissionToggle.AddListenerFunction(_ => SetEnableEmission());
|
||||
enableEmissionToggle.AddListenerFunction(SetEnableEmission);
|
||||
|
||||
var emissionIntensityInputField = inspector.GenerateInputField(this, container, "Emission Intensity", nameof(emissionIntensity));
|
||||
emissionIntensityInputField.AddListenerFunction(_ => SetEmissionIntensity());
|
||||
emissionIntensityInputField.AddListenerFunction(SetEmissionIntensity);
|
||||
|
||||
var themeBundleDropdown = inspector.GenerateDropdown(this, container, "Theme Bundle", ThemeBundleManager.instance.selectedThemeBundleList, nameof(materialThemeBundleName));
|
||||
themeBundleDropdown.AddListenerFunction(_ => inspectorMain.SetInspector(track));
|
||||
themeBundleDropdown.AddListenerFunction(()=>inspectorMain.SetInspector(track));
|
||||
|
||||
if (materialThemeBundleName != String.Empty && ThemeBundleManager.instance.TryGetThemeBundle(materialThemeBundleName, out ThemeBundle themeBundle))
|
||||
{
|
||||
List<string> materialNameList = themeBundle.assetList_Material.ConvertAll(x => x.name);
|
||||
var objectNameDropdown = inspector.GenerateDropdown(this, container, "Material Name", materialNameList, nameof(materialName));
|
||||
objectNameDropdown.AddListenerFunction(_ => inspectorMain.SetInspector(track));
|
||||
objectNameDropdown.AddListenerFunction(() => inspectorMain.SetInspector(track));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -313,6 +313,136 @@ namespace Ichni.RhythmGame
|
||||
|
||||
#endregion
|
||||
|
||||
#region TubeGenerator
|
||||
|
||||
public class TrackRendererSubmoduleTubeGenerator : TrackRendererSubmodule
|
||||
{
|
||||
public TubeGenerator tubeGenerator;
|
||||
public int sideCount;
|
||||
|
||||
public TrackRendererSubmoduleTubeGenerator(Track track, bool enableEmission, float emissionIntensity, int sideCount, Material material = null) :
|
||||
base(track, enableEmission, emissionIntensity)
|
||||
{
|
||||
this.sideCount = sideCount;
|
||||
|
||||
this.tubeGenerator = track.AddComponent<TubeGenerator>();
|
||||
this.meshRenderer = tubeGenerator.GetComponent<MeshRenderer>();
|
||||
this.meshGenerator = tubeGenerator;
|
||||
this.renderMaterial = material == null ? EditorManager.instance.basePrefabs.defaultTrackMaterial : material;
|
||||
this.tubeGenerator.spline = track.trackPathSubmodule.path;
|
||||
this.tubeGenerator.clipFrom = 0;
|
||||
this.tubeGenerator.clipTo = 1;
|
||||
this.meshRenderer.material = renderMaterial;
|
||||
this.tubeGenerator.color = Color.white;
|
||||
this.tubeGenerator.uvRotation = 90;
|
||||
this.tubeGenerator.sides = sideCount;
|
||||
}
|
||||
|
||||
public override void SaveBM()
|
||||
{
|
||||
matchedBM = new TrackRendererSubmoduleTubeGenerator_BM(attachedGameElement, this);
|
||||
}
|
||||
|
||||
public override void SetUpInspector()
|
||||
{
|
||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
|
||||
|
||||
var container = inspector.GenerateContainer("Track Renderer Tube Generator");
|
||||
|
||||
var enableEmissionToggle = inspector.GenerateToggle(this, container, "Enable Emission", nameof(enableEmission));
|
||||
enableEmissionToggle.AddListenerFunction(SetEnableEmission);
|
||||
|
||||
var emissionIntensityInputField = inspector.GenerateInputField(this, container, "Emission Intensity", nameof(emissionIntensity));
|
||||
emissionIntensityInputField.AddListenerFunction(SetEmissionIntensity);
|
||||
|
||||
var themeBundleDropdown = inspector.GenerateDropdown(this, container, "Theme Bundle", ThemeBundleManager.instance.selectedThemeBundleList, nameof(materialThemeBundleName));
|
||||
themeBundleDropdown.AddListenerFunction(() => inspectorMain.SetInspector(track));
|
||||
|
||||
if (materialThemeBundleName != String.Empty && ThemeBundleManager.instance.TryGetThemeBundle(materialThemeBundleName, out ThemeBundle themeBundle))
|
||||
{
|
||||
List<string> materialNameList = themeBundle.assetList_Material.ConvertAll(x => x.name);
|
||||
var objectNameDropdown = inspector.GenerateDropdown(this, container, "Material Name", materialNameList, nameof(materialName));
|
||||
objectNameDropdown.AddListenerFunction(() => inspectorMain.SetInspector(track));
|
||||
}
|
||||
else
|
||||
{
|
||||
var objectNameDropdown = inspector.GenerateDropdown(this, container, "Material Name", new List<string>(), nameof(materialName));
|
||||
objectNameDropdown.dropdown.interactable = false;
|
||||
}
|
||||
|
||||
var applyMaterialButton = inspector.GenerateButton(this, container, "Apply Material", () =>
|
||||
{
|
||||
ApplyMaterial(materialThemeBundleName, materialName);
|
||||
});
|
||||
|
||||
var sideCountInputField = inspector.GenerateInputField(this, container, "Side Count", nameof(sideCount));
|
||||
sideCountInputField.AddListenerFunction(() =>
|
||||
{
|
||||
tubeGenerator.sides = sideCount;
|
||||
});
|
||||
|
||||
var deleteButton = inspector.GenerateButton(this, container, "Delete",
|
||||
() =>
|
||||
{
|
||||
Delete();
|
||||
track.trackRendererSubmodule = null;
|
||||
inspectorMain.SetInspector(track);
|
||||
track.Refresh();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
namespace Beatmap
|
||||
{
|
||||
public class TrackRendererSubmoduleTubeGenerator_BM : Submodule_BM
|
||||
{
|
||||
public string materialThemeBundleName;
|
||||
public string materialName;
|
||||
public bool enableEmission;
|
||||
public float emissionIntensity;
|
||||
public int sideCount;
|
||||
|
||||
public TrackRendererSubmoduleTubeGenerator_BM()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public TrackRendererSubmoduleTubeGenerator_BM(GameElement attachedElement,
|
||||
TrackRendererSubmoduleTubeGenerator trackRendererSubmodule) : base(attachedElement)
|
||||
{
|
||||
materialThemeBundleName = trackRendererSubmodule.materialThemeBundleName;
|
||||
materialName = trackRendererSubmodule.materialName;
|
||||
enableEmission = trackRendererSubmodule.enableEmission;
|
||||
emissionIntensity = trackRendererSubmodule.emissionIntensity;
|
||||
sideCount = trackRendererSubmodule.sideCount;
|
||||
}
|
||||
|
||||
public override void ExecuteBM()
|
||||
{
|
||||
attachedElement = GameElement_BM.GetElement(attachedElementGuid);
|
||||
Track track = attachedElement as Track;
|
||||
track.trackRendererSubmodule = new TrackRendererSubmoduleTubeGenerator(track, enableEmission, emissionIntensity, sideCount);
|
||||
if (materialName.Trim() != String.Empty)
|
||||
{
|
||||
track.trackRendererSubmodule.ApplyMaterial(materialThemeBundleName, materialName);
|
||||
}
|
||||
}
|
||||
|
||||
public override void DuplicateBM(GameElement attached)
|
||||
{
|
||||
Track track = attached as Track;
|
||||
track.trackRendererSubmodule = new TrackRendererSubmoduleTubeGenerator(track, enableEmission, emissionIntensity, sideCount);
|
||||
if (materialName.Trim() != String.Empty)
|
||||
{
|
||||
track.trackRendererSubmodule.ApplyMaterial(materialThemeBundleName, materialName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Surface
|
||||
|
||||
public class TrackRendererSubmoduleSurface : TrackRendererSubmodule
|
||||
@@ -347,19 +477,19 @@ namespace Ichni.RhythmGame
|
||||
var container = inspector.GenerateContainer("Track Renderer Surface");
|
||||
|
||||
var enableEmissionToggle = inspector.GenerateToggle(this, container, "Enable Emission", nameof(enableEmission));
|
||||
enableEmissionToggle.AddListenerFunction(_ => SetEnableEmission());
|
||||
enableEmissionToggle.AddListenerFunction(SetEnableEmission);
|
||||
|
||||
var emissionIntensityInputField = inspector.GenerateInputField(this, container, "Emission Intensity", nameof(emissionIntensity));
|
||||
emissionIntensityInputField.AddListenerFunction(_ => SetEmissionIntensity());
|
||||
emissionIntensityInputField.AddListenerFunction(SetEmissionIntensity);
|
||||
|
||||
var themeBundleDropdown = inspector.GenerateDropdown(this, container, "Theme Bundle", ThemeBundleManager.instance.selectedThemeBundleList, nameof(materialThemeBundleName));
|
||||
themeBundleDropdown.AddListenerFunction(_ => inspectorMain.SetInspector(track));
|
||||
themeBundleDropdown.AddListenerFunction(() => inspectorMain.SetInspector(track));
|
||||
|
||||
if (materialThemeBundleName != String.Empty && ThemeBundleManager.instance.TryGetThemeBundle(materialThemeBundleName, out ThemeBundle themeBundle))
|
||||
{
|
||||
List<string> materialNameList = themeBundle.assetList_Material.ConvertAll(x => x.name);
|
||||
var objectNameDropdown = inspector.GenerateDropdown(this, container, "Material Name", materialNameList, nameof(materialName));
|
||||
objectNameDropdown.AddListenerFunction(_ => inspectorMain.SetInspector(track));
|
||||
objectNameDropdown.AddListenerFunction(() => inspectorMain.SetInspector(track));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -75,17 +75,17 @@ namespace Ichni.RhythmGame
|
||||
var container = inspector.GenerateContainer("Track Time Movable");
|
||||
var startTimeInputField =
|
||||
inspector.GenerateInputField(this, container, "Start Time", nameof(trackStartTime));
|
||||
startTimeInputField.AddListenerFunction(_ => RefreshChildren());
|
||||
startTimeInputField.AddListenerFunction(RefreshChildren);
|
||||
|
||||
var endTimeInputField = inspector.GenerateInputField(this, container, "End Time", nameof(trackEndTime));
|
||||
endTimeInputField.AddListenerFunction(_ => RefreshChildren());
|
||||
endTimeInputField.AddListenerFunction(RefreshChildren);
|
||||
|
||||
var visibleTimeInputField =
|
||||
inspector.GenerateInputField(this, container, "Visible Time Length", nameof(visibleTrackTimeLength));
|
||||
|
||||
var animationCurveDropdown = inspector.GenerateDropdown(this, container, "Animation Curve",
|
||||
typeof(AnimationCurveType), nameof(animationCurveType));
|
||||
animationCurveDropdown.AddListenerFunction(_ => RefreshChildren());
|
||||
animationCurveDropdown.AddListenerFunction(RefreshChildren);
|
||||
|
||||
var deleteButton = inspector.GenerateButton(this, container, "Delete",
|
||||
() =>
|
||||
|
||||
@@ -65,13 +65,13 @@ namespace Ichni.RhythmGame
|
||||
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
|
||||
var container = inspector.GenerateContainer("Trail");
|
||||
var visibleTimeLengthInputField = inspector.GenerateInputField(this, container, "Visible Time Length", nameof(visibleTimeLength));
|
||||
visibleTimeLengthInputField.AddListenerFunction(_ => trailRenderer.time = visibleTimeLength);
|
||||
visibleTimeLengthInputField.AddListenerFunction(() => trailRenderer.time = visibleTimeLength);
|
||||
|
||||
var isAutoOrientToggle = inspector.GenerateToggle(this, container, "Is Auto Orient", nameof(isAutoOrient));
|
||||
isAutoOrientToggle.AddListenerFunction(_ => trailRenderer.alignment = isAutoOrient ? LineAlignment.View : LineAlignment.TransformZ);
|
||||
isAutoOrientToggle.AddListenerFunction(() => trailRenderer.alignment = isAutoOrient ? LineAlignment.View : LineAlignment.TransformZ);
|
||||
|
||||
var widthMultiplierInputField = inspector.GenerateInputField(this, container, "Width Multiplier", nameof(widthMultiplier));
|
||||
widthMultiplierInputField.AddListenerFunction(_ => trailRenderer.widthMultiplier = widthMultiplier);
|
||||
widthMultiplierInputField.AddListenerFunction(() => trailRenderer.widthMultiplier = widthMultiplier);
|
||||
|
||||
var widthCurveButton = inspector.GenerateButton(this, container, "Width Curve", () =>
|
||||
{
|
||||
|
||||
@@ -30,9 +30,9 @@ namespace Ichni.Editor
|
||||
var viewTypeDropdown = inspector.GenerateDropdown(this, container, "View Type", typeof(GameCamera.CameraViewType), nameof(viewType));
|
||||
var perspectiveAngleField = inspector.GenerateInputField(this, container, "Perspective Angle", nameof(perspectiveAngle));
|
||||
var orthographicSizeField = inspector.GenerateInputField(this, container, "Orthographic Size", nameof(orthographicSize));
|
||||
viewTypeDropdown.AddListenerFunction(_ => sceneCamera.orthographic = viewType == GameCamera.CameraViewType.Orthographic);
|
||||
perspectiveAngleField.AddListenerFunction(_ => sceneCamera.fieldOfView = perspectiveAngle);
|
||||
orthographicSizeField.AddListenerFunction(_ => sceneCamera.orthographicSize = orthographicSize);
|
||||
viewTypeDropdown.AddListenerFunction(() => sceneCamera.orthographic = viewType == GameCamera.CameraViewType.Orthographic);
|
||||
perspectiveAngleField.AddListenerFunction(() => sceneCamera.fieldOfView = perspectiveAngle);
|
||||
orthographicSizeField.AddListenerFunction(() => sceneCamera.orthographicSize = orthographicSize);
|
||||
|
||||
var positionInputFields = inspector.GenerateVector3InputField(this, container, "Position", nameof(cameraPosition), true);
|
||||
positionInputFields.AddListenerFunction(() => sceneCamera.transform.position = cameraPosition);
|
||||
|
||||
Reference in New Issue
Block a user