Added methods to control ownership

This commit is contained in:
Albin Corén 2018-03-05 12:55:23 +01:00
parent f49aa9aadb
commit 914c7a2a81
3 changed files with 55 additions and 1 deletions

View File

@ -8,7 +8,7 @@ namespace MLAPI
[HideInInspector]
public uint NetworkId;
[HideInInspector]
public int OwnerClientId = -1;
public int OwnerClientId = -2;
[HideInInspector]
public int SpawnablePrefabIndex;
[HideInInspector]
@ -51,6 +51,16 @@ namespace MLAPI
SpawnManager.OnSpawnObject(this, clientId);
}
public void RemoveOwnership()
{
SpawnManager.RemoveOwnership(NetworkId);
}
public void ChangeOwnership(int newOwnerClientId)
{
SpawnManager.ChangeOwnership(NetworkId, newOwnerClientId);
}
internal void InvokeBehaviourNetworkSpawn()
{
NetworkedBehaviour[] netBehaviours = GetComponentsInChildren<NetworkedBehaviour>();

View File

@ -102,6 +102,7 @@ namespace MLAPI
MessageManager.messageTypes.Add("MLAPI_SWITCH_SCENE", 5);
MessageManager.messageTypes.Add("MLAPI_SPAWN_POOL_OBJECT", 6);
MessageManager.messageTypes.Add("MLAPI_DESTROY_POOL_OBJECT", 7);
MessageManager.messageTypes.Add("MLAPI_CHANGE_OWNER", 8);
NetworkConfig.MessageTypes.Add("MLAPI_OnRecieveTransformFromClient");
NetworkConfig.MessageTypes.Add("MLAPI_OnRecieveTransformFromServer");
@ -628,6 +629,20 @@ namespace MLAPI
}
}
break;
case 8: //Change owner
if(isClient)
{
using (MemoryStream messageReadStream = new MemoryStream(incommingData))
{
using (BinaryReader messageReader = new BinaryReader(messageReadStream))
{
uint netId = messageReader.ReadUInt32();
int ownerClientId = messageReader.ReadInt32();
SpawnManager.spawnedObjects[netId].OwnerClientId = ownerClientId;
}
}
}
break;
}
}
}

View File

@ -30,6 +30,35 @@ namespace MLAPI.NetworkingManagerComponents
}
}
internal static void RemoveOwnership(uint netId)
{
NetworkedObject netObject = SpawnManager.spawnedObjects[netId];
netObject.OwnerClientId = -2;
using (MemoryStream stream = new MemoryStream(8))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(netId);
writer.Write(-2);
}
netManager.Send("MLAPI_CHANGE_OWNER", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", stream.GetBuffer());
}
}
internal static void ChangeOwnership(uint netId, int clientId)
{
NetworkedObject netObject = SpawnManager.spawnedObjects[netId];
netObject.OwnerClientId = clientId;
using (MemoryStream stream = new MemoryStream(8))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(netId);
writer.Write(clientId);
}
netManager.Send("MLAPI_CHANGE_OWNER", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", stream.GetBuffer());
}
}
internal static GameObject SpawnObject(int spawnablePrefabIndex, uint networkId, int ownerId)
{