diff --git a/Assets/FR2_Cache.asset b/Assets/FR2_Cache.asset index 0419b47d..61af120c 100644 --- a/Assets/FR2_Cache.asset +++ b/Assets/FR2_Cache.asset @@ -19097,10 +19097,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 5820 - m_assetChangeTS: 1751097009 - m_fileInfoReadTS: 1751097023 - m_fileWriteTS: 1751096998 - m_cachefileWriteTS: 1751096998 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154040 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: 6180f4f2f0336466999b9e6e9beea8ea @@ -21340,15 +21340,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 81e2cda70e8084a3fb324d644db244fd type: 5 - m_fileInfoHash: 275823.asset + m_fileInfoHash: 278627.asset m_assetbundle: m_addressable: m_atlas: - m_fileSize: 275823 - m_assetChangeTS: 1751125161 - m_fileInfoReadTS: 1751125176 - m_fileWriteTS: 1751125160 - m_cachefileWriteTS: 1751125160 + m_fileSize: 278627 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154039 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: - guid: e6b16dc7c203450459bb86e24305f9ca @@ -27273,15 +27273,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: e1260c1148f6143b28bae5ace5e9c5d1 type: 5 - m_fileInfoHash: 3642.asset + m_fileInfoHash: 3756.asset m_assetbundle: m_addressable: m_atlas: - m_fileSize: 3642 - m_assetChangeTS: 1751126615 - m_fileInfoReadTS: 1751126681 - m_fileWriteTS: 1751126615 - m_cachefileWriteTS: 1751126615 + m_fileSize: 3756 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154039 + m_fileWriteTS: 1751153820 + m_cachefileWriteTS: 1751153820 refreshStamp: 3 UseGUIDsList: - guid: bf2edee5c58d82540a51f03df9d42094 @@ -35861,10 +35861,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 30929 - m_assetChangeTS: 1751123120 - m_fileInfoReadTS: 1751123128 - m_fileWriteTS: 1751097629 - m_cachefileWriteTS: 1751097629 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154039 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: 92c1b588d7658594cb219696f593f64b @@ -60343,10 +60343,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 4543 - m_assetChangeTS: 1751097009 - m_fileInfoReadTS: 1751097023 - m_fileWriteTS: 1751096060 - m_cachefileWriteTS: 1751096060 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154039 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: 544e4fbf839e39e1b693958db86e8cc8 @@ -64482,15 +64482,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: a48a638548bdb6645bfa74867dc72087 type: 2 - m_fileInfoHash: 9204.cs + m_fileInfoHash: 9146.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 9204 - m_assetChangeTS: 1750597263 - m_fileInfoReadTS: 1750597272 - m_fileWriteTS: 1750597147 - m_cachefileWriteTS: 1750597147 + m_fileSize: 9146 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154039 + m_fileWriteTS: 1751098957 + m_cachefileWriteTS: 1751098957 refreshStamp: 3 UseGUIDsList: [] - guid: a48a9e08d9023374fab5d929e609b9bd @@ -80185,10 +80185,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 3941 - m_assetChangeTS: 1751097009 - m_fileInfoReadTS: 1751097023 - m_fileWriteTS: 1751097007 - m_cachefileWriteTS: 1751097007 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: d5c2f1d0a3c6acc4a9cf0d8f013f14d3 @@ -97378,10 +97378,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 192 - m_assetChangeTS: 1751097009 - m_fileInfoReadTS: 1751097023 - m_fileWriteTS: 1751095031 - m_cachefileWriteTS: 1751095031 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: 17eaa6370b3e28741af24fa5d835972a @@ -101535,10 +101535,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 13331 - m_assetChangeTS: 1751125689 - m_fileInfoReadTS: 1751125698 - m_fileWriteTS: 1751125563 - m_cachefileWriteTS: 1751125563 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: 67a774c4384aa6c488128e2851b18ced @@ -158736,10 +158736,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 240 - m_assetChangeTS: 1751097009 - m_fileInfoReadTS: 1751097023 - m_fileWriteTS: 1751095031 - m_cachefileWriteTS: 1751095031 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: 9b821aa41cbf734458af19d8c6507e92 @@ -164608,10 +164608,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 87248 - m_assetChangeTS: 1751097009 - m_fileInfoReadTS: 1751097023 - m_fileWriteTS: 1751095031 - m_cachefileWriteTS: 1751095031 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: 0c840ddd1fdb040759e04bfab84c6cab @@ -184464,10 +184464,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 6947 - m_assetChangeTS: 1751097009 - m_fileInfoReadTS: 1751097023 - m_fileWriteTS: 1751096970 - m_cachefileWriteTS: 1751096970 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: 7d07c5b68c1cfe64ca63f5d2bb80d2c5 @@ -190538,10 +190538,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 320 - m_assetChangeTS: 1751097009 - m_fileInfoReadTS: 1751097023 - m_fileWriteTS: 1751095031 - m_cachefileWriteTS: 1751095031 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: ed7cb8f9a27664e48896c904189f0e2c @@ -193410,15 +193410,15 @@ MonoBehaviour: ids: 73000000 - guid: 2e498d1c8094910479dc3e1b768306a4 type: 5 - m_fileInfoHash: 9628.asset + m_fileInfoHash: 9987.asset m_assetbundle: m_addressable: m_atlas: - m_fileSize: 9628 - m_assetChangeTS: 1751126615 - m_fileInfoReadTS: 1751126681 - m_fileWriteTS: 1751126615 - m_cachefileWriteTS: 1751126615 + m_fileSize: 9987 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: - guid: fe393ace9b354375a9cb14cdbbc28be4 @@ -212430,10 +212430,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 3518 - m_assetChangeTS: 1751126489 - m_fileInfoReadTS: 1751126497 - m_fileWriteTS: 1751126485 - m_cachefileWriteTS: 1751126485 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: af51737994209402685054b8c8721aab @@ -217278,10 +217278,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 31432 - m_assetChangeTS: 1751123120 - m_fileInfoReadTS: 1751123128 - m_fileWriteTS: 1751097672 - m_cachefileWriteTS: 1751097672 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154039 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: 78a029f080e58c64fbb4ed9d609f7d12 @@ -217369,10 +217369,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 1950982 - m_assetChangeTS: 1751126618 - m_fileInfoReadTS: 1751126681 - m_fileWriteTS: 1751126594 - m_cachefileWriteTS: 1751126594 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: a343a8560a860bf4188c8f63103f455a @@ -217468,10 +217468,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 4945 - m_assetChangeTS: 1751126046 - m_fileInfoReadTS: 1751126053 - m_fileWriteTS: 1751126035 - m_cachefileWriteTS: 1751126035 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] - guid: 4dbc31cf60d8a0549a2be9b95e816376 @@ -217536,15 +217536,15 @@ MonoBehaviour: ids: - guid: 85c3e9578b45a414bb6507f90e48720a type: 5 - m_fileInfoHash: 358153.prefab + m_fileInfoHash: 372923.prefab m_assetbundle: m_addressable: m_atlas: - m_fileSize: 358153 - m_assetChangeTS: 1751126079 - m_fileInfoReadTS: 1751126080 - m_fileWriteTS: 1751126079 - m_cachefileWriteTS: 1751126079 + m_fileSize: 372923 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: - guid: 235f9435448da714a924218ed6ead5ea @@ -218684,15 +218684,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 235f9435448da714a924218ed6ead5ea type: 5 - m_fileInfoHash: 12979.mat + m_fileInfoHash: 13466.mat m_assetbundle: m_addressable: m_atlas: - m_fileSize: 12979 - m_assetChangeTS: 1751125057 - m_fileInfoReadTS: 1751125129 - m_fileWriteTS: 1751125057 - m_cachefileWriteTS: 1751125057 + m_fileSize: 13466 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154039 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: - guid: 4af258f019782954c9c32cd616f51c3b @@ -218746,8 +218746,8 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 0 - m_assetChangeTS: 1751124774 - m_fileInfoReadTS: 1751124798 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 m_fileWriteTS: 0 m_cachefileWriteTS: 0 refreshStamp: 3 @@ -218759,10 +218759,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 1301 - m_assetChangeTS: 1751126248 - m_fileInfoReadTS: 1751126257 - m_fileWriteTS: 1751126224 - m_cachefileWriteTS: 1751126224 + m_assetChangeTS: 1751154020 + m_fileInfoReadTS: 1751154038 + m_fileWriteTS: 1751153823 + m_cachefileWriteTS: 1751153823 refreshStamp: 3 UseGUIDsList: [] setting: diff --git a/Assets/Scripts/DynamicUI/Hierarchy/Hierarchy.cs b/Assets/Scripts/DynamicUI/Hierarchy/Hierarchy.cs index 2c19ab34..0b9fcb1b 100644 --- a/Assets/Scripts/DynamicUI/Hierarchy/Hierarchy.cs +++ b/Assets/Scripts/DynamicUI/Hierarchy/Hierarchy.cs @@ -41,8 +41,18 @@ namespace Ichni.Editor } public IEnumerator TryGetTab(GameElement targetElement) { - - StandardInspectionElement.GenerateForLoading(); + // targetElement.ScanAndAddEnableTypes(); + // if (!targetElement.GetChildrenByTypes().Contains(targetElement)) + // { + // var tab = EditorManager.instance.uiManager.hierarchy.GenerateTab(targetElement, null); + // tab.SelectGameElement(); + // Destroy(tab.gameObject); + // EditorManager.instance.uiManager.hierarchy.tabList.Remove(tab); + // yield break; + // } + // EditorManager.instance.uiManager.inspector.ClearInspector(); + // EditorManager.instance.uiManager.inspector.SetInspector(targetElement); + //StandardInspectionElement.GenerateForLoading(); // 1. 向上找到最近的有Tab的祖先 Stack stack = new Stack(); GameElement current = targetElement; @@ -58,9 +68,17 @@ namespace Ichni.Editor { var elem = stack.Pop(); // 只展开父Tab,不直接生成Tab - if (elem.parentElement != null && elem.parentElement.connectedTab != null && !elem.parentElement.connectedTab.isExpanded) + if (elem.parentElement != null && elem.parentElement.connectedTab != null) { - elem.parentElement.connectedTab.ExpandOrFold(); + if (!elem.parentElement.connectedTab.isExpanded) + { + elem.parentElement.connectedTab.ExpandOrFold(true); + } + else + { + elem.parentElement.connectedTab.ExpandOrFold(); + elem.parentElement.connectedTab.ExpandOrFold(true);//合上再展开,这思路也是没谁了 + } yield return null; } // 等待当前elem的Tab生成 @@ -72,15 +90,36 @@ namespace Ichni.Editor } // 3. 等待目标Tab实例化 - while (targetElement.connectedTab == null) + while (targetElement.connectedTab is null) { + yield return null; } HierarchyTab finalTab = targetElement.connectedTab; - float Tablocalpos = (-finalTab.transform.localPosition.y) - (tabContainer.sizeDelta.y / 4f); - float pct = Tablocalpos / tabContainer.sizeDelta.y; - scrollRect.verticalNormalizedPosition = 1f - pct; + + // 修正定位算法 + yield return null; // 等待布局刷新 + RectTransform tabRect = finalTab.GetComponent(); + RectTransform containerRect = tabContainer; + RectTransform viewportRect = scrollRect.viewport != null ? scrollRect.viewport : scrollRect.GetComponent(); + + // Tab相对于内容顶部的距离(正值为下,负值为上) + float tabTop = -tabRect.anchoredPosition.y; + float tabHeight = tabRect.rect.height; + float contentHeight = containerRect.rect.height; + float viewportHeight = viewportRect.rect.height; + + // 目标:让Tab居中(或尽量居中) + float targetCenter = tabTop + tabHeight / 2f; + float viewportCenter = viewportHeight / 2f; + float scrollOffset = targetCenter - viewportCenter; + + // normalizedPosition = 1 - (scrollOffset / (contentHeight - viewportHeight)) + float denominator = Mathf.Max(1f, contentHeight - viewportHeight); + float normalized = 1f - Mathf.Clamp01(scrollOffset / denominator); + + scrollRect.verticalNormalizedPosition = normalized; finalTab.SelectGameElement(); } } diff --git a/Assets/Scripts/DynamicUI/Hierarchy/HierarchyTab.cs b/Assets/Scripts/DynamicUI/Hierarchy/HierarchyTab.cs index 11d95dcf..3b699a03 100644 --- a/Assets/Scripts/DynamicUI/Hierarchy/HierarchyTab.cs +++ b/Assets/Scripts/DynamicUI/Hierarchy/HierarchyTab.cs @@ -125,24 +125,33 @@ namespace Ichni.Editor EditorManager.instance.uiManager.inspector.SetInspector(connectedGameElement); EditorManager.instance.timeline.SetTimeLine(connectedGameElement); } - + private IEnumerator ienumerator = null; public void ExpandOrFold() + { + ExpandOrFold(false); + } + public void ExpandOrFold(bool forceAllExPand = false) { this.childTabList.RemoveAll(s => s == null); isExpanded = !isExpanded; ExpandAnim(); if (isExpanded) { + connectedGameElement.ScanAndAddEnableTypes(); + List FixedList = !forceAllExPand ? connectedGameElement.GetChildrenByTypes() : connectedGameElement.childElementList; + // float startTime = Time.realtimeSinceStartup; // connectedGameElement.childElementList.Sort();//TODO: 后续可以让玩家手动快速排序 - // Debug.Log("排序耗时 " + (Time.realtimeSinceStartup - startTime).ToString()); - StartCoroutine(ExpandOverTime()); + Debug.Log(FixedList.Count); + ienumerator = ExpandOverTime(FixedList); + StartCoroutine(ienumerator); } else { //expandButton.transform.Rotate(new Vector3(0, 0, 180)); - + StopCoroutine(ienumerator); + ienumerator = null; for (int i = childTabList.Count - 1; i >= 0; i--) { childTabList[i].SetExpansion(isExpanded); @@ -171,11 +180,11 @@ namespace Ichni.Editor { expandButton.transform.DORotate(new Vector3(0, 0, !isExpanded ? 0f : 180f), 0.2f); } - private IEnumerator ExpandOverTime()//帧率过低的时候等一下再实例化 + private IEnumerator ExpandOverTime(List FixedList)//帧率过低的时候等一下再实例化 { float startTime = Time.realtimeSinceStartup; - for (var index = 0; index < connectedGameElement.childElementList.Count; index++) + for (var index = 0; index < FixedList.Count; index++) { int hasYield = 0; while (Time.realtimeSinceStartup - startTime > 1f / EditorManager.instance.editorSettings.frameRate * 3f && hasYield <= 2) @@ -183,8 +192,9 @@ namespace Ichni.Editor yield return null; hasYield += 1; } - var childElement = connectedGameElement.childElementList[index]; + var childElement = FixedList[index]; EditorManager.instance.uiManager.hierarchy.GenerateTab(childElement, connectedGameElement); + print($"生成子Tab:{childElement.elementName},索引:{index},总数:{FixedList.Count}"); } } } diff --git a/Assets/Scripts/EditorGame/GameElements/GameElement.cs b/Assets/Scripts/EditorGame/GameElements/GameElement.cs index c74c4d2e..b7130a6a 100644 --- a/Assets/Scripts/EditorGame/GameElements/GameElement.cs +++ b/Assets/Scripts/EditorGame/GameElements/GameElement.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Linq; using Dreamteck.Splines; using Ichni.Editor; using Ichni.RhythmGame.Beatmap; @@ -161,10 +162,54 @@ namespace Ichni.RhythmGame } } - public abstract partial class GameElement + public abstract partial class GameElement//Editor 专 { + public class EnableType : IBaseElement + { + public Type type; + public bool enable; + + public BaseElement_BM matchedBM { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + + }; + public List enableTypes; + + /// + /// 扫描childElementList中的类型并加入enableTypes(去重,兼容性好) + /// + public void ScanAndAddEnableTypes() + { + // 初始化enableTypes列表 + if (enableTypes == null) + enableTypes = new List(); + + // 记录已存在的类型,避免重复 + HashSet existingTypes = new HashSet(); + foreach (var et in enableTypes) + { + if (et != null && et.type != null) + existingTypes.Add(et.type); + } + + // 遍历所有子元素类型,若未添加则加入enableTypes + foreach (var child in childElementList) + { + var childType = child.GetType(); + if (!existingTypes.Contains(childType)) + { + enableTypes.Add(new EnableType + { + type = childType, + enable = true + }); + existingTypes.Add(childType); + } + } + } + public virtual void SetUpInspector() //被点击时设置第一层Inspector { + ScanAndAddEnableTypes(); IHaveInspection inspector = EditorManager.instance.uiManager.inspector; var container = inspector.GenerateContainer("Element Info"); @@ -177,6 +222,30 @@ namespace Ichni.RhythmGame inspector.GenerateCompositeParameterWindow(this, "Tags List", nameof(tags)).SetAsStringList(); }); + // 只用反射方式生成enableTypes的UI + if (enableTypes != null && enableTypes.Count > 0) + { + var elcontainer = inspector.GenerateContainer("Enable Children DisPlay"); + var enableTypeContainer = elcontainer.GenerateSubcontainer(3); + var type = enableTypes.GetType().GetGenericArguments()[0]; + int elcount = 0; + for (int idx = 0; idx < enableTypes.Count; idx++) + { + elcount++; + if (elcount > 3) + { + elcount = 0; + enableTypeContainer = elcontainer.GenerateSubcontainer(3); + } + var et = enableTypes[idx]; + inspector.GenerateToggle( + et, + enableTypeContainer, + et.type.Name, + nameof(et.enable) // 传递字段名字符串 + ); + } + } //次级模块 foreach (var submodule in submoduleList) { @@ -207,6 +276,30 @@ namespace Ichni.RhythmGame return gameElements; } + + + /// + /// 根据enableTypes筛选子元素(只返回enable为true的类型对应的子元素) + /// + public List GetChildrenByTypes() + { + if (enableTypes == null || enableTypes.Count == 0) + return new List(); + + var enabledTypes = new HashSet(); + foreach (var et in enableTypes) + { + if (et.enable) enabledTypes.Add(et.type); + } + // 问题1:只匹配类型本身,不能处理继承关系(如子类/接口) + // 问题2:如果childElementList有null元素会抛异常 + // 问题3:如果enableTypes有重复type,没影响但没必要 + + // 更健壮的写法如下(支持继承和接口,避免null): + return childElementList.FindAll(child => + child != null && enabledTypes.Any(t => t.IsAssignableFrom(child.GetType())) + ); + } } namespace Beatmap diff --git a/Assets/Scripts/EditorGame/GameElements/Track/TrackSubmodules/TrackRendererSubmodule.cs b/Assets/Scripts/EditorGame/GameElements/Track/TrackSubmodules/TrackRendererSubmodule.cs index 2ea5e89d..35e6c601 100644 --- a/Assets/Scripts/EditorGame/GameElements/Track/TrackSubmodules/TrackRendererSubmodule.cs +++ b/Assets/Scripts/EditorGame/GameElements/Track/TrackSubmodules/TrackRendererSubmodule.cs @@ -13,6 +13,8 @@ namespace Ichni.RhythmGame { public partial class TrackRendererSubmodule : TrackSubmodule { + protected int submoduleNameIndex = 0; + protected readonly string[] submoduleName = { "Auto Orient", "Path Generator", "Tube Generator", "Surface" }; public MeshGenerator meshGenerator; public MeshRenderer meshRenderer; public Material renderMaterial; @@ -42,7 +44,7 @@ namespace Ichni.RhythmGame this.materialThemeBundleName = materialThemeBundleName; this.materialName = materialName; Material mat = ThemeBundleManager.instance.GetObject(materialThemeBundleName, materialName); - if(mat != null) + if (mat != null) { renderMaterial = mat; meshRenderer.material = renderMaterial; @@ -54,7 +56,7 @@ namespace Ichni.RhythmGame SetEnableZWrite(); SetEnableEmission(); SetEmissionIntensity(); - + if (track.trackTimeSubmodule is TrackTimeSubmoduleMovable) { meshGenerator.clipFrom = 0; @@ -86,9 +88,11 @@ namespace Ichni.RhythmGame IHaveInspection inspector = EditorManager.instance.uiManager.inspector; Inspector inspectorMain = EditorManager.instance.uiManager.inspector; - var container = inspector.GenerateContainer("Track Renderer Auto Orient"); - + var container = inspector.GenerateContainer("Track Renderer " + submoduleName[submoduleNameIndex]); var zWriteSettings = container.GenerateSubcontainer(3); + + + var zWriteToggle = inspector.GenerateToggle(this, zWriteSettings, "Enable ZWrite", nameof(zWrite)) .AddListenerFunction(SetEnableZWrite); @@ -99,7 +103,7 @@ namespace Ichni.RhythmGame var emissionIntensityInputField = inspector.GenerateInputField(this, emissionSettings, "Emission Intensity", nameof(emissionIntensity)) .AddListenerFunction(SetEmissionIntensity); - + var materialSettings = container.GenerateSubcontainer(3); var themeBundleDropdown = inspector .GenerateDropdown(this, materialSettings, "Theme Bundle", ThemeBundleManager.instance.selectedThemeBundleList, nameof(materialThemeBundleName)) @@ -132,12 +136,12 @@ namespace Ichni.RhythmGame { meshRenderer.material.SetInt("_Emission", enableEmission ? 1 : 0); } - + protected void SetEnableZWrite() { meshRenderer.material.SetInt("_ZWrite", zWrite ? 1 : 0); } - + protected void SetEmissionIntensity() { meshRenderer.material.SetColor("_EmissionColor", Color.white * Mathf.Pow(2, emissionIntensity)); @@ -164,6 +168,7 @@ namespace Ichni.RhythmGame this.meshRenderer.material = renderMaterial; this.splineRenderer.color = Color.white; this.splineRenderer.uvRotation = 90; + this.submoduleNameIndex = 0; // Auto Orient is the first submodule } public override void SaveBM() @@ -194,6 +199,7 @@ namespace Ichni.RhythmGame materialName = trackRendererSubmodule.materialName; enableEmission = trackRendererSubmodule.enableEmission; emissionIntensity = trackRendererSubmodule.emissionIntensity; + } public override void ExecuteBM() @@ -241,6 +247,7 @@ namespace Ichni.RhythmGame this.meshRenderer.material = renderMaterial; this.pathGenerator.color = Color.white; this.pathGenerator.uvRotation = 90; + this.submoduleNameIndex = 1; // Path Generator is the second submodule } public override void SaveBM() @@ -305,7 +312,7 @@ namespace Ichni.RhythmGame public TubeGenerator tubeGenerator; public int sideCount; - public TrackRendererSubmoduleTubeGenerator(Track track, bool enableEmission, float emissionIntensity, bool zWrite, + public TrackRendererSubmoduleTubeGenerator(Track track, bool enableEmission, float emissionIntensity, bool zWrite, int sideCount, Material material = null) : base(track, enableEmission, emissionIntensity, zWrite) { @@ -323,6 +330,7 @@ namespace Ichni.RhythmGame this.tubeGenerator.color = Color.white; this.tubeGenerator.uvRotation = 90; this.tubeGenerator.sides = sideCount; + this.submoduleNameIndex = 2; // Tube Generator is the third submodule } public override void SaveBM() @@ -349,6 +357,7 @@ namespace Ichni.RhythmGame { public class TrackRendererSubmoduleTubeGenerator_BM : Submodule_BM { + public string materialThemeBundleName; public string materialName; public bool enableEmission; @@ -412,10 +421,11 @@ namespace Ichni.RhythmGame this.surface.spline = track.trackPathSubmodule.path; this.surface.clipFrom = 0; this.surface.clipTo = 1; - this.surface.updateMethod = SplineUser.UpdateMethod.LateUpdate; + this.surface.updateMethod = SplineUser.UpdateMethod.Update; this.meshRenderer.material = renderMaterial; this.surface.color = Color.white; this.surface.uvRotation = 90; + this.submoduleNameIndex = 3; // Surface is the fourth submodule } public override void SaveBM() diff --git a/Assets/Scripts/Graphical Tools/Sample Assiant/SampleWindow.cs b/Assets/Scripts/Graphical Tools/Sample Assiant/SampleWindow.cs index a0044aa1..c1ece097 100644 --- a/Assets/Scripts/Graphical Tools/Sample Assiant/SampleWindow.cs +++ b/Assets/Scripts/Graphical Tools/Sample Assiant/SampleWindow.cs @@ -147,7 +147,7 @@ public class SampleWindow : MovableWindow//该window高度为300,横的要在1 TransformChanged(); windowRect.GetComponent().alpha = track.timeDurationSubmodule.CheckTimeInDuration(songTime) ? 1f : 0.2f; } - if (selectedGameObject.GetType() != typeof(TMP_InputField) && RectTransformUtility.RectangleContainsScreenPoint(windowRect, Mouse.current.position.ReadValue())) + if (RectTransformUtility.RectangleContainsScreenPoint(windowRect, Mouse.current.position.ReadValue())) { DetectNote(); diff --git a/Assets/StreamingAssets/AutoSave/Chaos Zone/AutoSave_0.json b/Assets/StreamingAssets/AutoSave/Chaos Zone/AutoSave_0.json index d8ffbd5c..fc42ab18 100644 --- a/Assets/StreamingAssets/AutoSave/Chaos Zone/AutoSave_0.json +++ b/Assets/StreamingAssets/AutoSave/Chaos Zone/AutoSave_0.json @@ -4292,8 +4292,7 @@ ],"GeneralJudge":[ { "__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMRippleEffect_BM,Assembly-CSharp", - "isCircle" : true, - "rippleTime" : 1, + "rippleTime" : 0.65, "positionOffset" : { "x" : 0, "y" : 0, @@ -4305,17 +4304,17 @@ "z" : 0 }, "scale" : { - "x" : 5, - "y" : 5, - "z" : 5 + "x" : 1, + "y" : 1, + "z" : 1 }, "emissionColor" : { - "r" : 1, - "g" : 1, - "b" : 1, + "r" : 0.3576441, + "g" : 0.7463304, + "b" : 0.8065491, "a" : 1 }, - "emissionIntensity" : 0, + "emissionIntensity" : 2, "effectTime" : 0 } ],"StartHold":[ @@ -4633,7 +4632,33 @@ "effectTime" : 0.2 } ],"GeneralJudge":[ - + { + "__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMRippleEffect_BM,Assembly-CSharp", + "rippleTime" : 0.65, + "positionOffset" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "eulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "scale" : { + "x" : 1, + "y" : 1, + "z" : 1 + }, + "emissionColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionIntensity" : 0, + "effectTime" : 0 + } ],"StartHold":[ ],"Holding":[ @@ -69805,6 +69830,118 @@ "attachedElementGuid" : { "value" : "5f34a959-75c8-4df9-bff4-47c2b9d90b30" } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.ElementFolder_BM,Assembly-CSharp", + "elementName" : "New Folder", + "tags" : [ + + ], + "elementGuid" : { + "value" : "f033da76-2827-498e-a8f4-82dfbad97b19" + }, + "attachedElementGuid" : { + "value" : "00000000-0000-0000-0000-000000000000" + } + },{ + "__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" : "f033da76-2827-498e-a8f4-82dfbad97b19" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TimeDurationSubmodule_BM,Assembly-CSharp", + "isOverridingDuration" : false, + "startTime" : -32767, + "endTime" : 32767, + "attachedElementGuid" : { + "value" : "f033da76-2827-498e-a8f4-82dfbad97b19" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TimeEffectsCollection_BM,Assembly-CSharp", + "time" : 4, + "elementName" : "New Time Effects Collection", + "tags" : [ + + ], + "elementGuid" : { + "value" : "71249fe3-f96a-4905-939b-55b2f5bf49b4" + }, + "attachedElementGuid" : { + "value" : "f033da76-2827-498e-a8f4-82dfbad97b19" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.TransformSubmodule_BM,Assembly-CSharp", + "originalPosition" : { + "x" : 0, + "y" : 0, + "z" : 10 + }, + "originalEulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "originalScale" : { + "x" : 1, + "y" : 1, + "z" : 1 + }, + "attachedElementGuid" : { + "value" : "71249fe3-f96a-4905-939b-55b2f5bf49b4" + } + },{ + "__type" : "Ichni.RhythmGame.Beatmap.EffectSubmodule_BM,Assembly-CSharp", + "effectCollection" : {"Prior":[ + + ],"Default":[ + { + "__type" : "Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse.Beatmap.DTMRippleEffect_BM,Assembly-CSharp", + "rippleTime" : 0.65, + "positionOffset" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "eulerAngles" : { + "x" : 0, + "y" : 0, + "z" : 0 + }, + "scale" : { + "x" : 1, + "y" : 1, + "z" : 1 + }, + "emissionColor" : { + "r" : 1, + "g" : 1, + "b" : 1, + "a" : 1 + }, + "emissionIntensity" : 0, + "effectTime" : 0 + } + ],"Late":[ + + ] + }, + "attachedElementGuid" : { + "value" : "71249fe3-f96a-4905-939b-55b2f5bf49b4" + } } ], "attachedElementGuid" : {