Spelunx Cavern SDK
 
Loading...
Searching...
No Matches
CavernToolsPanel.cs
Go to the documentation of this file.
1using UnityEditor;
2using UnityEngine;
3using UnityEngine.UIElements;
4using UnityEditor.SceneManagement;
5using UnityEngine.SceneManagement;
6
7namespace Spelunx
8{
9 public class CavernToolsPanel : EditorWindow
10 {
11 [SerializeField]
12 private VisualTreeAsset m_VisualTreeAsset = default;
13
14 // places tools under CAVERN toolbar with hierarchy ordering
15 [MenuItem("CAVERN/CAVERN Tools", false, 100)]
16 public static void ShowWindow()
17 {
18 CavernToolsPanel wnd = GetWindow<CavernToolsPanel>();
19 wnd.titleContent = new GUIContent("CAVERN Tools");
20 }
21
22 public void CreateGUI()
23 {
24 // root VisualElement object of editor window
25 VisualElement root = rootVisualElement;
26
27 // Instantiate UXML, UI setup in UXML document
28 VisualElement panelSetup = m_VisualTreeAsset.Instantiate();
29 root.Add(panelSetup);
30
31 VisualElement roundUI = root.Q("RoundUISetup");
32
33 // Add button functionality for CAVERN setup and round UI setup
34 Button cavernSetupButton = root.Q<Button>("CavernSetupButton");
35 cavernSetupButton.RegisterCallback<ClickEvent, VisualElement>(CavernSetup, roundUI);
36
37 Button roundUISetupButton = root.Q<Button>("RoundUISetupButton");
38
39 CavernRenderer cavernRenderer = FindFirstObjectByType<CavernRenderer>();
40
41 // Hides roundUI setup if no CAVERN setup present in scene since it depends on the setup
42 if (cavernRenderer == null)
43 {
44 roundUI.style.visibility = Visibility.Hidden;
45 }
46 roundUISetupButton.RegisterCallback<ClickEvent>(RoundUISetup);
47 }
48
49 private void CavernSetup(ClickEvent evt, VisualElement roundUI)
50 {
51 // load from path
52 GameObject cavernSetupPrefab = (GameObject)AssetDatabase.LoadAssetAtPath("Packages/com.spelunx.cavern.sdk/Prefabs/CavernSetup.prefab", typeof(GameObject));
53 GameObject cavernSetupInstance = (GameObject)PrefabUtility.InstantiatePrefab(cavernSetupPrefab as GameObject);
54
55 // sets speaker mode to 7.1 surround
56 AudioConfiguration audioConfigs = AudioSettings.GetConfiguration();
57 audioConfigs.speakerMode = AudioSpeakerMode.Mode7point1;
58 AudioSettings.Reset(audioConfigs);
59
60 // removes any default main cameras in scene (but preserves any cameras not tagged as MainCamera)
61 GameObject mainCamera = GameObject.FindGameObjectWithTag("MainCamera");
62 if (mainCamera != null)
63 {
64 Undo.DestroyObjectImmediate(GameObject.FindGameObjectWithTag("MainCamera"));
65 }
66
67 // mark scene as edited to prompt saving
68 EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
69
70 // sets roundUI section of tools panel to be visible
71 roundUI.style.visibility = Visibility.Visible;
72 }
73
74 private void RoundUISetup(ClickEvent evt)
75 {
76 CavernRenderer cavernRenderer = FindFirstObjectByType<CavernRenderer>();
77
78 // load from path
79 GameObject cavernUIPrefab = (GameObject)AssetDatabase.LoadAssetAtPath("Packages/com.spelunx.cavern.sdk/Prefabs/CavernUI.prefab", typeof(GameObject));
80 GameObject cavernUIInstance = (GameObject)PrefabUtility.InstantiatePrefab(cavernUIPrefab as GameObject);
81
82 GameObject roundCavernMeshRendererPrefab = (GameObject)AssetDatabase.LoadAssetAtPath("Packages/com.spelunx.cavern.sdk/Prefabs/RoundCavernMeshRenderer.prefab", typeof(GameObject));
83 GameObject roundCavernMeshRendererInstance = (GameObject)PrefabUtility.InstantiatePrefab(roundCavernMeshRendererPrefab as GameObject);
84
85 WorldSpaceMeshCanvas meshCanvas = roundCavernMeshRendererInstance.GetComponent<WorldSpaceMeshCanvas>();
86 meshCanvas.setCavernRenderer(cavernRenderer);
87
88 // set default parameters of roundUI mesh
89 meshCanvas.transform.parent = cavernRenderer.transform;
90 meshCanvas.transform.localPosition = Vector3.zero;
91 meshCanvas.transform.localRotation = Quaternion.identity;
92
93 // mark scene as edited to prompt saving
94 EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
95 }
96 }
97}