// // // #endregion #region CreateModuleUI() // // // public VisualElement CreateModuleUI(string moduleName) { m_TurretBuilder.ResetModulePreviewEditor(moduleName); var imguiContainer = new IMGUIContainer(() => { var editor = m_TurretBuilder.GetPreviewEditor(moduleName); if (editor != null) { editor.OnInteractivePreviewGUI( GUILayoutUtility.GetRect(180, 180), null); } }); imguiContainer.AddToClassList("module-viewport"); var property = serializedObject.FindProperty(moduleName); var field = new PropertyField(property); imguiContainer.Add(field); return(imguiContainer); }
// Draw Turret Module Preview void CreatePreviewWindow(Module module) { // Local Vars var moduleName = module.ToString(); var moduleIdx = (int)module; var evt = Event.current; // Hover Border Change var hoverPreviewBorderStyle = GUIStyle.none; if (m_ModulePreviewRects[moduleIdx].Contains(evt.mousePosition)) { hoverPreviewBorderStyle = m_PreviewBorderStyle; } // Module Cycling via Scroll Wheel if (m_ModulePreviewRects[moduleIdx].Contains(evt.mousePosition) && evt.type == EventType.ScrollWheel) { m_TurretBuilder.CycleModules(moduleName, (int)evt.delta.y); m_TurretBuilder.ResetModulePreviewEditor(moduleName); m_TurretBuilder.RegenerateTurret(); evt.Use(); } using (new GUILayout.VerticalScope()) { // Top hover border. GUILayout.Box( GUIContent.none, hoverPreviewBorderStyle, GUILayout.Height(k_BorderWidth)); var previewRect = GUILayoutUtility.GetRect(k_PreviewSize, k_PreviewSize); // Need to save this rect during Repaint and use it during Layout for the AreaScope. if (evt.type == EventType.Repaint) { m_ModulePreviewRects[moduleIdx] = previewRect; } // Don't draw the interactive preview when the mouse is over the PropertyField // otherwise the preview steals the MouseDownEvent. var editor = m_TurretBuilder.GetPreviewEditor(moduleName); if (editor != null && !(evt.type == EventType.MouseDown && m_ModulePropertyFieldRects[moduleIdx].Contains(evt.mousePosition))) { editor.OnInteractivePreviewGUI(previewRect, null); } using (new GUILayout.AreaScope(m_ModulePreviewRects[moduleIdx])) { GUILayout.FlexibleSpace(); var property = serializedObject.FindProperty(moduleName); var fieldRect = EditorGUILayout.GetControlRect(); EditorGUI.BeginChangeCheck(); EditorGUI.PropertyField(fieldRect, property); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties(); m_TurretBuilder.ResetModulePreviewEditor(moduleName); m_TurretBuilder.RegenerateTurret(); } if (Event.current.type == EventType.Repaint) { // Translate the filed rect to be in "world" space outside the AreaScope. fieldRect.x += m_ModulePreviewRects[moduleIdx].x; fieldRect.y += m_ModulePreviewRects[moduleIdx].y; m_ModulePropertyFieldRects[(int)module] = fieldRect; } } // Bottom hover border. GUILayout.Box( GUIContent.none, hoverPreviewBorderStyle, GUILayout.Height(k_BorderWidth)); } }