diff --git a/QSB/Utility/Extensions.cs b/QSB/Utility/Extensions.cs index 36dc6c3f..8418ec86 100644 --- a/QSB/Utility/Extensions.cs +++ b/QSB/Utility/Extensions.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; +using System.Text; using UnityEngine; using Object = UnityEngine.Object; @@ -45,6 +46,23 @@ namespace QSB.Utility public static void SpawnWithServerAuthority(this GameObject go) => NetworkServer.Spawn(go, NetworkServer.localConnection); + public static string DeterministicPath(this Component component) + { + var sb = new StringBuilder(); + var transform = component.transform; + while (transform.parent) + { + sb.Append(transform.GetSiblingIndex()); + transform = transform.parent; + } + + sb.Append(transform.name); + return sb.ToString(); + } + + public static IEnumerable SortDeterministic(this IEnumerable components) where T : Component + => components.OrderBy(DeterministicPath); + #endregion #region C#