Skip to content

Commit 914c7a2

Browse files
committed
Added methods to control ownership
1 parent f49aa9a commit 914c7a2

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

MLAPI/MonoBehaviours/Core/NetworkedObject.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class NetworkedObject : MonoBehaviour
88
[HideInInspector]
99
public uint NetworkId;
1010
[HideInInspector]
11-
public int OwnerClientId = -1;
11+
public int OwnerClientId = -2;
1212
[HideInInspector]
1313
public int SpawnablePrefabIndex;
1414
[HideInInspector]
@@ -51,6 +51,16 @@ public void SpawnWithOwnership(int clientId)
5151
SpawnManager.OnSpawnObject(this, clientId);
5252
}
5353

54+
public void RemoveOwnership()
55+
{
56+
SpawnManager.RemoveOwnership(NetworkId);
57+
}
58+
59+
public void ChangeOwnership(int newOwnerClientId)
60+
{
61+
SpawnManager.ChangeOwnership(NetworkId, newOwnerClientId);
62+
}
63+
5464
internal void InvokeBehaviourNetworkSpawn()
5565
{
5666
NetworkedBehaviour[] netBehaviours = GetComponentsInChildren<NetworkedBehaviour>();

MLAPI/MonoBehaviours/Core/NetworkingManager.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ private ConnectionConfig Init(NetworkingConfiguration netConfig)
102102
MessageManager.messageTypes.Add("MLAPI_SWITCH_SCENE", 5);
103103
MessageManager.messageTypes.Add("MLAPI_SPAWN_POOL_OBJECT", 6);
104104
MessageManager.messageTypes.Add("MLAPI_DESTROY_POOL_OBJECT", 7);
105+
MessageManager.messageTypes.Add("MLAPI_CHANGE_OWNER", 8);
105106
NetworkConfig.MessageTypes.Add("MLAPI_OnRecieveTransformFromClient");
106107
NetworkConfig.MessageTypes.Add("MLAPI_OnRecieveTransformFromServer");
107108

@@ -628,6 +629,20 @@ private void HandleIncomingData(int clientId, byte[] data, int channelId)
628629
}
629630
}
630631
break;
632+
case 8: //Change owner
633+
if(isClient)
634+
{
635+
using (MemoryStream messageReadStream = new MemoryStream(incommingData))
636+
{
637+
using (BinaryReader messageReader = new BinaryReader(messageReadStream))
638+
{
639+
uint netId = messageReader.ReadUInt32();
640+
int ownerClientId = messageReader.ReadInt32();
641+
SpawnManager.spawnedObjects[netId].OwnerClientId = ownerClientId;
642+
}
643+
}
644+
}
645+
break;
631646
}
632647
}
633648
}

MLAPI/NetworkingManagerComponents/SpawnManager.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,35 @@ private static NetworkingManager netManager
3030
}
3131
}
3232

33+
internal static void RemoveOwnership(uint netId)
34+
{
35+
NetworkedObject netObject = SpawnManager.spawnedObjects[netId];
36+
netObject.OwnerClientId = -2;
37+
using (MemoryStream stream = new MemoryStream(8))
38+
{
39+
using (BinaryWriter writer = new BinaryWriter(stream))
40+
{
41+
writer.Write(netId);
42+
writer.Write(-2);
43+
}
44+
netManager.Send("MLAPI_CHANGE_OWNER", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", stream.GetBuffer());
45+
}
46+
}
47+
48+
internal static void ChangeOwnership(uint netId, int clientId)
49+
{
50+
NetworkedObject netObject = SpawnManager.spawnedObjects[netId];
51+
netObject.OwnerClientId = clientId;
52+
using (MemoryStream stream = new MemoryStream(8))
53+
{
54+
using (BinaryWriter writer = new BinaryWriter(stream))
55+
{
56+
writer.Write(netId);
57+
writer.Write(clientId);
58+
}
59+
netManager.Send("MLAPI_CHANGE_OWNER", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", stream.GetBuffer());
60+
}
61+
}
3362

3463
internal static GameObject SpawnObject(int spawnablePrefabIndex, uint networkId, int ownerId)
3564
{

0 commit comments

Comments
 (0)