Files
Convention-Unity/Convention/[Visual]/UIComponent/Variant/MainWindow/SceneGameWindow.cs
2025-08-30 22:31:13 +08:00

78 lines
3.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Cinemachine;
using System.Linq;
using UnityEngine.UI;
namespace Convention.WindowsUI.Variant
{
public class SceneGameWindow : WindowsComponent
{
[Resources, SerializeField, OnlyNotNullMode,Header("Bar Button Setting")] private WindowManager m_WindowManager;
[Resources, SerializeField, OnlyNotNullMode(nameof(m_WindowManager))] private GameObject m_root;
[Resources, SerializeField, OnlyNotNullMode(nameof(m_WindowManager)), TextArea(1, 3)] private string m_planePath;
[Resources, SerializeField] private string moduleName = "Game";
[Resources, SerializeField,Header("Camera Base")] private CinemachineVirtualCameraBase SceneCamera;
[Resources, SerializeField] public CinemachineVirtualCameraBase ModuleCamera;
[Resources, SerializeField,HopeNotNull] private CinemachineBrain MainCamera;
[Resources, SerializeField, OnlyNotNullMode] private RawImage TextureRenderer;
[Resources, SerializeField] private GameObject m_GameObjectOnSceneOnly;
public BaseWindowBar.RegisteredPageWrapper GameWindowIndex { get; private set; }
public void CameraSelect(bool isScene)
{
SceneCamera.gameObject.SetActive(isScene);
ModuleCamera.gameObject.SetActive(!isScene);
if (m_GameObjectOnSceneOnly != null)
{
m_GameObjectOnSceneOnly.SetActive(isScene);
}
}
private void Start()
{
if (m_WindowManager == null)
{
m_WindowManager = GetComponent<WindowManager>();
}
if(MainCamera==null)
{
MainCamera = Camera.main.GetComponent<CinemachineBrain>();
}
CameraInitializer.InitializeImmediate(MainCamera.gameObject);
TextureRenderer.texture = MainCamera.GetComponent<Camera>().targetTexture;
if (m_root == null)
{
m_root = m_WindowManager.CurrentContextRectTransform.gameObject;
}
var root = Instantiate(m_root, m_WindowManager.WindowPlane.Plane.transform);
var plane = root.transform;
if (m_planePath != null && m_planePath.Length != 0)
{
var paths = m_planePath.Split('/', '\\');
foreach (var path in paths)
{
var temp= plane.Find(path);
if (temp == null)
throw new NullReferenceException($"{path} cannt find in {plane}");
plane = temp;
}
}
GameWindowIndex = m_WindowManager.CreateSubWindowWithBarButton(plane as RectTransform, root.GetComponent<RectTransform>());
(GameWindowIndex.button as ITitle).title = moduleName;
GameWindowIndex.button.AddListener(() =>
{
CameraSelect(false);
GameWindowIndex.Select();
});
}
}
}