Skip to content

Commit 15eba1c

Browse files
committed
SerializedScene improvements
1 parent e1e6a16 commit 15eba1c

3 files changed

Lines changed: 24 additions & 22 deletions

File tree

Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedSceneDrawer.cs

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ public class SerializedSceneDrawer : PropertyDrawerBase
1010
private bool HasSceneDetails(SerializedProperty property)
1111
{
1212
var sceneProperty = property.FindPropertyRelative("sceneReference");
13-
return attribute != null && sceneProperty.objectReferenceValue;
13+
return attribute != null && attribute is SceneDetailsAttribute && sceneProperty.objectReferenceValue;
1414
}
1515

16-
private void DrawIncludedSceneDetails(Rect position, SceneData sceneData)
16+
private void DrawSceneDetails(Rect position, SceneData sceneData)
1717
{
1818
EditorGUI.BeginDisabledGroup(true);
1919
var spacing = EditorGUIUtility.standardVerticalSpacing;
@@ -23,19 +23,6 @@ private void DrawIncludedSceneDetails(Rect position, SceneData sceneData)
2323
EditorGUI.EndDisabledGroup();
2424
}
2525

26-
private void DrawRejectedSceneDetails(Rect position, SceneData sceneData)
27-
{
28-
EditorGUI.BeginDisabledGroup(true);
29-
var spacing = EditorGUIUtility.standardVerticalSpacing;
30-
EditorGUI.LabelField(position, Style.notInBuildContent);
31-
position.y += EditorGUIUtility.singleLineHeight + spacing;
32-
EditorGUI.EndDisabledGroup();
33-
if (GUI.Button(position, Style.showDetailsContent))
34-
{
35-
OpenBuildSettings();
36-
}
37-
}
38-
3926
private void OpenBuildSettings()
4027
{
4128
EditorWindow.GetWindow(typeof(BuildPlayerWindow));
@@ -69,11 +56,18 @@ protected override void OnGUISafe(Rect position, SerializedProperty property, GU
6956
position.y += EditorGUIUtility.singleLineHeight + spacing;
7057
if (sceneData.inBuild)
7158
{
72-
DrawIncludedSceneDetails(position, sceneData);
59+
DrawSceneDetails(position, sceneData);
7360
}
7461
else
7562
{
76-
DrawRejectedSceneDetails(position, sceneData);
63+
EditorGUI.BeginDisabledGroup(true);
64+
EditorGUI.LabelField(position, Style.notInBuildContent);
65+
position.y += EditorGUIUtility.singleLineHeight + spacing;
66+
EditorGUI.EndDisabledGroup();
67+
if (GUI.Button(position, Style.showDetailsContent))
68+
{
69+
OpenBuildSettings();
70+
}
7771
}
7872
}
7973

Assets/Editor Toolbox/Runtime/Serialization/SceneSerializationUtility.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
23
#if UNITY_EDITOR
34
using UnityEditor;
45
#endif
@@ -42,12 +43,8 @@ private static void RefreshCache()
4243
var buildIndex = -1;
4344
foreach (var scene in EditorBuildSettings.scenes)
4445
{
45-
if (!scene.enabled)
46-
{
47-
continue;
48-
}
49-
5046
buildIndex++;
47+
var sceneIndex = scene.enabled ? buildIndex : InvalidSceneIndex;
5148
var sceneAsset = EditorGUIUtility.Load(scene.path) as SceneAsset;
5249
if (sceneAsset != null)
5350
{
@@ -74,5 +71,8 @@ public static bool TryGetSceneData(SceneAsset sceneAsset, out SceneData data)
7471
return true;
7572
}
7673
#endif
74+
75+
76+
public static int InvalidSceneIndex => -1;
7777
}
7878
}

Assets/Editor Toolbox/Runtime/Serialization/SerializedScene.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,13 @@ public int BuildIndex
7878
get => buildIndex;
7979
set => buildIndex = value;
8080
}
81+
82+
/// <summary>
83+
/// Indicates if serialized <see cref="BuildIndex"/> has appropriate value and can be loaded in runtime.
84+
/// </summary>
85+
public bool CanBeLoaded
86+
{
87+
get => BuildIndex != SceneSerializationUtility.InvalidSceneIndex;
88+
}
8189
}
8290
}

0 commit comments

Comments
 (0)