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