Files
EnglewoodLAB/Assets/Scripts/UI/CameraController/CameraControlPanel.cs
SOOBEEN HAN f1894889ee <refactor> Octopus Twin 템플릿 적용
- 기능 외 UI 구조만 적용
- 프로젝트에 걸맞는 UI는 재작업 필요
2026-02-23 18:20:09 +09:00

98 lines
3.6 KiB
C#

using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using System;
using System.Linq;
using UnityEngine;
using UnityEngine.SceneManagement;
using EnglewoodLAB.UI;
using EnglewoodLAB.Command;
using EnglewoodLAB.Object;
using EnglewoodLAB.Constants;
using EnglewoodLAB.Management;
namespace EnglewoodLAB.UI
{
public class CameraControlPanel : UIPanel
{
public List<CameraPoint> cameraViewPoints = new List<CameraPoint>();
private readonly List<CameraControlItem> cameraButtons = new List<CameraControlItem>();
public CameraControlItem cameraControlItem;
private CameraControlItem selectedCameraControlItem;
public bool isSceneReady;
private void Awake()
{
IgnoreSingleOpenMode = true;
}
public override async UniTask Init()
{
cameraControlItem = Resources.Load<CameraControlItem>($"{ResourceURL.UIPrefabFolderPath}CameraControlItem");
SceneManager.sceneLoaded += OnSceneLoaded;
//이미 로드된 초기 씬 수동 처리
RefreshCameraPoints();
gameObject.SetActive(false);
await UniTask.CompletedTask;
}
private void OnDestroy()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
RefreshCameraPoints();
}
private void RefreshCameraPoints()
{
cameraViewPoints = FindObjectsByType<CameraPoint>(FindObjectsSortMode.None).OrderBy(cp => cp.transform.GetSiblingIndex()).ToList();
isSceneReady = cameraViewPoints == null || cameraViewPoints.Count == 0 ? false : true;
SettingButtons();
if (selectedCameraControlItem != null)
{
Debug.Log(selectedCameraControlItem.name);
var point = cameraButtons.Find(x => selectedCameraControlItem.name.Contains(x.name)).point;
CommandManager.Instance.Execute(new ChangedCameraCommand(point));
selectedCameraControlItem = null;
//SceneMain.Instance.uiManager.GetCanvas<StaticCanvas>().GetPanel<BottomLeftToolbar>().HideItem();
}
}
public void SettingButtons()
{
if (cameraControlItem == null || cameraViewPoints.Count == 0) return;
// Destroy existing buttons and clear the list to prevent duplicates on re-initialization.
foreach (Transform child in transform)
{
Destroy(child.gameObject);
}
cameraButtons.Clear();
for (int i = 0; i < cameraViewPoints.Count; i++)
{
var cameraButton = Instantiate(cameraControlItem, transform);
cameraButton.SettingButton(cameraViewPoints[i]);
cameraButton.OnItemClicked += HandleItemClicked;
cameraButtons.Add(cameraButton);
}
}
private void HandleItemClicked(CameraControlItem item)
{
var floorControl = SceneMain.Instance.GetManager<EWLUIManager>().GetCanvas<PopupCanvas>().GetPanel<FloorControlPanel>();
floorControl.ChangedCurrentFloor(item.floorIndex);
if (!isSceneReady)
{
selectedCameraControlItem = item;
Debug.Log("Scene not ready. Camera change deferred.");
return;
}
CommandManager.Instance.Execute(new ChangedCameraCommand(item.point));
//SceneMain.Instance.uiManager.GetCanvas<StaticCanvas>().GetPanel<BottomLeftToolbar>().HideItem();
}
}
}