From 41af623ded06f14ed08122f42fe95389425b0476 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Sat, 4 Dec 2021 17:44:21 -0800 Subject: [PATCH] use prefab template to make network objects --- QSB/AssetBundles/network | Bin 3948 -> 3213 bytes QSB/AssetBundles/network.manifest | 22 ++++------------- QSB/QSBCore.cs | 2 +- QSB/QSBNetworkManager.cs | 38 +++++++++++++++++++++++------- 4 files changed, 34 insertions(+), 28 deletions(-) diff --git a/QSB/AssetBundles/network b/QSB/AssetBundles/network index dfbd89d660febf2a184c618b419aab16cf3476d0..e1bab2b2b0d5cb22f764b5bce02ae68c1cebc088 100644 GIT binary patch delta 3123 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 N9Nh({O^W-k5hrG*|+f{|~5EpMJuO%C;FLv)A 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 DebugMode && DebugSettings.ShowQuantumDebugBoxes; public static bool AvoidTimeSync => DebugMode && DebugSettings.AvoidTimeSync; public static bool SkipTitleScreen => DebugMode && DebugSettings.SkipTitleScreen; - public static AssetBundle NetworkAssetBundle { get; private set; } + public static AssetBundle NetworkAssetBundle { get; internal set; } public static AssetBundle InstrumentAssetBundle { get; private set; } public static AssetBundle ConversationAssetBundle { get; private set; } public static AssetBundle DebugAssetBundle { get; private set; } diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index f70ceeaf..92f557cc 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -2,10 +2,12 @@ using System.Linq; using OWML.Common; using OWML.Utils; +using QSB.Anglerfish.TransformSync; using QSB.AuthoritySync; using QSB.ClientServerStateSync; using QSB.DeathSync; using QSB.Events; +using QSB.JellyfishSync.TransformSync; using QSB.OrbSync.TransformSync; using QSB.Patches; using QSB.Player; @@ -13,6 +15,8 @@ using QSB.Player.TransformSync; using QSB.PoolSync; using QSB.ShipSync.TransformSync; using QSB.TimeSync; +using QSB.Tools.ProbeTool.TransformSync; +using QSB.TornadoSync.TransformSync; using QSB.Utility; using QSB.WorldSync; using QuantumUNET; @@ -42,7 +46,6 @@ namespace QSB private const int MaxConnections = 128; private const int MaxBufferedPackets = 64; - private AssetBundle _assetBundle; private GameObject _probePrefab; private bool _everConnected; @@ -52,26 +55,25 @@ namespace QSB Instance = this; PlayerName = GetPlayerName(); - _assetBundle = QSBCore.NetworkAssetBundle; - playerPrefab = _assetBundle.LoadAsset("Assets/Prefabs/NETWORK_Player_Body.prefab"); + playerPrefab = QSBCore.NetworkAssetBundle.LoadAsset("Assets/Prefabs/NETWORK_Player_Body.prefab"); - ShipPrefab = _assetBundle.LoadAsset("assets/Prefabs/networkship.prefab"); + ShipPrefab = MakeNewNetworkObject(2, "NetworkShip", typeof(ShipTransformSync)); spawnPrefabs.Add(ShipPrefab); - _probePrefab = _assetBundle.LoadAsset("assets/Prefabs/networkprobe.prefab"); + _probePrefab = MakeNewNetworkObject(3, "NetworkProbe", typeof(PlayerProbeSync)); spawnPrefabs.Add(_probePrefab); - OrbPrefab = _assetBundle.LoadAsset("assets/Prefabs/networkorb.prefab"); + OrbPrefab = MakeNewNetworkObject(4, "NetworkOrb", typeof(NomaiOrbTransformSync)); spawnPrefabs.Add(OrbPrefab); - AnglerPrefab = _assetBundle.LoadAsset("assets/Prefabs/networkangler.prefab"); + AnglerPrefab = MakeNewNetworkObject(5, "NetworkAngler", typeof(AnglerTransformSync)); spawnPrefabs.Add(AnglerPrefab); - JellyfishPrefab = _assetBundle.LoadAsset("assets/Prefabs/networkjellyfish.prefab"); + JellyfishPrefab = MakeNewNetworkObject(6, "NetworkJellyfish", typeof(JellyfishTransformSync)); spawnPrefabs.Add(JellyfishPrefab); - OccasionalPrefab = _assetBundle.LoadAsset("assets/Prefabs/networkoccasional.prefab"); + OccasionalPrefab = MakeNewNetworkObject(7, "NetworkOccasional", typeof(OccasionalTransformSync)); spawnPrefabs.Add(OccasionalPrefab); ConfigureNetworkManager(); @@ -94,6 +96,24 @@ namespace QSB } } + /// create a new network prefab from the network object prefab template. + /// this works by calling Unload(false) and then reloading the AssetBundle, + /// which makes LoadAsset give you a new resource. + /// see https://docs.unity3d.com/Manual/AssetBundles-Native.html. + private static GameObject MakeNewNetworkObject(int assetId, string name, Type transformSyncType) + { + QSBCore.NetworkAssetBundle.Unload(false); + QSBCore.NetworkAssetBundle = QSBCore.Helper.Assets.LoadBundle("AssetBundles/network"); + + var template = QSBCore.NetworkAssetBundle.LoadAsset("Assets/Prefabs/NetworkObject.prefab"); + DebugLog.DebugWrite($"MakeNewNetworkObject - prefab id {template.GetInstanceID()} " + + $"for {assetId} {name} {transformSyncType.Name}"); + template.name = name; + template.GetRequiredComponent().SetValue("m_AssetId", assetId); + template.AddComponent(transformSyncType); + return template; + } + private void ConfigureNetworkManager() { networkAddress = QSBCore.DefaultServerIP;