private void OnGUI() { if (needsRefreshDevKey == true) { EditorCore.CheckForExpiredDeveloperKey(GetDevKeyResponse); needsRefreshDevKey = false; } GUI.skin = EditorCore.WizardGUISkin; GUI.DrawTexture(new Rect(0, 0, 500, 550), EditorGUIUtility.whiteTexture); var currentscene = CognitiveVR_Preferences.FindCurrentScene(); if (string.IsNullOrEmpty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene().name)) { GUI.Label(steptitlerect, "DYNAMIC OBJECTS Scene Not Saved", "steptitle"); } else if (currentscene == null || string.IsNullOrEmpty(currentscene.SceneId)) { GUI.Label(steptitlerect, "DYNAMIC OBJECTS Scene Not Uploaded", "steptitle"); } else { GUI.Label(steptitlerect, "DYNAMIC OBJECTS " + currentscene.SceneName + " Version: " + currentscene.VersionNumber, "steptitle"); } GUI.Label(new Rect(30, 45, 440, 440), "These are the active <color=#8A9EB7FF>Dynamic Object components</color> currently found in your scene.", "boldlabel"); //headers Rect mesh = new Rect(30, 95, 120, 30); GUI.Label(mesh, "Mesh Name", "dynamicheader"); Rect gameobject = new Rect(190, 95, 120, 30); GUI.Label(gameobject, "GameObject", "dynamicheader"); //Rect ids = new Rect(320, 95, 120, 30); //GUI.Label(ids, "Ids", "dynamicheader"); Rect uploaded = new Rect(380, 95, 120, 30); GUI.Label(uploaded, "Exported Mesh", "dynamicheader"); //IMPROVEMENT get list of uploaded mesh names from dashboard //content DynamicObject[] tempdynamics = GetDynamicObjects; if (tempdynamics.Length == 0) { GUI.Label(new Rect(30, 120, 420, 270), "No objects found.\n\nHave you attached any Dynamic Object components to objects?\n\nAre they active in your hierarchy?", "button_disabledtext"); } DynamicObjectIdPool[] poolAssets = EditorCore.GetDynamicObjectPoolAssets; Rect innerScrollSize = new Rect(30, 0, 420, (tempdynamics.Length + poolAssets.Length) * 30); dynamicScrollPosition = GUI.BeginScrollView(new Rect(30, 120, 440, 285), dynamicScrollPosition, innerScrollSize, false, true); Rect dynamicrect; int GuiOffset = 0; for (; GuiOffset < tempdynamics.Length; GuiOffset++) { if (tempdynamics[GuiOffset] == null) { RefreshSceneDynamics(); GUI.EndScrollView(); return; } dynamicrect = new Rect(30, GuiOffset * 30, 460, 30); DrawDynamicObject(tempdynamics[GuiOffset], dynamicrect, GuiOffset % 2 == 0); } for (int i = 0; i < poolAssets.Length; i++) { //if (poolAssets[i] == null) { RefreshSceneDynamics(); GUI.EndScrollView(); return; } dynamicrect = new Rect(30, (i + GuiOffset) * 30, 460, 30); DrawDynamicObjectPool(poolAssets[i], dynamicrect, (i + GuiOffset) % 2 == 0); } GUI.EndScrollView(); GUI.Box(new Rect(30, 120, 425, 285), "", "box_sharp_alpha"); //buttons string scenename = "Not Saved"; int versionnumber = 0; //string buttontextstyle = "button_bluetext"; if (currentscene == null || string.IsNullOrEmpty(currentscene.SceneId)) { //buttontextstyle = "button_disabledtext"; } else { scenename = currentscene.SceneName; versionnumber = currentscene.VersionNumber; } int selectionCount = 0; foreach (var v in Selection.gameObjects) { if (v.GetComponentInChildren <DynamicObject>()) { selectionCount++; } } //IMPROVEMENT enable mesh upload from selected dynamic object id pool that has exported mesh files //if (Selection.activeObject.GetType() == typeof(DynamicObjectIdPool)) //{ // var pool = Selection.activeObject as DynamicObjectIdPool; // if (EditorCore.HasDynamicExportFiles(pool.MeshName)) // { // selectionCount++; // } //} //texture resolution if (CognitiveVR_Preferences.Instance.TextureResize > 4) { CognitiveVR_Preferences.Instance.TextureResize = 4; } //resolution settings here EditorGUI.BeginDisabledGroup(DisableButtons); if (GUI.Button(new Rect(30, 415, 140, 35), new GUIContent("1/4 Resolution", DisableButtons?"":"Quarter resolution of dynamic object textures"), CognitiveVR_Preferences.Instance.TextureResize == 4 ? "button_blueoutline" : "button_disabledtext")) { CognitiveVR_Preferences.Instance.TextureResize = 4; } if (CognitiveVR_Preferences.Instance.TextureResize != 4) { GUI.Box(new Rect(30, 415, 140, 35), "", "box_sharp_alpha"); } if (GUI.Button(new Rect(180, 415, 140, 35), new GUIContent("1/2 Resolution", DisableButtons ? "" : "Half resolution of dynamic object textures"), CognitiveVR_Preferences.Instance.TextureResize == 2 ? "button_blueoutline" : "button_disabledtext")) { CognitiveVR_Preferences.Instance.TextureResize = 2; } if (CognitiveVR_Preferences.Instance.TextureResize != 2) { GUI.Box(new Rect(180, 415, 140, 35), "", "box_sharp_alpha"); } if (GUI.Button(new Rect(330, 415, 140, 35), new GUIContent("1/1 Resolution", DisableButtons ? "" : "Full resolution of dynamic object textures"), CognitiveVR_Preferences.Instance.TextureResize == 1 ? "button_blueoutline" : "button_disabledtext")) { CognitiveVR_Preferences.Instance.TextureResize = 1; } if (CognitiveVR_Preferences.Instance.TextureResize != 1) { GUI.Box(new Rect(330, 415, 140, 35), "", "box_sharp_alpha"); } EditorGUI.EndDisabledGroup(); EditorGUI.BeginDisabledGroup(currentscene == null || string.IsNullOrEmpty(currentscene.SceneId) || selectionCount == 0); if (GUI.Button(new Rect(30, 460, 200, 30), new GUIContent("Upload " + selectionCount + " Selected Meshes", DisableButtons ? "" : "Export and Upload to " + scenename + " version " + versionnumber))) { EditorCore.RefreshSceneVersion(() => { foreach (var go in Selection.gameObjects) { var dyn = go.GetComponent <DynamicObject>(); if (dyn == null) { continue; } //check if export files exist if (!EditorCore.HasDynamicExportFiles(dyn.MeshName)) { ExportUtility.ExportDynamicObject(dyn); } //check if thumbnail exists if (!EditorCore.HasDynamicObjectThumbnail(dyn.MeshName)) { EditorCore.SaveDynamicThumbnailAutomatic(dyn.gameObject); } } EditorCore.RefreshSceneVersion(delegate() { var manifest = new AggregationManifest(); AddOrReplaceDynamic(manifest, GetDynamicObjectsInScene()); ManageDynamicObjects.UploadManifest(manifest, () => ExportUtility.UploadSelectedDynamicObjectMeshes(true)); }); }); } EditorGUI.EndDisabledGroup(); EditorGUI.BeginDisabledGroup(currentscene == null || string.IsNullOrEmpty(currentscene.SceneId)); if (GUI.Button(new Rect(270, 460, 200, 30), new GUIContent("Upload All Meshes", DisableButtons ? "" : "Export and Upload to " + scenename + " version " + versionnumber))) { EditorCore.RefreshSceneVersion(() => { var dynamics = GameObject.FindObjectsOfType <DynamicObject>(); List <GameObject> gos = new List <GameObject>(); foreach (var v in dynamics) { gos.Add(v.gameObject); } Selection.objects = gos.ToArray(); foreach (var go in Selection.gameObjects) { var dyn = go.GetComponent <DynamicObject>(); if (dyn == null) { continue; } //check if export files exist if (!EditorCore.HasDynamicExportFiles(dyn.MeshName)) { ExportUtility.ExportDynamicObject(dyn); } //check if thumbnail exists if (!EditorCore.HasDynamicObjectThumbnail(dyn.MeshName)) { EditorCore.SaveDynamicThumbnailAutomatic(dyn.gameObject); } } EditorCore.RefreshSceneVersion(delegate() { var manifest = new AggregationManifest(); AddOrReplaceDynamic(manifest, GetDynamicObjectsInScene()); ManageDynamicObjects.UploadManifest(manifest, () => ExportUtility.UploadSelectedDynamicObjectMeshes(true)); }); }); } EditorGUI.EndDisabledGroup(); DrawFooter(); Repaint(); //manually repaint gui each frame to make sure it's responsive }