|
|
|
using UnityEditor;
|
|
|
|
using UnityEngine;
|
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using Fungus;
|
|
|
|
|
|
|
|
[CanEditMultipleObjects]
|
|
|
|
[CustomEditor (typeof(View))]
|
|
|
|
public class ViewEditor : Editor
|
|
|
|
{
|
|
|
|
// Draw Views when they're not selected
|
|
|
|
[DrawGizmo(GizmoType.NotSelected)]
|
|
|
|
static void RenderCustomGizmo(Transform objectTransform, GizmoType gizmoType)
|
|
|
|
{
|
|
|
|
View view = objectTransform.gameObject.GetComponent<View>();
|
|
|
|
if (view != null)
|
|
|
|
{
|
|
|
|
DrawView(view);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void OnSceneGUI ()
|
|
|
|
{
|
|
|
|
View t = target as View;
|
|
|
|
if (t.enabled)
|
|
|
|
{
|
|
|
|
EditViewBounds();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (GUI.changed)
|
|
|
|
{
|
|
|
|
EditorUtility.SetDirty(target);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EditViewBounds()
|
|
|
|
{
|
|
|
|
View view = target as View;
|
|
|
|
|
|
|
|
DrawView(view);
|
|
|
|
|
|
|
|
Vector3 pos = view.transform.position;
|
|
|
|
|
|
|
|
float viewSize = CalculateLocalViewSize(view);
|
|
|
|
|
|
|
|
Vector3[] handles = new Vector3[2];
|
|
|
|
handles[0] = view.transform.TransformPoint(new Vector3(0, -viewSize, 0));
|
|
|
|
handles[1] = view.transform.TransformPoint(new Vector3(0, viewSize, 0));
|
|
|
|
|
|
|
|
Handles.color = view.primaryColor;
|
|
|
|
|
|
|
|
for (int i = 0; i < 2; ++i)
|
|
|
|
{
|
|
|
|
Vector3 newPos = Handles.FreeMoveHandle(handles[i],
|
|
|
|
Quaternion.identity,
|
|
|
|
HandleUtility.GetHandleSize(pos) * 0.1f,
|
|
|
|
Vector3.zero,
|
|
|
|
Handles.CubeCap);
|
|
|
|
if (newPos != handles[i])
|
|
|
|
{
|
|
|
|
Undo.RecordObject(view, "Changed view size");
|
|
|
|
view.viewSize = (newPos - pos).magnitude;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void DrawView(View view)
|
|
|
|
{
|
|
|
|
float height = CalculateLocalViewSize(view);
|
|
|
|
float widthA = height * view.primaryAspectRatio;
|
|
|
|
float widthB = height * view.secondaryAspectRatio;
|
|
|
|
|
|
|
|
// Draw left box
|
|
|
|
{
|
|
|
|
Vector3[] verts = new Vector3[4];
|
|
|
|
verts[0] = view.transform.TransformPoint(new Vector3(-widthB, -height, 0));
|
|
|
|
verts[1] = view.transform.TransformPoint(new Vector3(-widthB, height, 0));
|
|
|
|
verts[2] = view.transform.TransformPoint(new Vector3(-widthA, height, 0));
|
|
|
|
verts[3] = view.transform.TransformPoint(new Vector3(-widthA, -height, 0));
|
|
|
|
|
|
|
|
Handles.DrawSolidRectangleWithOutline(verts, view.secondaryColor, view.primaryColor );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Draw right box
|
|
|
|
{
|
|
|
|
Vector3[] verts = new Vector3[4];
|
|
|
|
verts[0] = view.transform.TransformPoint(new Vector3(widthA, -height, 0));
|
|
|
|
verts[1] = view.transform.TransformPoint(new Vector3(widthA, height, 0));
|
|
|
|
verts[2] = view.transform.TransformPoint(new Vector3(widthB, height, 0));
|
|
|
|
verts[3] = view.transform.TransformPoint(new Vector3(widthB, -height, 0));
|
|
|
|
|
|
|
|
Handles.DrawSolidRectangleWithOutline(verts, view.secondaryColor, view.primaryColor );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Draw center box
|
|
|
|
{
|
|
|
|
Vector3[] verts = new Vector3[4];
|
|
|
|
verts[0] = view.transform.TransformPoint(new Vector3(-widthA, -height, 0));
|
|
|
|
verts[1] = view.transform.TransformPoint(new Vector3(-widthA, height, 0));
|
|
|
|
verts[2] = view.transform.TransformPoint(new Vector3(widthA, height, 0));
|
|
|
|
verts[3] = view.transform.TransformPoint(new Vector3(widthA, -height, 0));
|
|
|
|
|
|
|
|
Handles.DrawSolidRectangleWithOutline(verts, new Color(1,1,1,0f), view.primaryColor );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Calculate view size in local coordinates
|
|
|
|
// Kinda expensive, but accurate and only called in editor.
|
|
|
|
static float CalculateLocalViewSize(View view)
|
|
|
|
{
|
|
|
|
return view.transform.InverseTransformPoint(view.transform.position + new Vector3(0, view.viewSize, 0)).magnitude;
|
|
|
|
}
|
|
|
|
}
|