Skip to content

Commit 08b2b40

Browse files
committed
Added options to disable stripping folders from prefabs in play mode or build
1 parent 089ddc2 commit 08b2b40

File tree

2 files changed

+76
-20
lines changed

2 files changed

+76
-20
lines changed

Editor/Settings/SettingsDrawer.cs

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,21 @@ internal static class SettingsDrawer
1515
{
1616
{ nameof(StripSettings.PlayMode), "Play Mode Stripping Type" },
1717
{ nameof(StripSettings.Build), "Build Stripping Type" },
18-
{ nameof(StripSettings.CapitalizeName), "Capitalize Folder Names" }
18+
{ nameof(StripSettings.CapitalizeName), "Capitalize Folder Names" },
19+
{ nameof(StripSettings.StripFoldersFromPrefabsInPlayMode), "Strip folders from prefabs in Play Mode" },
20+
{ nameof(StripSettings.StripFoldersFromPrefabsInBuild), "Strip folders from prefabs in build" },
1921
};
2022

2123
private static readonly GUIContent _buildStrippingName = new GUIContent(_fieldNames[nameof(StripSettings.Build)]);
2224

2325
[SettingsProvider]
2426
public static SettingsProvider CreateSettingsProvider()
2527
{
26-
var provider = new SettingsProvider("Preferences/Hierarchy Folders", SettingsScope.User)
28+
return new SettingsProvider("Preferences/Hierarchy Folders", SettingsScope.User)
2729
{
2830
guiHandler = OnGUI,
2931
keywords = GetKeywords()
3032
};
31-
32-
return provider;
3333
}
3434

3535
private static void OnGUI(string searchContext)
@@ -45,6 +45,22 @@ private static void OnGUI(string searchContext)
4545

4646
StripSettings.Build = (StrippingMode) EditorGUILayout.EnumPopup(
4747
_buildStrippingName, StripSettings.Build, TypeCanBeInBuild, true);
48+
49+
EditorGUILayout.Space(EditorGUIUtility.singleLineHeight);
50+
51+
EditorGUILayout.HelpBox(
52+
"If you notice that entering play mode takes too long, you can try disabling this option. " +
53+
"Folders will not be stripped from prefabs that are instantiated at runtime, but if performance in " +
54+
"Play Mode does not matter, you will be fine.", MessageType.Warning);
55+
56+
using (new TemporaryLabelWidth(230f))
57+
{
58+
StripSettings.StripFoldersFromPrefabsInPlayMode =
59+
EditorGUILayout.Toggle(_fieldNames[nameof(StripSettings.StripFoldersFromPrefabsInPlayMode)], StripSettings.StripFoldersFromPrefabsInPlayMode);
60+
61+
StripSettings.StripFoldersFromPrefabsInBuild =
62+
EditorGUILayout.Toggle(_fieldNames[nameof(StripSettings.StripFoldersFromPrefabsInBuild)], StripSettings.StripFoldersFromPrefabsInBuild);
63+
}
4864
}
4965

5066
private static HashSet<string> GetKeywords()
@@ -72,5 +88,24 @@ private static bool TypeCanBeInBuild(Enum enumValue)
7288
var mode = (StrippingMode) enumValue;
7389
return mode == StrippingMode.PrependWithFolderName || mode == StrippingMode.Delete;
7490
}
91+
92+
/// <summary>
93+
/// Temporarily sets <see cref="EditorGUIUtility.labelWidth"/> to a certain value, than reverts it.
94+
/// </summary>
95+
private readonly struct TemporaryLabelWidth : IDisposable
96+
{
97+
private readonly float _oldWidth;
98+
99+
public TemporaryLabelWidth(float width)
100+
{
101+
_oldWidth = EditorGUIUtility.labelWidth;
102+
EditorGUIUtility.labelWidth = width;
103+
}
104+
105+
public void Dispose()
106+
{
107+
EditorGUIUtility.labelWidth = _oldWidth;
108+
}
109+
}
75110
}
76111
}

Editor/Settings/StripSettings.cs

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,14 @@ internal static class StripSettings
1212
private static UserSetting<StrippingMode> _playModeSetting;
1313
private static UserSetting<StrippingMode> _buildSetting;
1414
private static UserSetting<bool> _capitalizeName;
15+
private static UserSetting<bool> _stripFoldersFromPrefabsInPlayMode;
16+
private static UserSetting<bool> _stripFoldersFromPrefabsInBuild;
1517

1618
public static StrippingMode PlayMode
1719
{
1820
get
1921
{
20-
if (_playModeSetting == null)
21-
{
22-
Initialize();
23-
}
24-
22+
InitializeIfNeeded();
2523
return _playModeSetting.value;
2624
}
2725

@@ -32,11 +30,7 @@ public static StrippingMode Build
3230
{
3331
get
3432
{
35-
if (_buildSetting == null)
36-
{
37-
Initialize();
38-
}
39-
33+
InitializeIfNeeded();
4034
return _buildSetting.value;
4135
}
4236

@@ -47,19 +41,40 @@ public static bool CapitalizeName
4741
{
4842
get
4943
{
50-
if (_capitalizeName == null)
51-
{
52-
Initialize();
53-
}
54-
44+
InitializeIfNeeded();
5545
return _capitalizeName.value;
5646
}
5747

5848
set => _capitalizeName.value = value;
5949
}
6050

61-
private static void Initialize()
51+
public static bool StripFoldersFromPrefabsInPlayMode
52+
{
53+
get
54+
{
55+
InitializeIfNeeded();
56+
return _stripFoldersFromPrefabsInPlayMode.value;
57+
}
58+
59+
set => _stripFoldersFromPrefabsInPlayMode.value = value;
60+
}
61+
62+
public static bool StripFoldersFromPrefabsInBuild
6263
{
64+
get
65+
{
66+
InitializeIfNeeded();
67+
return _stripFoldersFromPrefabsInBuild.value;
68+
}
69+
70+
set => _stripFoldersFromPrefabsInBuild.value = value;
71+
}
72+
73+
private static void InitializeIfNeeded()
74+
{
75+
if (_instance != null)
76+
return;
77+
6378
_instance = new Settings(PackageName);
6479

6580
_playModeSetting = new UserSetting<StrippingMode>(_instance, nameof(_playModeSetting),
@@ -69,6 +84,12 @@ private static void Initialize()
6984
StrippingMode.PrependWithFolderName, SettingsScope.User);
7085

7186
_capitalizeName = new UserSetting<bool>(_instance, nameof(_capitalizeName), true, SettingsScope.User);
87+
88+
_stripFoldersFromPrefabsInPlayMode = new UserSetting<bool>(_instance,
89+
nameof(_stripFoldersFromPrefabsInPlayMode), true, SettingsScope.User);
90+
91+
_stripFoldersFromPrefabsInBuild = new UserSetting<bool>(_instance,
92+
nameof(_stripFoldersFromPrefabsInPlayMode), true, SettingsScope.User);
7293
}
7394
}
7495
}

0 commit comments

Comments
 (0)