using Cysharp.Threading.Tasks; using UnityEngine.UIElements; namespace DanieleMarotta.RiversongCodeShowcase { [UIView("building-panel")] public class BuildingPanelUIView : UIView { 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(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; } } }