IMHOTEP Framework
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Pages
SteamVR_RenderModelEditor.cs
1 //======= Copyright (c) Valve Corporation, All rights reserved. ===============
2 //
3 // Purpose: Custom inspector display for SteamVR_RenderModel
4 //
5 //=============================================================================
6 
7 using UnityEngine;
8 using UnityEditor;
9 using System.Text;
10 using System.Collections.Generic;
11 
12 [CustomEditor(typeof(SteamVR_RenderModel)), CanEditMultipleObjects]
13 public class SteamVR_RenderModelEditor : Editor
14 {
15  SerializedProperty script, index, modelOverride, shader, verbose, createComponents, updateDynamically;
16 
17  static string[] renderModelNames;
18  int renderModelIndex;
19 
20  void OnEnable()
21  {
22  script = serializedObject.FindProperty("m_Script");
23  index = serializedObject.FindProperty("index");
24  modelOverride = serializedObject.FindProperty("modelOverride");
25  shader = serializedObject.FindProperty("shader");
26  verbose = serializedObject.FindProperty("verbose");
27  createComponents = serializedObject.FindProperty("createComponents");
28  updateDynamically = serializedObject.FindProperty("updateDynamically");
29 
30  // Load render model names if necessary.
31  if (renderModelNames == null)
32  {
33  renderModelNames = LoadRenderModelNames();
34  }
35 
36  // Update renderModelIndex based on current modelOverride value.
37  if (modelOverride.stringValue != "")
38  {
39  for (int i = 0; i < renderModelNames.Length; i++)
40  {
41  if (modelOverride.stringValue == renderModelNames[i])
42  {
43  renderModelIndex = i;
44  break;
45  }
46  }
47  }
48  }
49 
50  static string[] LoadRenderModelNames()
51  {
52  var results = new List<string>();
53  results.Add("None");
54 
55  using (var holder = new SteamVR_RenderModel.RenderModelInterfaceHolder())
56  {
57  var renderModels = holder.instance;
58  if (renderModels != null)
59  {
60  uint count = renderModels.GetRenderModelCount();
61  for (uint i = 0; i < count; i++)
62  {
63  var buffer = new StringBuilder();
64  var requiredSize = renderModels.GetRenderModelName(i, buffer, 0);
65  if (requiredSize == 0)
66  continue;
67 
68  buffer.EnsureCapacity((int)requiredSize);
69  renderModels.GetRenderModelName(i, buffer, requiredSize);
70  results.Add(buffer.ToString());
71  }
72  }
73  }
74 
75  return results.ToArray();
76  }
77 
78  public override void OnInspectorGUI()
79  {
80  serializedObject.Update();
81 
82  EditorGUILayout.PropertyField(script);
83  EditorGUILayout.PropertyField(index);
84  //EditorGUILayout.PropertyField(modelOverride);
85 
86  GUILayout.BeginHorizontal();
87  GUILayout.Label(new GUIContent("Model Override", SteamVR_RenderModel.modelOverrideWarning));
88  var selected = EditorGUILayout.Popup(renderModelIndex, renderModelNames);
89  if (selected != renderModelIndex)
90  {
91  renderModelIndex = selected;
92  modelOverride.stringValue = (selected > 0) ? renderModelNames[selected] : "";
93  }
94  GUILayout.EndHorizontal();
95 
96  EditorGUILayout.PropertyField(shader);
97  EditorGUILayout.PropertyField(verbose);
98  EditorGUILayout.PropertyField(createComponents);
99  EditorGUILayout.PropertyField(updateDynamically);
100 
101  serializedObject.ApplyModifiedProperties();
102  }
103 }
104