diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/BaseUi.cs b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/BaseUi.cs index 669077e61..826d32d9d 100644 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/BaseUi.cs +++ b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/BaseUi.cs @@ -25,24 +25,11 @@ public abstract class BaseUi : MonoBehaviour public bool IsInitialized { get; protected set; } public bool IsBlockingTime => false; public bool IsOpen => _panel != null && _panel.activeSelf; - - protected virtual void Awake() - { - _canvasGroup = GetComponent(); - _panel = transform.Find(CommonConstants.Panel).gameObject; - _blockImage = transform.Find(CommonConstants.BlockImage).gameObject; - - if (_enableBlockImage) - { - _blockImage.SetActive(false); - } - - _panel.SetActive(false); - } - + + protected virtual void OnEnable() { } protected virtual void Start() { } protected virtual void Update() { } - + protected virtual void OnDisable() { } protected virtual void OnDestroy() { _bindingContext?.Dispose(); @@ -51,22 +38,29 @@ protected virtual void OnDestroy() } public void CreateInitialize() - { - OnCreatedInitialize(); - } - - protected virtual void OnCreatedInitialize() { UiManager.Instance.UiState.RegisterUI(this); - _bindingContext = new BindingContext(); - SetupBindings(); - } - protected virtual void OnOpenedEvents() { } - protected virtual void OnClosedEvents() { } + _canvasGroup = GetComponent(); + _panel = transform.Find(CommonConstants.Panel).gameObject; + _blockImage = transform.Find(CommonConstants.BlockImage).gameObject; - // BaseUi 메서드들을 직접 구현 - public virtual void OpenPanel() + _panel.SetActive(false); + _bindingContext = new BindingContext(); + + OnCreatedInitialize(); + + if (_enableBlockImage) + { + _blockImage.SetActive(false); + } + } + + protected abstract void OnCreatedInitialize(); + protected abstract void OnOpenedEvents(); + protected abstract void OnClosedEvents(); + + protected void OpenPanel() { if (_enableBlockImage) { @@ -74,11 +68,10 @@ public virtual void OpenPanel() } _panel.SetActive(true); - OnOpenedEvents(); } - public virtual void ClosePanel() + protected void ClosePanel() { if (_enableBlockImage) { @@ -91,7 +84,7 @@ public virtual void ClosePanel() IsInitialized = false; } - public virtual void SetUiInteractable(bool active) + public void SetUiInteractable(bool active) { if (_canvasGroup) { @@ -102,15 +95,10 @@ public virtual void SetUiInteractable(bool active) public bool IsOpenPanel() => _panel && _panel.activeInHierarchy; - /// - /// 추가 바인딩 설정 - 하위 클래스에서 구현 - /// - protected virtual void SetupBindings() { } - /// /// ViewModel 속성 변경 이벤트 핸들러 /// - protected virtual void OnViewModelPropertyChanged(object sender, PropertyChangedEventArgs e) + protected void OnViewModelPropertyChanged(object sender, PropertyChangedEventArgs e) { HandleCustomPropertyChanged(e.PropertyName); } diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/BaseViewModelUi.cs b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/BaseViewModelUi.cs deleted file mode 100644 index 41a2ef426..000000000 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/BaseViewModelUi.cs +++ /dev/null @@ -1,74 +0,0 @@ -namespace DDD -{ - public class BaseViewModelUi : BaseUi where TViewModel : SimpleViewModel - { - protected TViewModel _viewModel; - - protected override void Awake() - { - base.Awake(); - - _viewModel = GetComponent(); - } - - protected override void OnOpenedEvents() - { - base.OnOpenedEvents(); - - if (_viewModel && _bindingContext != null) - { - _bindingContext.SetDataContext(_viewModel); - _viewModel.PropertyChanged += OnViewModelPropertyChanged; - } - } - - protected override void OnClosedEvents() - { - base.OnClosedEvents(); - - if (_viewModel != null) - { - _viewModel.PropertyChanged -= OnViewModelPropertyChanged; - } - } - - public override void OpenPanel() - { - base.OpenPanel(); - - _viewModel?.Initialize(); - } - - public override void ClosePanel() - { - base.ClosePanel(); - - _viewModel?.Cleanup(); - } - - /// - /// ViewModel 메서드 호출 헬퍼 - /// - protected void InvokeViewModelMethod(string methodName, params object[] parameters) - { - if (_viewModel == null) return; - - var method = _viewModel.GetType().GetMethod(methodName); - method?.Invoke(_viewModel, parameters); - } - - /// - /// ViewModel 속성 설정 헬퍼 - /// - protected void SetViewModelProperty(string propertyName, object value) - { - if (_viewModel == null) return; - - var property = _viewModel.GetType().GetProperty(propertyName); - if (property != null && property.CanWrite) - { - property.SetValue(_viewModel, value); - } - } - } -} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/BaseViewModelUi.cs.meta b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/BaseViewModelUi.cs.meta deleted file mode 100644 index 395a2f0b8..000000000 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/BaseViewModelUi.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: df6384ea09a44f188d636ca7ee47db13 -timeCreated: 1755678434 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/CommonUis/FadeUi.cs b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/CommonUis/FadeUi.cs index 6cb05137b..112029136 100644 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/CommonUis/FadeUi.cs +++ b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/CommonUis/FadeUi.cs @@ -15,14 +15,22 @@ protected override void OnDestroy() protected override void OnCreatedInitialize() { - base.OnCreatedInitialize(); - _canvasGroup.alpha = 0f; EventBus.Register(this); EventBus.Register(this); } + protected override void OnOpenedEvents() + { + + } + + protected override void OnClosedEvents() + { + + } + public void HandleEvent(FadeInEvent evt) { _ = FadeInAsync(evt); diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/CommonUis/GlobalMessageUi.cs b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/CommonUis/GlobalMessageUi.cs index 11ff40751..3e79cbce9 100644 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/CommonUis/GlobalMessageUi.cs +++ b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/CommonUis/GlobalMessageUi.cs @@ -23,14 +23,22 @@ protected override void OnDestroy() protected override void OnCreatedInitialize() { - base.OnCreatedInitialize(); - _canvasGroup.alpha = 0; _messageText.text = null; EventBus.Register(this); } + protected override void OnOpenedEvents() + { + + } + + protected override void OnClosedEvents() + { + + } + public void HandleEvent(ShowGlobalMessageEvent evt) { _messageQueue.Enqueue(evt); diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/Huds/RestaurantHud.cs b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/Huds/RestaurantHud.cs index 6d0fefe4e..552402b59 100644 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/Huds/RestaurantHud.cs +++ b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/Huds/RestaurantHud.cs @@ -4,9 +4,17 @@ public class RestaurantHud : BaseUi { protected override void OnCreatedInitialize() { - base.OnCreatedInitialize(); - OpenPanel(); } + + protected override void OnOpenedEvents() + { + + } + + protected override void OnClosedEvents() + { + + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/InteractionUis/InteractionMessageUi.cs b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/InteractionUis/InteractionMessageUi.cs index 71d35b969..f7fd21853 100644 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/InteractionUis/InteractionMessageUi.cs +++ b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/InteractionUis/InteractionMessageUi.cs @@ -27,14 +27,23 @@ protected override void OnDestroy() protected override void OnCreatedInitialize() { - base.OnCreatedInitialize(); - _filledImage.fillAmount = 0f; EventBus.Register(this); EventBus.Register(this); } + protected override void OnOpenedEvents() + { + + } + + protected override void OnClosedEvents() + { + + } + + public void HandleEvent(ShowInteractionUiEvent evt) { ShowInteractionUiEvent(evt); @@ -47,14 +56,13 @@ public void HandleEvent(HideInteractionUiEvent evt) private void ShowInteractionUiEvent(ShowInteractionUiEvent evt) { - var currentLocalizedString = LocalizationManager.Instance.GetLocalizedString(evt.TextKey); - if (currentLocalizedString != _previousLocalizedString) - { - _textLabelLocalizeStringEvent.StringReference = currentLocalizedString; - _previousLocalizedString = LocalizationManager.Instance.GetLocalizedString(evt.TextKey); - } - + _previousLocalizedString = LocalizationManager.Instance.GetLocalizedString(evt.TextKey); _textLabel.color = evt.CanInteract ? _canInteractTextColor : _cannotInteractTextColor; + + if (_textLabelLocalizeStringEvent.StringReference != _previousLocalizedString) + { + _textLabelLocalizeStringEvent.StringReference = _previousLocalizedString; + } _filledImage.fillAmount = evt.HoldProgress; if (_panel.activeInHierarchy == false) diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/BasePopupUi.cs b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/BasePopupUi.cs index 79bea8e0f..ae06076c3 100644 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/BasePopupUi.cs +++ b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/BasePopupUi.cs @@ -8,13 +8,6 @@ public abstract class BasePopupUi : BaseUi public bool IsTopPopup => UiManager.Instance.UiState.IsTopPopup(this); public InputActionMaps InputActionMaps { get; protected set; } - protected override void Awake() - { - _enableBlockImage = true; - - base.Awake(); - } - protected override void Update() { base.Update(); @@ -39,33 +32,46 @@ protected override void OnDestroy() UiManager.Instance?.UiState?.UnregisterPopupUI(this); } + protected abstract GameObject GetInitialSelected(); + protected abstract void OnCreatedInitializeBasePopup(); + protected abstract void OnOpenedEventsBasePopup(OpenPopupUiEvent evt); + protected abstract void OnClosedEventsBasePopup(ClosePopupUiEvent evt); + protected override void OnCreatedInitialize() { - base.OnCreatedInitialize(); - UiManager.Instance.UiState.RegisterPopupUI(this); + + _enableBlockImage = true; + OnCreatedInitializeBasePopup(); } - public virtual void Open(OpenPopupUiEvent evt) + protected override void OnOpenedEvents() { } + protected override void OnClosedEvents() { } + + public void OpenPopup(OpenPopupUiEvent evt) { OpenPanel(); var initialSelected = GetInitialSelected(); - if (initialSelected != null) + if (initialSelected) { EventSystem.current.SetSelectedGameObject(initialSelected); } transform.SetAsLastSibling(); + OnOpenedEventsBasePopup(evt); + + IsInitialized = true; } - public virtual void Close() + public void Close() { var evt = GameEvents.ClosePopupUiEvent; evt.UiType = GetType(); + OnClosedEventsBasePopup(evt); + + ClosePanel(); EventBus.Broadcast(evt); } - - protected abstract GameObject GetInitialSelected(); } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/ConfirmUi/ConfirmUi.cs b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/ConfirmUi/ConfirmUi.cs index c5f1bd38a..075df12bd 100644 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/ConfirmUi/ConfirmUi.cs +++ b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/ConfirmUi/ConfirmUi.cs @@ -19,17 +19,9 @@ protected override GameObject GetInitialSelected() return _confirmButton.gameObject; } - protected override void OnCreatedInitialize() + protected override void OnCreatedInitializePopup() { - base.OnCreatedInitialize(); - _messageLabelLocalizeStringEvent.OnUpdateString.Invoke(string.Empty); - SetupBindings(); - } - - protected override void SetupBindings() - { - base.SetupBindings(); BindingHelper.BindLocalizedStringEvent(_bindingContext, _messageLabelLocalizeStringEvent, nameof(_viewModel.MessageLocalizedString)); BindingHelper.BindActive(_bindingContext, _cancelButton.gameObject, nameof(_viewModel.IsCancelButtonVisible)); @@ -46,28 +38,27 @@ protected override void SetupBindings() Close(); }); } - - public override void Open(OpenPopupUiEvent evt) + + protected override void OnOpenedEventsPopup(OpenPopupUiEvent evt) { - base.Open(evt); - UnityAction onConfirmAction = evt.OnConfirm != null ? new UnityAction(evt.OnConfirm) : null; UnityAction onCancelAction = evt.OnCancel != null ? new UnityAction(evt.OnCancel) : null; _viewModel?.SetupConfirm(evt.NewMessageKey, onConfirmAction, onCancelAction, evt.IsCancelButtonVisible); } - - protected override void OnOpenedEvents() - { - base.OnOpenedEvents(); - - IsInitialized = true; - } - - protected override bool OnInputPerformed(RestaurantUiActions actionEnum, InputAction.CallbackContext context) - { - if (base.OnInputPerformed(actionEnum, context) == false) return false; + protected override void OnClosedEventsPopup(ClosePopupUiEvent evt) + { + + } + + protected override void OnInputStartedPopup(RestaurantUiActions actionEnum, InputAction.CallbackContext context) + { + + } + + protected override void OnInputPerformedPopup(RestaurantUiActions actionEnum, InputAction.CallbackContext context) + { switch (actionEnum) { case RestaurantUiActions.Cancel: @@ -77,8 +68,11 @@ protected override bool OnInputPerformed(RestaurantUiActions actionEnum, InputAc HandleInteract1Performed(); break; } + } - return true; + protected override void OnInputCanceledPopup(RestaurantUiActions actionEnum, InputAction.CallbackContext context) + { + } private void HandleCancelPerformed() diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/PopupUi.cs b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/PopupUi.cs index 59b9db7e5..ab077816e 100644 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/PopupUi.cs +++ b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/PopupUi.cs @@ -14,25 +14,30 @@ public abstract class PopupUi : BasePopupUi protected readonly List<(InputAction action, Action handler)> _registeredHandlers = new(); protected TViewModel _viewModel; + + protected abstract void OnCreatedInitializePopup(); + protected abstract void OnOpenedEventsPopup(OpenPopupUiEvent evt); + protected abstract void OnClosedEventsPopup(ClosePopupUiEvent evt); + protected abstract void OnInputStartedPopup(TInputEnum actionEnum, InputAction.CallbackContext context); + protected abstract void OnInputPerformedPopup(TInputEnum actionEnum, InputAction.CallbackContext context); + protected abstract void OnInputCanceledPopup(TInputEnum actionEnum, InputAction.CallbackContext context); - protected override void Awake() + protected override void OnCreatedInitializeBasePopup() { - base.Awake(); - _viewModel = GetComponent(); + + OnCreatedInitializePopup(); } - protected override void OnOpenedEvents() + protected override void OnOpenedEventsBasePopup(OpenPopupUiEvent evt) { - base.OnOpenedEvents(); + _viewModel?.Initialize(); if (_viewModel && _bindingContext != null) { _bindingContext.SetDataContext(_viewModel); - _viewModel.PropertyChanged += OnViewModelPropertyChanged; } - - // PopupUi의 입력 바인딩 등록 + foreach (var actionEnum in _uiActionsInputBinding.BindingActions.GetFlags()) { if (actionEnum.Equals(default(TInputEnum))) continue; @@ -65,18 +70,17 @@ protected override void OnOpenedEvents() } InputActionMaps = _uiActionsInputBinding.InputActionMaps; + + OnOpenedEventsPopup(evt); + + if (IsTopPopup) + { + InputManager.Instance.SwitchCurrentActionMap(_uiActionsInputBinding.InputActionMaps); + } } - protected override void OnClosedEvents() + protected override void OnClosedEventsBasePopup(ClosePopupUiEvent evt) { - base.OnClosedEvents(); - - if (_viewModel != null) - { - _viewModel.PropertyChanged -= OnViewModelPropertyChanged; - } - - // 입력 핸들러 해제 foreach (var (action, handler) in _registeredHandlers) { if (action != null) @@ -86,32 +90,30 @@ protected override void OnClosedEvents() action.canceled -= handler; } } - - _registeredHandlers.Clear(); - } - - public override void Open(OpenPopupUiEvent evt) - { - base.Open(evt); - - _viewModel?.Initialize(); - - if (IsTopPopup) - { - InputManager.Instance.SwitchCurrentActionMap(_uiActionsInputBinding.InputActionMaps); - } - } - - public override void Close() - { - base.Close(); + OnClosedEventsPopup(evt); _viewModel?.Cleanup(); } + + private void OnInputStarted(TInputEnum actionEnum, InputAction.CallbackContext context) + { + if (IsTopPopup == false) return; + + OnInputStartedPopup(actionEnum, context); + } - // 입력 처리 메서드들 - protected virtual bool OnInputStarted(TInputEnum actionEnum, InputAction.CallbackContext context) => IsTopPopup; - protected virtual bool OnInputPerformed(TInputEnum actionEnum, InputAction.CallbackContext context) => IsTopPopup; - protected virtual bool OnInputCanceled(TInputEnum actionEnum, InputAction.CallbackContext context) => IsTopPopup; + private void OnInputPerformed(TInputEnum actionEnum, InputAction.CallbackContext context) + { + if (IsTopPopup == false) return; + + OnInputPerformedPopup(actionEnum, context); + } + + private void OnInputCanceled(TInputEnum actionEnum, InputAction.CallbackContext context) + { + if (IsTopPopup == false) return; + + OnInputCanceledPopup(actionEnum, context); + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/UiState.cs b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/UiState.cs index 5070d8a98..3d6eb9e66 100644 --- a/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/UiState.cs +++ b/Assets/_DDD/_Scripts/Game/GameUi/BaseUi/PopupUis/UiState.cs @@ -69,7 +69,7 @@ public void HandleEvent(OpenPopupUiEvent evt) if (!popup.IsOpen) { PushPopup(popup); - popup.Open(evt); + popup.OpenPopup(evt); if (popup.IsBlockingTime) { @@ -83,21 +83,17 @@ public void HandleEvent(OpenPopupUiEvent evt) } public void HandleEvent(ClosePopupUiEvent evt) - { + { if (_popupUis.TryGetValue(evt.UiType, out var popup)) { - if (popup.IsOpen) - { - popup.ClosePanel(); - PopPopup(popup); + PopPopup(popup); - if (popup.IsBlockingTime) - { - var timeScaleChangeEvent = GameEvents.RequestTimeScaleChangeEvent; - timeScaleChangeEvent.Requester = popup; - timeScaleChangeEvent.NewTimeScale = 1f; - EventBus.Broadcast(timeScaleChangeEvent); - } + if (popup.IsBlockingTime) + { + var timeScaleChangeEvent = GameEvents.RequestTimeScaleChangeEvent; + timeScaleChangeEvent.Requester = popup; + timeScaleChangeEvent.NewTimeScale = 1f; + EventBus.Broadcast(timeScaleChangeEvent); } } } diff --git a/Assets/_DDD/_Scripts/Restaurant/Ui/CookUi/CookUi.cs b/Assets/_DDD/_Scripts/Restaurant/Ui/CookUi/CookUi.cs index 8c0b35837..ffb92e50e 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Ui/CookUi/CookUi.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Ui/CookUi/CookUi.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using TMPro; using UnityEngine; @@ -26,65 +25,6 @@ public class CookUi : PopupUi [SerializeField] private HorizontalLayoutGroup _tasteHashTagContentLayoutGroup; [SerializeField] private RectTransform _tasteHashTagContent2; - protected override void OnCreatedInitialize() - { - base.OnCreatedInitialize(); - - _addedCookTabGroup.Initialize(OnAddedCookTabSelected); - - foreach (var selectedIngredient in _selectedIngredients) - { - selectedIngredient.Initialize(); - } - } - - public override void Open(OpenPopupUiEvent evt) - { - base.Open(evt); - - if (evt.Payload is CookwareType cookwareType) - { - _viewModel.SetCookwareType(cookwareType); - } - - _viewModel.CreateAddedCookItemSlot(_addedCookContent); - _viewModel.CreateIngredientInventoryItemSlot(_cookIngredientContent); - - _addedCookTabGroup.SelectFirstTab(); - - IsInitialized = true; - } - - protected override void OnOpenedEvents() - { - base.OnOpenedEvents(); - - _viewModel.OnAddedIngredients += OnAddedIngredients; - } - - protected override void OnClosedEvents() - { - base.OnClosedEvents(); - - if (_viewModel) - { - _viewModel.OnAddedIngredients -= OnAddedIngredients; - } - } - - protected override void SetupBindings() - { - base.SetupBindings(); - - BindingHelper.BindImage(_bindingContext, _cookwareImage, nameof(_viewModel.CookwareIcon)); - BindingHelper.BindLocalizedStringEvent(_bindingContext, _cookwareName, nameof(_viewModel.CookwareName)); - - BindingHelper.BindLocalizedStringEvent(_bindingContext, _cookName, viewModel => viewModel.SelectedCookSnapshot.Name); - BindingHelper.BindLocalizedStringEvent(_bindingContext, _cookDescriptionName, viewModel => viewModel.SelectedCookSnapshot.Description); - BindingHelper.BindText(_bindingContext, _cookPrice, viewModel => viewModel.SelectedCookSnapshot.CookPrice); - BindingHelper.BindImage(_bindingContext, _cookImage, viewModel => viewModel.SelectedCookSnapshot.CookIcon); - } - protected override GameObject GetInitialSelected() { if (IsInitialized == false) return null; @@ -97,11 +37,49 @@ protected override GameObject GetInitialSelected() return null; } - - protected override bool OnInputPerformed(RestaurantUiActions actionEnum, InputAction.CallbackContext context) + + protected override void OnCreatedInitializePopup() { - if (base.OnInputPerformed(actionEnum, context) == false) return false; + _addedCookTabGroup.Initialize(OnAddedCookTabSelected); + foreach (var selectedIngredient in _selectedIngredients) + { + selectedIngredient.Initialize(); + } + + SetupBindings(); + } + + protected override void OnOpenedEventsPopup(OpenPopupUiEvent evt) + { + if (evt.Payload is CookwareType cookwareType) + { + _viewModel.SetCookwareType(cookwareType); + } + + _viewModel.CreateAddedCookItemSlot(_addedCookContent); + _viewModel.CreateIngredientInventoryItemSlot(_cookIngredientContent); + + _addedCookTabGroup.SelectFirstTab(); + + _viewModel.OnAddedIngredients += OnAddedIngredients; + } + + protected override void OnClosedEventsPopup(ClosePopupUiEvent evt) + { + if (_viewModel) + { + _viewModel.OnAddedIngredients -= OnAddedIngredients; + } + } + + protected override void OnInputStartedPopup(RestaurantUiActions actionEnum, InputAction.CallbackContext context) + { + + } + + protected override void OnInputPerformedPopup(RestaurantUiActions actionEnum, InputAction.CallbackContext context) + { switch (actionEnum) { case RestaurantUiActions.Cancel: @@ -110,9 +88,26 @@ protected override bool OnInputPerformed(RestaurantUiActions actionEnum, InputAc case RestaurantUiActions.Interact1: HandleInteract1(); break; + case RestaurantUiActions.Interact2: + HandleInteract2(); + break; } + } - return true; + protected override void OnInputCanceledPopup(RestaurantUiActions actionEnum, InputAction.CallbackContext context) + { + + } + + private void SetupBindings() + { + BindingHelper.BindImage(_bindingContext, _cookwareImage, nameof(_viewModel.CookwareIcon)); + BindingHelper.BindLocalizedStringEvent(_bindingContext, _cookwareName, nameof(_viewModel.CookwareName)); + + BindingHelper.BindLocalizedStringEvent(_bindingContext, _cookName, viewModel => viewModel.SelectedCookSnapshot.Name); + BindingHelper.BindLocalizedStringEvent(_bindingContext, _cookDescriptionName, viewModel => viewModel.SelectedCookSnapshot.Description); + BindingHelper.BindText(_bindingContext, _cookPrice, viewModel => viewModel.SelectedCookSnapshot.CookPrice); + BindingHelper.BindImage(_bindingContext, _cookImage, viewModel => viewModel.SelectedCookSnapshot.CookIcon); } private void HandleInteract1() @@ -122,6 +117,11 @@ private void HandleInteract1() interactable?.OnInteract(); } + private void HandleInteract2() + { + // TODO : 요리 선택 (미니게임 더미 연출) + } + private void OnAddedCookTabSelected(int index) { _viewModel.SetAddedCook(index); diff --git a/Assets/_DDD/_Scripts/Restaurant/Ui/RestaurantManagementUi/RestaurantManagementUi.cs b/Assets/_DDD/_Scripts/Restaurant/Ui/RestaurantManagementUi/RestaurantManagementUi.cs index 995054a89..83edb0270 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Ui/RestaurantManagementUi/RestaurantManagementUi.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Ui/RestaurantManagementUi/RestaurantManagementUi.cs @@ -35,65 +35,7 @@ protected override void Update() _viewModel.UpdateHoldProgress(); } } - - protected override void OnCreatedInitialize() - { - base.OnCreatedInitialize(); - - InitializeViews(); - InitializeTabGroups(); - SetupCategoryTabs(); - } - - protected override void OnOpenedEvents() - { - base.OnOpenedEvents(); - - _sectionTabs.SelectFirstTab(); - _menuCategoryTabs.SelectFirstTab(); - - if (_viewModel) - { - _viewModel.OnBatchCompleted += HandleBatchCompleted; - _viewModel.OnChecklistFailed += HandleChecklistFailed; - _viewModel.OnMenuSectionSelected += HandleMenuSectionSelected; - _viewModel.OnCookwareSectionSelected += HandleCookwareSectionSelected; - _viewModel.OnTabMoved += HandleTabMoved; - _viewModel.OnInteractRequested += HandleInteractRequested; - _viewModel.OnCloseRequested += HandleCloseRequested; - _viewModel.OnMenuCategorySelected += HandleMenuCategorySelected; - } - - foreach (var view in _subViews) - { - view.OnOpenedEvents(); - } - - IsInitialized = true; - } - - protected override void OnClosedEvents() - { - base.OnClosedEvents(); - - if (_viewModel) - { - _viewModel.OnBatchCompleted -= HandleBatchCompleted; - _viewModel.OnChecklistFailed -= HandleChecklistFailed; - _viewModel.OnMenuSectionSelected -= HandleMenuSectionSelected; - _viewModel.OnCookwareSectionSelected -= HandleCookwareSectionSelected; - _viewModel.OnTabMoved -= HandleTabMoved; - _viewModel.OnInteractRequested -= HandleInteractRequested; - _viewModel.OnCloseRequested -= HandleCloseRequested; - _viewModel.OnMenuCategorySelected -= HandleMenuCategorySelected; - } - - foreach (var view in _subViews) - { - view.OnClosedEvents(); - } - } - + protected override GameObject GetInitialSelected() { if (IsInitialized == false) return null; @@ -118,11 +60,97 @@ protected override GameObject GetInitialSelected() return null; } - - protected override void SetupBindings() + + protected override void OnCreatedInitializePopup() { - base.SetupBindings(); + InitializeViews(); + InitializeTabGroups(); + SetupCategoryTabs(); + SetupBindings(); + } + + protected override void OnOpenedEventsPopup(OpenPopupUiEvent evt) + { + _sectionTabs.SelectFirstTab(); + _menuCategoryTabs.SelectFirstTab(); + + if (_viewModel) + { + _viewModel.OnBatchCompleted += HandleBatchCompleted; + _viewModel.OnChecklistFailed += HandleChecklistFailed; + _viewModel.OnMenuSectionSelected += HandleMenuSectionSelected; + _viewModel.OnCookwareSectionSelected += HandleCookwareSectionSelected; + _viewModel.OnTabMoved += HandleTabMoved; + _viewModel.OnInteractRequested += HandleInteractRequested; + _viewModel.OnCloseRequested += HandleCloseRequested; + _viewModel.OnMenuCategorySelected += HandleMenuCategorySelected; + } + foreach (var view in _subViews) + { + view.OnOpenedEvents(); + } + } + + protected override void OnClosedEventsPopup(ClosePopupUiEvent evt) + { + if (_viewModel) + { + _viewModel.OnBatchCompleted -= HandleBatchCompleted; + _viewModel.OnChecklistFailed -= HandleChecklistFailed; + _viewModel.OnMenuSectionSelected -= HandleMenuSectionSelected; + _viewModel.OnCookwareSectionSelected -= HandleCookwareSectionSelected; + _viewModel.OnTabMoved -= HandleTabMoved; + _viewModel.OnInteractRequested -= HandleInteractRequested; + _viewModel.OnCloseRequested -= HandleCloseRequested; + _viewModel.OnMenuCategorySelected -= HandleMenuCategorySelected; + } + + foreach (var view in _subViews) + { + view.OnClosedEvents(); + } + } + + protected override void OnInputStartedPopup(RestaurantUiActions actionEnum, InputAction.CallbackContext context) + { + + } + + protected override void OnInputPerformedPopup(RestaurantUiActions actionEnum, InputAction.CallbackContext context) + { + switch (actionEnum) + { + case RestaurantUiActions.Cancel: + _viewModel.CloseUi(); + break; + case RestaurantUiActions.PreviousTab: + _viewModel.MoveTab(-1); + break; + case RestaurantUiActions.NextTab: + _viewModel.MoveTab(1); + break; + case RestaurantUiActions.Interact1: + _viewModel.InteractWithSelected(); + break; + case RestaurantUiActions.Interact2: + _viewModel.StartHold(); + break; + } + } + + protected override void OnInputCanceledPopup(RestaurantUiActions actionEnum, InputAction.CallbackContext context) + { + switch (actionEnum) + { + case RestaurantUiActions.Interact2: + _viewModel.CancelHold(); + break; + } + } + + private void SetupBindings() + { BindingHelper.BindImageFilled(_bindingContext, _completeBatchFilledImage, nameof(RestaurantManagementViewModel.NormalizedHoldProgress)); _itemDetailView.SetupBindings(_bindingContext); @@ -191,8 +219,7 @@ protected override void HandleCustomPropertyChanged(string propertyName) break; } } - - // ViewModel 이벤트 핸들러들 + private void HandleBatchCompleted() { Close(); @@ -239,8 +266,7 @@ private void HandleMenuCategorySelected(InventoryCategoryType category) { _menuCategoryTabs.SelectTab((int)category); } - - // UI 이벤트 핸들러들 (TabGroupUi 콜백) + private void OnSectionTabSelected(int sectionValue) { _viewModel?.SetSection((SectionButtonType)sectionValue); @@ -250,46 +276,5 @@ private void OnCategoryTabSelected(int categoryValue) { _viewModel?.SetCategory((InventoryCategoryType)categoryValue); } - - // 입력 처리 - ViewModel로 위임 - protected override bool OnInputPerformed(RestaurantUiActions actionEnum, InputAction.CallbackContext context) - { - if (base.OnInputPerformed(actionEnum, context) == false) return false; - - switch (actionEnum) - { - case RestaurantUiActions.Cancel: - _viewModel.CloseUi(); - break; - case RestaurantUiActions.PreviousTab: - _viewModel.MoveTab(-1); - break; - case RestaurantUiActions.NextTab: - _viewModel.MoveTab(1); - break; - case RestaurantUiActions.Interact1: - _viewModel.InteractWithSelected(); - break; - case RestaurantUiActions.Interact2: - _viewModel.StartHold(); - break; - } - - return true; - } - - protected override bool OnInputCanceled(RestaurantUiActions actionEnum, InputAction.CallbackContext context) - { - if (base.OnInputPerformed(actionEnum, context) == false) return false; - - switch (actionEnum) - { - case RestaurantUiActions.Interact2: - _viewModel.CancelHold(); - break; - } - - return true; - } } } \ No newline at end of file