public void Render(Material genericLineMaterial) { if (lineMeshes == null || lineMeshes.Count == 0 || !genericLineMaterial) { return; } MaterialUtility.InitGenericLineMaterial(genericLineMaterial); if (genericLineMaterial.SetPass(0)) { var max = Mathf.Min(currentLineMesh, lineMeshes.Count - 1); for (int i = 0; i <= max; i++) { lineMeshes[i].Draw(); } } }
public static void InitStyles() { if (stylesInitialized) { return; } var oldSkin = GUI.skin; stylesInitialized = true; SetDefaultGUISkin(); var whiteTexture = MaterialUtility.CreateSolidColorTexture(8, 8, Color.white); sceneTextLabel = new GUIStyle(GUI.skin.textArea); sceneTextLabel.richText = true; sceneTextLabel.onActive.background = sceneTextLabel.onFocused.background = sceneTextLabel.onHover.background = sceneTextLabel.onNormal.background = whiteTexture; sceneTextLabel.onActive.textColor = sceneTextLabel.onFocused.textColor = sceneTextLabel.onHover.textColor = sceneTextLabel.onNormal.textColor = Color.black; var toolTipStyle = new GUIStyle(GUI.skin.textArea); toolTipStyle.richText = true; toolTipStyle.wordWrap = true; toolTipStyle.stretchHeight = true; toolTipStyle.padding.left += 4; toolTipStyle.padding.right += 4; toolTipStyle.clipping = TextClipping.Overflow; toolTipTitleStyle = new GUIStyle(toolTipStyle); toolTipTitleStyle.padding.top += 4; toolTipTitleStyle.padding.bottom += 2; toolTipContentsStyle = new GUIStyle(toolTipStyle); toolTipKeycodesStyle = new GUIStyle(toolTipStyle); toolTipKeycodesStyle.padding.top += 2; rightAlignedLabel = new GUIStyle(); rightAlignedLabel.alignment = TextAnchor.MiddleRight; emptyMaterialStyle = new GUIStyle(GUIStyle.none); emptyMaterialStyle.normal.background = MaterialUtility.CreateSolidColorTexture(2, 2, Color.black); selectionRectStyle = GetStyle("selectionRect"); var redToolbarDropDown = GetStyle("toolbarDropDown"); Pro.redToolbarDropDown = new GUIStyle(redToolbarDropDown); //Pro.redToolbarDropDown.normal.background = MaterialUtility.CreateSolidColorTexture(2, 2, Color.red); Pro.redToolbarDropDown.normal.textColor = Color.Lerp(Color.red, redToolbarDropDown.normal.textColor, 0.5f); Pro.redToolbarDropDown.onNormal.textColor = Color.Lerp(Color.red, redToolbarDropDown.onNormal.textColor, 0.125f); Personal.redToolbarDropDown = new GUIStyle(redToolbarDropDown); //Personal.redToolbarDropDown.normal.background = MaterialUtility.CreateSolidColorTexture(2, 2, Color.red); Personal.redToolbarDropDown.normal.textColor = Color.Lerp(Color.red, redToolbarDropDown.normal.textColor, 0.5f); Personal.redToolbarDropDown.onNormal.textColor = Color.Lerp(Color.red, redToolbarDropDown.onNormal.textColor, 0.125f); Pro.menuItem = GetStyle("MenuItem"); Personal.menuItem = GetStyle("MenuItem"); Pro.lockedBackgroundColor = Color.Lerp(Color.white, Color.red, 0.5f); Pro.xToolbarButton = new GUIStyle(EditorStyles.toolbarButton); Pro.xToolbarButton.normal.textColor = Color.Lerp(Handles.xAxisColor, Color.gray, 0.75f); Pro.xToolbarButton.onNormal.textColor = Color.Lerp(Handles.xAxisColor, Color.white, 0.125f); Pro.yToolbarButton = new GUIStyle(EditorStyles.toolbarButton); Pro.yToolbarButton.normal.textColor = Color.Lerp(Handles.yAxisColor, Color.gray, 0.75f); Pro.yToolbarButton.onNormal.textColor = Color.Lerp(Handles.yAxisColor, Color.white, 0.125f); Pro.zToolbarButton = new GUIStyle(EditorStyles.toolbarButton); Pro.zToolbarButton.normal.textColor = Color.Lerp(Handles.zAxisColor, Color.gray, 0.75f); Pro.zToolbarButton.onNormal.textColor = Color.Lerp(Handles.zAxisColor, Color.white, 0.125f); Personal.lockedBackgroundColor = Color.Lerp(Color.black, Color.red, 0.5f); Personal.xToolbarButton = new GUIStyle(EditorStyles.toolbarButton); Personal.xToolbarButton.normal.textColor = Color.Lerp(Handles.xAxisColor, Color.white, 0.75f); Personal.xToolbarButton.onNormal.textColor = Color.Lerp(Handles.xAxisColor, Color.black, 0.25f); Personal.yToolbarButton = new GUIStyle(EditorStyles.toolbarButton); Personal.yToolbarButton.normal.textColor = Color.Lerp(Handles.yAxisColor, Color.white, 0.75f); Personal.yToolbarButton.onNormal.textColor = Color.Lerp(Handles.yAxisColor, Color.black, 0.25f); Personal.zToolbarButton = new GUIStyle(EditorStyles.toolbarButton); Personal.zToolbarButton.normal.textColor = Color.Lerp(Handles.zAxisColor, Color.white, 0.75f); Personal.zToolbarButton.onNormal.textColor = Color.Lerp(Handles.zAxisColor, Color.black, 0.25f); redTextArea = new GUIStyle(GUI.skin.textArea); redTextArea.normal.textColor = Color.red; redTextLabel = new GUIStyle(GUI.skin.label); redTextLabel.normal.textColor = Color.red; redTextLabel.richText = true; redTextLabel.wordWrap = true; redButton = new GUIStyle(GUI.skin.button); redButton.normal.textColor = Color.red; wrapLabel = new GUIStyle(GUI.skin.label); wrapLabel.wordWrap = true; versionLabelStyle = new GUIStyle(GetStyle("Label")); versionLabelStyle.alignment = TextAnchor.MiddleRight; versionLabelStyle.fontSize = versionLabelStyle.font.fontSize - 1; var original_color = versionLabelStyle.normal.textColor; original_color.a = 0.4f; versionLabelStyle.normal.textColor = original_color; BottomToolBarStyle = new GUIStyle(EditorStyles.toolbar); //BottomToolBarStyle.fixedHeight = BottomToolBarHeight; brushEditModeContent = new GUIContent[] { new GUIContent("Object"), new GUIContent("Generate"), new GUIContent("Mesh"), new GUIContent("Clip"), new GUIContent("Surfaces") }; brushEditModeTooltips = new ToolTip[] { new ToolTip("Object mode", "In this mode you can place, rotate and scale brushes", Keys.SwitchToObjectEditMode), new ToolTip("Generate mode", "In this mode you can create brushes using several generators", Keys.SwitchToGenerateEditMode), new ToolTip("Mesh mode", "In this mode you can edit the shapes of brushes", Keys.SwitchToMeshEditMode), new ToolTip("Clip mode", "In this mode you can split or clip brushes", Keys.SwitchToClipEditMode), new ToolTip("Surfaces mode", "In this mode you can modify the texturing and everything else related to brush surfaces", Keys.SwitchToSurfaceEditMode) }; var enum_type = typeof(ToolEditMode); brushEditModeNames = (from name in System.Enum.GetNames(enum_type) select ObjectNames.NicifyVariableName(name)).ToArray(); brushEditModeValues = System.Enum.GetValues(enum_type).Cast <ToolEditMode>().ToArray(); for (int i = 0; i < brushEditModeNames.Length; i++) { if (brushEditModeContent[i].text != brushEditModeNames[i]) { Debug.LogError("Fail!"); } } var pro_skin = GUIStyleUtility.Pro; var personal_skin = GUIStyleUtility.Personal; for (int i = 0; i < clipTypeCount; i++) { pro_skin.clipNames[i] = new GUIContent(proInActiveClipTypes[i]); pro_skin.clipNamesOn[i] = new GUIContent(proActiveClipTypes[i]); pro_skin.clipNames[i].text = clipText[i]; pro_skin.clipNamesOn[i].text = clipText[i]; personal_skin.clipNames[i] = new GUIContent(personalActiveClipTypes[i]); personal_skin.clipNamesOn[i] = new GUIContent(personalInActiveClipTypes[i]); personal_skin.clipNames[i].text = clipText[i]; personal_skin.clipNamesOn[i].text = clipText[i]; } pro_skin.passThrough = new GUIContent(proPassThrough); pro_skin.passThroughOn = new GUIContent(proPassThroughOn); pro_skin.hierarchyPassThrough = new GUIContent(proPassThroughOn); pro_skin.passThrough.text = passThroughText; pro_skin.passThroughOn.text = passThroughText; personal_skin.passThrough = new GUIContent(personalPassThrough); personal_skin.passThroughOn = new GUIContent(personalPassThroughOn); personal_skin.hierarchyPassThrough = new GUIContent(personalPassThroughOn); personal_skin.passThrough.text = passThroughText; personal_skin.passThroughOn.text = passThroughText; pro_skin.wireframe = new GUIContent(proWireframe); pro_skin.wireframeOn = new GUIContent(proWireframeOn); pro_skin.wireframe.tooltip = wireframeTooltip; pro_skin.wireframeOn.tooltip = wireframeTooltip; personal_skin.wireframe = new GUIContent(personalWireframe); personal_skin.wireframeOn = new GUIContent(personalWireframeOn); personal_skin.wireframe.tooltip = wireframeTooltip; personal_skin.wireframeOn.tooltip = wireframeTooltip; for (int i = 0; i < shapeModeCount; i++) { pro_skin.shapeModeNames[i] = new GUIContent(proInActiveShapeModes[i]); pro_skin.shapeModeNamesOn[i] = new GUIContent(proActiveShapeModes[i]); personal_skin.shapeModeNames[i] = new GUIContent(personalActiveShapeModes[i]); personal_skin.shapeModeNamesOn[i] = new GUIContent(personalInActiveShapeModes[i]); pro_skin.shapeModeNames[i].text = shapeModeText[i]; pro_skin.shapeModeNamesOn[i].text = shapeModeText[i]; personal_skin.shapeModeNames[i].text = shapeModeText[i]; personal_skin.shapeModeNamesOn[i].text = shapeModeText[i]; } for (int i = 0; i < operationTypeCount; i++) { pro_skin.operationNames[i] = new GUIContent(proInActiveOperationTypes[i]); pro_skin.operationNamesOn[i] = new GUIContent(proActiveOperationTypes[i]); pro_skin.hierarchyOperations[i] = new GUIContent(proActiveOperationTypes[i]); personal_skin.operationNames[i] = new GUIContent(personalActiveOperationTypes[i]); personal_skin.operationNamesOn[i] = new GUIContent(personalInActiveOperationTypes[i]); personal_skin.hierarchyOperations[i] = new GUIContent(personalInActiveOperationTypes[i]); pro_skin.operationNames[i].text = operationText[i]; pro_skin.operationNamesOn[i].text = operationText[i]; personal_skin.operationNames[i].text = operationText[i]; personal_skin.operationNamesOn[i].text = operationText[i]; } pro_skin.rebuildIcon = proRebuildIcon; pro_skin.gridIcon = proGridIcon; pro_skin.gridIconOn = proGridIconOn; pro_skin.snappingIcon = proSnappingIcon; pro_skin.snappingIconOn = proSnappingIconOn; //pro_skin.rebuildIcon.tooltip = rebuildTooltip; //pro_skin.gridIcon.tooltip = gridTooltip; //pro_skin.gridIconOn.tooltip = gridOnTooltip; //pro_skin.snappingIcon.tooltip = snappingTooltip; //pro_skin.snappingIconOn.tooltip = snappingOnTooltip; personal_skin.rebuildIcon = personalRebuildIcon; personal_skin.gridIcon = personalGridIcon; personal_skin.gridIconOn = personalGridIconOn; personal_skin.snappingIcon = personalSnappingIcon; personal_skin.snappingIconOn = personalSnappingIconOn; //personal_skin.rebuildIcon.tooltip = rebuildTooltip; //personal_skin.gridIcon.tooltip = gridTooltip; //personal_skin.gridIconOn.tooltip = gridOnTooltip; //personal_skin.snappingIcon.tooltip = snappingTooltip; //personal_skin.snappingIconOn.tooltip = snappingOnTooltip; var skin2 = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector); personal_skin.messageStyle = new GUIStyle(skin2.textArea); personal_skin.messageWarningStyle = new GUIStyle(personal_skin.messageStyle); pro_skin.messageStyle = new GUIStyle(skin2.textArea); pro_skin.messageWarningStyle = new GUIStyle(pro_skin.messageStyle); unselectedIconLabelStyle = new GUIStyle(GUI.skin.label); unselectedIconLabelStyle.richText = true; var color = unselectedIconLabelStyle.normal.textColor; color.r *= 232.0f / 255.0f; color.g *= 232.0f / 255.0f; color.b *= 232.0f / 255.0f; color.a = 153.0f / 255.0f; unselectedIconLabelStyle.normal.textColor = color; selectedIconLabelStyle = new GUIStyle(GUI.skin.label); selectedIconLabelStyle.richText = true; GUI.skin = oldSkin; }
static void OnBottomBarGUI(SceneView sceneView, Rect barSize) { //if (Event.current.type == EventType.Layout) // return; var snapMode = RealtimeCSG.CSGSettings.SnapMode; var uniformGrid = RealtimeCSG.CSGSettings.UniformGrid; var moveSnapVector = RealtimeCSG.CSGSettings.SnapVector; var rotationSnap = RealtimeCSG.CSGSettings.SnapRotation; var scaleSnap = RealtimeCSG.CSGSettings.SnapScale; var showGrid = RealtimeCSG.CSGSettings.GridVisible; var lockAxisX = RealtimeCSG.CSGSettings.LockAxisX; var lockAxisY = RealtimeCSG.CSGSettings.LockAxisY; var lockAxisZ = RealtimeCSG.CSGSettings.LockAxisZ; var distanceUnit = RealtimeCSG.CSGSettings.DistanceUnit; var helperSurfaces = RealtimeCSG.CSGSettings.VisibleHelperSurfaces; var showWireframe = RealtimeCSG.CSGSettings.IsWireframeShown(sceneView); var skin = CSG_GUIStyleUtility.Skin; var updateSurfaces = false; bool wireframeModified = false; var viewWidth = sceneView.position.width; float layoutHeight = barSize.height; float layoutX = 6.0f; bool modified = false; GUI.changed = false; { currentRect.width = 27; currentRect.y = 0; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; #region "Grid" button if (showGrid) { showGrid = GUI.Toggle(currentRect, showGrid, skin.gridIconOn, EditorStyles.toolbarButton); } else { showGrid = GUI.Toggle(currentRect, showGrid, skin.gridIcon, EditorStyles.toolbarButton); } //(x:6.00, y:0.00, width:27.00, height:18.00) TooltipUtility.SetToolTip(showGridTooltip, currentRect); #endregion if (viewWidth >= 800) { layoutX += 6; //(x:33.00, y:0.00, width:6.00, height:6.00) } var prevBackgroundColor = GUI.backgroundColor; var lockedBackgroundColor = skin.lockedBackgroundColor; if (lockAxisX) { GUI.backgroundColor = lockedBackgroundColor; } #region "X" lock button currentRect.width = 17; currentRect.y = 0; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; lockAxisX = !GUI.Toggle(currentRect, !lockAxisX, xLabel, skin.xToolbarButton); //(x:39.00, y:0.00, width:17.00, height:18.00) if (lockAxisX) { TooltipUtility.SetToolTip(xTooltipOn, currentRect); } else { TooltipUtility.SetToolTip(xTooltipOff, currentRect); } GUI.backgroundColor = prevBackgroundColor; #endregion #region "Y" lock button currentRect.x = layoutX; layoutX += currentRect.width; if (lockAxisY) { GUI.backgroundColor = lockedBackgroundColor; } lockAxisY = !GUI.Toggle(currentRect, !lockAxisY, yLabel, skin.yToolbarButton); //(x:56.00, y:0.00, width:17.00, height:18.00) if (lockAxisY) { TooltipUtility.SetToolTip(yTooltipOn, currentRect); } else { TooltipUtility.SetToolTip(yTooltipOff, currentRect); } GUI.backgroundColor = prevBackgroundColor; #endregion #region "Z" lock button currentRect.x = layoutX; layoutX += currentRect.width; if (lockAxisZ) { GUI.backgroundColor = lockedBackgroundColor; } lockAxisZ = !GUI.Toggle(currentRect, !lockAxisZ, zLabel, skin.zToolbarButton); //(x:56.00, y:0.00, width:17.00, height:18.00) if (lockAxisZ) { TooltipUtility.SetToolTip(zTooltipOn, currentRect); } else { TooltipUtility.SetToolTip(zTooltipOff, currentRect); } GUI.backgroundColor = prevBackgroundColor; #endregion } modified = GUI.changed || modified; if (viewWidth >= 800) { layoutX += 6; // (x:91.00, y:0.00, width:6.00, height:6.00) } #region "SnapMode" button GUI.changed = false; { currentRect.width = 27; currentRect.y = 0; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; switch (snapMode) { case SnapMode.GridSnapping: { var newValue = GUI.Toggle(currentRect, snapMode == SnapMode.GridSnapping, CSG_GUIStyleUtility.Skin.gridSnapIconOn, EditorStyles.toolbarButton); if (GUI.changed) { snapMode = newValue ? SnapMode.GridSnapping : SnapMode.RelativeSnapping; } //(x:97.00, y:0.00, width:27.00, height:18.00) TooltipUtility.SetToolTip(gridSnapModeTooltip, currentRect); break; } case SnapMode.RelativeSnapping: { var newValue = GUI.Toggle(currentRect, snapMode == SnapMode.RelativeSnapping, CSG_GUIStyleUtility.Skin.relSnapIconOn, EditorStyles.toolbarButton); if (GUI.changed) { snapMode = newValue ? SnapMode.RelativeSnapping : SnapMode.None; } //(x:97.00, y:0.00, width:27.00, height:18.00) TooltipUtility.SetToolTip(relativeSnapModeTooltip, currentRect); break; } default: case SnapMode.None: { var newValue = GUI.Toggle(currentRect, snapMode != SnapMode.None, CSG_GUIStyleUtility.Skin.noSnapIconOn, EditorStyles.toolbarButton); if (GUI.changed) { snapMode = newValue ? SnapMode.GridSnapping : SnapMode.None; } //(x:97.00, y:0.00, width:27.00, height:18.00) TooltipUtility.SetToolTip(noSnappingModeTooltip, currentRect); break; } } } modified = GUI.changed || modified; #endregion if (viewWidth >= 460) { if (snapMode != SnapMode.None) { #region "Position" label if (viewWidth >= 500) { if (viewWidth >= 865) { currentRect.width = 44; currentRect.y = 1; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; uniformGrid = GUI.Toggle(currentRect, uniformGrid, positionLargeLabel, miniTextStyle); //(x:128.00, y:2.00, width:44.00, height:16.00) TooltipUtility.SetToolTip(positionTooltip, currentRect); } else { currentRect.width = 22; currentRect.y = 1; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; uniformGrid = GUI.Toggle(currentRect, uniformGrid, positionSmallLabel, miniTextStyle); //(x:127.00, y:2.00, width:22.00, height:16.00) TooltipUtility.SetToolTip(positionTooltip, currentRect); } } #endregion layoutX += 2; #region "Position" field if (uniformGrid || viewWidth < 515) { EditorGUI.showMixedValue = !(moveSnapVector.x == moveSnapVector.y && moveSnapVector.x == moveSnapVector.z); GUI.changed = false; { currentRect.width = 70; currentRect.y = 3; currentRect.height = layoutHeight - (currentRect.y - 1); currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; moveSnapVector.x = Units.DistanceUnitToUnity(distanceUnit, EditorGUI.DoubleField(currentRect, Units.UnityToDistanceUnit(distanceUnit, moveSnapVector.x), textInputStyle)); //, MinSnapWidth, MaxSnapWidth)); //(x:176.00, y:3.00, width:70.00, height:16.00) } if (GUI.changed) { modified = true; moveSnapVector.y = moveSnapVector.x; moveSnapVector.z = moveSnapVector.x; } EditorGUI.showMixedValue = false; } else { GUI.changed = false; { currentRect.width = 70; currentRect.y = 3; currentRect.height = layoutHeight - (currentRect.y - 1); currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; layoutX++; moveSnapVector.x = Units.DistanceUnitToUnity(distanceUnit, EditorGUI.DoubleField(currentRect, Units.UnityToDistanceUnit(distanceUnit, moveSnapVector.x), textInputStyle)); //, MinSnapWidth, MaxSnapWidth)); //(x:175.00, y:3.00, width:70.00, height:16.00) currentRect.x = layoutX; layoutX += currentRect.width; layoutX++; moveSnapVector.y = Units.DistanceUnitToUnity(distanceUnit, EditorGUI.DoubleField(currentRect, Units.UnityToDistanceUnit(distanceUnit, moveSnapVector.y), textInputStyle)); //, MinSnapWidth, MaxSnapWidth)); //(x:247.00, y:3.00, width:70.00, height:16.00) currentRect.x = layoutX; layoutX += currentRect.width; moveSnapVector.z = Units.DistanceUnitToUnity(distanceUnit, EditorGUI.DoubleField(currentRect, Units.UnityToDistanceUnit(distanceUnit, moveSnapVector.z), textInputStyle)); //, MinSnapWidth, MaxSnapWidth)); //(x:319.00, y:3.00, width:70.00, height:16.00) } modified = GUI.changed || modified; } #endregion layoutX++; #region "Position" Unit DistanceUnit nextUnit = Units.CycleToNextUnit(distanceUnit); GUIContent unitText = Units.GetUnitGUIContent(distanceUnit); currentRect.width = 22; currentRect.y = 2; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; if (GUI.Button(currentRect, unitText, miniTextStyle)) //(x:393.00, y:2.00, width:13.00, height:16.00) { distanceUnit = nextUnit; modified = true; } #endregion layoutX += 2; #region "Position" +/- if (viewWidth >= 700) { currentRect.width = 19; currentRect.y = 2; currentRect.height = layoutHeight - (currentRect.y + 1); currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; if (GUI.Button(currentRect, positionPlusLabel, EditorStyles.miniButtonLeft)) { GridUtility.DoubleGridSize(); moveSnapVector = RealtimeCSG.CSGSettings.SnapVector; } //(x:410.00, y:2.00, width:19.00, height:15.00) TooltipUtility.SetToolTip(positionPlusTooltip, currentRect); currentRect.width = 17; currentRect.y = 2; currentRect.height = layoutHeight - (currentRect.y + 1); currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; if (GUI.Button(currentRect, positionMinusLabel, EditorStyles.miniButtonRight)) { GridUtility.HalfGridSize(); moveSnapVector = RealtimeCSG.CSGSettings.SnapVector; } //(x:429.00, y:2.00, width:17.00, height:15.00) TooltipUtility.SetToolTip(positionMinnusTooltip, currentRect); } #endregion layoutX += 2; #region "Angle" label if (viewWidth >= 750) { if (viewWidth >= 865) { currentRect.width = 31; currentRect.y = 1; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; GUI.Label(currentRect, angleLargeLabel, miniTextStyle); //(x:450.00, y:2.00, width:31.00, height:16.00) } else { currentRect.width = 22; currentRect.y = 1; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; GUI.Label(currentRect, angleSmallLabel, miniTextStyle); //(x:355.00, y:2.00, width:22.00, height:16.00) } TooltipUtility.SetToolTip(angleTooltip, currentRect); } #endregion layoutX += 2; #region "Angle" field GUI.changed = false; { currentRect.width = 70; currentRect.y = 3; currentRect.height = layoutHeight - (currentRect.y - 1); currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; rotationSnap = EditorGUI.FloatField(currentRect, rotationSnap, textInputStyle); //, MinSnapWidth, MaxSnapWidth); //(x:486.00, y:3.00, width:70.00, height:16.00) if (viewWidth <= 750) { TooltipUtility.SetToolTip(angleTooltip, currentRect); } } modified = GUI.changed || modified; #endregion layoutX++; #region "Angle" Unit if (viewWidth >= 370) { currentRect.width = 14; currentRect.y = 1; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; GUI.Label(currentRect, angleUnitLabel, miniTextStyle); } #endregion layoutX += 2; #region "Angle" +/- if (viewWidth >= 700) { currentRect.width = 19; currentRect.y = 1; currentRect.height = layoutHeight - (currentRect.y + 1); currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; if (GUI.Button(currentRect, anglePlusLabel, EditorStyles.miniButtonLeft)) { rotationSnap *= 2.0f; modified = true; } //(x:573.00, y:2.00, width:19.00, height:15.00) TooltipUtility.SetToolTip(anglePlusTooltip, currentRect); currentRect.width = 17; currentRect.y = 1; currentRect.height = layoutHeight - (currentRect.y + 1); currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; if (GUI.Button(currentRect, angleMinusLabel, EditorStyles.miniButtonRight)) { rotationSnap /= 2.0f; modified = true; } //(x:592.00, y:2.00, width:17.00, height:15.00) TooltipUtility.SetToolTip(angleMinnusTooltip, currentRect); } #endregion layoutX += 2; #region "Scale" label if (viewWidth >= 750) { if (viewWidth >= 865) { currentRect.width = 31; currentRect.y = 1; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; GUI.Label(currentRect, scaleLargeLabel, miniTextStyle); //(x:613.00, y:2.00, width:31.00, height:16.00) } else { currentRect.width = 19; currentRect.y = 1; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; GUI.Label(currentRect, scaleSmallLabel, miniTextStyle); //(x:495.00, y:2.00, width:19.00, height:16.00) } TooltipUtility.SetToolTip(scaleTooltip, currentRect); } #endregion layoutX += 2; #region "Scale" field GUI.changed = false; { currentRect.width = 70; currentRect.y = 3; currentRect.height = layoutHeight - (currentRect.y - 1); currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; scaleSnap = EditorGUI.FloatField(currentRect, scaleSnap, textInputStyle); //, MinSnapWidth, MaxSnapWidth); //(x:648.00, y:3.00, width:70.00, height:16.00) if (viewWidth <= 750) { TooltipUtility.SetToolTip(scaleTooltip, currentRect); } } modified = GUI.changed || modified; #endregion layoutX++; #region "Scale" Unit if (viewWidth >= 370) { currentRect.width = 15; currentRect.y = 1; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; GUI.Label(currentRect, scaleUnitLabel, miniTextStyle); //(x:722.00, y:2.00, width:15.00, height:16.00) } #endregion layoutX += 2; #region "Scale" +/- if (viewWidth >= 700) { currentRect.width = 19; currentRect.y = 2; currentRect.height = layoutHeight - (currentRect.y + 1); currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; if (GUI.Button(currentRect, scalePlusLabel, EditorStyles.miniButtonLeft)) { scaleSnap *= 10.0f; modified = true; } //(x:741.00, y:2.00, width:19.00, height:15.00) TooltipUtility.SetToolTip(scalePlusTooltip, currentRect); currentRect.width = 17; currentRect.y = 2; currentRect.height = layoutHeight - (currentRect.y + 1); currentRect.y += barSize.y; currentRect.x = layoutX; layoutX += currentRect.width; if (GUI.Button(currentRect, scaleMinusLabel, EditorStyles.miniButtonRight)) { scaleSnap /= 10.0f; modified = true; } //(x:760.00, y:2.00, width:17.00, height:15.00) TooltipUtility.SetToolTip(scaleMinnusTooltip, currentRect); } #endregion } } var prevLayoutX = layoutX; layoutX = viewWidth; #region "Rebuild" currentRect.width = 27; currentRect.y = 0; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; layoutX -= currentRect.width; currentRect.x = layoutX; if (GUI.Button(currentRect, CSG_GUIStyleUtility.Skin.rebuildIcon, EditorStyles.toolbarButton)) { Debug.Log("Starting complete rebuild"); var text = new System.Text.StringBuilder(); MaterialUtility.ResetMaterialTypeLookup(); InternalCSGModelManager.skipCheckForChanges = true; RealtimeCSG.CSGSettings.Reload(); UnityCompilerDefineManager.UpdateUnityDefines(); InternalCSGModelManager.registerTime = 0.0; InternalCSGModelManager.validateTime = 0.0; InternalCSGModelManager.hierarchyValidateTime = 0.0; InternalCSGModelManager.updateHierarchyTime = 0.0; var startTime = EditorApplication.timeSinceStartup; InternalCSGModelManager.ForceRebuildAll(); InternalCSGModelManager.OnHierarchyModified(); var hierarchy_update_endTime = EditorApplication.timeSinceStartup; text.AppendFormat(CultureInfo.InvariantCulture, "Full hierarchy rebuild in {0:F} ms. ", (hierarchy_update_endTime - startTime) * 1000); NativeMethodBindings.RebuildAll(); var csg_endTime = EditorApplication.timeSinceStartup; text.AppendFormat(CultureInfo.InvariantCulture, "Full CSG rebuild done in {0:F} ms. ", (csg_endTime - hierarchy_update_endTime) * 1000); InternalCSGModelManager.RemoveForcedUpdates(); // we already did this in rebuild all InternalCSGModelManager.UpdateMeshes(text, forceUpdate: true); updateSurfaces = true; UpdateLoop.ResetUpdateRoutine(); RealtimeCSG.CSGSettings.Save(); InternalCSGModelManager.skipCheckForChanges = false; var scenes = new HashSet <UnityEngine.SceneManagement.Scene>(); foreach (var model in InternalCSGModelManager.Models) { scenes.Add(model.gameObject.scene); } text.AppendFormat(CultureInfo.InvariantCulture, "{0} brushes. ", Foundation.CSGManager.TreeBrushCount); Debug.Log(text.ToString()); } //(x:1442.00, y:0.00, width:27.00, height:18.00) TooltipUtility.SetToolTip(rebuildTooltip, currentRect); #endregion if (viewWidth >= 800) { layoutX -= 6; //(x:1436.00, y:0.00, width:6.00, height:6.00) } #region "Helper Surface Flags" Mask if (viewWidth >= 250) { GUI.changed = false; { prevLayoutX += 8; // extra space prevLayoutX += 26; // width of "Show wireframe" button currentRect.width = Mathf.Max(20, Mathf.Min(165, (viewWidth - prevLayoutX - currentRect.width))); currentRect.y = 0; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; layoutX -= currentRect.width; currentRect.x = layoutX; SurfaceVisibilityPopup.Button(sceneView, currentRect); //(x:1267.00, y:2.00, width:165.00, height:16.00) TooltipUtility.SetToolTip(helperSurfacesTooltip, currentRect); } if (GUI.changed) { updateSurfaces = true; modified = true; } } #endregion #region "Show wireframe" button GUI.changed = false; currentRect.width = 26; currentRect.y = 0; currentRect.height = layoutHeight - currentRect.y; currentRect.y += barSize.y; layoutX -= currentRect.width; currentRect.x = layoutX; if (showWireframe) { showWireframe = GUI.Toggle(currentRect, showWireframe, CSG_GUIStyleUtility.Skin.wireframe, EditorStyles.toolbarButton); //(x:1237.00, y:0.00, width:26.00, height:18.00) } else { showWireframe = GUI.Toggle(currentRect, showWireframe, CSG_GUIStyleUtility.Skin.wireframeOn, EditorStyles.toolbarButton); //(x:1237.00, y:0.00, width:26.00, height:18.00) } TooltipUtility.SetToolTip(showWireframeTooltip, currentRect); if (GUI.changed) { wireframeModified = true; modified = true; } #endregion #region Capture mouse clicks in empty space var mousePoint = Event.current.mousePosition; int controlID = GUIUtility.GetControlID(BottomBarEditorOverlayHash, FocusType.Passive, barSize); switch (Event.current.GetTypeForControl(controlID)) { case EventType.MouseDown: { if (barSize.Contains(mousePoint)) { GUIUtility.hotControl = controlID; GUIUtility.keyboardControl = controlID; Event.current.Use(); } break; } case EventType.MouseMove: { if (barSize.Contains(mousePoint)) { Event.current.Use(); } break; } case EventType.MouseUp: { if (GUIUtility.hotControl == controlID) { GUIUtility.hotControl = 0; GUIUtility.keyboardControl = 0; Event.current.Use(); } break; } case EventType.MouseDrag: { if (GUIUtility.hotControl == controlID) { Event.current.Use(); } break; } case EventType.ScrollWheel: { if (barSize.Contains(mousePoint)) { Event.current.Use(); } break; } } #endregion #region Store modified values rotationSnap = Mathf.Max(1.0f, Mathf.Abs((360 + (rotationSnap % 360))) % 360); moveSnapVector.x = Mathf.Max(1.0f / 1024.0f, moveSnapVector.x); moveSnapVector.y = Mathf.Max(1.0f / 1024.0f, moveSnapVector.y); moveSnapVector.z = Mathf.Max(1.0f / 1024.0f, moveSnapVector.z); scaleSnap = Mathf.Max(MathConstants.MinimumScale, scaleSnap); RealtimeCSG.CSGSettings.SnapMode = snapMode; RealtimeCSG.CSGSettings.SnapVector = moveSnapVector; RealtimeCSG.CSGSettings.SnapRotation = rotationSnap; RealtimeCSG.CSGSettings.SnapScale = scaleSnap; RealtimeCSG.CSGSettings.UniformGrid = uniformGrid; // RealtimeCSG.Settings.SnapVertex = vertexSnap; RealtimeCSG.CSGSettings.GridVisible = showGrid; RealtimeCSG.CSGSettings.LockAxisX = lockAxisX; RealtimeCSG.CSGSettings.LockAxisY = lockAxisY; RealtimeCSG.CSGSettings.LockAxisZ = lockAxisZ; RealtimeCSG.CSGSettings.DistanceUnit = distanceUnit; RealtimeCSG.CSGSettings.VisibleHelperSurfaces = helperSurfaces; if (wireframeModified) { RealtimeCSG.CSGSettings.SetWireframeShown(sceneView, showWireframe); } if (updateSurfaces) { MeshInstanceManager.UpdateHelperSurfaceVisibility(force: true); } if (modified) { GUI.changed = true; RealtimeCSG.CSGSettings.UpdateSnapSettings(); RealtimeCSG.CSGSettings.Save(); CSG_EditorGUIUtility.RepaintAll(); } #endregion }
/* * static void OnGUIContentsMaterialInspector(Material material, bool mixedValues) * { * //if (materialEditor == null || prevMaterial != material) * { * var editor = materialEditor as Editor; * Editor.CreateCachedEditor(material, typeof(MaterialEditor), ref editor); * materialEditor = editor as MaterialEditor; * } * * if (materialEditor != null) * { * EditorGUI.showMixedValue = mixedValues; * try * { * materialEditor.DrawHeader(); * if (materialEditor.PropertiesGUI()) * { * materialEditor.PropertiesChanged(); * } * } * catch * {} * EditorGUI.showMixedValue = false; * } * } */ private static void OnGUIContents(bool isSceneGUI, EditModeSurface tool) { EditModeCommonGUI.StartToolGUI(); var selectedBrushSurfaces = (tool == null) ? new SelectedBrushSurface[0] : tool.GetSelectedSurfaces(); var enabled = selectedBrushSurfaces.Length > 0; EditorGUI.BeginDisabledGroup(!enabled); { Material material = null; var currentTexGen = new TexGen(); var haveTexgen = false; var multipleColors = !enabled; var multipleTranslationX = !enabled; var multipleTranslationY = !enabled; var multipleScaleX = !enabled; var multipleScaleY = !enabled; var multipleRotationAngle = !enabled; var multipleMaterials = !enabled; bool?textureLocked = null; bool foundHelperMaterial = false; RenderSurfaceType?firstRenderSurfaceType = null; Material firstMaterial = null; if (selectedBrushSurfaces.Length > 0) { for (var i = 0; i < selectedBrushSurfaces.Length; i++) { var brush = selectedBrushSurfaces[i].brush; if (!brush) { continue; } var surfaceIndex = selectedBrushSurfaces[i].surfaceIndex; if (surfaceIndex >= brush.Shape.Surfaces.Length) { Debug.LogWarning("surface_index >= brush.Shape.Surfaces.Length"); continue; } var texGenIndex = brush.Shape.Surfaces[surfaceIndex].TexGenIndex; if (texGenIndex >= brush.Shape.TexGens.Length) { Debug.LogWarning("texGen_index >= brush.Shape.TexGens.Length"); continue; } var brushCache = InternalCSGModelManager.GetBrushCache(brush); var model = (brushCache != null) ? brushCache.childData.Model : null; Material foundMaterial; var texGenFlags = brush.Shape.TexGenFlags[texGenIndex]; if (model && (!model.IsRenderable || model.ShadowsOnly)) { foundHelperMaterial = true; if (!firstRenderSurfaceType.HasValue) { firstRenderSurfaceType = ModelTraits.GetModelSurfaceType(model); } foundMaterial = null; } else if ((texGenFlags & TexGenFlags.NoRender) == TexGenFlags.NoRender) { foundHelperMaterial = true; if (!firstRenderSurfaceType.HasValue) { if ((texGenFlags & TexGenFlags.NoCastShadows) != TexGenFlags.NoCastShadows) { firstRenderSurfaceType = RenderSurfaceType.ShadowOnly; } else if ((texGenFlags & TexGenFlags.NoCollision) != TexGenFlags.NoCollision) { firstRenderSurfaceType = RenderSurfaceType.Collider; } else { firstRenderSurfaceType = RenderSurfaceType.Hidden; } } foundMaterial = null; } else { var surfaceMaterial = brush.Shape.TexGens[texGenIndex].RenderMaterial; if (!foundHelperMaterial) { var surfaceType = MaterialUtility.GetMaterialSurfaceType(surfaceMaterial); if (!firstRenderSurfaceType.HasValue) { firstRenderSurfaceType = surfaceType; } foundHelperMaterial = surfaceType != RenderSurfaceType.Normal; } foundMaterial = surfaceMaterial; } if ((texGenFlags & TexGenFlags.WorldSpaceTexture) == TexGenFlags.WorldSpaceTexture) { if (i == 0) { textureLocked = false; } else if (textureLocked.HasValue && textureLocked.Value) { textureLocked = null; } } else { if (i == 0) { textureLocked = true; } else if (textureLocked.HasValue && !textureLocked.Value) { textureLocked = null; } } if (foundMaterial != material) { if (!material) { firstMaterial = foundMaterial; material = foundMaterial; } else { multipleMaterials = true; } } if (!haveTexgen) { currentTexGen = brush.Shape.TexGens[texGenIndex]; haveTexgen = true; } else { if (!multipleColors) { var color = brush.Shape.TexGens[texGenIndex].Color; multipleColors = currentTexGen.Color.a != color.a || currentTexGen.Color.b != color.b || currentTexGen.Color.g != color.g || currentTexGen.Color.r != color.r; } if (!multipleScaleX || !multipleScaleY) { var scale = brush.Shape.TexGens[texGenIndex].Scale; multipleScaleX = multipleScaleX || currentTexGen.Scale.x != scale.x; multipleScaleY = multipleScaleY || currentTexGen.Scale.y != scale.y; } if (!multipleTranslationX || !multipleTranslationY) { var translation = brush.Shape.TexGens[texGenIndex].Translation; multipleTranslationX = multipleTranslationX || currentTexGen.Translation.x != translation.x; multipleTranslationY = multipleTranslationY || currentTexGen.Translation.y != translation.y; } if (!multipleRotationAngle) { var rotationAngle = brush.Shape.TexGens[texGenIndex].RotationAngle; multipleRotationAngle = currentTexGen.RotationAngle != rotationAngle; } } } if (foundHelperMaterial && !firstMaterial) { if (firstRenderSurfaceType.HasValue) { firstMaterial = MaterialUtility.GetSurfaceMaterial(firstRenderSurfaceType.Value); } else { firstMaterial = MaterialUtility.HiddenMaterial; } } } GUILayout.BeginVertical(isSceneGUI ? materialDoubleWidth : CSG_GUIStyleUtility.ContentEmpty); { GUILayout.BeginVertical(isSceneGUI ? GUI.skin.box : GUIStyle.none); { /* * Color new_color; * EditorGUI.BeginChangeCheck(); * { * EditorGUI.showMixedValue = multipleColors; * // why doesn't the colorfield return a modified color? * try * { * new_color = EditorGUILayout.ColorField(GUIContent.none, currentTexGen.Color); * } * catch * { * new_color = currentTexGen.Color; * } * } * if (EditorGUI.EndChangeCheck() || currentTexGen.Color != new_color) * { * SurfaceUtility.SetColors(selectedBrushSurfaces, new_color); * } */ if (isSceneGUI) { GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { EditorGUI.BeginDisabledGroup(material == null); { GUILayout.BeginVertical(CSG_GUIStyleUtility.ContentEmpty); { GUILayout.Space(1); /* * Color new_color; * EditorGUI.BeginChangeCheck(); * { * EditorGUI.showMixedValue = multipleColors; * // why doesn't the colorfield return a modified color? * try * { * new_color = EditorGUILayout.ColorField(GUIContent.none, currentTexGen.Color); * } * catch * { * new_color = currentTexGen.Color; * } * } * if (EditorGUI.EndChangeCheck() || currentTexGen.Color != new_color) * { * SurfaceUtility.SetColors(selectedBrushSurfaces, new_color); * } * * GUILayout.Space(1); */ Material newMaterial; EditorGUI.BeginChangeCheck(); { EditorGUI.showMixedValue = multipleMaterials; newMaterial = EditorGUILayout.ObjectField(material, typeof(Material), true) as Material; EditorGUI.showMixedValue = false; } if (EditorGUI.EndChangeCheck()) { if (newMaterial) { SurfaceUtility.SetMaterials(selectedBrushSurfaces, newMaterial); CSGSettings.DefaultMaterial = newMaterial; CSGSettings.Save(); } } } GUILayout.EndVertical(); GUILayout.Space(1); } EditorGUI.EndDisabledGroup(); } GUILayout.EndHorizontal(); GUILayout.Space(4); GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { GUILayout.Space(2); OnGUIContentsMaterialImage(isSceneGUI, firstMaterial, multipleMaterials, selectedBrushSurfaces); GUILayout.BeginHorizontal(materialWidth); { GUILayout.FlexibleSpace(); GUILayout.BeginVertical(materialHeight); { OnGUIContentsJustify(isSceneGUI, selectedBrushSurfaces); GUILayout.FlexibleSpace(); } GUILayout.EndVertical(); } GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); } GUILayout.EndHorizontal(); } } GUILayout.EndVertical(); if (!isSceneGUI) { EditorGUILayout.Space(); } if (currentTexGen.Scale.x == 0.0f) { currentTexGen.Scale.x = 1.0f; } if (currentTexGen.Scale.y == 0.0f) { currentTexGen.Scale.y = 1.0f; } const float scale_round = 10000.0f; currentTexGen.Scale.x = Mathf.RoundToInt(currentTexGen.Scale.x * scale_round) / scale_round; currentTexGen.Scale.y = Mathf.RoundToInt(currentTexGen.Scale.y * scale_round) / scale_round; currentTexGen.Translation.x = Mathf.RoundToInt(currentTexGen.Translation.x * scale_round) / scale_round; currentTexGen.Translation.y = Mathf.RoundToInt(currentTexGen.Translation.y * scale_round) / scale_round; currentTexGen.RotationAngle = Mathf.RoundToInt(currentTexGen.RotationAngle * scale_round) / scale_round; var leftStyle = isSceneGUI ? EditorStyles.miniButtonLeft : GUI.skin.button; var middleStyle = isSceneGUI ? EditorStyles.miniButtonMid : GUI.skin.button; var rightStyle = isSceneGUI ? EditorStyles.miniButtonRight : GUI.skin.button; GUILayout.BeginVertical(isSceneGUI ? GUI.skin.box : GUIStyle.none); { EditorGUI.BeginChangeCheck(); { EditorGUI.showMixedValue = !textureLocked.HasValue; textureLocked = EditorGUILayout.ToggleLeft(ContentLockTexture, textureLocked.HasValue ? textureLocked.Value : false); TooltipUtility.SetToolTip(ToolTipLockTexture); } if (EditorGUI.EndChangeCheck()) { SurfaceUtility.SetTextureLock(selectedBrushSurfaces, textureLocked.Value); } } GUILayout.EndVertical(); GUILayout.BeginVertical(isSceneGUI ? GUI.skin.box : GUIStyle.none); { GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { if (isSceneGUI) { EditorGUILayout.LabelField(ContentUVScale, EditorStyles.miniLabel, labelWidth); } else { EditorGUILayout.LabelField(ContentUVScale, largeLabelWidth); } TooltipUtility.SetToolTip(ToolTipScaleUV); GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { if (!isSceneGUI) { EditorGUILayout.LabelField(ContentUSymbol, unitWidth); } EditorGUI.BeginChangeCheck(); { EditorGUI.showMixedValue = multipleScaleX; currentTexGen.Scale.x = EditorGUILayout.FloatField(currentTexGen.Scale.x, minFloatFieldWidth); } if (EditorGUI.EndChangeCheck()) { SurfaceUtility.SetScaleX(selectedBrushSurfaces, currentTexGen.Scale.x); } if (!isSceneGUI) { EditorGUILayout.LabelField(ContentVSymbol, unitWidth); } EditorGUI.BeginChangeCheck(); { EditorGUI.showMixedValue = multipleScaleY; currentTexGen.Scale.y = EditorGUILayout.FloatField(currentTexGen.Scale.y, minFloatFieldWidth); } if (EditorGUI.EndChangeCheck()) { SurfaceUtility.SetScaleY(selectedBrushSurfaces, currentTexGen.Scale.y); } } GUILayout.EndHorizontal(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { if (isSceneGUI) { EditorGUILayout.LabelField(ContentOffset, EditorStyles.miniLabel, labelWidth); } else { EditorGUILayout.LabelField(ContentOffset, largeLabelWidth); } TooltipUtility.SetToolTip(ToolTipOffsetUV); GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { if (!isSceneGUI) { EditorGUILayout.LabelField(ContentUSymbol, unitWidth); } EditorGUI.BeginChangeCheck(); { EditorGUI.showMixedValue = multipleTranslationX; currentTexGen.Translation.x = EditorGUILayout.FloatField(currentTexGen.Translation.x, minFloatFieldWidth); } if (EditorGUI.EndChangeCheck()) { SurfaceUtility.SetTranslationX(selectedBrushSurfaces, currentTexGen.Translation.x); } if (!isSceneGUI) { EditorGUILayout.LabelField(ContentVSymbol, unitWidth); } EditorGUI.BeginChangeCheck(); { EditorGUI.showMixedValue = multipleTranslationY; currentTexGen.Translation.y = EditorGUILayout.FloatField(currentTexGen.Translation.y, minFloatFieldWidth); } if (EditorGUI.EndChangeCheck()) { SurfaceUtility.SetTranslationY(selectedBrushSurfaces, currentTexGen.Translation.y); } } GUILayout.EndHorizontal(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { if (isSceneGUI) { EditorGUILayout.LabelField(ContentRotate, EditorStyles.miniLabel, labelWidth); } else { EditorGUILayout.LabelField(ContentRotate, largeLabelWidth); } TooltipUtility.SetToolTip(ToolTipRotation); if (!isSceneGUI) { GUILayout.BeginVertical(CSG_GUIStyleUtility.ContentEmpty); } GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { EditorGUI.BeginChangeCheck(); { EditorGUI.showMixedValue = multipleRotationAngle; currentTexGen.RotationAngle = EditorGUILayout.FloatField(currentTexGen.RotationAngle, minFloatFieldWidth); if (!isSceneGUI) { EditorGUILayout.LabelField(ContentAngleSymbol, unitWidth); } } if (EditorGUI.EndChangeCheck()) { SurfaceUtility.SetRotationAngle(selectedBrushSurfaces, currentTexGen.RotationAngle); } } GUILayout.EndHorizontal(); var buttonWidth = isSceneGUI ? new GUILayoutOption[] { angleButtonWidth } : new GUILayoutOption[0]; GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { if (GUILayout.Button(ContentRotate90Negative, leftStyle, buttonWidth)) { SurfaceUtility.AddRotationAngle(selectedBrushSurfaces, -90.0f); } TooltipUtility.SetToolTip(ToolTipRotate90Negative); if (GUILayout.Button(ContentRotate90Positive, rightStyle, buttonWidth)) { SurfaceUtility.AddRotationAngle(selectedBrushSurfaces, +90.0f); } TooltipUtility.SetToolTip(ToolTipRotate90Positive); } GUILayout.EndHorizontal(); if (!isSceneGUI) { GUILayout.EndVertical(); } } GUILayout.EndHorizontal(); } GUILayout.EndVertical(); if (!isSceneGUI) { EditorGUILayout.Space(); } GUILayout.BeginVertical(isSceneGUI ? GUI.skin.box : GUIStyle.none); { GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { if (!isSceneGUI) { GUILayout.Label(ContentFit, largeLabelWidth); } else { GUILayout.Label(ContentFit, EditorStyles.miniLabel, smallLabelWidth); } if (GUILayout.Button(ContentFitX, leftStyle)) { SurfaceUtility.FitSurfaceX(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipFitX); if (GUILayout.Button(ContentFitXY, middleStyle)) { SurfaceUtility.FitSurface(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipFitXY); if (GUILayout.Button(ContentFitY, rightStyle)) { SurfaceUtility.FitSurfaceY(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipFitY); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { if (!isSceneGUI) { GUILayout.Label(ContentReset, largeLabelWidth); } else { GUILayout.Label(ContentReset, EditorStyles.miniLabel, smallLabelWidth); } if (GUILayout.Button(ContentResetX, leftStyle)) { SurfaceUtility.ResetSurfaceX(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipResetX); if (GUILayout.Button(ContentResetXY, middleStyle)) { SurfaceUtility.ResetSurface(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipResetXY); if (GUILayout.Button(ContentResetY, rightStyle)) { SurfaceUtility.ResetSurfaceY(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipResetY); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { if (!isSceneGUI) { GUILayout.Label(ContentFlip, largeLabelWidth); } else { GUILayout.Label(ContentFlip, EditorStyles.miniLabel, smallLabelWidth); } if (GUILayout.Button(ContentFlipX, leftStyle)) { SurfaceUtility.FlipX(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipFlipX); if (GUILayout.Button(ContentFlipXY, middleStyle)) { SurfaceUtility.FlipXY(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipFlipXY); if (GUILayout.Button(ContentFlipY, rightStyle)) { SurfaceUtility.FlipY(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipFlipY); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { if (!isSceneGUI) { GUILayout.Label(ContentScale, largeLabelWidth); } else { GUILayout.Label(ContentScale, EditorStyles.miniLabel, smallLabelWidth); } if (GUILayout.Button(ContentDoubleScale, leftStyle)) { SurfaceUtility.MultiplyScale(selectedBrushSurfaces, 2.0f); } TooltipUtility.SetToolTip(ToolTipDoubleScale); if (GUILayout.Button(ContentHalfScale, rightStyle)) { SurfaceUtility.MultiplyScale(selectedBrushSurfaces, 0.5f); } TooltipUtility.SetToolTip(ToolTipHalfScale); } GUILayout.EndHorizontal(); } GUILayout.EndVertical(); if (!isSceneGUI) { EditorGUILayout.Space(); } if (!isSceneGUI) { OnGUIContentsJustify(isSceneGUI, selectedBrushSurfaces); } if (!isSceneGUI) { EditorGUILayout.Space(); } GUILayout.BeginVertical(isSceneGUI ? GUI.skin.box : GUIStyle.none); { EditModeCommonGUI.OnSurfaceFlagButtons(selectedBrushSurfaces, isSceneGUI); GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { EditorGUI.BeginDisabledGroup(!SurfaceUtility.CanSmooth(selectedBrushSurfaces)); { if (GUILayout.Button(ContentSmoothSurfaces, leftStyle)) { SurfaceUtility.Smooth(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipSmoothSurfaces); } EditorGUI.EndDisabledGroup(); EditorGUI.BeginDisabledGroup(!SurfaceUtility.CanUnSmooth(selectedBrushSurfaces)); { if (GUILayout.Button(ContentUnSmoothSurfaces, rightStyle)) { SurfaceUtility.UnSmooth(selectedBrushSurfaces); } TooltipUtility.SetToolTip(ToolTipUnSmoothSurfaces); } EditorGUI.EndDisabledGroup(); } GUILayout.EndHorizontal(); } GUILayout.EndVertical(); if (!isSceneGUI) { EditorGUILayout.Space(); Material new_material; GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { EditorGUILayout.LabelField(ContentMaterial, largeLabelWidth); GUILayout.BeginVertical(CSG_GUIStyleUtility.ContentEmpty); { EditorGUI.BeginChangeCheck(); { EditorGUI.showMixedValue = multipleMaterials; new_material = EditorGUILayout.ObjectField(material, typeof(Material), true) as Material; EditorGUI.showMixedValue = false; } if (EditorGUI.EndChangeCheck()) { if (!new_material) { new_material = MaterialUtility.MissingMaterial; } SurfaceUtility.SetMaterials(selectedBrushSurfaces, new_material); } } GUILayout.Space(2); GUILayout.BeginHorizontal(CSG_GUIStyleUtility.ContentEmpty); { GUILayout.Space(5); OnGUIContentsMaterialImage(isSceneGUI, firstMaterial, multipleMaterials, selectedBrushSurfaces); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); } GUILayout.EndHorizontal(); // Unity won't let us do this //GUILayout.BeginVertical(GUIStyleUtility.ContentEmpty); //OnGUIContentsMaterialInspector(first_material, multiple_materials); //GUILayout.EndVertical(); } } GUILayout.EndVertical(); } EditorGUI.EndDisabledGroup(); EditorGUI.showMixedValue = false; }