コード例 #1
0
ファイル: BuildrEditModeEditor.cs プロジェクト: marlonmyd/ZS1
    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();
        }
    }
コード例 #2
0
    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);
        }
    }