riversong code showcase
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace DanieleMarotta.RiversongCodeShowcase
|
||||
{
|
||||
public class HousePanelUIView : UIView<HousePanelModel>
|
||||
{
|
||||
private VisualElement _needs;
|
||||
|
||||
private Label _notReadyNeedsNotMetLabel;
|
||||
|
||||
private Label _notReadyNeedsMetLabel;
|
||||
|
||||
private Label _fetchingMaterialsLabel;
|
||||
|
||||
private Label _maxedOutLabel;
|
||||
|
||||
private VisualElement _upgradeMaterials;
|
||||
|
||||
public override UniTask InitializeAsync(UIService uiService, VisualElement rootElement)
|
||||
{
|
||||
base.InitializeAsync(uiService, rootElement);
|
||||
|
||||
_needs = rootElement.Q<VisualElement>(className: "house-panel__needs");
|
||||
_notReadyNeedsNotMetLabel = rootElement.Q<Label>(className: "house-panel__not-ready-needs-not-met");
|
||||
_notReadyNeedsMetLabel = rootElement.Q<Label>(className: "house-panel__not-ready-needs-met");
|
||||
_fetchingMaterialsLabel = rootElement.Q<Label>(className: "house-panel__fetching-materials");
|
||||
_maxedOutLabel = rootElement.Q<Label>(className: "house-panel__maxed-out");
|
||||
_upgradeMaterials = rootElement.Q<VisualElement>(className: "house-panel__upgrade-materials");
|
||||
|
||||
_ = AnimateHouseUpgradeStatusAsync();
|
||||
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
|
||||
protected override void OnModelChanged()
|
||||
{
|
||||
base.OnModelChanged();
|
||||
|
||||
_ = CreateNeedViewsAsync();
|
||||
_ = CreateUpgradeMaterialViewsAsync();
|
||||
UpdateUpgradeState();
|
||||
}
|
||||
|
||||
private async UniTask CreateNeedViewsAsync()
|
||||
{
|
||||
var template = UIService.TemplateLibrary.BuildingPanel.Need;
|
||||
await UIService.CreateViews<HousePanelNeedModel, HousePanelNeedUIView>(Model.Needs, _needs, template);
|
||||
}
|
||||
|
||||
private async UniTask CreateUpgradeMaterialViewsAsync()
|
||||
{
|
||||
var template = UIService.TemplateLibrary.BuildingPanel.UpgradeMaterial;
|
||||
await UIService.CreateViews<HousePanelUpgradeMaterialModel, HousePanelUpgradeMaterialUIView>(Model.UpgradeMaterials, _upgradeMaterials, template);
|
||||
}
|
||||
|
||||
private void UpdateUpgradeState()
|
||||
{
|
||||
_notReadyNeedsNotMetLabel.style.display = DisplayStyle.None;
|
||||
_notReadyNeedsMetLabel.style.display = DisplayStyle.None;
|
||||
_fetchingMaterialsLabel.style.display = DisplayStyle.None;
|
||||
_maxedOutLabel.style.display = DisplayStyle.None;
|
||||
|
||||
switch (Model.UpgradeState)
|
||||
{
|
||||
case TierUpgradeState.NotReady:
|
||||
_notReadyNeedsNotMetLabel.style.display = Model.AllNeedsMet ? DisplayStyle.None : DisplayStyle.Flex;
|
||||
_notReadyNeedsMetLabel.style.display = Model.AllNeedsMet ? DisplayStyle.Flex : DisplayStyle.None;
|
||||
break;
|
||||
|
||||
case TierUpgradeState.FetchingMaterials:
|
||||
case TierUpgradeState.AllMaterialsFetched:
|
||||
_fetchingMaterialsLabel.style.display = DisplayStyle.Flex;
|
||||
break;
|
||||
|
||||
case TierUpgradeState.MaxedOut:
|
||||
_maxedOutLabel.style.display = DisplayStyle.Flex;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnModelPropertyChanged(object sender, BindablePropertyChangedEventArgs e)
|
||||
{
|
||||
base.OnModelPropertyChanged(sender, e);
|
||||
|
||||
switch (e.propertyName)
|
||||
{
|
||||
case nameof(HousePanelModel.AllNeedsMet):
|
||||
case nameof(HousePanelModel.UpgradeState):
|
||||
UpdateUpgradeState();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private async UniTask AnimateHouseUpgradeStatusAsync()
|
||||
{
|
||||
_fetchingMaterialsLabel.text = _fetchingMaterialsLabel.text.Replace(".", string.Empty);
|
||||
|
||||
var i = 0;
|
||||
|
||||
while (_fetchingMaterialsLabel.panel != null)
|
||||
{
|
||||
await UniTask.WaitForSeconds(1, true);
|
||||
|
||||
var text = _fetchingMaterialsLabel.text;
|
||||
|
||||
text = text.Substring(0, text.Length - i);
|
||||
|
||||
i = (i + 1) % 4;
|
||||
if (i > 0) text += new string('.', i);
|
||||
|
||||
_fetchingMaterialsLabel.text = text;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user