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(); }
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; }
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(); } }
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; } } }