Skip to content

Commit da638d5

Browse files
authored
Merge pull request #150 from Unity-Technologies/staging
0.0.5 staging -> master
2 parents 96c64ac + 7019c2f commit da638d5

File tree

92 files changed

+3148
-3516
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+3148
-3516
lines changed

Editor/EditingContextManagerEditor.cs

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#if UNITY_EDITORVR
2+
using System;
3+
using UnityEngine;
4+
5+
namespace UnityEditor.Experimental.EditorVR.Core
6+
{
7+
[CustomEditor(typeof(EditingContextManagerSettings))]
8+
sealed class EditingContextManagerEditor : Editor
9+
{
10+
string[] m_ContextNames;
11+
int m_SelectedContextIndex;
12+
13+
EditingContextManagerSettings m_Settings;
14+
15+
void Awake()
16+
{
17+
m_ContextNames = EditingContextManager.GetEditingContextNames();
18+
m_Settings = (EditingContextManagerSettings)target;
19+
m_SelectedContextIndex = Array.IndexOf(m_ContextNames, m_Settings.defaultContextName);
20+
}
21+
22+
public override void OnInspectorGUI()
23+
{
24+
GUILayout.Label("Available Contexts");
25+
EditingContextManager.DoGUI(m_ContextNames, ref m_SelectedContextIndex, () =>
26+
{
27+
m_Settings.defaultContextName = m_ContextNames[m_SelectedContextIndex];
28+
});
29+
30+
EditorGUILayout.Space();
31+
32+
GUILayout.BeginHorizontal();
33+
{
34+
GUILayout.FlexibleSpace();
35+
36+
if (GUILayout.Button("Save"))
37+
{
38+
EditingContextManager.SaveProjectSettings(m_Settings);
39+
Selection.activeObject = null;
40+
}
41+
42+
if (GUILayout.Button("Reset"))
43+
{
44+
EditingContextManager.ResetProjectSettings();
45+
Selection.activeGameObject = null;
46+
}
47+
}
48+
GUILayout.EndHorizontal();
49+
}
50+
}
51+
}
52+
#endif

Tools/Temp/StandardAlt.cs.meta Editor/EditingContextManagerEditor.cs.meta

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Menus/MainMenu/MainMenu.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ public void ProcessInput(ActionMapInput input, ConsumeControlDelegate consumeCon
112112

113113
void OnDestroy()
114114
{
115-
ObjectUtils.Destroy(m_MainMenuUI.gameObject);
115+
if (m_MainMenuUI)
116+
ObjectUtils.Destroy(m_MainMenuUI.gameObject);
116117
}
117118

118119
void CreateFaceButtons(List<Type> types)

Menus/RadialMenu/Scripts/RadialMenuSlot.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ IEnumerator AnimateHide()
322322
m_Pressed = false;
323323
m_Highlighted = false;
324324

325-
var opacity = m_InsetMaterial.GetFloat(k_MaterialAlphaProperty);;
325+
var opacity = m_InsetMaterial.GetFloat(k_MaterialAlphaProperty);
326326
var opacityShaped = Mathf.Pow(opacity, opacity);
327327
while (opacity > 0)
328328
{

Tools/Temp.meta Scripts/Core/Contexts.meta

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,294 @@
1+
#if UNITY_EDITOR && UNITY_EDITORVR
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using UnityEditor.Experimental.EditorVR.Utilities;
6+
using UnityEngine;
7+
using UnityEngine.Assertions;
8+
using UnityEngine.InputNew;
9+
using System.IO;
10+
using UnityObject = UnityEngine.Object;
11+
12+
namespace UnityEditor.Experimental.EditorVR.Core
13+
{
14+
class EditingContextManager : MonoBehaviour
15+
{
16+
[SerializeField]
17+
UnityObject m_DefaultContext;
18+
19+
const string k_SettingsPath = "ProjectSettings/EditingContextManagerSettings.asset";
20+
const string k_UserSettingsPath = "Library/EditingContextManagerSettings.asset";
21+
22+
static EditingContextManager s_Instance;
23+
static InputManager s_InputManager;
24+
25+
EditingContextManagerSettings m_Settings;
26+
27+
List<IEditingContext> m_AvailableContexts;
28+
string[] m_ContextNames;
29+
int m_SelectedContextIndex;
30+
31+
IEditingContext m_CurrentContext;
32+
readonly List<IEditingContext> m_PreviousContexts = new List<IEditingContext>();
33+
34+
IEditingContext defaultContext
35+
{
36+
get
37+
{
38+
var context = m_AvailableContexts.Find(c => c.Equals(m_DefaultContext)) ?? m_AvailableContexts.First();
39+
40+
var defaultContextName = m_Settings.defaultContextName;
41+
if (!string.IsNullOrEmpty(defaultContextName))
42+
{
43+
var foundContext = m_AvailableContexts.Find(c => c.name == defaultContextName);
44+
if (foundContext != null)
45+
context = foundContext;
46+
}
47+
48+
return context;
49+
}
50+
set { m_Settings.defaultContextName = value.name; }
51+
}
52+
53+
static EditingContextManager()
54+
{
55+
VRView.viewEnabled += OnVRViewEnabled;
56+
VRView.viewDisabled += OnVRViewDisabled;
57+
}
58+
59+
static void OnVRViewEnabled()
60+
{
61+
InitializeInputManager();
62+
s_Instance = ObjectUtils.CreateGameObjectWithComponent<EditingContextManager>();
63+
}
64+
65+
static void OnVRViewDisabled()
66+
{
67+
ObjectUtils.Destroy(s_Instance.gameObject);
68+
ObjectUtils.Destroy(s_InputManager.gameObject);
69+
}
70+
71+
[MenuItem("Window/EditorVR %e", false)]
72+
static void ShowEditorVR()
73+
{
74+
// Using a utility window improves performance by saving from the overhead of DockArea.OnGUI()
75+
EditorWindow.GetWindow<VRView>(true, "EditorVR", true);
76+
}
77+
78+
[MenuItem("Window/EditorVR %e", true)]
79+
static bool ShouldShowEditorVR()
80+
{
81+
return PlayerSettings.virtualRealitySupported;
82+
}
83+
84+
[MenuItem("Edit/Project Settings/EditorVR/Default Editing Context")]
85+
static void EditProjectSettings()
86+
{
87+
var settings = LoadProjectSettings();
88+
settings.name = "Default Editing Context";
89+
Selection.activeObject = settings;
90+
}
91+
92+
void OnEnable()
93+
{
94+
m_Settings = LoadUserSettings();
95+
96+
ISetEditingContextMethods.getAvailableEditingContexts = GetAvailableEditingContexts;
97+
ISetEditingContextMethods.getPreviousEditingContexts = GetPreviousEditingContexts;
98+
ISetEditingContextMethods.setEditingContext = SetEditingContext;
99+
ISetEditingContextMethods.restorePreviousEditingContext = RestorePreviousContext;
100+
101+
var availableContexts = GetAvailableEditingContexts();
102+
m_ContextNames = availableContexts.Select(c => c.name).ToArray();
103+
104+
SetEditingContext(defaultContext);
105+
106+
if (m_AvailableContexts.Count > 1)
107+
VRView.afterOnGUI += OnVRViewGUI;
108+
}
109+
110+
void OnDisable()
111+
{
112+
VRView.afterOnGUI -= OnVRViewGUI;
113+
114+
defaultContext = m_CurrentContext;
115+
m_CurrentContext.Dispose();
116+
117+
m_AvailableContexts = null;
118+
119+
ISetEditingContextMethods.getAvailableEditingContexts = null;
120+
ISetEditingContextMethods.getPreviousEditingContexts = null;
121+
ISetEditingContextMethods.setEditingContext = null;
122+
ISetEditingContextMethods.restorePreviousEditingContext = null;
123+
124+
SaveUserSettings(m_Settings);
125+
}
126+
127+
void OnVRViewGUI(EditorWindow window)
128+
{
129+
var view = (VRView)window;
130+
GUILayout.BeginArea(view.guiRect);
131+
{
132+
GUILayout.FlexibleSpace();
133+
GUILayout.BeginHorizontal();
134+
{
135+
DoGUI(m_ContextNames, ref m_SelectedContextIndex, () => SetEditingContext(m_AvailableContexts[m_SelectedContextIndex]));
136+
GUILayout.FlexibleSpace();
137+
}
138+
GUILayout.EndHorizontal();
139+
}
140+
GUILayout.EndArea();
141+
}
142+
143+
internal static void DoGUI(string[] contextNames, ref int selectedContextIndex, Action callback = null)
144+
{
145+
selectedContextIndex = EditorGUILayout.Popup(string.Empty, selectedContextIndex, contextNames);
146+
if (GUI.changed)
147+
{
148+
if (callback != null)
149+
callback();
150+
GUIUtility.ExitGUI();
151+
}
152+
}
153+
154+
void SetEditingContext(IEditingContext context)
155+
{
156+
if (context == null)
157+
return;
158+
159+
if (m_CurrentContext != null)
160+
{
161+
m_PreviousContexts.Insert(0, m_CurrentContext);
162+
m_CurrentContext.Dispose();
163+
}
164+
165+
context.Setup();
166+
m_CurrentContext = context;
167+
168+
m_SelectedContextIndex = m_AvailableContexts.IndexOf(context);
169+
}
170+
171+
void RestorePreviousContext()
172+
{
173+
if (m_PreviousContexts.Count > 0)
174+
SetEditingContext(m_PreviousContexts.First());
175+
}
176+
177+
static List<IEditingContext> GetEditingContextAssets()
178+
{
179+
var types = ObjectUtils.GetImplementationsOfInterface(typeof(IEditingContext));
180+
var searchString = "t: " + string.Join(" t: ", types.Select(t => t.FullName).ToArray());
181+
var assets = AssetDatabase.FindAssets(searchString);
182+
183+
var availableContexts = new List<IEditingContext>();
184+
foreach (var asset in assets)
185+
{
186+
var assetPath = AssetDatabase.GUIDToAssetPath(asset);
187+
var context = AssetDatabase.LoadMainAssetAtPath(assetPath) as IEditingContext;
188+
availableContexts.Add(context);
189+
}
190+
191+
return availableContexts;
192+
}
193+
194+
internal static string[] GetEditingContextNames()
195+
{
196+
var availableContexts = GetEditingContextAssets();
197+
return availableContexts.Select(c => c.name).ToArray();
198+
}
199+
200+
List<IEditingContext> GetAvailableEditingContexts()
201+
{
202+
if (m_AvailableContexts == null)
203+
m_AvailableContexts = GetEditingContextAssets();
204+
205+
return m_AvailableContexts;
206+
}
207+
208+
List<IEditingContext> GetPreviousEditingContexts()
209+
{
210+
return m_PreviousContexts;
211+
}
212+
213+
static EditingContextManagerSettings LoadProjectSettings()
214+
{
215+
EditingContextManagerSettings settings = ScriptableObject.CreateInstance<EditingContextManagerSettings>();
216+
if (File.Exists(k_SettingsPath))
217+
JsonUtility.FromJsonOverwrite(File.ReadAllText(k_SettingsPath), settings);
218+
219+
return settings;
220+
}
221+
222+
static EditingContextManagerSettings LoadUserSettings()
223+
{
224+
EditingContextManagerSettings settings;
225+
if (File.Exists(k_UserSettingsPath)
226+
&& File.GetLastWriteTime(k_UserSettingsPath) > File.GetLastWriteTime(k_SettingsPath))
227+
{
228+
settings = ScriptableObject.CreateInstance<EditingContextManagerSettings>();
229+
JsonUtility.FromJsonOverwrite(File.ReadAllText(k_UserSettingsPath), settings);
230+
}
231+
else
232+
settings = LoadProjectSettings();
233+
234+
return settings;
235+
}
236+
237+
internal static void ResetProjectSettings()
238+
{
239+
File.Delete(k_UserSettingsPath);
240+
241+
if (EditorUtility.DisplayDialog("Delete Project Settings?", "Would you like to remove the project-wide settings, too?", "Yes", "No"))
242+
File.Delete(k_SettingsPath);
243+
}
244+
245+
internal static void SaveProjectSettings(EditingContextManagerSettings settings)
246+
{
247+
File.WriteAllText(k_SettingsPath, JsonUtility.ToJson(settings, true));
248+
}
249+
250+
static void SaveUserSettings(EditingContextManagerSettings settings)
251+
{
252+
File.WriteAllText(k_UserSettingsPath, JsonUtility.ToJson(settings, true));
253+
}
254+
255+
static void InitializeInputManager()
256+
{
257+
// HACK: InputSystem has a static constructor that is relied upon for initializing a bunch of other components, so
258+
// in edit mode we need to handle lifecycle explicitly
259+
var managers = Resources.FindObjectsOfTypeAll<InputManager>();
260+
foreach (var m in managers)
261+
{
262+
ObjectUtils.Destroy(m.gameObject);
263+
}
264+
265+
managers = Resources.FindObjectsOfTypeAll<InputManager>();
266+
267+
if (managers.Length == 0)
268+
{
269+
// Attempt creating object hierarchy via an implicit static constructor call by touching the class
270+
InputSystem.ExecuteEvents();
271+
managers = Resources.FindObjectsOfTypeAll<InputManager>();
272+
273+
if (managers.Length == 0)
274+
{
275+
typeof(InputSystem).TypeInitializer.Invoke(null, null);
276+
managers = Resources.FindObjectsOfTypeAll<InputManager>();
277+
}
278+
}
279+
Assert.IsTrue(managers.Length == 1, "Only one InputManager should be active; Count: " + managers.Length);
280+
281+
s_InputManager = managers[0];
282+
var go = s_InputManager.gameObject;
283+
go.hideFlags = ObjectUtils.hideFlags;
284+
ObjectUtils.SetRunInEditModeRecursively(go, true);
285+
286+
// These components were allocating memory every frame and aren't currently used in EditorVR
287+
ObjectUtils.Destroy(s_InputManager.GetComponent<JoystickInputToEvents>());
288+
ObjectUtils.Destroy(s_InputManager.GetComponent<MouseInputToEvents>());
289+
ObjectUtils.Destroy(s_InputManager.GetComponent<KeyboardInputToEvents>());
290+
ObjectUtils.Destroy(s_InputManager.GetComponent<TouchInputToEvents>());
291+
}
292+
}
293+
}
294+
#endif

0 commit comments

Comments
 (0)