Welcome to mirror list, hosted at ThFree Co, Russian Federation.

SteamVR_RenderModelEditor.cs « Editor « SteamVR « Assets « unity_package - github.com/ValveSoftware/openvr.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f0cf4637117d84439ac25c04d84f3fe4ee680bce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//========= Copyright 2014, Valve Corporation, All rights reserved. ===========
//
// Purpose: Custom inspector display for SteamVR_RenderModel
//
//=============================================================================

using UnityEngine;
using UnityEditor;
using System.Text;
using System.Collections.Generic;
using Valve.VR;

[CustomEditor(typeof(SteamVR_RenderModel)), CanEditMultipleObjects]
public class SteamVR_RenderModelEditor : Editor
{
	SerializedProperty script, index, modelOverride, shader, verbose, createComponents, updateDynamically;

	static string[] renderModelNames;
	int renderModelIndex;

	void OnEnable()
	{
		script = serializedObject.FindProperty("m_Script");
		index = serializedObject.FindProperty("index");
		modelOverride = serializedObject.FindProperty("modelOverride");
		shader = serializedObject.FindProperty("shader");
		verbose = serializedObject.FindProperty("verbose");
		createComponents = serializedObject.FindProperty("createComponents");
		updateDynamically = serializedObject.FindProperty("updateDynamically");

		// Load render model names if necessary.
		if (renderModelNames == null)
		{
			renderModelNames = LoadRenderModelNames();
		}

		// Update renderModelIndex based on current modelOverride value.
		if (modelOverride.stringValue != "")
		{
			for (int i = 0; i < renderModelNames.Length; i++)
			{
				if (modelOverride.stringValue == renderModelNames[i])
				{
					renderModelIndex = i;
					break;
				}
			}
		}
	}

	static string[] LoadRenderModelNames()
	{
		var results = new List<string>();
		results.Add("None");

		using (var holder = new SteamVR_RenderModel.RenderModelInterfaceHolder())
		{
			var renderModels = holder.instance;
			if (renderModels != null)
			{
				uint count = renderModels.GetRenderModelCount();
				for (uint i = 0; i < count; i++)
				{
					var buffer = new StringBuilder();
					var requiredSize = renderModels.GetRenderModelName(i, buffer, 0);
					if (requiredSize == 0)
						continue;

					buffer.EnsureCapacity((int)requiredSize);
					renderModels.GetRenderModelName(i, buffer, requiredSize);
					results.Add(buffer.ToString());
				}
			}
		}

		return results.ToArray();
	}

	public override void OnInspectorGUI()
	{
		serializedObject.Update();

		EditorGUILayout.PropertyField(script);
		EditorGUILayout.PropertyField(index);
		//EditorGUILayout.PropertyField(modelOverride);

		GUILayout.BeginHorizontal();
		GUILayout.Label("Model Override");
		var selected = EditorGUILayout.Popup(renderModelIndex, renderModelNames);
		if (selected != renderModelIndex)
		{
			renderModelIndex = selected;
			modelOverride.stringValue = (selected > 0) ? renderModelNames[selected] : "";
		}
		GUILayout.EndHorizontal();

		EditorGUILayout.PropertyField(shader);
		EditorGUILayout.PropertyField(verbose);
		EditorGUILayout.PropertyField(createComponents);
		EditorGUILayout.PropertyField(updateDynamically);

		serializedObject.ApplyModifiedProperties();
	}
}