void Update() { // FIXME: Send meshes at regular intervals // Check for new messages if (!meshes_started) { StartCoroutine(SendMeshes()); meshes_started = true; StartCoroutine(SendPosition()); } if (NetworkCommunication.Instance.numMessages() > 0) { Proto.Message msg = ProtoMeshSerializer.parseMesssage(NetworkCommunication.Instance.getMessage()); Debug.Log("Received message of type: " + msg.Type); switch (msg.Type) { case Proto.Message.Types.Type.GAME_STATE: targets.Clear(); targetIDs.Clear(); for (int i = 0; i < msg.GameState.Targets.Count; i++) { targets.Add(new Vector3(msg.GameState.Targets[i].Position.X, msg.GameState.Targets[i].Position.Y, msg.GameState.Targets[i].Position.Z)); targetIDs.Add(msg.GameState.Targets[i].TargetId); } if (targets.Count > 0) { OrbPlacement op = this.gameObject.GetComponentInChildren <OrbPlacement>(); StartCoroutine(op.replaceTarget(targets[0], targetIDs[0])); } ss.UpdateScores(msg.GameState); break; case Proto.Message.Types.Type.START_GAME: gamestarted = true; GameObject.Find("TitleScreen").GetComponent <TitleScreenScript>().gameStarted(); break; case Proto.Message.Types.Type.CLIENT_SET_NICKNAME: ss.clientName = msg.DeviceId; ss.showPlayerColor(); Debug.Log("New name " + msg.DeviceId); break; case Proto.Message.Types.Type.VERIFIED: verified = true; break; case Proto.Message.Types.Type.END_GAME: gameOver = true; GameObject.Find("EndgameScreen").GetComponent <EndgameScript>().endGame(); GameObject.Find("orb").GetComponent <OrbPlacement>().setComponentsEnabled(false); break; // TODO: others } NetworkCommunication.Instance.popMessage(); } }
public IEnumerator SendMeshes() { while (true) { if (gameOver) { break; } if (anchorSet) { Debug.Log("Sending meshes..."); #if !UNITY_EDITOR if (SpatialMappingManager.Instance == null || SpatialMappingManager.Instance.GetMeshFilters() == null) { Debug.Log("Spatial Stuff was NULL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); yield return(null); continue; } List <MeshFilter> MeshFilters = SpatialMappingManager.Instance.GetMeshFilters(); for (int index = 0; index < MeshFilters.Count; index++) { if (MeshFilters[index] == null) { Debug.Log("index null"); continue; } int id = int.Parse(MeshFilters[index].transform.gameObject.name.Substring("Surface-".Length)); Matrix4x4 t = MeshFilters[index].transform.localToWorldMatrix; if (worldtransform != null) { t = worldtransform.worldToLocalMatrix * t; } byte[] data = ProtoMeshSerializer.Serialize(MeshFilters[index].sharedMesh, QuaternionFromMatrix(t), t.GetColumn(3), (uint)id, index == MeshFilters.Count - 1, index == 0); yield return(null); NetworkCommunication.Instance.SendData(data); yield return(null); } //NetworkCommunication.Instance.SendData(ProtoMeshSerializer.DataRequest()); #endif } yield return(new WaitForSecondsRealtime(5)); } }