From 7c02d4b00693973b4358aa6f75f1471bebb50a31 Mon Sep 17 00:00:00 2001 From: Toys0125 Date: Wed, 1 Apr 2026 21:05:48 -0500 Subject: [PATCH 1/6] Adds NetworkTime, and NetworkDeltaTime. --- Basis/Packages/com.basis.shim/Shims/BasisNetworkShim.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Basis/Packages/com.basis.shim/Shims/BasisNetworkShim.cs b/Basis/Packages/com.basis.shim/Shims/BasisNetworkShim.cs index 004eff59af..20b5108f4d 100644 --- a/Basis/Packages/com.basis.shim/Shims/BasisNetworkShim.cs +++ b/Basis/Packages/com.basis.shim/Shims/BasisNetworkShim.cs @@ -9,6 +9,8 @@ namespace Basis.Shims { public class BasisNetworkShim : BasisNetworkBehaviour { + public DateTime NetworkTime => BasisNetworkManagement.RemoteUtcTime(); + public long NetworkDeltaTime => BasisNetworkManagement.RemoteTimeDelta(); public delegate void NetworkReadyEvent(); public delegate void ServerOwnershipDestroyedEvent(); public delegate void OwnershipTransferEvent(BasisNetworkPlayer NewOwner); From d1705483af1e987a29bf555ecd4e9bd4f09a7288 Mon Sep 17 00:00:00 2001 From: Toys0125 Date: Wed, 1 Apr 2026 22:23:48 -0500 Subject: [PATCH 2/6] Adds if there is an owner check. Had to do this as we can not assume Id=0 means no owner as we start at id 0 for first user. --- .../BasisNetworkBehaviour.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs b/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs index 6854efcfcf..5d14ae951c 100644 --- a/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs +++ b/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs @@ -29,7 +29,7 @@ public ushort NetworkID public bool IsOwnedLocallyOnClient = false; public ushort CurrentOwnerId; public BasisNetworkPlayer currentOwnedPlayer; - + public bool hasCurrentOwner {get; private set; } /// /// the reason its start instead of awake is to make sure progation occurs to everything no matter the net connect /// @@ -104,6 +104,13 @@ private async void OnLocalPlayerJoined(BasisNetworkPlayer NetworkedPlayer, Basis { CurrentOwnerId = InitalOwnershipStatus.PlayerId; BasisNetworkPlayers.GetPlayerById(CurrentOwnerId, out currentOwnedPlayer); + hasCurrentOwner = true; + } + else + { + CurrentOwnerId = 0; + currentOwnedPlayer = null; + hasCurrentOwner = false; } HasNetworkID = IDResolverResult.Success; NetworkID = IDResolverResult.Id; @@ -122,6 +129,11 @@ private void LowLevelOwnershipReleased(string uniqueEntityID) { if (uniqueEntityID == clientIdentifier) { + IsOwnedLocallyOnServer = false; + IsOwnedLocallyOnClient = false; + CurrentOwnerId = 0; + currentOwnedPlayer = null; + hasCurrentOwner = false; OnServerOwnershipDestroyed(); } } @@ -133,6 +145,7 @@ private void LowLevelOwnershipTransfer(string uniqueEntityID, ushort NetIdNewOwn IsOwnedLocallyOnServer = isOwner; IsOwnedLocallyOnClient = isOwner; CurrentOwnerId = NetIdNewOwner; + hasCurrentOwner = true; if (BasisNetworkPlayers.GetPlayerById(CurrentOwnerId, out currentOwnedPlayer)) { OnOwnershipTransfer(currentOwnedPlayer); @@ -142,6 +155,7 @@ private void LowLevelOwnershipTransfer(string uniqueEntityID, ushort NetIdNewOwn BasisUnInitalizedPlayer UnInitalizedPlayer = new BasisUnInitalizedPlayer(CurrentOwnerId); BasisDebug.LogError($"No Owner for Id {CurrentOwnerId} Creating Fake {nameof(BasisUnInitalizedPlayer)} this should only occur rarely"); UnInitalizedPlayer.Initialize(); + currentOwnedPlayer = UnInitalizedPlayer; OnOwnershipTransfer(UnInitalizedPlayer); } } From c6ef6173d3250cd50bac21b7d4c057c3a90a3ff7 Mon Sep 17 00:00:00 2001 From: Toys0125 Date: Thu, 2 Apr 2026 21:46:33 -0500 Subject: [PATCH 3/6] Add TryGetOwnerId. --- .../BasisNetworkBehaviour.cs | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs b/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs index 5d14ae951c..2e9a549137 100644 --- a/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs +++ b/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs @@ -29,7 +29,6 @@ public ushort NetworkID public bool IsOwnedLocallyOnClient = false; public ushort CurrentOwnerId; public BasisNetworkPlayer currentOwnedPlayer; - public bool hasCurrentOwner {get; private set; } /// /// the reason its start instead of awake is to make sure progation occurs to everything no matter the net connect /// @@ -104,13 +103,6 @@ private async void OnLocalPlayerJoined(BasisNetworkPlayer NetworkedPlayer, Basis { CurrentOwnerId = InitalOwnershipStatus.PlayerId; BasisNetworkPlayers.GetPlayerById(CurrentOwnerId, out currentOwnedPlayer); - hasCurrentOwner = true; - } - else - { - CurrentOwnerId = 0; - currentOwnedPlayer = null; - hasCurrentOwner = false; } HasNetworkID = IDResolverResult.Success; NetworkID = IDResolverResult.Id; @@ -131,9 +123,6 @@ private void LowLevelOwnershipReleased(string uniqueEntityID) { IsOwnedLocallyOnServer = false; IsOwnedLocallyOnClient = false; - CurrentOwnerId = 0; - currentOwnedPlayer = null; - hasCurrentOwner = false; OnServerOwnershipDestroyed(); } } @@ -145,7 +134,6 @@ private void LowLevelOwnershipTransfer(string uniqueEntityID, ushort NetIdNewOwn IsOwnedLocallyOnServer = isOwner; IsOwnedLocallyOnClient = isOwner; CurrentOwnerId = NetIdNewOwner; - hasCurrentOwner = true; if (BasisNetworkPlayers.GetPlayerById(CurrentOwnerId, out currentOwnedPlayer)) { OnOwnershipTransfer(currentOwnedPlayer); @@ -316,6 +304,18 @@ public async Task RequestWhoIsOwnershipAsync(int Timout = BasisOwnershipResult Result = await BasisNetworkOwnership.RequestCurrentOwnershipAsync(clientIdentifier, Timout); return Result; } + + public bool TryGetOwnerId(out ushort OwnerId) + { + if (currentOwnedPlayer != null && currentOwnedPlayer.IsOwnerCached(clientIdentifier)) + { + OwnerId = currentOwnedPlayer.playerId; + return true; + } + OwnerId = 0; + return false; + } + public virtual void OnNetworkReady() { From 484a1d6cb9289bbc1b9bdedc0a8dc0fe9fc608d7 Mon Sep 17 00:00:00 2001 From: Toys0125 Date: Thu, 2 Apr 2026 21:46:56 -0500 Subject: [PATCH 4/6] Add more exposeable systems to cilbox. --- Basis/Packages/com.basis.shim/Shims/CilboxPropBasis.cs | 5 ++++- .../Packages/com.basis.shim/Shims/CilboxSceneBasis.cs | 10 ++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Basis/Packages/com.basis.shim/Shims/CilboxPropBasis.cs b/Basis/Packages/com.basis.shim/Shims/CilboxPropBasis.cs index cbaf87c789..deff13666e 100644 --- a/Basis/Packages/com.basis.shim/Shims/CilboxPropBasis.cs +++ b/Basis/Packages/com.basis.shim/Shims/CilboxPropBasis.cs @@ -70,6 +70,7 @@ public class CilboxPropBasis : Cilbox "UnityEngine.Collision", "UnityEngine.Events.UnityAction", "UnityEngine.Events.UnityEvent", + "UnityEngine.EventSystems.*", "UnityEngine.GameObject", // Hyper restrictive. "UnityEngine.Material", "UnityEngine.MaterialPropertyBlock", @@ -86,6 +87,7 @@ public class CilboxPropBasis : Cilbox "UnityEngine.Transform", "UnityEngine.Quaternion", "UnityEngine.Rigidbody", + "UnityEngine.RectTransform", "UnityEngine.RenderTexture", "UnityEngine.RenderTextureFormat", "UnityEngine.UI.*", @@ -107,6 +109,7 @@ public class CilboxPropBasis : Cilbox "UnityEngine.Vector*.y", "UnityEngine.Vector*.z", "UnityEngine.Vector*.w", + "UnityEngine.EventSystems.EventTrigger+Entry.*", // System fields "System.Array.*", @@ -118,7 +121,7 @@ public class CilboxPropBasis : Cilbox "Basis.Scripts.BasisSdk.Interactions.BasisInteractableObject.OnInteractStartEvent", "Basis.Scripts.BasisSdk.Interactions.BasisInteractableObject.OnInteractEndEvent", "Basis.BasisNetworkBehaviour.CurrentOwnerId", - "Basis.BasisNetworkBehaviour.IsOwnedLocallyOnServer", + "Basis.BasisNetworkBehaviour.IsOwnedLocally*", }; static public HashSet GetWhiteListTypes() { return whiteListType; } diff --git a/Basis/Packages/com.basis.shim/Shims/CilboxSceneBasis.cs b/Basis/Packages/com.basis.shim/Shims/CilboxSceneBasis.cs index 2dd50cf2f9..0a573748be 100644 --- a/Basis/Packages/com.basis.shim/Shims/CilboxSceneBasis.cs +++ b/Basis/Packages/com.basis.shim/Shims/CilboxSceneBasis.cs @@ -88,11 +88,7 @@ public class CilboxSceneBasis : Cilbox "UnityEngine.DynamicGI", "UnityEngine.Events.UnityAction", "UnityEngine.Events.UnityEvent", - "UnityEngine.EventSystems.BaseEventData", - "UnityEngine.EventSystems.EventTrigger", - "UnityEngine.EventSystems.EventTrigger+Entry", - "UnityEngine.EventSystems.EventTrigger+TriggerEvent", - "UnityEngine.EventSystems.EventTriggerType", + "UnityEngine.EventSystems.*", "UnityEngine.GameObject", // Hyper restrictive. "UnityEngine.Gradient", "UnityEngine.LayerMask", @@ -107,6 +103,7 @@ public class CilboxSceneBasis : Cilbox "UnityEngine.ParticleSystem", "UnityEngine.Quaternion", "UnityEngine.Random", + "UnityEngine.RectTransform", "UnityEngine.Renderer", "UnityEngine.RenderTextureFormat", "UnityEngine.Rendering.AmbientMode", @@ -125,7 +122,7 @@ public class CilboxSceneBasis : Cilbox static HashSet whiteListFields = new HashSet(){ // Basis fields "Basis.BasisNetworkBehaviour.CurrentOwnerId", - "Basis.BasisNetworkBehaviour.IsOwnedLocallyOnServer", + "Basis.BasisNetworkBehaviour.IsOwnedLocally*", "Basis.Scripts.Networking.NetworkedAvatar.BasisNetworkPlayer.playerId", // Unity fields @@ -133,6 +130,7 @@ public class CilboxSceneBasis : Cilbox "UnityEngine.Vector*.y", "UnityEngine.Vector*.z", "UnityEngine.Vector*.w", + "UnityEngine.EventSystems.EventTrigger+Entry.*", // System fields "System.Array.*", From 5c757e92da3c28b7c46e2b13c1606691ee07d978 Mon Sep 17 00:00:00 2001 From: Toys0125 Date: Sat, 2 May 2026 23:32:43 -0500 Subject: [PATCH 5/6] Move the time to NetworkBehaviour. --- .../Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs | 3 +++ Basis/Packages/com.basis.shim/Shims/BasisNetworkShim.cs | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs b/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs index 2e9a549137..faf96539d1 100644 --- a/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs +++ b/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs @@ -29,6 +29,9 @@ public ushort NetworkID public bool IsOwnedLocallyOnClient = false; public ushort CurrentOwnerId; public BasisNetworkPlayer currentOwnedPlayer; + + public DateTime RemoteUtcTime => BasisNetworkManagement.RemoteUtcTime(); + public long RemoteDeltaTime => BasisNetworkManagement.RemoteTimeDelta(); /// /// the reason its start instead of awake is to make sure progation occurs to everything no matter the net connect /// diff --git a/Basis/Packages/com.basis.shim/Shims/BasisNetworkShim.cs b/Basis/Packages/com.basis.shim/Shims/BasisNetworkShim.cs index 20b5108f4d..004eff59af 100644 --- a/Basis/Packages/com.basis.shim/Shims/BasisNetworkShim.cs +++ b/Basis/Packages/com.basis.shim/Shims/BasisNetworkShim.cs @@ -9,8 +9,6 @@ namespace Basis.Shims { public class BasisNetworkShim : BasisNetworkBehaviour { - public DateTime NetworkTime => BasisNetworkManagement.RemoteUtcTime(); - public long NetworkDeltaTime => BasisNetworkManagement.RemoteTimeDelta(); public delegate void NetworkReadyEvent(); public delegate void ServerOwnershipDestroyedEvent(); public delegate void OwnershipTransferEvent(BasisNetworkPlayer NewOwner); From 8c21eab786f6af49afded956f4e477a9778620cd Mon Sep 17 00:00:00 2001 From: Toys0125 Date: Sat, 2 May 2026 23:33:03 -0500 Subject: [PATCH 6/6] Have it auto request the server and have it cached for next time. --- .../Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs b/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs index faf96539d1..6861f5dea7 100644 --- a/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs +++ b/Basis/Packages/com.basis.framework/Networking/BasisNetworkBehaviour/BasisNetworkBehaviour.cs @@ -316,6 +316,8 @@ public bool TryGetOwnerId(out ushort OwnerId) return true; } OwnerId = 0; + // if we dont have it cached locally we can ask the server to give it to us to cache and invoke any ownershipTransfer events. + RequestWhoIsOwnershipAsync(); return false; }