public void SetObjectAuthority(string playerId, string objectId) { Debug.Log($"Granting authority for {objectId} to {playerId}"); NeutralNetworkManager objectManager = GetObject(objectId); RemoveObjectAuthority(objectId); objectManager.NetworkIdentity.AssignClientAuthority(GetPlayer(playerId).connectionToClient); objectManager.TouchingPlayer = playerId; }
// private void OnCollisionExit2D(Collision2D other) // { // if (!isServer && hasAuthority && other.gameObject.layer == LayerMask.NameToLayer("Player")) // { // PlayerNetworkManager playerManager = other.gameObject.GetComponent<PlayerNetworkManager>(); // if (playerManager.PlayerId == TouchingPlayer) // { // CmdRemoveObjectAuthority(); // } // } // } private void OnCollisionEnter(Collision other) { if (other.gameObject.layer == LayerMask.NameToLayer("SceneProps") && hasAuthority && TouchingPlayer != "") { NeutralNetworkManager otherProp = other.gameObject.GetComponent <NeutralNetworkManager>(); if (otherProp.TouchingPlayer != TouchingPlayer) { CmdRequestObjectAuthority(otherProp.ObjectId); } } }
public void RegisterObject(string id, NeutralNetworkManager manager) { try { _objectMap.Add(id, manager); } catch (ArgumentException) { Debug.Log($"Object {id} already registered"); } }
public void RemoveObjectAuthority(string objectId) { NeutralNetworkManager objectManager = GetObject(objectId); if (objectManager.TouchingPlayer != "") { Debug.Log($"Removing Authority for {objectId} from {objectManager.TouchingPlayer}"); objectManager.NetworkIdentity.RemoveClientAuthority(GetPlayer(objectManager.TouchingPlayer).connectionToClient); objectManager.TouchingPlayer = ""; } }
private void OnCollisionEnter(Collision other) { // Check if we are local and we hit a prop if (isLocalPlayer && other.gameObject.layer == LayerMask.NameToLayer("SceneProps")) { // Make sure we don't already own it NeutralNetworkManager objectManager = other.gameObject.GetComponent <NeutralNetworkManager>(); if (objectManager != null && objectManager.TouchingPlayer != PlayerId) { // Request box authority Debug.Log("Requesting Box authority for local player"); CmdRequestObjectAuthority(objectManager.ObjectId); } } }