Last active
September 13, 2020 21:13
-
-
Save ronyx69/c131abe9a4340348989ab2a2f3ff539a to your computer and use it in GitHub Desktop.
Network segment and node reorder scripts. Refreshes UI automatically.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Network segment and node reorder scripts. Refreshes UI automatically. | |
// SEGMENTS | |
var asset = ToolsModifierControl.toolController.m_editPrefabInfo as NetInfo; | |
var ai = asset.m_netAI as TrainTrackAI; // RoadAI / TrainTrackAI / PedestrianPathAI | |
var elevation = "basic"; // basic / elevated / bridge / slope / tunnel | |
int[] order = new int[] { 2, 1, 3, 4, 5, 6, 7 }; // new order | |
if(elevation=="elevated") asset = ai.m_elevatedInfo; if(elevation=="bridge") asset = ai.m_bridgeInfo; | |
if(elevation=="slope") asset = ai.m_slopeInfo; if(elevation=="tunnel") asset = ai.m_tunnelInfo; | |
if(order.Max() > order.Length) { | |
Debug.LogWarning("SEGMENT_REORDER: Failed. Order array contains a value which is too high."); return; } | |
if(order.GroupBy(x => x).Any(g => g.Count() > 1)) { | |
Debug.LogWarning("SEGMENT_REORDER: Failed. Order array uses same value multiple times."); return; } | |
if(asset.m_segments.Length != order.Length) { | |
Debug.LogWarning("SEGMENT_REORDER: Failed. Segment array and order array item count mismatch."); return; } | |
NetInfo.Segment[] segments = new NetInfo.Segment[order.Length]; | |
for (int i = 0; i < order.Length; i++) segments[i] = asset.m_segments[order[i]-1]; | |
asset.m_segments = segments; var panel = UnityEngine.Object.FindObjectOfType<RoadEditorMainPanel>(); | |
panel.GetType().GetMethod("Clear", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(panel, null); | |
panel.GetType().GetMethod("Initialize", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(panel, null); | |
// NODES | |
var asset = ToolsModifierControl.toolController.m_editPrefabInfo as NetInfo; | |
var ai = asset.m_netAI as TrainTrackAI; // RoadAI / TrainTrackAI / PedestrianPathAI | |
var elevation = "basic"; // basic / elevated / bridge / slope / tunnel | |
int[] order = new int[] { 2, 1, 3, 4, 5, 6, 7, 8 }; // new order | |
if(elevation=="elevated") asset = ai.m_elevatedInfo; if(elevation=="bridge") asset = ai.m_bridgeInfo; | |
if(elevation=="slope") asset = ai.m_slopeInfo; if(elevation=="tunnel") asset = ai.m_tunnelInfo; | |
if(order.Max() > order.Length) { | |
Debug.LogWarning("NODE_REORDER: Failed. Order array contains a value which is too high."); return; } | |
if(order.GroupBy(x => x).Any(g => g.Count() > 1)) { | |
Debug.LogWarning("NODE_REORDER: Failed. Order array uses same value multiple times."); return; } | |
if(asset.m_nodes.Length != order.Length) { | |
Debug.LogWarning("NODE_REORDER: Failed. Node array and order array item count mismatch."); return; } | |
NetInfo.Node[] nodes = new NetInfo.Node[order.Length]; | |
for (int i = 0; i < order.Length; i++) nodes[i] = asset.m_nodes[order[i]-1]; | |
asset.m_nodes = nodes; var panel = UnityEngine.Object.FindObjectOfType<RoadEditorMainPanel>(); | |
panel.GetType().GetMethod("Clear", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(panel, null); | |
panel.GetType().GetMethod("Initialize", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(panel, null); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment