#nullable enable using UnityEngine; using UVC.Data; using UVC.Factory.Cameras; using UVC.Factory.Component; using UVC.Factory.Modal; using UVC.Factory.Playback.UI; using UVC.UI.Commands; using UVC.UI.Loading; using UVC.UI.Modal; namespace UVC.Factory.Playback { /// /// 재생(Playback) 명령을 실행하는 클래스입니다. /// /// /// 이 명령은 팩토리 카메라를 비활성화하고, 재생 목록 모달을 띄운 뒤, /// 사용자가 재생 항목을 선택하면 재생을 시작합니다. /// 사용자가 취소하면 재생을 종료합니다. /// /// /// /// /// // ICommand 인터페이스를 구현하므로 다음과 같이 사용할 수 있습니다. /// ICommand playbackCommand = new PlaybackCommand(); /// playbackCommand.Execute(); /// /// /// public class PlaybackCommand : ICommand { /// /// 재생 명령을 실행합니다. /// /// /// 1. 카메라를 비활성화합니다.
/// 2. 재생 목록 모달을 띄웁니다.
/// 3. 사용자가 항목을 선택하면 재생을 시작합니다.
/// 4. 사용자가 취소하면 재생을 종료합니다.
///
/// /// /// /// // 명령 실행 예시 /// var command = new PlaybackCommand(); /// command.Execute(); /// /// ///
/// 사용하지 않음 public async void Execute(object? parameter = null) { // 1. 카메라 비활성화 FactoryCameraController.Instance.Enable = false; // 2. 재생 목록 모달 생성 및 표시 var modalContent = new ModalContent(UIPlaybackListModal.PrefabPath) { Title = "Playback List", ConfirmButtonText = "Play", ShowCancelButton = false }; // 3. 사용자가 항목을 선택할 때까지 대기 UIPlaybackListItemData? result = await UVC.UI.Modal.Modal.Open(modalContent); Debug.Log($"PlaybackCommand result==null:{result==null}"); if (result != null) { // 4. 항목 선택 시: 로딩 표시, 재생 시작 UILoading.Show(); UIPlaybackListItemData data = result; Debug.Log($"PlaybackCommand data:{data}"); DataRepository.Instance.MqttReceiver.Stop(); await PlaybackService.Instance.StartAsync(data); FactoryCameraController.Instance.Enable = true; UILoading.Hide(); } else { // 5. 취소 시: 재생 종료 UILoading.Show(); PlaybackService.Instance.Exit(); FactoryCameraController.Instance.Enable = true; UILoading.Hide(); } } } }