/// <summary> /// Registers a network update system to be executed in a specific network update stage. /// </summary> public static void RegisterNetworkUpdate(this INetworkUpdateSystem updateSystem, NetworkUpdateStage updateStage = NetworkUpdateStage.Update) { var sysSet = s_UpdateSystem_Sets[updateStage]; if (!sysSet.Contains(updateSystem)) { sysSet.Add(updateSystem); int setLen = sysSet.Count; var sysArr = s_UpdateSystem_Arrays[updateStage]; int arrLen = sysArr.Length; if (setLen > arrLen) { // double capacity sysArr = s_UpdateSystem_Arrays[updateStage] = new INetworkUpdateSystem[arrLen *= 2]; } sysSet.CopyTo(sysArr); if (setLen < arrLen) { // null terminator sysArr[setLen] = null; } } }
/// <summary> /// Unregisters a network update system from all network update stages. /// </summary> public static void UnregisterAllNetworkUpdates(this INetworkUpdateSystem updateSystem) { foreach (NetworkUpdateStage updateStage in Enum.GetValues(typeof(NetworkUpdateStage))) { UnregisterNetworkUpdate(updateSystem, updateStage); } }
/// <summary> /// Unregisters a network update system from a specific network update stage. /// </summary> public static void UnregisterNetworkUpdate(this INetworkUpdateSystem updateSystem, NetworkUpdateStage updateStage = NetworkUpdateStage.Update) { var sysSet = s_UpdateSystem_Sets[updateStage]; if (sysSet.Contains(updateSystem)) { sysSet.Remove(updateSystem); int setLen = sysSet.Count; var sysArr = s_UpdateSystem_Arrays[updateStage]; int arrLen = sysArr.Length; sysSet.CopyTo(sysArr); if (setLen < arrLen) { // null terminator sysArr[setLen] = null; } } }