Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
        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);
 }
Exemplo n.º 9
0
        public RPCPacketData GenerateRPCData(Packet.sendType sendType = Packet.sendType.culledbuffered, params object[] list)
        {
            RPCPacketData rpcData = new RPCPacketData(net.networkID, rpcIndex, NetTools.clientID, list);

            return(rpcData);
        }