//
    //
    //
    #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);
    }
示例#2
0
    // 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));
        }
    }