Beispiel #1
0
        void UpdatePreviewWarningLabel()
        {
            m_PreviewWarning.style.display = DisplayStyle.None;
            // Delay checking if we are now in play mode to show warning about preview target
            EditorApplication.delayCall += () =>
            {
                if (EditorApplication.isPlaying)
                {
                    IMotionSynthesizerProvider synthesizerProvider = null;
                    if (PreviewTarget != null)
                    {
                        synthesizerProvider = PreviewTarget.GetComponent <IMotionSynthesizerProvider>();

                        if (synthesizerProvider == null)
                        {
                            synthesizerProvider = PreviewTarget.GetComponentInChildren <IMotionSynthesizerProvider>();
                        }
                    }

                    if (synthesizerProvider == null)
                    {
                        m_PreviewWarning.style.display = DisplayStyle.Flex;
                    }
                }
            };
        }
        void OnDisable()
        {
            m_SynthesizerProvider = null;

            UpdateSystem.Ignore <PreLateUpdate>(OnPreLateUpdate);

            Camera.onPostRender -= OnRender;
            RenderPipelineManager.endCameraRendering -= OnRenderRP;

            EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
        }
        void OnSelectionChange()
        {
            IMotionSynthesizerProvider synthProvider = null;

            // Try get provider from frame debugger selection
            if (synthProvider == null)
            {
                foreach (SelectedFrameDebugProvider selectedProvider in Debugger.frameDebugger.Selection)
                {
                    synthProvider = selectedProvider.providerInfo.provider as IMotionSynthesizerProvider;
                    break;
                }
            }

            // Get first provider we find in scene
            if (synthProvider == null)
            {
                synthProvider = FindMotionSynthesizerObject();
            }

            // If we found a provider, we sync the frame debugger selection with it
            if (synthProvider != null)
            {
                IFrameDebugProvider frameDebugProvider = synthProvider as IFrameDebugProvider;
                if (frameDebugProvider != null)
                {
                    if (Debugger.frameDebugger.NumSelected != 1 || Debugger.frameDebugger.GetSelected(0).providerInfo.provider != frameDebugProvider)
                    {
                        Debugger.frameDebugger.ClearSelection();
                        if (!Debugger.frameDebugger.TrySelect(frameDebugProvider))
                        {
                            synthProvider = null;
                        }
                    }
                }
            }

            if (m_SynthesizerProvider != synthProvider)
            {
                if (synthProvider != null && !(synthProvider is IFrameDebugProvider))
                {
                    Debug.Log($"{synthProvider.GetType().FullName} doesn't implement IFrameDebugProvider, nodes won't be selectable in the Kinematica Execution Graph window");
                }

                m_SynthesizerProvider = synthProvider;
            }

            DisplayMessages();
        }
Beispiel #4
0
        public void UpdateSelection()
        {
            for (int i = 0; i < Debugger.frameDebugger.NumSelected; ++i)
            {
                SelectedFrameDebugProvider selected = Debugger.frameDebugger.GetSelected(i);

                IMotionSynthesizerProvider synthesizerProvider = selected.providerInfo.provider as IMotionSynthesizerProvider;
                if (synthesizerProvider == null || !synthesizerProvider.IsSynthesizerInitialized)
                {
                    continue;
                }

                ref MotionSynthesizer synthesizer = ref synthesizerProvider.Synthesizer.Ref;

                DebugMemory debugMemory = synthesizer.ReadDebugMemory;

                if (selected.metadata != null)
                {
                    DebugIdentifier identifier = (DebugIdentifier)selected.metadata;
                    if (debugMemory.FindObjectReference(identifier).IsValid)
                    {
                        break;
                    }
                    else
                    {
                        selected.metadata = null;
                    }
                }

                for (DebugReference reference = debugMemory.FirstOrDefault; reference.IsValid; reference = debugMemory.Next(reference))
                {
                    if (!DataTypes.IsValidType(reference.identifier.typeHashCode))
                    {
                        continue;
                    }

                    Type debugType = DataTypes.GetTypeFromHashCode(reference.identifier.typeHashCode).Item1;
                    if (typeof(IMotionMatchingQuery).IsAssignableFrom(debugType))
                    {
                        selected.metadata = reference.identifier;
                        break;
                    }
                }

                Debugger.frameDebugger.TrySelect(selected.providerInfo.provider, selected.metadata);
            }
        void OnEnable()
        {
            m_SynthesizerProvider = null;

            LoadTemplate();

            EditorApplication.playModeStateChanged += OnPlayModeStateChanged;

            //For regular RP
            Camera.onPostRender -= OnRender;
            Camera.onPostRender += OnRender;

            //For HDRP
            RenderPipelineManager.endCameraRendering -= OnRenderRP;
            RenderPipelineManager.endCameraRendering += OnRenderRP;

            UpdateSystem.Listen <PreLateUpdate>(OnPreLateUpdate);

            m_ExitingPlayMode = false;
        }
Beispiel #6
0
        internal void Update(IMotionSynthesizerProvider synthesizerProvider)
        {
            if (synthesizerProvider != null)
            {
                this.synthesizerProvider = synthesizerProvider;
                debugMemory        = synthesizerProvider.Synthesizer.Ref.ReadDebugMemory;
                frameDebugProvider = synthesizerProvider as IFrameDebugProvider;
            }
            else
            {
                this.synthesizerProvider = null;
                debugMemory        = null;
                frameDebugProvider = null;
            }

            if (Debugger.instance.rewind || ReadyForUpdate())
            {
                UpdateLayout();
            }
        }
Beispiel #7
0
        void DrawCostTimeline(FrameDebugProviderInfo providerInfo, IFrameAggregate aggregate, TimelineWidget.DrawInfo drawInfo)
        {
            Rect selectedRect = drawInfo.timeline.drawRect;
            int  width        = (int)selectedRect.width;
            int  height       = (int)selectedRect.height;

            if (width * height == 0)
            {
                return;
            }

            if (aggregate.IsEmpty)
            {
                return;
            }

            IMotionSynthesizerProvider synthesizerProvider = providerInfo.provider as IMotionSynthesizerProvider;

            if (synthesizerProvider == null || !synthesizerProvider.IsSynthesizerInitialized)
            {
                return;
            }

            DebugMemory debugMemory = synthesizerProvider.Synthesizer.Ref.ReadDebugMemory;

            foreach (SelectedFrameDebugProvider selected in Debugger.frameDebugger.Selection)
            {
                if (selected.providerInfo.uniqueIdentifier == providerInfo.uniqueIdentifier)
                {
                    CreateAndClearTexture(width, height);

                    if (selected.metadata != null)
                    {
                        DebugIdentifier selectedIdentifier = (DebugIdentifier)selected.metadata;
                        DebugReference  reference          = debugMemory.FindObjectReference(selectedIdentifier);

                        if (reference.IsValid)
                        {
                            object selectedObject = debugMemory.ReadObjectGeneric(reference);

                            if (selectedObject is IMotionMatchingQuery query)
                            {
                                DrawCostTimeline(query.DebugName.GetHashCode(), (DebugCostAggregate)aggregate, drawInfo);
                            }

                            if (selectedObject is IDisposable disposable)
                            {
                                disposable.Dispose();
                            }
                        }
                    }

                    m_CacheTexture.SetPixels(m_CachePixels);
                    m_CacheTexture.Apply();

                    GUI.DrawTexture(selectedRect, m_CacheTexture);

                    return;
                }
            }
        }