public void CallRPC(Packet.sendType sendType = Packet.sendType.culledbuffered, params object[] list) { RPCPacketData rpcData = GenerateRPCData(sendType, list); Packet p = new Packet(Packet.pType.rpc, sendType, ENSSerialization.SerializeRPCPacketData(rpcData)); p.sendToAll = true; p.relatesToNetObjID = net.networkID; if (NetTools.IsMultiplayerGame() == false) { InvokeRPC(rpcData.ReturnArgs()); return; } if (net == null || !net.initialized) { queued.Add(sendType, list); //Debug.Log("Rpc called before initialization. Adding to queue"); return; } NetClient.instanceClient.SendPacket(p); }
public static void NetDestroy(NetworkObject netObj, Packet.sendType sT = Packet.sendType.buffered) { if (netObj == null) { Debug.LogError("Object reference not set."); return; } NetDestroy(netObj.networkID, sT); }
public Packet GenerateRPCPacket(Packet.sendType sendType = Packet.sendType.culledbuffered, params object[] list) { RPCPacketData rpcData = new RPCPacketData(net.networkID, rpcIndex, NetTools.clientID, list); Packet p = new Packet(Packet.pType.rpc, sendType, ENSSerialization.SerializeRPCPacketData(rpcData)); p.sendToAll = true; p.relatesToNetObjID = net.networkID; return(p); }
public static void NetDestroy(int netID, Packet.sendType sT = Packet.sendType.buffered, bool destroyImmediate = false, bool cullRelatedPackets = true) { NetworkObject netObj = NetworkObject.NetObjFromNetID(netID); if (netObj == null) { Debug.LogError("Network Object doesn't exist. ID(" + netID + ")"); return; } if (clientID == netObj.ownerID || isServer || netObj.sharedObject) { //Destroy(netObj.gameObject); Packet p = new Packet(Packet.pType.gODestroy, sT, System.BitConverter.GetBytes(cullRelatedPackets)); p.relatesToNetObjID = netID; p.packetOwnerID = clientID; p.tag = NetworkData.instance.TagIDToTagName(NetworkData.instance.networkPrefabList[netObj.prefabDomainID].defaultPacketTagID); NetClient.instanceClient.SendPacket(p); if (destroyImmediate) { if (!UnityPacketHandler.instance.disableBeforeDestroy) { //Pool the object, if it doesn't pool, destroy it. if (NetworkData.instance.ResetPooledObject(netObj) == false) { Destroy(netObj); } } else { if (NetworkData.instance.ResetPooledObject(netObj) == false) { UnityPacketHandler.instance.destroyQueue.Insert(0, netObj.gameObject); netObj.gameObject.SetActive(false); } } } } else { Debug.Log("You don't have authority over this object."); } }
public static GameObject NetInstantiate(int prefabDomain, int prefabID, Vector3 position, Quaternion rotation, Packet.sendType sT = Packet.sendType.buffered, bool isSharedObject = false, List <NetworkFieldPacket> fieldDefaults = null) { int netObjID = GenerateNetworkObjectID(); if (NetTools.IsMultiplayerGame()) { if (!NetTools.isServer && NetworkData.instance.networkPrefabList[prefabDomain].prefabList[prefabID].serverInstantiateOnly) { #if UNITY_EDITOR Debug.LogWarning("Tried to make server authority only object: domain: " + prefabDomain + ", id: " + prefabID); #endif return(null); //If it is server only, and you aren't the server, don't do it. } SerializableVector finalVector = new SerializableVector(position); SerializableQuaternion finalQuat = new SerializableQuaternion(rotation); GameObjectInstantiateData gOID = new GameObjectInstantiateData(); gOID.position = finalVector; gOID.rotation = finalQuat; gOID.prefabDomainID = prefabDomain; gOID.prefabID = prefabID; gOID.isShared = isSharedObject; gOID.netObjID = netObjID; gOID.fieldDefaults = fieldDefaults; Packet p = new Packet(Packet.pType.gOInstantiate, Packet.sendType.buffered, ENSSerialization.SerializeGOID(gOID)); p.tag = NetworkData.instance.TagIDToTagName(NetworkData.instance.networkPrefabList[prefabDomain].defaultPacketTagID); //if(sT == Packet.sendType.buffered && isServer) //{ // NetServer.serverInstance.bufferedPackets.Add(p); //} NetClient.instanceClient.SendPacket(p); } //Try to get a pooled one first. GameObject g = NetworkData.instance.RequestPooledObject(prefabDomain, prefabID); if (g == null) //If there is no pooled remaining make a new one. { g = Instantiate(NetworkData.instance.networkPrefabList[prefabDomain].prefabList[prefabID].prefab, position, rotation); } else { //If pooled apply required position/rotation g.transform.position = position; g.transform.rotation = rotation; } NetworkObject nObj = g.GetComponent <NetworkObject>(); if (nObj == null) { nObj = g.AddComponent <NetworkObject>(); } nObj.ownerID = NetTools.clientID; nObj.prefabDomainID = prefabDomain; nObj.prefabID = prefabID; nObj.networkID = netObjID; nObj.sharedObject = isSharedObject; nObj.detectNetworkStarts = NetworkData.instance.networkPrefabList[prefabDomain].detectNetworkStarts; nObj.Initialize(); //nObj.DoRpcFieldInitialization(); if (nObj.onNetworkStart != null) { nObj.onNetworkStart.Invoke(); } //nObj.initialized = true; if (fieldDefaults != null) { foreach (NetworkFieldPacket nFP in fieldDefaults) { nFP.networkObjID = netObjID; nObj.SetFieldLocal(nFP.fieldName, nFP.data.ToObject()); //Instead just update it in UnityPacketHandler for everyone else, preventing extra packets and data from being send and lagging. //nObj.UpdateField(nFP.fieldName, nFP.data.ToObject(), nFP.immediateOnSelf); } } return(g); }
public static GameObject Instantiate(int prefabDomain, int prefabID, Vector3 position, Quaternion rotation, Packet.sendType sT = Packet.sendType.buffered, bool isSharedObject = false, List <NetworkFieldPacket> fieldDefaults = null) { return(NetInstantiate(prefabDomain, prefabID, position, rotation, sT, isSharedObject, fieldDefaults)); }
//Useless cause NetInstantiate should check, but still here! public static GameObject ManagedInstantiate(int prefabDomain, int prefabID, Vector3 position, Quaternion rotation, Packet.sendType sT = Packet.sendType.buffered, bool isSharedObject = false) { //For if you aren't sure if it is a multiplayer or singleplayer game. if (isServer || isClient) { return(NetInstantiate(prefabDomain, prefabID, position, rotation, sT, isSharedObject)); } else { return(Instantiate(NetworkData.instance.networkPrefabList[prefabDomain].prefabList[prefabID].prefab, position, rotation)); } }
public static void Destroy(NetworkObject netObj, Packet.sendType sT = Packet.sendType.buffered) { NetDestroy(netObj, sT); }
public RPCPacketData GenerateRPCData(Packet.sendType sendType = Packet.sendType.culledbuffered, params object[] list) { RPCPacketData rpcData = new RPCPacketData(net.networkID, rpcIndex, NetTools.clientID, list); return(rpcData); }