Esempio n. 1
0
    private void OnAskPosition(Net_AskPosition msg)
    {
        if (!isStarted)
        {
            return;
        }

        // Update everyone else
        for (int i = 0; i < msg.playerPositions.Length; ++i)
        {
            if (ourClientID == msg.playerPositions[i].cnnID)
            {
                continue;
            }

            Vector3 pos = new Vector3(msg.playerPositions[i].x, msg.playerPositions[i].y, msg.playerPositions[i].z);
            Player  p   = players.Find(x => x.connectionID == msg.playerPositions[i].cnnID);

            Vector3 dir = new Vector3(msg.playerPositions[i].dirX, 0, msg.playerPositions[i].dirZ);

            //Debug.Log("Current ID: " + msg.playerPositions[i].cnnID);

            if (msg.playerPositions[i].cnnID == 0)
            {
                continue;
            }

            p.oldPosition = p.newPosition;
            p.avatar.transform.position = p.newPosition;
            p.newPosition = pos;
            p.dir         = dir;

            p.isMoving         = msg.playerPositions[i].isMoving;
            updatePositionTime = 0.1f;
        }

        // Send our position
        Vector3 myPos = ownPlayer.avatar.transform.position;

        Vector3 movement = ownPlayer.avatar.GetComponent <PlayerController>().movement;

        Net_MyPosition myPosition = new Net_MyPosition
        {
            ownID = ourClientID, x = myPos.x, y = myPos.y, z = myPos.z, dirX = movement.x, dirZ = movement.z, isMoving = true
        };

        if (movement == Vector3.zero)
        {
            myPosition.isMoving = false;
        }

        // Debug.Log(movement);

        SendServer(myPosition);
    }
Esempio n. 2
0
    private void Update()
    {
        if (!isStarted)
        {
            return;
        }

        int recHostId;
        int connectionId;
        int channelId;

        byte[] recBuffer  = new byte[1024];
        int    bufferSize = 1024;
        int    dataSize;
        byte   error;

        NetworkEventType recData =
            NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, bufferSize, out dataSize, out error);

        switch (recData)
        {
        case NetworkEventType.ConnectEvent:
            Debug.Log("Player " + connectionId + " Has Connected");
            OnConnection(connectionId);
            break;

        case NetworkEventType.DataEvent:

            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream    ms        = new MemoryStream(recBuffer);
            NetMessage      msg       = (NetMessage)formatter.Deserialize(ms);

            OnData(connectionId, channelId, recHostId, msg);
            break;

        case NetworkEventType.DisconnectEvent:
            Debug.Log("Player " + connectionId + " Has Disconnected");
            OnDisconnection(connectionId);
            break;
        }

        // Ask player for position
        if (Time.time - lastMovementUpdate > movementUpdateRate)
        {
            lastMovementUpdate = Time.time;

            //Sending Player Position

            Net_AskPosition askPosition = new Net_AskPosition
            {
                playerPositions = new Net_AskPosition.position[clients.Count + 1]
            };

            for (int i = 0; i < clients.Count; i++)
            {
                askPosition.playerPositions[i].x        = clients[i].position.x;
                askPosition.playerPositions[i].y        = clients[i].position.y;
                askPosition.playerPositions[i].z        = clients[i].position.z;
                askPosition.playerPositions[i].cnnID    = clients[i].connectionID;
                askPosition.playerPositions[i].dirX     = clients[i].dirX;
                askPosition.playerPositions[i].dirZ     = clients[i].dirZ;
                askPosition.playerPositions[i].isMoving = clients[i].isMoving;
            }

            Send(askPosition, clients);

            AIManager aiManager = FindObjectOfType <AIManager>();

            if (!aiManager)
            {
                return;
            }

            //Sending Enemy Position
            Net_UpdateEnemyPosition enemyPosition = new Net_UpdateEnemyPosition
            {
                enemies = new Net_UpdateEnemyPosition.position[aiManager.aiList.Count + 1]
            };

            for (int i = 0; i < aiManager.aiList.Count; i++)
            {
                GameObject e       = aiManager.aiList[i];
                Vector3    pos     = e.transform.position;
                Vector3    forward = e.transform.forward;

                enemyPosition.enemies[i].enemyID = e.GetComponent <AIController>().myId;
                enemyPosition.enemies[i].x       = pos.x;
                enemyPosition.enemies[i].y       = pos.y;
                enemyPosition.enemies[i].z       = pos.z;
                enemyPosition.enemies[i].xDir    = forward.x;
                enemyPosition.enemies[i].zDir    = forward.z;
            }

            Send(enemyPosition, clients);

            if (playersDead == 2)
            {
                Debug.Log("Lose");
                OnLose();
            }
        }
    }