From 18da9a59781df3762af7122e168374c2b79b2e25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20Cor=C3=A9n?= <2108U9@gmail.com> Date: Sun, 7 Jan 2018 07:33:55 +0100 Subject: [PATCH] Added owned objects --- MLAPI/Data/NetworkedClient.cs | 4 +++- MLAPI/MonoBehaviours/Core/NetworkedObject.cs | 18 ++++++++++++++++-- MLAPI/MonoBehaviours/Core/NetworkingManager.cs | 8 ++++++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/MLAPI/Data/NetworkedClient.cs b/MLAPI/Data/NetworkedClient.cs index 43e3f1a..f8cd263 100644 --- a/MLAPI/Data/NetworkedClient.cs +++ b/MLAPI/Data/NetworkedClient.cs @@ -1,4 +1,5 @@ -using UnityEngine; +using System.Collections.Generic; +using UnityEngine; namespace MLAPI { @@ -6,5 +7,6 @@ namespace MLAPI { public int ClientId; public GameObject PlayerObject; + public List OwnedObjects; } } diff --git a/MLAPI/MonoBehaviours/Core/NetworkedObject.cs b/MLAPI/MonoBehaviours/Core/NetworkedObject.cs index 1e5ef47..3da11bb 100644 --- a/MLAPI/MonoBehaviours/Core/NetworkedObject.cs +++ b/MLAPI/MonoBehaviours/Core/NetworkedObject.cs @@ -11,13 +11,21 @@ namespace MLAPI [HideInInspector] public int SpawnablePrefabIndex; [HideInInspector] - public bool IsPlayerObject = false; + public bool isPlayerObject = false; public bool ServerOnly = false; public bool isLocalPlayer { get { - return IsPlayerObject && (OwnerClientId == NetworkingManager.singleton.MyClientId || (OwnerClientId == -1 && NetworkingManager.singleton.isHost)); + return isPlayerObject && (OwnerClientId == NetworkingManager.singleton.MyClientId || (OwnerClientId == -1 && NetworkingManager.singleton.isHost)); + } + } + + public bool IsOwner + { + get + { + return !isPlayerObject && (OwnerClientId == NetworkingManager.singleton.MyClientId || (OwnerClientId == -1 && NetworkingManager.singleton.isHost)); } } @@ -27,9 +35,15 @@ namespace MLAPI } internal bool isSpawned = false; + public void Spawn() { NetworkingManager.singleton.OnSpawnObject(this); } + + public void SpawnWithOwnership(int clientId) + { + NetworkingManager.singleton.OnSpawnObject(this, clientId); + } } } diff --git a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs index c9a04c9..c8b11df 100644 --- a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs +++ b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs @@ -122,7 +122,7 @@ namespace MLAPI { netObject.NetworkId = networkId; } - netObject.IsPlayerObject = true; + netObject.isPlayerObject = true; connectedClients[clientId].PlayerObject = go; singleton.spawnedObjects.Add(netObject.NetworkId, netObject); return go; @@ -834,6 +834,10 @@ namespace MLAPI if(NetworkConfig.HandleObjectSpawning) { Destroy(connectedClients[clientId].PlayerObject); + for (int i = 0; i < connectedClients[clientId].OwnedObjects.Count; i++) + { + Destroy(connectedClients[clientId].OwnedObjects[i].gameObject); + } } connectedClients.Remove(clientId); } @@ -904,7 +908,7 @@ namespace MLAPI if (pair.Value.ServerOnly) continue; - writer.Write(pair.Value.IsPlayerObject); + writer.Write(pair.Value.isPlayerObject); writer.Write(pair.Value.NetworkId); writer.Write(pair.Value.OwnerClientId); writer.Write(pair.Value.SpawnablePrefabIndex);