397 lines
16 KiB
C#
397 lines
16 KiB
C#
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) 2007-2016 , Inc. All Rights Reserved.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
using System;
|
|
using System.Collections;
|
|
using System.Reflection;
|
|
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
|
|
namespace GCSeries.zView
|
|
{
|
|
[CustomEditor(typeof(ZView))]
|
|
public class ZViewEditor : Editor
|
|
{
|
|
//////////////////////////////////////////////////////////////////
|
|
// Serialized Properties
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
SerializedProperty StandardModeIgnoreLayersProperty;
|
|
|
|
SerializedProperty ARModeIgnoreLayersProperty;
|
|
SerializedProperty ARModeEnvironmentLayersProperty;
|
|
SerializedProperty ARModeMaskLayerProperty;
|
|
SerializedProperty ARModeMaskRenderQueueProperty;
|
|
SerializedProperty ARModeMaskSizeProperty;
|
|
SerializedProperty ARModeShowMaskProperty;
|
|
SerializedProperty ARModeEnableTransparencyProperty;
|
|
SerializedProperty ActiveZCameraProperty;
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Unity Callbacks
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
void OnEnable()
|
|
{
|
|
this.LoadIconTextures();
|
|
this.FindSerializedProperties();
|
|
}
|
|
|
|
void OnDisable()
|
|
{
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
this.InitializeGUIStyles();
|
|
this.UpdateLayerNames();
|
|
|
|
this.serializedObject.Update();
|
|
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.Space();
|
|
this.CheckZViewInitialized();
|
|
this.DrawInfoSection();
|
|
this.DrawStandardModeSection();
|
|
this.DrawARModeSection();
|
|
this.DrawConnectionsSection();
|
|
|
|
this.serializedObject.ApplyModifiedProperties();
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Section Draw Helpers
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
private void CheckZViewInitialized()
|
|
{
|
|
ZView zView = (ZView)this.target;
|
|
|
|
if (!zView.IsInitialized())
|
|
{
|
|
EditorGUILayout.HelpBox(
|
|
"Failed to properly initialize the zView SDK. As a result, most " +
|
|
"zView functionality will be disabled. Please make sure that the zView " +
|
|
"SDK runtime has been properly installed on your machine.",
|
|
MessageType.Error);
|
|
EditorGUILayout.Space();
|
|
}
|
|
}
|
|
|
|
private void DrawInfoSection()
|
|
{
|
|
ZView zView = (ZView)this.target;
|
|
|
|
_isInfoSectionExpanded = this.DrawSectionHeader("General Info", _infoIconTexture, _isInfoSectionExpanded);
|
|
if (_isInfoSectionExpanded)
|
|
{
|
|
string pluginVersion = zView.GetPluginVersion();
|
|
string runtimeVersion = zView.IsInitialized() ? zView.GetRuntimeVersion() : "Unknown";
|
|
|
|
EditorGUILayout.LabelField("Plugin Version: " + pluginVersion);
|
|
EditorGUILayout.LabelField("Runtime Version: " + runtimeVersion);
|
|
EditorGUILayout.Space();
|
|
}
|
|
}
|
|
|
|
private void DrawStandardModeSection()
|
|
{
|
|
_isStandardModeSectionExpanded = this.DrawSectionHeader("Standard Mode", _standardModeIconTexture, _isStandardModeSectionExpanded);
|
|
if (_isStandardModeSectionExpanded)
|
|
{
|
|
this.DrawLayerMask("Ignore Layers", this.StandardModeIgnoreLayersProperty);
|
|
EditorGUILayout.Space();
|
|
}
|
|
}
|
|
|
|
private void DrawARModeSection()
|
|
{
|
|
_isARModeSectionExpanded = this.DrawSectionHeader("Augmented Reality Mode", _arModeIconTexture, _isARModeSectionExpanded);
|
|
if (_isARModeSectionExpanded)
|
|
{
|
|
this.DrawLayerMask("Ignore Layers", this.ARModeIgnoreLayersProperty);
|
|
this.DrawLayerMask("Environment Layers", this.ARModeEnvironmentLayersProperty);
|
|
EditorGUILayout.Space();
|
|
|
|
this.DrawLayerField("Mask Layer", this.ARModeMaskLayerProperty);
|
|
this.DrawIntField("Mask Render Queue", this.ARModeMaskRenderQueueProperty);
|
|
this.DrawVector3Field("Mask Size", this.ARModeMaskSizeProperty);
|
|
EditorGUILayout.Space();
|
|
|
|
this.DrawToggleLeft("Show Mask", this.ARModeShowMaskProperty);
|
|
this.DrawToggleLeft("Enable Transparency", this.ARModeEnableTransparencyProperty);
|
|
EditorGUILayout.Space();
|
|
|
|
EditorGUILayout.PropertyField(this.ActiveZCameraProperty,
|
|
new GUIContent("Active ZCamera",
|
|
"ZView requires a reference to the active ZCamera. " +
|
|
"ZView will try to find an instance of ZCamera on awake if " +
|
|
"left unassigned. If the ZCamera is destroyed during the " +
|
|
"life of the current scene, this value must be assigned " +
|
|
"manually."));
|
|
|
|
if (this.ARModeEnableTransparencyProperty.boolValue)
|
|
{
|
|
EditorGUILayout.HelpBox(
|
|
"Enabling transparency may produce visual artifacts when rendering the " +
|
|
"augmented reality overlay. If enabled, please ensure that all materials " +
|
|
"associated with opaque geometry have their alpha channel set to 1.0 and " +
|
|
"that all shaders associated with transparent geometry properly write their " +
|
|
"alpha channel to the frame buffer.",
|
|
MessageType.Warning);
|
|
}
|
|
EditorGUILayout.Space();
|
|
}
|
|
}
|
|
|
|
private void DrawConnectionsSection()
|
|
{
|
|
ZView zView = (ZView)this.target;
|
|
|
|
_isConnectionsSectionExpanded = this.DrawSectionHeader("Connections", _connectionsIconTexture, _isConnectionsSectionExpanded, true);
|
|
if (_isConnectionsSectionExpanded)
|
|
{
|
|
bool doActiveConnectionsExist = false;
|
|
|
|
try
|
|
{
|
|
// For each connection:
|
|
int numConnections = zView.GetNumConnections();
|
|
for (int i = 0; i < numConnections; ++i)
|
|
{
|
|
// Get the connection.
|
|
IntPtr connection = zView.GetConnection(i);
|
|
|
|
// Get the connection's state.
|
|
ZView.ConnectionState connectionState = zView.GetConnectionState(connection);
|
|
if (connectionState != ZView.ConnectionState.Error)
|
|
{
|
|
// Display the connection's information.
|
|
int connectionNumber = i + 1;
|
|
string initiationStatusString = zView.WasConnectionLocallyInitiated(connection) ? "locally" : "remotely";
|
|
EditorGUILayout.LabelField(string.Format("Connection {0} (initiated {1})", connectionNumber, initiationStatusString));
|
|
|
|
EditorGUI.indentLevel++;
|
|
{
|
|
EditorGUILayout.LabelField("Name: " + zView.GetConnectedNodeName(connection));
|
|
EditorGUILayout.LabelField("Status: " + zView.GetConnectedNodeStatus(connection));
|
|
EditorGUILayout.LabelField("State: " + connectionState);
|
|
|
|
IntPtr mode = zView.GetConnectionMode(connection);
|
|
string modeString = "Unknown";
|
|
if (mode == IntPtr.Zero)
|
|
{
|
|
modeString = "None";
|
|
}
|
|
else if (mode == zView.GetStandardMode())
|
|
{
|
|
modeString = "Standard";
|
|
}
|
|
else if (mode == zView.GetAugmentedRealityMode())
|
|
{
|
|
modeString = "Augmented Reality";
|
|
}
|
|
|
|
EditorGUILayout.LabelField("Mode: " + modeString);
|
|
}
|
|
EditorGUI.indentLevel--;
|
|
EditorGUILayout.Space();
|
|
|
|
doActiveConnectionsExist = true;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
// TODO: Add warning.
|
|
}
|
|
|
|
if (!doActiveConnectionsExist)
|
|
{
|
|
EditorGUILayout.LabelField("No active connections");
|
|
EditorGUILayout.Space();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Private Helper Methods
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
private void LoadIconTextures()
|
|
{
|
|
if (_refreshIconTexture == null)
|
|
{
|
|
_refreshIconTexture = this.LoadIconTexture("RefreshIcon.png");
|
|
}
|
|
|
|
if (_infoIconTexture == null)
|
|
{
|
|
_infoIconTexture = this.LoadIconTexture("InfoIcon.png");
|
|
}
|
|
|
|
if (_standardModeIconTexture == null)
|
|
{
|
|
_standardModeIconTexture = this.LoadIconTexture("StandardModeIcon.png");
|
|
}
|
|
|
|
if (_arModeIconTexture == null)
|
|
{
|
|
_arModeIconTexture = this.LoadIconTexture("ARModeIcon.png");
|
|
}
|
|
|
|
if (_connectionsIconTexture == null)
|
|
{
|
|
_connectionsIconTexture = this.LoadIconTexture("ConnectionsIcon.png");
|
|
}
|
|
}
|
|
|
|
private Texture2D LoadIconTexture(string iconName)
|
|
{
|
|
return AssetDatabase.LoadAssetAtPath(INSPECTOR_ICON_PATH + iconName, typeof(Texture2D)) as Texture2D;
|
|
}
|
|
|
|
private void FindSerializedProperties()
|
|
{
|
|
this.StandardModeIgnoreLayersProperty = this.serializedObject.FindProperty("StandardModeIgnoreLayers");
|
|
|
|
this.ARModeIgnoreLayersProperty = this.serializedObject.FindProperty("ARModeIgnoreLayers");
|
|
this.ARModeEnvironmentLayersProperty = this.serializedObject.FindProperty("ARModeEnvironmentLayers");
|
|
this.ARModeMaskLayerProperty = this.serializedObject.FindProperty("ARModeMaskLayer");
|
|
this.ARModeMaskRenderQueueProperty = this.serializedObject.FindProperty("ARModeMaskRenderQueue");
|
|
this.ARModeMaskSizeProperty = this.serializedObject.FindProperty("ARModeMaskSize");
|
|
this.ARModeShowMaskProperty = this.serializedObject.FindProperty("ARModeShowMask");
|
|
this.ARModeEnableTransparencyProperty = this.serializedObject.FindProperty("ARModeEnableTransparency");
|
|
this.ActiveZCameraProperty = this.serializedObject.FindProperty("ActiveZCamera");
|
|
}
|
|
|
|
private void InitializeGUIStyles()
|
|
{
|
|
if (_foldoutStyle == null)
|
|
{
|
|
_foldoutStyle = new GUIStyle(EditorStyles.foldout);
|
|
_foldoutStyle.fontStyle = FontStyle.Bold;
|
|
_foldoutStyle.fixedWidth = 2000.0f;
|
|
}
|
|
|
|
if (_lineStyle == null)
|
|
{
|
|
_lineStyle = new GUIStyle(GUI.skin.box);
|
|
_lineStyle.border.top = 1;
|
|
_lineStyle.border.bottom = 1;
|
|
_lineStyle.margin.top = 1;
|
|
_lineStyle.margin.bottom = 1;
|
|
_lineStyle.padding.top = 1;
|
|
_lineStyle.padding.bottom = 1;
|
|
}
|
|
}
|
|
|
|
private void UpdateLayerNames()
|
|
{
|
|
for (int i = 0; i < NUM_LAYERS; ++i)
|
|
{
|
|
_layerNames[i] = LayerMask.LayerToName(i);
|
|
if (_layerNames[i] == string.Empty)
|
|
{
|
|
string layerType = (i < 8) ? "Builtin" : "User";
|
|
_layerNames[i] = string.Format("{0} Layer {1}", layerType, i);
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool DrawSectionHeader(string name, Texture2D icon, bool isExpanded)
|
|
{
|
|
return this.DrawSectionHeader(name, icon, isExpanded, false);
|
|
}
|
|
|
|
private bool DrawSectionHeader(string name, Texture2D icon, bool isExpanded, bool enableRefresh)
|
|
{
|
|
// Create the divider line.
|
|
GUILayout.Box(GUIContent.none, _lineStyle, GUILayout.ExpandWidth(true), GUILayout.Height(1.0f));
|
|
|
|
EditorGUILayout.BeginHorizontal();
|
|
{
|
|
// Create the foldout (AKA expandable section).
|
|
Rect position = GUILayoutUtility.GetRect(40.0f, 2000.0f, 16.0f, 16.0f, _foldoutStyle);
|
|
isExpanded = EditorGUI.Foldout(position, isExpanded, new GUIContent(" " + name, icon), true, _foldoutStyle);
|
|
|
|
// Create the refresh button if enabled.
|
|
if (enableRefresh && isExpanded)
|
|
{
|
|
GUILayout.Button(
|
|
new GUIContent(_refreshIconTexture, "Refresh " + name),
|
|
GUIStyle.none,
|
|
GUILayout.Width(15.0f),
|
|
GUILayout.Height(15.5f));
|
|
}
|
|
}
|
|
EditorGUILayout.EndHorizontal();
|
|
|
|
return isExpanded;
|
|
}
|
|
|
|
private void DrawToggleRight(string label, SerializedProperty property)
|
|
{
|
|
property.boolValue = EditorGUILayout.Toggle(new GUIContent(label), property.boolValue);
|
|
}
|
|
|
|
private void DrawToggleLeft(string label, SerializedProperty property)
|
|
{
|
|
property.boolValue = EditorGUILayout.ToggleLeft(new GUIContent(" " + label), property.boolValue);
|
|
}
|
|
|
|
private void DrawLayerMask(string label, SerializedProperty property)
|
|
{
|
|
property.intValue = EditorGUILayout.MaskField(label, property.intValue, _layerNames);
|
|
}
|
|
|
|
private void DrawLayerField(string label, SerializedProperty property)
|
|
{
|
|
property.intValue = EditorGUILayout.LayerField(label, property.intValue);
|
|
}
|
|
|
|
private void DrawIntField(string label, SerializedProperty property)
|
|
{
|
|
property.intValue = EditorGUILayout.IntField(label, property.intValue);
|
|
}
|
|
|
|
private void DrawVector3Field(string label, SerializedProperty property)
|
|
{
|
|
property.vector3Value = EditorGUILayout.Vector3Field(label, property.vector3Value);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Private Members
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
private static readonly string INSPECTOR_ICON_PATH = "Assets//zView/Editor/Icons/";
|
|
private static readonly int NUM_LAYERS = 32;
|
|
|
|
private Texture2D _refreshIconTexture = null;
|
|
private Texture2D _infoIconTexture = null;
|
|
private Texture2D _standardModeIconTexture = null;
|
|
private Texture2D _arModeIconTexture = null;
|
|
private Texture2D _connectionsIconTexture = null;
|
|
|
|
private GUIStyle _foldoutStyle = null;
|
|
private GUIStyle _lineStyle = null;
|
|
|
|
private bool _isInfoSectionExpanded = true;
|
|
private bool _isStandardModeSectionExpanded = true;
|
|
private bool _isARModeSectionExpanded = true;
|
|
private bool _isConnectionsSectionExpanded = true;
|
|
|
|
private string[] _layerNames = new string[NUM_LAYERS];
|
|
}
|
|
}
|
|
|