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; }
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(); } } }