Exemplo n.º 1
0
    //A constant loop that updates the clients on the position of other clients and the host
    private IEnumerator UpdateClients(float timeBetweenPackets)
    {
        while (true)
        {
            yield return(new WaitForSeconds(timeBetweenPackets));

            SerializableVector[] pos = new SerializableVector[clients.Count + 1];
            //
            bool[] posUpdates = new bool[clients.Count + 1];
            //The first position is that of the host
            pos[0]        = hostPlayer.transform.position;
            posUpdates[0] = true;

            //Get all the clients latest positions, load them into the packet along with whether that client sent in a position update
            foreach (var serverClient in clients)
            {
                pos[serverClient.clientId]        = serverClient.position;
                posUpdates[serverClient.clientId] = serverClient.positionUpdated;
                serverClient.positionUpdated      = false;
            }

            var serverPacket = new DataPacket.FromServer();
            serverPacket = DataPacket.GetFromServerPositionPacket(pos, posUpdates, 0);
            //We don't particularly mind if movement packets occasionally get lost
            //It'll help with network bandwidth to just send these frequently without care for them
            BroadcastWithLoss(serverPacket);
        }
    }
Exemplo n.º 2
0
        void IXmlSerializable.ReadXml(System.Xml.XmlReader reader)
        {
            SerializableVector s = new SerializableVector();

            s.ReadXml(reader);
            logProb = (DenseVector)s;
        }
Exemplo n.º 3
0
 public static void RaiseUpdateClientPosition(SerializableVector pos, bool posUpdated, int id)
 {
     if (UpdateClientPositionHandler != null)
     {
         UpdateClientPositionHandler.Invoke(pos, posUpdated, id);
     }
 }
Exemplo n.º 4
0
        public void RestoreState(object state)
        {
            SerializableVector vec = (SerializableVector)state;

            GetComponent <NavMeshAgent>().isStopped = true;
            GetComponent <NavMeshAgent>().enabled   = false;
            transform.position = vec.ToVector3();
            GetComponent <NavMeshAgent>().enabled = true;
        }
Exemplo n.º 5
0
    public static DataPacket.FromClient GetFromClientPositionPacket(SerializableVector _positionVector, int _playerId)
    {
        var packet = new FromClient();

        packet.packetType     = ServerMessages.POSITION;
        packet.positionVector = _positionVector;
        packet.playerId       = _playerId;
        return(packet);
    }
Exemplo n.º 6
0
    //Sends data every tick to the server letting it know it's transform
    private IEnumerator ReportPosition(float timeBetweenUpdates)
    {
        while (true)
        {
            yield return(new WaitForSeconds(timeBetweenUpdates));

            DataPacket.FromClient packet = new DataPacket.FromClient();
            SerializableVector    pos    = transform.position;
            packet = DataPacket.GetFromClientPositionPacket(pos, ServerSettings.instance.playerId);
            ClientTCP.instance.SendDataWithLoss(packet);
        }
    }
Exemplo n.º 7
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "MainCube" || other.gameObject.tag == "SecondCube")
        {
            SaveManager.coins++;
            GameObject.Find("GameHandler").GetComponent <GameHandler>().mplevel++;

            GameObject.Find("Main Camera").transform.Find("MainScreen").Find("CoinsPanel").Find("Text").GetComponent <Text>().text = SaveManager.coins.ToString();

            SerializableVector vec = new SerializableVector
            {
                x = transform.parent.position.x,
                z = transform.parent.position.z
            };
            LevelManager.coinMaps.Add(vec);
            DestroyObject(this.gameObject);
        }
    }
Exemplo n.º 8
0
        void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
        {
            SerializableVector s = (SerializableVector)logProb;

            s.WriteXml(writer);
        }
    public void RestoreState(object state)
    {
        SerializableVector vec = state as SerializableVector;

        transform.position = vec.GetVector();
    }
Exemplo n.º 10
0
        public void UpdateField <T>(T value, int netObjID, bool immediateOnSelf = true)
        {
            if (value == null)
            {
                Debug.LogError("Cannot change value to null...", netObj.transform);
                return;
            }

            object newValue = value;

            if (value.GetType() == typeof(Vector3))
            {
                newValue = new SerializableVector((Vector3)System.Convert.ChangeType(value, typeof(Vector3)));
            }

            if (netObj == null)
            {
                netObj = NetworkObject.NetObjFromNetID(netObjID);
            }

            //If still null, netObj must of been destroyed.
            if (netObj == null)
            {
                return;
            }

            if (netID == -1)
            {
                netID = netObj.networkID;
            }

            JsonPacketObject jPO;


            if (!ENSUtils.IsSimple(newValue.GetType()))
            {
                jPO = new JsonPacketObject(JsonUtility.ToJson(newValue), newValue.GetType().ToString());
            }
            else
            {
                jPO = new JsonPacketObject("" + newValue, newValue.GetType().ToString());
            }

            if (!NetTools.IsMultiplayerGame())
            {
                //If singleplayer game just immediately set the value no matter what. No need to use the packet handler for this.
                LocalFieldSet(newValue);
                return;
            }

            Packet pack = new Packet(Packet.pType.netVarEdit, Packet.sendType.nonbuffered,
                                     ENSSerialization.SerializeNetworkFieldPacket(new NetworkFieldPacket(netObjID, fieldName, jPO, immediateOnSelf)));

            pack.reliable          = reliable;
            pack.relatesToNetObjID = netObjID;
            if (shouldBeProximity && netObj != null)
            {
                pack.packetSendType = Packet.sendType.proximity;
                pack.packetPosition = new SerializableVector(netObj.transform.position);
            }
            if (NetClient.instanceClient != null && !netObj.updateFieldsThroughServer)
            {
                NetClient.instanceClient.SendPacket(pack);
            }
            else if (NetServer.serverInstance != null)
            {
                foreach (NetworkPlayer player in NetServer.serverInstance.connections)
                {
                    if (!player.playerConnected)
                    {
                        continue; //No longer connected.
                    }
                    if (player.clientID == NetTools.clientID)
                    {
                        continue;
                    }
                    NetServer.serverInstance.SendPacket(player, pack);
                }
            }
            if (immediateOnSelf)
            {
                LocalFieldSet(newValue);
            }
        }
Exemplo n.º 11
0
 public SerializableVector(SerializableVector value)
 {
     this.x = value.x;
     this.y = value.y;
     this.z = value.z;
 }
Exemplo n.º 12
0
    public static DataPacket.FromServer GetFromServerPositionPacket(float _angle, int _seed, SerializableVector _gunPosition, int _playerId)
    {
        var packet = new FromServer();

        packet.packetType  = ServerMessages.FIREGUN;
        packet.gunPosition = _gunPosition;
        packet.angle       = _angle;
        packet.seed        = _seed;
        packet.shotId      = _playerId;
        packet.playerId    = 0;
        return(packet);
    }