Exemple #1
0
        //State Methods:
        private void Restore_Enter()
        {
            //deserialize previous session:
            string[] sessionData = PlayerPrefs.GetString(_sessionDataKey).Split('|');
            Walls             = SerializationUtilities.Deserialize <PlayspaceWall[]>(sessionData[1]);
            _playspaceCenter  = JsonUtility.FromJson <Vector3>(sessionData[2]);
            PrimaryWall       = int.Parse(sessionData[3]);
            RightWall         = int.Parse(sessionData[4]);
            RearWall          = int.Parse(sessionData[5]);
            LeftWall          = int.Parse(sessionData[6]);
            _playspaceCorners = SerializationUtilities.Deserialize <Vector3[]>(sessionData[7]).ToList <Vector3>();
            Height            = float.Parse(sessionData[8]);

            //determine restore success:
            if (PrimaryWall == -1 || RightWall == -1 || RearWall == -1 || LeftWall == -1)
            {
                //something is not right with this room so let's force a reset:
                PlayerPrefs.DeleteKey(_sessionMeshKey);
                PlayerPrefs.DeleteKey(_sessionDataKey);
                Create();
            }
            else
            {
                //locate pcf:
                StartCoroutine("Restore_Relocalize", sessionData[0]);
            }
        }
Exemple #2
0
        private IEnumerator Restore_Relocalize(string pcfCFUID)
        {
            MagicLeapNativeBindings.MLCoordinateFrameUID cfuid = SerializationUtilities.StringToCFUID(pcfCFUID);

            while (true)
            {
                MLPersistentCoordinateFrames.FindPCFByCFUID(cfuid, out pcfAnchor);

                if (pcfAnchor == null)
                {
                    //we didn't find the pcf we needed this time:
                    _restoreAttempt++;
                    if (_restoreAttempt < _maxRestoreAttempts)
                    {
                        //retry:
                        Debug.Log($"Previous PCF not located.  Trying again.  Attempt: {_restoreAttempt}/{_maxRestoreAttempts}");
                        yield return(new WaitForSeconds(_restoreRetryDelay));
                    }
                    else
                    {
                        //failed:
                        Debug.Log($"Failed to locate PCF attempt: {_restoreAttempt}/{_maxRestoreAttempts}.  Creating new Playspace.");
                        ChangeState(State.FindPCF);
                        yield break;
                    }
                    yield return(null);
                }
                else
                {
                    //deserialize meshes:
                    string[]  meshData     = PlayerPrefs.GetString(_sessionMeshKey).Split('|');
                    Vector3[] wallVerts    = SerializationUtilities.Deserialize <Vector3[]>(meshData[0]);
                    int[]     wallTris     = SerializationUtilities.Deserialize <int[]>(meshData[1]);
                    Vector3[] floorVerts   = SerializationUtilities.Deserialize <Vector3[]>(meshData[2]);
                    int[]     floorTris    = SerializationUtilities.Deserialize <int[]>(meshData[3]);
                    Vector3[] ceilingVerts = SerializationUtilities.Deserialize <Vector3[]>(meshData[4]);

                    BuildGeometry(wallVerts, wallTris, floorVerts, floorTris, ceilingVerts);

                    ChangeState(State.ConfirmAreaReload);
                    yield break;
                }
            }
        }