Files
XRLib/Assets/Scripts/Studio/StudioSceneContext.cs
2025-12-22 19:49:36 +09:00

56 lines
2.4 KiB
C#

#nullable enable
using UnityEngine;
using UVC.Core;
using UVC.Studio.Manager;
using UVC.UI.Menu;
using UVC.UI.ToolBar;
using UVC.UI.Window.PropertyWindow;
namespace UVC.Studio
{
public class StudioSceneContext : InjectorSceneContext
{
/// <summary>
/// StudioSceneContext 인스턴스에 접근하기 위한 편의 프로퍼티
/// </summary>
public static new StudioSceneContext? Instance => InjectorSceneContext.Instance as StudioSceneContext;
[SerializeField] private Toolbox? toolbox;
[SerializeField] private StudioSideTabBar? sideTabBar;
[SerializeField] private PropertyWindow? propertyWindow;
[SerializeField] private TopMenuController? topMenu;
[SerializeField] private GizmoUndoBridge? gizmoUndoBridge;
[SerializeField] private UndoRedoManager? undoRedoManager;
/// <summary>
/// Scene 라이프사이클 서비스들을 등록합니다.
/// 씬 로드 시 자동 호출되며, 씬 전환 시 자동으로 정리됩니다.
/// </summary>
protected override void RegisterSceneServices()
{
base.RegisterSceneServices();
// 여기에 StudioSceneContext에 등록할 서비스들을 추가하세요.
Injector.RegisterSingleton<StudioSceneMain>();
if(toolbox != null) Injector.RegisterInstance<Toolbox>(toolbox, ServiceLifetime.Scene);
if(sideTabBar != null) Injector.RegisterInstance<StudioSideTabBar>(sideTabBar, ServiceLifetime.Scene);
if(propertyWindow != null) Injector.RegisterInstance<PropertyWindow>(propertyWindow, ServiceLifetime.Scene);
if(topMenu != null) Injector.RegisterInstance<TopMenuController>(topMenu, ServiceLifetime.Scene);
if(gizmoUndoBridge != null) Injector.RegisterInstance<GizmoUndoBridge>(gizmoUndoBridge, ServiceLifetime.Scene);
if(undoRedoManager != null) Injector.RegisterInstance<UndoRedoManager>(undoRedoManager, ServiceLifetime.Scene);
// StageObjectManager 등록
var stageObjectManager = new StageObjectManager();
Injector.RegisterInstance<StageObjectManager>(stageObjectManager);
// SelectionManager 등록 (StageObjectManager, PropertyWindow 의존)
var selectionManager = new SelectionManager(stageObjectManager, propertyWindow);
Injector.RegisterInstance<SelectionManager>(selectionManager);
}
}
}