public void ApplyTransform(TransformMessage msg)
    {
        newPosition = new Vector3(msg.position[0], msg.position[1], msg.position[2]);
        newRotation = new Quaternion(msg.rotation[0], msg.rotation[1], msg.rotation[2], msg.rotation[3]);

        lastPosition = transform.position;
        lastRotation = transform.rotation;

        animator = transform.GetComponent <Animator>();
        if (animator != null)
        {
            UpdateAnimator(animator, lastPosition, newPosition);
        }
        else
        {
            Debug.Log("No animator found");
        }

        Vector3 movmntVec = newPosition - lastPosition;

        if (movmntVec.sqrMagnitude > maxMovement * maxMovement)
        {
            lastReception = 0;
        }
        else
        {
            lastReception = Time.realtimeSinceStartup;
        }
    }
    private void SendCharPosition(Vector3 playerCharPos, int clientId)
    {
        TransformMessage m = new TransformMessage(clientId);

        m.Position.Vect3 = playerCharPos;
        SendUnreliableMessage(m, connectionId);
    }
Пример #3
0
    public void HandleIncomingMessage(Message msg)
    {
        switch (msg.GetNetworkMessageType())
        {
        case NetworkMessageType.Authenticate:
            AuthenticateMessage mA = msg as AuthenticateMessage;
            client.InitClient(mA.ClientId, "This is Client \n Id:" + mA.ClientId);
            break;

        case NetworkMessageType.Transform:

            TransformMessage transformMsg = msg as TransformMessage;
            if (!client.IsClientsCharacterCreated)
            {
                client.CreateClientsCharacter(transformMsg);
            }
            else
            {
                if (transformMsg.AcknowledgmentId != -1)
                {
                    int acknoledgmentIdx = unAcknowledgedInputRequests.
                                           FindIndex(it => it.RequestId == transformMsg.AcknowledgmentId);
                    if (acknoledgmentIdx != -1)
                    {
                        /* Removes this unacknowledged message and all that came before */
                        unAcknowledgedInputRequests.RemoveRange(0, acknoledgmentIdx + 1);

                        /* Peform position prediction based on last acknowledged position */
                        lastAcknowledgedPosition = transformMsg.Position.Vect3;
                        Vector3 newPosBasedOnAck = new Vector3(lastAcknowledgedPosition.x,
                                                               lastAcknowledgedPosition.y, lastAcknowledgedPosition.z);
                        foreach (InputMessage inputMsg in unAcknowledgedInputRequests)
                        {
                            newPosBasedOnAck += client.GetPositionChangeBasedOnInput(inputMsg);
                        }
                        client.SlowlyUpdateCharactersPosition(newPosBasedOnAck);
                    }
                }
                else
                {
                    client.UpdateCharactersTransform(transformMsg);
                }
            }

            break;

        case NetworkMessageType.MultipleTransforms:

            MultipleTranformMessage multipleTransfMsg = msg as MultipleTranformMessage;
            /* Update other player characters */
            otherPlayerCharManager.UpdateOtherCharPosition(multipleTransfMsg);

            break;

        case NetworkMessageType.Disconnect:
            otherPlayerCharManager.DespawnDisconnectedPlayer(msg as DisconnectMessage);
            break;
        }
    }
Пример #4
0
 public void SetTarget(TransformMessage t)
 {
     targetPosition.x = t.x;
     targetPosition.y = t.y;
     targetPosition.z = t.z;
     targetRotation   = new Vector3(0, t.angle, 0);
     gunTarget        = t.gunAngle;
 }
Пример #5
0
    protected void OnTransformMsg(NetworkMessage msg)
    {
        TransformMessage transformMsg = msg.ReadMessage <TransformMessage>();

        Debug.Log("OnTransformMsg: NetId: " + netId);
        Debug.Log("OnTransformMsg: MsgNetId: " + transformMsg.netId);
        Debug.Log("OnTransformMsg: Position: " + transformMsg.position);
    }
    public void SendPosition(Character p)
    {
        TransformMessage m = new TransformMessage(p.ClientId);

        m.Position.Vect3      = p.CharacterObj.transform.position;
        m.Scale.Vect3         = p.CharacterObj.transform.localScale;
        m.Rotation.Quaternion = p.CharacterObj.transform.rotation;
        SendNetworkUnreliableMessage(m, p.ClientId);
    }
    private void SendPositionToNewelyCreatedCharacter(Server server, Vector3 characterPos, int connectionId)
    {
        TransformMessage mP = new TransformMessage(connectionId);

        mP.Position.Vect3      = characterPos;
        mP.Scale.Vect3         = new Vector3(1f, 1f, 1f);
        mP.Rotation.Quaternion = server.transform.rotation;
        SendNetworkReliableMessage(mP, connectionId);
    }
Пример #8
0
    public void OnTransformReceived(NetworkMessage networkMessage)
    {
        TransformMessage message = networkMessage.ReadMessage <TransformMessage>();

        if (message.netID == this.netId.Value)
        {
            this.transform.position = message.position;
            this.transform.rotation = message.rotation;
        }
    }
    // Start is called before the first frame update
    void Start()
    {
        TransformMessage transformMsg = new TransformMessage(transformToUpdate);

        server.sendMessage(transformMsg);

        DisableMessage enableMsg = new DisableMessage();

        enableMsg.objToEnable = "Cube";
        server.sendMessage(enableMsg);
    }
    private void CreateOtherPlayerCharacter(TransformMessage transformMsg)
    {
        GameObject other = client.SpawnCharacter();

        other.transform.parent     = client.transform;
        other.transform.position   = transformMsg.Position.Vect3;
        other.transform.localScale = transformMsg.Scale.Vect3;
        other.transform.rotation   = transformMsg.Rotation.Quaternion;
        OtherPlayerCharacter otherPlayerChar = new OtherPlayerCharacter(other, transformMsg.ReceiverId);

        allOtherCharacters.Add(otherPlayerChar);
    }
 private void UpdateOtherCharacterPosition(TransformMessage transformMsg)
 {
     foreach (OtherPlayerCharacter other in allOtherCharacters)
     {
         if (transformMsg.ReceiverId == other.ClientId)
         {
             other.AddInterpolationPos(transformMsg.Position.Vect3);
             other.CharacterObj.transform.localScale = transformMsg.Scale.Vect3;
             other.CharacterObj.transform.rotation   = transformMsg.Rotation.Quaternion;
         }
     }
 }
Пример #12
0
    public void CreateClientsCharacter(TransformMessage mT)
    {
        GameObject characterObject = Instantiate(clientsCharPrefab) as GameObject;

        playerChar = new Character(characterObject, mT.ReceiverId);
        playerChar.CharacterObj.transform.parent = transform;
        inputHandler.InitInputHandler(characterObject.GetComponent <Transform>());
        characterObject.GetComponent <Renderer>().material.color = Color.red;
        isClientsCharacterCreated = true;
        UpdateCharactersTransform(mT);

        cameraFollow.InitCharacterToFollow(characterObject.transform);
    }
Пример #13
0
    protected void SendTransformMsg()
    {
        TransformMessage transformMsg = new TransformMessage();

        transformMsg.netId    = netId;
        transformMsg.position = transform.position;
        bool isSuccess = false;

        if (isServer) //If connected to server successfully, send messaage
        {
            isSuccess = NetworkServer.SendToAll(TransformMessage.MsgId, transformMsg);
        }

        Debug.Log("SendTransformMsg: netId: " + netId + " isSuccess: " + isSuccess);
    }
    // Update is called once per frame
    void Update()
    {
        if (netId.connectionToServer != null && netId.hasAuthority && updatePerSec != 0 && Time.realtimeSinceStartup - lastUpdate > 1 / updatePerSec)
        {
            lastUpdate = Time.realtimeSinceStartup;
            TransformMessage message = new TransformMessage(transform);

            netId.connectionToServer.Send(message);
        }

        if (!netId.hasAuthority)
        {
            float lerpValue = Mathf.Clamp01((Time.realtimeSinceStartup - lastReception) / (1 / updatePerSec));

            transform.position = Vector3.Lerp(lastPosition, newPosition, lerpValue);
            transform.rotation = Quaternion.Lerp(lastRotation, newRotation, lerpValue);
        }
    }
Пример #15
0
    public void OnTransformReceived(NetworkMessage netMsg)
    {
        TransformMessage msg = netMsg.ReadMessage <TransformMessage>();

        //Debug.Log("OnTransformReceived: IsLocalPlayer:" + isLocalPlayer);
        //Debug.Log("NetID: " + msg.netID);
        //Debug.Log("MSGPOS: " + msg.position);
        //Debug.Log("OURNETID: " + this.netId.Value);


        //we are the replica of a an object on another machine
        //that object sent out a msg to update our position
        if (msg.netID == this.netId.Value)
        {
            this.transform.position = msg.position;
            this.transform.rotation = msg.rotation;
        }
    }
    public void SendClientPosInfoOfAllOtherPlayers(ServerNetworkManager servNetworkManager, int connectionId)
    {
        /* Send client all TransformMessages about all other player characters */

        List <TransformMessage> allCharcterPositions = new List <TransformMessage>();

        foreach (Character playerCharacter in allCharacters)
        {
            if (playerCharacter.ClientId != connectionId)
            {
                TransformMessage msg = new TransformMessage(playerCharacter.ClientId);
                msg.Position.Vect3      = playerCharacter.CharacterObj.transform.position;
                msg.Rotation.Quaternion = playerCharacter.CharacterObj.transform.rotation;
                msg.Scale.Vect3         = playerCharacter.CharacterObj.transform.localScale;
                allCharcterPositions.Add(msg);
            }
        }
        MultipleTranformMessage multipleTransfMsg = new MultipleTranformMessage(allCharcterPositions.ToArray());

        servNetworkManager.SendNetworkReliableMessage(multipleTransfMsg, connectionId);
    }
Пример #17
0
    void Update()
    {
        m_currentUpdateTransformTime += Time.deltaTime;
        if (m_currentUpdateTransformTime > m_updateTransformTime)
        {
            TransformMessage Message = new TransformMessage();
            Message.position = this.transform.position;
            Message.rotation = this.transform.rotation;
            Message.netID    = this.netId.Value;

            if (isServer)
            {
                //  NetworkServer.SendToAll(CustomMsgType.Transform, Message);
            }
            else
            {
                // m_client.Send(CustomMsgType.Transform, Message);
            }
            m_currentUpdateTransformTime = 0.0f;
        }
    }
    private void UpdatePlayers(ServerNetworkManager servNetworkManager)
    {
        foreach (Character p in allCharacters)
        {
            /* Check for players pushing other off the ledge */
            int winnerId = p.Update();
            if (winnerId != -1)
            {
                Character winner = allCharacters.Find(it => it.ClientId == winnerId);
                winner.CharacterObj.GetComponent <Transform>().localScale += new Vector3(0.5f, 0.5f, 0.5f);
                winner.CharacterObj.GetComponent <Rigidbody>().mass       += 0.5f;

                /* Update winner player */
                TransformMessage transfMsg = new TransformMessage(winner.ClientId);
                transfMsg.Position.Vect3      = winner.CharacterObj.transform.position;
                transfMsg.Scale.Vect3         = winner.CharacterObj.transform.localScale;
                transfMsg.Rotation.Quaternion = winner.CharacterObj.transform.rotation;
                servNetworkManager.SendNetworkReliableMessage(transfMsg, winner.ClientId);
            }
        }
    }
Пример #19
0
    // Update is called once per frame
    void Update()
    {
        m_currentUpdateTransformTime += Time.deltaTime;
        if (m_currentUpdateTransformTime > m_updateTransformTime)
        {
            //send msg
            TransformMessage msg = new TransformMessage();
            msg.position = this.transform.position;
            msg.rotation = this.transform.rotation;
            msg.netID    = this.netId.Value;

            if (isServer)
            {
                NetworkServer.SendToAll(CustomMsgType.Transform, msg);
            }
            else
            {
                m_client.Send(CustomMsgType.Transform, msg);
            }
            m_currentUpdateTransformTime = 0.0f;
        }
    }
Пример #20
0
    void FixedUpdate()
    {
        if (!networkEntity.isAuth)
        {
            return;
        }

        TransformMessage transformMessage = new TransformMessage(
            positionTransform.position.x,
            positionTransform.position.y,
            positionTransform.position.z,
            rotationTransform.localEulerAngles.x,
            positionTransform.eulerAngles.y,
            0
            );

        if (Time.time > nextActionTime)
        {
            nextActionTime += period;
            UDPConnection.Send(transformMessage);
        }
    }
    public void HandlePlayerInput(ServerNetworkManager servNetworkManager, InputMessage msgInput)
    {
        Transform characterTransf = allCharacters.Find(it => it.ClientId == msgInput.ReceiverId)
                                    .CharacterObj.GetComponent <Transform>();
        float deltaTime = Time.deltaTime + (System.DateTime.Now.Subtract(msgInput.TimeStamp).Milliseconds / 1000f);

        foreach (InputType type in msgInput.InputTypeMsg)
        {
            switch (type)
            {
            case InputType.MoveBack:

                characterTransf.position += GetVelocityToMoveBack(deltaTime);
                break;

            case InputType.MoveForward:

                characterTransf.position += GetVelocityToMoveForward(deltaTime);
                break;

            case InputType.MoveLeft:

                characterTransf.position += GetVelocityToMoveLeft(deltaTime);
                break;

            case InputType.MoveRight:

                characterTransf.position += GetVelocityToMoveRight(deltaTime);
                break;
            }
        }


        TransformMessage tranformMsg = new TransformMessage(msgInput.ReceiverId);

        tranformMsg.AcknowledgmentId = msgInput.RequestId;
        tranformMsg.Position.Vect3   = characterTransf.position;
        servNetworkManager.SendNetworkUnreliableMessage(tranformMsg, msgInput.ReceiverId);
    }
    public void SendAllPlayersAllOtherPlayerPostions(ServerNetworkManager servNetworkManger)
    {
        foreach (Character character in allCharacters)
        {
            Vector3 playerPos = character.CharacterObj.transform.position;
            character.LastSentPosition = new Vector3(playerPos.x, playerPos.y, playerPos.z);

            /* Send inform this characters client about all other characters positions */
            List <Character>        allOtherCharacters = allCharacters.FindAll(it => it.ClientId != character.ClientId);
            List <TransformMessage> allTranformMsg     = new List <TransformMessage>();
            foreach (Character otherCharacter in allOtherCharacters)
            {
                TransformMessage transfMsg = new TransformMessage(otherCharacter.ClientId);
                transfMsg.Position.Vect3      = otherCharacter.CharacterObj.transform.position;
                transfMsg.Scale.Vect3         = otherCharacter.CharacterObj.transform.localScale;
                transfMsg.Rotation.Quaternion = otherCharacter.CharacterObj.transform.rotation;
                allTranformMsg.Add(transfMsg);
                otherCharacter.LastSentPosition = new Vector3(transfMsg.Position.X, transfMsg.Position.Y, transfMsg.Position.Z);
            }
            MultipleTranformMessage multipleTransfMsg = new MultipleTranformMessage(allTranformMsg.ToArray());
            servNetworkManger.SendNetworkUnreliableMessage(multipleTransfMsg, character.ClientId);
        }
    }
    IEnumerator MsgHandling()
    {
        while (true)
        {
            if (messageQueue.Count <= 0)
            {
                yield return(null);

                continue;
            }

            byte[] buffer = messageQueue.Dequeue();

            if ((MessageId)buffer[0] == MessageId.Transform)
            {
                TransformMessage msg = new TransformMessage();
                msg.Deserialize(ref buffer);

                if (!netComps.ContainsKey(msg.sourceId))
                {
                    Debug.LogWarning("[" + sceneName + "] Object with netId " + msg.sourceId + " not found!");
                    continue;
                }

                NetworkIdentity netId = netComps[msg.sourceId];

                netId.SendMessage("ApplyTransform", msg, SendMessageOptions.DontRequireReceiver);
            }
            else if ((MessageId)buffer[0] == MessageId.Spawn)
            {
                SpawnMessage msg = new SpawnMessage();
                msg.Deserialize(ref buffer);

                if (netComps.ContainsKey(msg.objectId))
                {
                    continue;
                }

                GameObject spawned = Instantiate(spawnablePrefabs[msg.prefabId].gameObject, transform.position, transform.rotation);
                SceneManager.MoveGameObjectToScene(spawned, gameObject.scene);
                spawned.SetActive(msg.hasAuthority);

                NetworkIdentity netId = spawned.GetComponent <NetworkIdentity>();
                netComps.Add(msg.objectId, netId);

                netId.id                 = msg.objectId;
                netId.spawned            = true;
                netId.connectionToServer = this;
                netId.hasAuthority       = msg.hasAuthority;
            }
            else if ((MessageId)buffer[0] == MessageId.Despawn)
            {
                DespawnMessage msg = new DespawnMessage();
                msg.Deserialize(ref buffer);

                if (netComps.ContainsKey(msg.objectId))
                {
                    NetworkIdentity netComp = netComps[msg.objectId];
                    netComps.Remove(msg.objectId);

                    Destroy(netComp.gameObject);
                }
            }
            else if ((MessageId)buffer[0] == MessageId.Enable)
            {
                EnableMessage msg = new EnableMessage();
                msg.Deserialize(ref buffer);

                if (netComps.ContainsKey(msg.objectId))
                {
                    NetworkIdentity netComp = netComps[msg.objectId];

                    netComp.transform.position = new Vector3(msg.position[0], msg.position[1], msg.position[2]);
                    netComp.transform.rotation = new Quaternion(msg.rotation[0], msg.rotation[1], msg.rotation[2], msg.rotation[3]);

                    netComp.gameObject.SetActive(msg.toEnable);
                }
            }

            yield return(null);
        }
    }
Пример #24
0
 public static void FromTransformMessage(this Transform transform, TransformMessage msg)
 {
     transform.localPosition = msg.Position.ToVector3();
     transform.localRotation = msg.Quaternion.ToQuaternion();
     //transform.SetPositionAndRotation(msg.Position.ToVector3(), msg.Quaternion.ToQuaternion());
 }
Пример #25
0
 public Message(Transform transform, bool fired)
 {
     this.transform = new TransformMessage(transform);
     this.fired     = fired;
 }
Пример #26
0
 public void UpdateCharactersTransform(TransformMessage transformMsg)
 {
     playerChar.CharacterObj.transform.position   = transformMsg.Position.Vect3;
     playerChar.CharacterObj.transform.localScale = transformMsg.Scale.Vect3;
     playerChar.CharacterObj.transform.rotation   = transformMsg.Rotation.Quaternion;
 }