Newer
Older
IsoRenderTest / Assets / IsoEditor.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

[ExecuteInEditMode]
public class IsoEditor : MonoBehaviour {
    

    public Camera IsoCamera;

    private bool hasEvents = false;

    private void OnEnable()
    {
        EnableButtons();
    }

    private void OnDisable()
    {
        DisableButtons();
    }

    // Update is called once per frame
    void Update ()
    {
        if (isoMode)
        {
            foreach (SceneView sv in SceneView.sceneViews)
            {
                sv.rotation = IsoCamera.transform.rotation;
            }
        }
	}

    private bool isoMode = false;
    public bool IsoMode { get { return isoMode; } }
    private Vector3 lastCameraP;
    private Quaternion lastCameraQ;
    private bool lastOrtho;

    public void EnableButtons()
    {
        SceneView.onSceneGUIDelegate -= OnSceneGUI;
        SceneView.onSceneGUIDelegate += OnSceneGUI;
        SceneView.RepaintAll();
    }

    public void DisableButtons()
    {
        SceneView.onSceneGUIDelegate -= OnSceneGUI;
        SceneView.RepaintAll();
    }

    private struct SaveScene
    {
        public Vector3 P;
        public Quaternion Q;
        public bool O;
    }

    private Dictionary<SceneView, SaveScene> saved = new Dictionary<SceneView, SaveScene>();

    public void OnSceneGUI(SceneView sceneView)
    {
        Handles.BeginGUI();

        if (GUI.Button(new Rect(5, 5, 100, 20), "ISO Mode " + (isoMode ? "On" : "Off")))
        {
            isoMode = !isoMode;

            if (isoMode)
            {
                saved.Clear();
            }

            foreach (SceneView sv in SceneView.sceneViews)
            {
                if (isoMode)
                {
                    saved[sv] = new SaveScene
                    {
                        P = sv.pivot,
                        Q = sv.rotation,
                        O = sv.orthographic
                    };

                    sv.AlignViewToObject(IsoCamera.transform);
                    sv.orthographic = true;
                    sv.isRotationLocked = true;

                }
                else
                {
                    if (saved.ContainsKey(sv))
                    {
                        sv.pivot = saved[sv].P;
                        sv.rotation = saved[sv].Q;
                        sv.orthographic = saved[sv].O;
                    }
                    sv.isRotationLocked = false;
                }
            }
        }
        Handles.EndGUI();
    }

    
}