Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        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));
            }
        }