98 lines
3.6 KiB
C#
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();
|
|
|
|
}
|
|
}
|
|
} |