Skip to content

Commit 3e97ce1

Browse files
authored
Merge pull request #15 from Jubessin/2.2.2
prevent attribute enforcement during play mode
2 parents f49b111 + 3b8e794 commit 3e97ce1

6 files changed

+126
-0
lines changed

Editor/DisallowComponentClassAttributeEnforcer.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ internal sealed class DisallowComponentClassAttributeEnforcer : IClassAttributeE
2020
{
2121
#region Fields
2222

23+
private static bool isSubscribed;
2324
private static bool enabled = false;
2425
private static Assembly[] assemblies;
2526
private static List<Type> typesWithAttribute;
@@ -83,6 +84,8 @@ private static DisallowComponentClassAttributeEnforcer Instance
8384

8485
public DisallowComponentClassAttributeEnforcer()
8586
{
87+
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
88+
8689
Utilities.Register(this);
8790

8891
LoadConfigurations();
@@ -104,6 +107,8 @@ static DisallowComponentClassAttributeEnforcer()
104107

105108
~DisallowComponentClassAttributeEnforcer()
106109
{
110+
EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
111+
107112
Utilities.Unregister(this);
108113

109114
Unsubscribe();
@@ -115,10 +120,15 @@ static DisallowComponentClassAttributeEnforcer()
115120

116121
private static void Subscribe()
117122
{
123+
if (isSubscribed)
124+
return;
125+
118126
EditorSceneManager.sceneOpened += OnSceneOpened;
119127
Selection.selectionChanged += OnSelectionChanged;
120128
EditorApplication.hierarchyChanged += OnHierarchyChanged;
121129
ClassAttributeEnforcerEditorWindow.RequestAttributeEnforcement += OnRequestAttributeEnforcement;
130+
131+
isSubscribed = true;
122132
}
123133

124134
private static void Unsubscribe()
@@ -127,6 +137,8 @@ private static void Unsubscribe()
127137
Selection.selectionChanged -= OnSelectionChanged;
128138
EditorApplication.hierarchyChanged -= OnHierarchyChanged;
129139
ClassAttributeEnforcerEditorWindow.RequestAttributeEnforcement -= OnRequestAttributeEnforcement;
140+
141+
isSubscribed = false;
130142
}
131143

132144
private static void LoadConfigurations()
@@ -208,6 +220,15 @@ private static void OnSceneOpened(Scene scene, OpenSceneMode mode)
208220
}
209221
}
210222

223+
private static void OnPlayModeStateChanged(PlayModeStateChange playModeStateChange)
224+
{
225+
switch (playModeStateChange)
226+
{
227+
case PlayModeStateChange.EnteredEditMode: Subscribe(); break;
228+
case PlayModeStateChange.EnteredPlayMode: Unsubscribe(); break;
229+
}
230+
}
231+
211232
#endregion
212233

213234
#region IEditorSaveObject Implementations

Editor/RequireChildComponentClassAttributeEnforcer.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ internal sealed class RequireChildComponentClassAttributeEnforcer : IClassAttrib
2323
{
2424
#region Fields
2525

26+
private static bool isSubscribed;
2627
private static bool enabled = false;
2728
private static Assembly[] assemblies;
2829
private static List<Type> typesWithAttribute;
@@ -86,6 +87,8 @@ private static RequireChildComponentClassAttributeEnforcer Instance
8687

8788
public RequireChildComponentClassAttributeEnforcer()
8889
{
90+
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
91+
8992
Utilities.Register(this);
9093

9194
LoadConfigurations();
@@ -107,6 +110,8 @@ static RequireChildComponentClassAttributeEnforcer()
107110

108111
~RequireChildComponentClassAttributeEnforcer()
109112
{
113+
EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
114+
110115
Utilities.Unregister(this);
111116

112117
Unsubscribe();
@@ -118,10 +123,15 @@ static RequireChildComponentClassAttributeEnforcer()
118123

119124
private static void Subscribe()
120125
{
126+
if (isSubscribed)
127+
return;
128+
121129
EditorSceneManager.sceneOpened += OnSceneOpened;
122130
Selection.selectionChanged += OnSelectionChanged;
123131
EditorApplication.hierarchyChanged += OnHierarchyChanged;
124132
ClassAttributeEnforcerEditorWindow.RequestAttributeEnforcement += OnRequestAttributeEnforcement;
133+
134+
isSubscribed = true;
125135
}
126136

127137
private static void Unsubscribe()
@@ -130,6 +140,8 @@ private static void Unsubscribe()
130140
Selection.selectionChanged -= OnSelectionChanged;
131141
EditorApplication.hierarchyChanged -= OnHierarchyChanged;
132142
ClassAttributeEnforcerEditorWindow.RequestAttributeEnforcement -= OnRequestAttributeEnforcement;
143+
144+
isSubscribed = false;
133145
}
134146

135147
private static void LoadConfigurations()
@@ -268,6 +280,15 @@ private static void OnSceneOpened(Scene scene, OpenSceneMode mode)
268280
}
269281
}
270282

283+
private static void OnPlayModeStateChanged(PlayModeStateChange playModeStateChange)
284+
{
285+
switch (playModeStateChange)
286+
{
287+
case PlayModeStateChange.EnteredEditMode: Subscribe(); break;
288+
case PlayModeStateChange.EnteredPlayMode: Unsubscribe(); break;
289+
}
290+
}
291+
271292
#endregion
272293

273294
#region IEditorSaveObject Implementations

Editor/RequireComponentClassAttributeEnforcer.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ internal sealed class RequireComponentClassAttributeEnforcer : IClassAttributeEn
2424
{
2525
#region Fields
2626

27+
private static bool isSubscribed;
2728
private static bool enabled = false;
2829
private static Assembly[] assemblies;
2930
private static List<Type> typesWithAttribute;
@@ -87,6 +88,8 @@ private static RequireComponentClassAttributeEnforcer Instance
8788

8889
public RequireComponentClassAttributeEnforcer()
8990
{
91+
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
92+
9093
Utilities.Register(this);
9194

9295
LoadConfigurations();
@@ -108,6 +111,8 @@ static RequireComponentClassAttributeEnforcer()
108111

109112
~RequireComponentClassAttributeEnforcer()
110113
{
114+
EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
115+
111116
Utilities.Unregister(this);
112117

113118
Unsubscribe();
@@ -119,10 +124,15 @@ static RequireComponentClassAttributeEnforcer()
119124

120125
private static void Subscribe()
121126
{
127+
if (isSubscribed)
128+
return;
129+
122130
EditorSceneManager.sceneOpened += OnSceneOpened;
123131
Selection.selectionChanged += OnSelectionChanged;
124132
EditorApplication.hierarchyChanged += OnHierarchyChanged;
125133
ClassAttributeEnforcerEditorWindow.RequestAttributeEnforcement += OnRequestAttributeEnforcement;
134+
135+
isSubscribed = true;
126136
}
127137

128138
private static void Unsubscribe()
@@ -131,6 +141,8 @@ private static void Unsubscribe()
131141
Selection.selectionChanged -= OnSelectionChanged;
132142
EditorApplication.hierarchyChanged -= OnHierarchyChanged;
133143
ClassAttributeEnforcerEditorWindow.RequestAttributeEnforcement -= OnRequestAttributeEnforcement;
144+
145+
isSubscribed = false;
134146
}
135147

136148
private static void LoadConfigurations()
@@ -225,6 +237,15 @@ private static void OnSceneOpened(Scene scene, OpenSceneMode mode)
225237
}
226238
}
227239

240+
private static void OnPlayModeStateChanged(PlayModeStateChange playModeStateChange)
241+
{
242+
switch (playModeStateChange)
243+
{
244+
case PlayModeStateChange.EnteredEditMode: Subscribe(); break;
245+
case PlayModeStateChange.EnteredPlayMode: Unsubscribe(); break;
246+
}
247+
}
248+
228249
#endregion
229250

230251
#region IEditorSaveObject Implementations

Editor/RequireLayerClassAttributeEnforcer.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ internal sealed class RequireLayerClassAttributeEnforcer : IClassAttributeEnforc
2222
{
2323
#region Fields
2424

25+
private static bool isSubscribed;
2526
private static bool enabled = false;
2627
private static Assembly[] assemblies;
2728
private static List<Type> typesWithAttribute;
@@ -85,6 +86,8 @@ private static RequireLayerClassAttributeEnforcer Instance
8586

8687
public RequireLayerClassAttributeEnforcer()
8788
{
89+
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
90+
8891
Utilities.Register(this);
8992

9093
LoadConfigurations();
@@ -106,6 +109,8 @@ static RequireLayerClassAttributeEnforcer()
106109

107110
~RequireLayerClassAttributeEnforcer()
108111
{
112+
EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
113+
109114
Utilities.Unregister(this);
110115

111116
Unsubscribe();
@@ -117,10 +122,15 @@ static RequireLayerClassAttributeEnforcer()
117122

118123
private static void Subscribe()
119124
{
125+
if (isSubscribed)
126+
return;
127+
120128
EditorSceneManager.sceneOpened += OnSceneOpened;
121129
Selection.selectionChanged += OnSelectionChanged;
122130
EditorApplication.hierarchyChanged += OnHierarchyChanged;
123131
ClassAttributeEnforcerEditorWindow.RequestAttributeEnforcement += OnRequestAttributeEnforcement;
132+
133+
isSubscribed = true;
124134
}
125135

126136
private static void Unsubscribe()
@@ -129,6 +139,8 @@ private static void Unsubscribe()
129139
Selection.selectionChanged -= OnSelectionChanged;
130140
EditorApplication.hierarchyChanged -= OnHierarchyChanged;
131141
ClassAttributeEnforcerEditorWindow.RequestAttributeEnforcement -= OnRequestAttributeEnforcement;
142+
143+
isSubscribed = false;
132144
}
133145

134146
private static void LoadConfigurations()
@@ -277,6 +289,15 @@ private static void OnSceneOpened(Scene scene, OpenSceneMode mode)
277289
}
278290
}
279291

292+
private static void OnPlayModeStateChanged(PlayModeStateChange playModeStateChange)
293+
{
294+
switch (playModeStateChange)
295+
{
296+
case PlayModeStateChange.EnteredEditMode: Subscribe(); break;
297+
case PlayModeStateChange.EnteredPlayMode: Unsubscribe(); break;
298+
}
299+
}
300+
280301
#endregion
281302

282303
#region IEditorSaveObject Implementations

Editor/RequireNameClassAttributeEnforcer.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ internal sealed class RequireNameClassAttributeEnforcer : IClassAttributeEnforce
2020
{
2121
#region Fields
2222

23+
private static bool isSubscribed;
2324
private static bool enabled = false;
2425
private static Assembly[] assemblies;
2526
private static List<Type> typesWithAttribute;
@@ -83,6 +84,8 @@ private static RequireNameClassAttributeEnforcer Instance
8384

8485
public RequireNameClassAttributeEnforcer()
8586
{
87+
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
88+
8689
Utilities.Register(this);
8790

8891
LoadConfigurations();
@@ -104,6 +107,8 @@ static RequireNameClassAttributeEnforcer()
104107

105108
~RequireNameClassAttributeEnforcer()
106109
{
110+
EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
111+
107112
Utilities.Unregister(this);
108113

109114
Unsubscribe();
@@ -115,10 +120,15 @@ static RequireNameClassAttributeEnforcer()
115120

116121
private static void Subscribe()
117122
{
123+
if (isSubscribed)
124+
return;
125+
118126
EditorSceneManager.sceneOpened += OnSceneOpened;
119127
Selection.selectionChanged += OnSelectionChanged;
120128
EditorApplication.hierarchyChanged += OnHierarchyChanged;
121129
ClassAttributeEnforcerEditorWindow.RequestAttributeEnforcement += OnRequestAttributeEnforcement;
130+
131+
isSubscribed = true;
122132
}
123133

124134
private static void Unsubscribe()
@@ -127,6 +137,8 @@ private static void Unsubscribe()
127137
Selection.selectionChanged -= OnSelectionChanged;
128138
EditorApplication.hierarchyChanged -= OnHierarchyChanged;
129139
ClassAttributeEnforcerEditorWindow.RequestAttributeEnforcement -= OnRequestAttributeEnforcement;
140+
141+
isSubscribed = false;
130142
}
131143

132144
private static void OnProjectLoaded()
@@ -204,6 +216,15 @@ private static void OnSceneOpened(Scene scene, OpenSceneMode mode)
204216
}
205217
}
206218

219+
private static void OnPlayModeStateChanged(PlayModeStateChange playModeStateChange)
220+
{
221+
switch (playModeStateChange)
222+
{
223+
case PlayModeStateChange.EnteredEditMode: Subscribe(); break;
224+
case PlayModeStateChange.EnteredPlayMode: Unsubscribe(); break;
225+
}
226+
}
227+
207228
#endregion
208229

209230
#region IEditorSaveObject Implementations

0 commit comments

Comments
 (0)