public override void SetupDataProviders(PlayableDirector director, List <IFunctionalityProvider> providers)
        {
            var providerObj = GameObjectUtils.Create(k_ProviderName);
            var animator    = providerObj.AddComponent <Animator>();

            director.SetGenericBinding(m_AnimationTrack, animator);
            providers.Add(providerObj.AddComponent <RecordedCameraPoseProvider>());
        }
        public override void SetupDataProviders(PlayableDirector director, List <IFunctionalityProvider> providers)
        {
            var providerObj        = GameObjectUtils.Create(k_ProviderName);
            var pointCloudProvider = providerObj.AddComponent <RecordedPointCloudProvider>();

            providers.Add(pointCloudProvider);
            director.SetGenericBinding(m_SignalTrack, providerObj);
        }
        public override void SetupDataProviders(PlayableDirector director, List <IFunctionalityProvider> providers)
        {
            var providerObj = GameObjectUtils.Create(k_ProviderName);
            var facialExpressionsProvider = providerObj.AddComponent <RecordedFacialExpressionsProvider>();

            facialExpressionsProvider.SetupFromRecording(this);
            providers.Add(facialExpressionsProvider);
            director.SetGenericBinding(m_SignalTrack, providerObj);
        }
        void OnEnable()
        {
            m_FaceParent         = GameObjectUtils.Create("Faces").transform;
            m_RunInEditModeDirty = true;
            m_StartPose          = m_FacePrefab.transform.GetWorldPose();
            m_StartActive        = m_FacePrefab.activeInHierarchy;

            var maxFaces = this.GetCurrentMaximumFaceCount();

            while (m_FacePool.Count < maxFaces)
            {
                var face = new Face(m_FacePrefab, m_FaceParent, this);
                face.gameObject.SetActive(false);
                m_FacePool.Enqueue(face);
            }

            this.SubscribeFaceAdded(FaceAdded);
            this.SubscribeFaceUpdated(FaceUpdated);
            this.SubscribeFaceRemoved(FaceRemoved);
        }
Exemplo n.º 5
0
            public LandmarkSet(float scale, string faceName, Transform parent)
            {
                var landmarks     = EnumValues <MRFaceLandmark> .Values;
                var landmarkCount = landmarks.Length;

                points    = new Transform[landmarkCount];
                renderers = new MeshRenderer[landmarkCount];
                var transform = GameObjectUtils.Create(faceName).transform;

                transform.parent = parent;
                for (var i = 0; i < landmarkCount; i++)
                {
                    var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                    sphere.name = landmarks[i].ToString();
                    var sphereTransform = sphere.transform;
                    sphereTransform.localScale *= scale;
                    sphereTransform.parent      = transform;
                    renderers[i] = sphere.GetComponent <MeshRenderer>();
                    points[i]    = sphere.transform;
                }
            }
        void OnBeforeSetupDefaultProviders(List <IFunctionalityProvider> providers)
        {
            var simulationSettings = SimulationSettings.instance;

            if (DisableRecordingPlayback || !simulationSettings.IsUsingRecording || !MarsEditorUtils.SimulatingDiscovery)
            {
                m_CurrentRecordingInfo = null;
                TimelineSyncState      = SimulationTimeSyncState.NoTimeline;
                return;
            }

            var sessionDirectorGO = GameObjectUtils.Create("Session Director");

            // Deactivate until we've set up so that the session director does not receive OnEnable immediately
            sessionDirectorGO.SetActive(false);
            m_CurrentSessionDirector = sessionDirectorGO.AddComponent <RecordedSessionDirector>();
            var recordingInfo = simulationSettings.GetCurrentRecording();

            if (recordingInfo != m_CurrentRecordingInfo)
            {
                m_CurrentRecordingInfo = recordingInfo;
                SetStateToSynced();
            }

            k_RecordedDataProviders.Clear();
            m_CurrentSessionDirector.SetupFromRecordingInfo(recordingInfo, k_RecordedDataProviders);
            m_CurrentSessionDirector.TimeUpdated += OnDirectorTimeUpdated;
            m_CurrentSessionDirector.EndReached  += OnDirectorEndReached;
            var director = m_CurrentSessionDirector.Director;

            director.played  += OnDirectorPlayed;
            director.paused  += OnDirectorPaused;
            director.stopped += OnDirectorStopped;
            sessionDirectorGO.SetActive(true);

            providers.AddRange(k_RecordedDataProviders);
            m_SteppableDataProviders.Clear();
            var hasPlanesProvider     = false;
            var hasPointCloudProvider = false;

            foreach (var provider in k_RecordedDataProviders)
            {
                if (provider is ISteppableRecordedDataProvider steppableDataProvider)
                {
                    m_SteppableDataProviders.Add(steppableDataProvider);
                }

                if (provider is IProvidesPlaneFinding)
                {
                    hasPlanesProvider = true;
                }
                else if (provider is IProvidesPointCloud)
                {
                    hasPointCloudProvider = true;
                }
            }

            // If there are recorded planes or point cloud providers, we need to set up stub providers to make sure
            // the simulated discovery provider game object doesn't get created.
            if (hasPlanesProvider || hasPointCloudProvider)
            {
                var stubProvidersObj = GameObjectUtils.Create(k_StubProvidersName);
                var sessionProvider  = stubProvidersObj.AddComponent <StubSessionProvider>();
                sessionProvider.SuppressWarnings = true;
                providers.Add(sessionProvider);
                if (!hasPlanesProvider)
                {
                    var planesProvider = stubProvidersObj.AddComponent <StubPlanesProvider>();
                    planesProvider.SuppressWarnings = true;
                    providers.Add(planesProvider);
                }
                else if (!hasPointCloudProvider)
                {
                    var pointCloudProvider = stubProvidersObj.AddComponent <StubPointCloudProvider>();
                    pointCloudProvider.SuppressWarnings = true;
                    providers.Add(pointCloudProvider);
                }
            }
        }