@@ -14,6 +14,8 @@ static class SubSceneGUI
14
14
static Dictionary < Scene , SceneHierarchyHooks . SubSceneInfo > m_SceneToSubSceneMap = new Dictionary < Scene , SceneHierarchyHooks . SubSceneInfo > ( ) ;
15
15
static Dictionary < SceneAsset , SceneHierarchyHooks . SubSceneInfo > m_SceneAssetToSubSceneMap = new Dictionary < SceneAsset , SceneHierarchyHooks . SubSceneInfo > ( ) ;
16
16
const int kMaxSubSceneIterations = 100 ;
17
+ static float s_HalfFoldoutWidth = 6f ;
18
+ static float s_SubSceneHeaderIndentAdjustment = - 2f ;
17
19
18
20
internal static void FetchSubSceneInfo ( )
19
21
{
@@ -215,9 +217,9 @@ internal static Scene GetSubScene(GameObject gameObject)
215
217
return default ( Scene ) ;
216
218
}
217
219
218
- internal static void DrawSubSceneHeaderBackground ( Rect rect , GameObject gameObject )
220
+ internal static void DrawSubSceneHeaderBackground ( Rect rect , float baseIndent , float indentWidth , GameObject gameObject )
219
221
{
220
- float indent = CalcIndentOfSubSceneHeader ( gameObject ) ;
222
+ float indent = CalcIndentOfSubSceneHeader ( gameObject , baseIndent , indentWidth ) ;
221
223
if ( indent < 0 )
222
224
{
223
225
Debug . LogError ( "Only call DrawSubSceneHeaderBackground if IsSubSceneHeader() is true" ) ;
@@ -232,7 +234,7 @@ internal static void DrawSubSceneHeaderBackground(Rect rect, GameObject gameObje
232
234
GUI . color = oldColor ;
233
235
}
234
236
235
- static float CalcIndentOfSubSceneHeader ( GameObject gameObject )
237
+ static float CalcIndentOfSubSceneHeader ( GameObject gameObject , float baseIndent , float indentWidth )
236
238
{
237
239
SceneHierarchyHooks . SubSceneInfo subSceneInfo ;
238
240
if ( gameObject == null || ! m_SubSceneHeadersMap . TryGetValue ( gameObject , out subSceneInfo ) )
@@ -241,9 +243,7 @@ static float CalcIndentOfSubSceneHeader(GameObject gameObject)
241
243
int hierarchyDepth = CalculateHierarchyDepthOfSubScene ( subSceneInfo ) ;
242
244
if ( hierarchyDepth > 0 )
243
245
{
244
- float indentWidth = 14f ;
245
- float indent = hierarchyDepth * indentWidth ;
246
- return indent ;
246
+ return baseIndent + s_SubSceneHeaderIndentAdjustment + ( hierarchyDepth * indentWidth ) ;
247
247
}
248
248
return - 1f ;
249
249
}
@@ -252,7 +252,7 @@ static float CalcIndentOfSubSceneHeader(GameObject gameObject)
252
252
static SceneHierarchyHooks . SubSceneInfo s_LastSubSceneInfo ;
253
253
static Rect s_LastRectCalculated ;
254
254
255
- internal static Rect GetRectForVerticalLine ( Rect rowRect , Scene scene )
255
+ internal static Rect GetRectForVerticalLine ( Rect rowRect , float baseIndent , float indentWidth , Scene scene )
256
256
{
257
257
// Fast path: reuse last rect if same scene
258
258
if ( s_LastSubSceneInfo . isValid && s_LastSubSceneInfo . scene == scene )
@@ -269,38 +269,40 @@ internal static Rect GetRectForVerticalLine(Rect rowRect, Scene scene)
269
269
if ( s_LastSubSceneInfo . color . a == 0 )
270
270
return new Rect ( ) ;
271
271
272
- float indent = CalcIndentOfVerticalLine ( s_LastSubSceneInfo ) ;
272
+ float indent = CalcIndentOfVerticalLine ( s_LastSubSceneInfo , baseIndent , indentWidth ) ;
273
273
if ( indent < 0 )
274
274
return new Rect ( ) ;
275
275
276
276
s_LastRectCalculated = rowRect ;
277
- s_LastRectCalculated . x += indent ;
277
+ s_LastRectCalculated . x += indent ;
278
278
s_LastRectCalculated . width = 1 ;
279
279
280
280
return s_LastRectCalculated ;
281
281
}
282
282
283
- internal static void DrawVerticalLine ( Rect rowRect , GameObject gameObject )
283
+ internal static void DrawVerticalLine ( Rect rowRect , float baseIndent , float indentWidth , GameObject gameObject )
284
284
{
285
285
if ( gameObject == null )
286
286
return ;
287
287
288
288
if ( Event . current . type == EventType . Repaint )
289
289
{
290
- Rect lineRect = GetRectForVerticalLine ( rowRect , gameObject . scene ) ;
290
+ Scene scene = gameObject . scene ;
291
+ Rect lineRect = GetRectForVerticalLine ( rowRect , baseIndent , indentWidth , scene ) ;
291
292
if ( lineRect . width > 0f )
292
- EditorGUI . DrawRect ( lineRect , GetColorForSubScene ( gameObject . scene ) ) ;
293
+ {
294
+ Color color = GetColorForSubScene ( scene ) ;
295
+ GUI . DrawTexture ( lineRect , EditorGUIUtility . whiteTexture , ScaleMode . StretchToFill , true , 1 , color , color , color , color , Vector4 . zero , Vector4 . zero , false ) ;
296
+ }
293
297
}
294
298
}
295
299
296
- static float CalcIndentOfVerticalLine ( SceneHierarchyHooks . SubSceneInfo subSceneInfo )
300
+ static float CalcIndentOfVerticalLine ( SceneHierarchyHooks . SubSceneInfo subSceneInfo , float baseIndent , float indentWidth )
297
301
{
298
302
int hierarchyDepth = CalculateHierarchyDepthOfSubScene ( subSceneInfo ) ;
299
303
if ( hierarchyDepth > 0 )
300
304
{
301
- float indentWidth = 14f ;
302
- float indent = hierarchyDepth * indentWidth ;
303
- return indent ;
305
+ return baseIndent + hierarchyDepth * indentWidth + s_HalfFoldoutWidth ;
304
306
}
305
307
return - 1f ;
306
308
}
0 commit comments