#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
{
///
/// StudioSceneContext 인스턴스에 접근하기 위한 편의 프로퍼티
///
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 GameObject? stage;
///
/// Scene 라이프사이클 서비스들을 등록합니다.
/// 씬 로드 시 자동 호출되며, 씬 전환 시 자동으로 정리됩니다.
///
protected override void RegisterSceneServices()
{
base.RegisterSceneServices();
// 여기에 StudioSceneContext에 등록할 서비스들을 추가하세요.
Injector.RegisterSingleton();
if(toolbox != null) Injector.RegisterInstance(toolbox, ServiceLifetime.Scene);
if(sideTabBar != null) Injector.RegisterInstance(sideTabBar, ServiceLifetime.Scene);
if(propertyWindow != null) Injector.RegisterInstance(propertyWindow, ServiceLifetime.Scene);
if(topMenu != null) Injector.RegisterInstance(topMenu, ServiceLifetime.Scene);
if(stage != null) Injector.RegisterInstance(stage, ServiceLifetime.Scene);
// StageObjectManager 등록
var stageObjectManager = new StageObjectManager();
Injector.RegisterInstance(stageObjectManager);
// SelectionManager 등록 (StageObjectManager 의존)
var selectionManager = new SelectionManager(stageObjectManager);
Injector.RegisterInstance(selectionManager);
}
}
}