Editor/BlenderBridge/BridgeSceneHelper.cs
using System;
using System.Collections.Generic;
using Editor;
using Sandbox;
namespace BlenderBridge;
/// <summary>
/// Standalone scene helpers for the Blender Bridge — no MCP dependencies.
/// </summary>
internal static class BridgeSceneHelper
{
/// <summary>
/// Returns the best available scene:
/// 1. Active SceneEditorSession.Scene (editor)
/// 2. Any available editor session
/// 3. Game.ActiveScene (play mode)
/// </summary>
internal static Scene ResolveScene()
{
try
{
var active = SceneEditorSession.Active;
if ( active?.Scene != null ) return active.Scene;
foreach ( var s in SceneEditorSession.All )
if ( s?.Scene != null ) return s.Scene;
}
catch { }
if ( Game.ActiveScene != null ) return Game.ActiveScene;
return null;
}
/// <summary>Walk all GameObjects in the scene, including children.</summary>
internal static IEnumerable<GameObject> WalkAll( Scene scene, bool includeDisabled = true )
{
foreach ( var root in scene.Children )
foreach ( var go in WalkSubtree( root, includeDisabled ) )
yield return go;
}
private static IEnumerable<GameObject> WalkSubtree( GameObject root, bool includeDisabled )
{
if ( !includeDisabled && !root.Enabled ) yield break;
yield return root;
foreach ( var child in root.Children )
foreach ( var go in WalkSubtree( child, includeDisabled ) )
yield return go;
}
}