You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			106 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
 | 
						|
//
 | 
						|
// Purpose: Custom inspector display for SteamVR_RenderModel
 | 
						|
//
 | 
						|
//=============================================================================
 | 
						|
 | 
						|
using UnityEngine;
 | 
						|
using UnityEditor;
 | 
						|
using System.Text;
 | 
						|
using System.Collections.Generic;
 | 
						|
 | 
						|
namespace 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(new GUIContent("Model Override", SteamVR_RenderModel.modelOverrideWarning));
 | 
						|
            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();
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |