Files
riversong-code-showcase/Source/Riversong/Game/UI/Panels/BuildingPanel/BuildingPanelUIView.cs
2026-05-21 16:04:49 +02:00

57 lines
2.1 KiB
C#

using Cysharp.Threading.Tasks;
using UnityEngine.UIElements;
namespace DanieleMarotta.RiversongCodeShowcase
{
[UIView("building-panel")]
public class BuildingPanelUIView : UIView<BuildingPanelModel>
{
private VisualElement _noHouseNearbyWarning;
private HousePanelUIView _housePanel;
private StoragePanelUIView _storagePanel;
public override async UniTask InitializeAsync(UIService uiService, VisualElement rootElement)
{
await base.InitializeAsync(uiService, rootElement);
_noHouseNearbyWarning = rootElement.Q<VisualElement>(className: "building-panel__no-house-nearby-warning");
_housePanel = (HousePanelUIView)await uiService.CreateView(typeof(HousePanelUIView), rootElement.Q(className: "building-panel__house-panel"));
_storagePanel = (StoragePanelUIView)await uiService.CreateView(typeof(StoragePanelUIView), rootElement.Q(className: "building-panel__storage-panel"));
}
protected override void OnNewModel(BuildingPanelModel model)
{
base.OnNewModel(model);
_housePanel.SetModel(model.HouseModel);
_storagePanel.SetModel(model.StorageModel);
}
protected override void OnModelPropertyChanged(object sender, BindablePropertyChangedEventArgs e)
{
base.OnModelPropertyChanged(sender, e);
switch (e.propertyName)
{
case nameof(BuildingPanelModel.Building):
_housePanel.Show(Model.Building != null && Model.Building.Definition.IsHouse);
_storagePanel.Show(Model.Building != null && Model.Building.Definition.IsStorage);
UpdateNoHouseNearbyWarning();
break;
case nameof(BuildingPanelModel.ShowNoHouseNearbyWarning):
UpdateNoHouseNearbyWarning();
break;
}
}
private void UpdateNoHouseNearbyWarning()
{
_noHouseNearbyWarning.style.display = Model.Building != null && Model.ShowNoHouseNearbyWarning ? DisplayStyle.Flex : DisplayStyle.None;
}
}
}