Ejemplo n.º 1
0
    private void UpdateEnemyPositions(Net_UpdateEnemyPosition msg)
    {
        if (enemies.Count < 0)
        {
            return;
        }

        for (int i = 0; i < msg.enemies.Length; i++)
        {
            Vector3 pos = new Vector3(msg.enemies[i].x, msg.enemies[i].y, msg.enemies[i].z);
            Vector3 dir = new Vector3(msg.enemies[i].xDir, 0f, msg.enemies[i].zDir);

            if (!enemies.ContainsKey(msg.enemies[i].enemyID))
            {
                continue;
            }

            Enemy e = enemies[msg.enemies[i].enemyID];

            e.oldPosition = e.newPosition;
            e.enemy.transform.position = e.oldPosition;
            e.newPosition = pos;
            e.dir         = dir;

            e.isMoving = msg.enemies[i].isMoving;
        }

        updateEnemyTime = 0.1f;
    }
Ejemplo 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();
            }
        }
    }