void OnSceneGUI() { if (SceneView.focusedWindow == null) { return; } if (_data == null) { _data = _editMode.data; return; } _position = _editMode.transform.position; _handleSize = HandleUtility.GetHandleSize(_position); if (_editMode.alwaysSnap) { _shouldSnap = true; } else { _shouldSnap = Event.current.shift; } if (_data.editing) { switch (_editMode.stage) { case BuildrEditMode.stages.floorplan: BuildrEditModeFloorplan.SceneGUI(_editMode, _data.plan, _shouldSnap, _handleSize); break; case BuildrEditMode.stages.building: BuildrEditModeHUD.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); BuildrEditModeBuilding.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); break; case BuildrEditMode.stages.facades: BuildrEditModeHUD.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); break; case BuildrEditMode.stages.textures: BuildrEditModeHUD.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); BuildrEditModeTextures.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); break; case BuildrEditMode.stages.roofs: BuildrEditModeHUD.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); break; case BuildrEditMode.stages.details: BuildrEditModeHUD.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); BuildrEditModeDetails.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); break; case BuildrEditMode.stages.interior: BuildrEditModeHUD.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); BuildrEditModeInterior.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); break; case BuildrEditMode.stages.options: BuildrEditModeHUD.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); break; case BuildrEditMode.stages.export: BuildrEditModeHUD.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); break; } } else { BuildrGenerateModeEditor.SceneGUI(_editMode, _data, _shouldSnap, _handleSize); } if (GUI.changed) { EditorUtility.SetDirty(_editMode); EditorUtility.SetDirty(_data); _editMode.UpdateRender(); } }
public static void SceneGUI(BuildrEditMode editMode, BuildrData data, bool shouldSnap, float handleSize) { switch (mode) { case EditModes.general: //No scene actions break; case EditModes.floorplan: BuildrEditModeFloorplan.SceneGUI(editMode, data.plan, false, handleSize); break; } if (constraints.constrainPlanByArea) { Rect area = constraints.area; Vector3 position = editMode.transform.position; Vector3 areaLeft = new Vector3(area.xMin, 0, (area.yMin + area.yMax) / 2); Vector3 areaRight = new Vector3(area.xMax, 0, (area.yMin + area.yMax) / 2); Vector3 areaBottom = new Vector3((area.xMin + area.xMax) / 2, 0, area.yMin); Vector3 areaTop = new Vector3((area.xMin + area.xMax) / 2, 0, area.yMax); Vector3 newAreaLeft = Handles.Slider(areaLeft + position, Vector3.left, HandleUtility.GetHandleSize(areaLeft) * 0.666f, Handles.ArrowCap, 0.0f); Vector3 newAreaRight = Handles.Slider(areaRight + position, Vector3.right, HandleUtility.GetHandleSize(areaLeft) * 0.666f, Handles.ArrowCap, 0.0f); Vector3 newAreaBottom = Handles.Slider(areaBottom + position, Vector3.back, HandleUtility.GetHandleSize(areaLeft) * 0.666f, Handles.ArrowCap, 0.0f); Vector3 newAreaTop = Handles.Slider(areaTop + position, Vector3.forward, HandleUtility.GetHandleSize(areaLeft) * 0.666f, Handles.ArrowCap, 0.0f); newAreaLeft -= position; newAreaRight -= position; newAreaBottom -= position; newAreaTop -= position; if (areaLeft != newAreaLeft) { area.xMin = Mathf.Min(newAreaLeft.x, area.xMax - 1.0f); } if (areaRight != newAreaRight) { area.xMax = Mathf.Max(newAreaRight.x, area.xMin + 1.0f); } if (areaBottom != newAreaBottom) { area.yMin = Mathf.Min(newAreaBottom.z, area.yMax - 1.0f); } if (areaTop != newAreaTop) { area.yMax = Mathf.Max(newAreaTop.z, area.yMin + 1.0f); } constraints.area = area; Vector3 coreBL = new Vector3(area.xMin, 0, area.yMin) + position; Vector3 coreBR = new Vector3(area.xMax, 0, area.yMin) + position; Vector3 coreTL = new Vector3(area.xMin, 0, area.yMax) + position; Vector3 coreTR = new Vector3(area.xMax, 0, area.yMax) + position; Handles.DrawLine(coreBL, coreBR); Handles.DrawLine(coreBR, coreTR); Handles.DrawLine(coreTR, coreTL); Handles.DrawLine(coreTL, coreBL); } }