Files
XRLib/Assets/Scripts/UVC/UI/ToolBar/View/ToolbarStandardButtonViewProcessor.cs
2025-06-18 00:16:49 +09:00

54 lines
2.2 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using UVC.UI.Toolbar.Model;
using UVC.UI.ToolBar.View;
namespace UVC.UI.Toolbar.View
{
public class ToolbarStandardButtonViewProcessor : IButtonViewProcessor
{
public GameObject CreateButtonUI(ToolbarButtonBase buttonModel, Transform parentContainer, ToolbarView viewContext)
{
if (viewContext.standardButtonPrefab == null)
{
Debug.LogError("StandardButtonViewProcessor: standardButtonPrefab이 ToolbarView에 할당되지 않았습니다.", viewContext);
return null;
}
return Object.Instantiate(viewContext.standardButtonPrefab, parentContainer);
}
public void SetupButtonInteractions(ToolbarButtonBase buttonModel, GameObject buttonUIObject, ToolbarView viewContext)
{
ToolbarStandardButton standardModel = buttonModel as ToolbarStandardButton;
if (standardModel == null) return;
Button uiButton = buttonUIObject.GetComponent<Button>();
if (uiButton != null)
{
uiButton.onClick.AddListener(() =>
{
standardModel.ExecuteClick(standardModel.Text);
});
}
else
{
Debug.LogError($"StandardButtonViewProcessor: StandardButton '{standardModel.Text}'의 GameObject에 Button 컴포넌트가 없습니다.", buttonUIObject);
}
// 공통적인 모델 상태 변경 구독은 ToolbarView의 RenderToolbar에서 처리하거나,
// 각 Processor가 viewContext를 통해 UpdateCommonButtonVisuals 등을 직접 호출하도록 할 수 있습니다.
// 여기서는 ToolbarView에서 공통 구독을 처리한다고 가정합니다.
UpdateCommonButtonVisuals(buttonModel, buttonUIObject, viewContext);
}
public void UpdateCommonButtonVisuals(ToolbarButtonBase buttonModel, GameObject buttonUIObject, ToolbarView viewContext)
{
viewContext.InternalUpdateCommonButtonVisuals(buttonModel, buttonUIObject);
}
public void UpdateToggleStateVisuals(ToolbarToggleButton toggleButtonModel, GameObject buttonUIObject, bool isSelected, ToolbarView viewContext)
{
// 표준 버튼은 토글 상태가 없음
}
}
}