- using System.Collections.Generic;
- using Godot;
- namespace UI.RoomUI;
- public class LifeBarHandler
- {
- private RoomUI.LifeBar _bar;
- private UiGrid<RoomUI.Life, LifeIconEnum> _grid;
- private EventFactory _eventFactory;
- private bool _refreshHpFlag = false;
- private bool _refreshGoldFlag = false;
- public LifeBarHandler(RoomUI.LifeBar lifeBar)
- {
- _bar = lifeBar;
- var uiNodeLife = lifeBar.L_Life;
- _grid = lifeBar.UiPanel.CreateUiGrid<RoomUI.Life, LifeIconEnum, LifeCell>(uiNodeLife);
- _grid.SetAutoColumns(true);
- _grid.SetHorizontalExpand(true);
- _grid.SetCellOffset(new Vector2I(1, 2));
- }
- public void OnShow()
- {
- _eventFactory = EventManager.CreateEventFactory();
- _eventFactory.AddEventListener(EventEnum.OnPlayerHpChange, o => RefreshLife());
- _eventFactory.AddEventListener(EventEnum.OnPlayerMaxHpChange, o => RefreshLife());
- _eventFactory.AddEventListener(EventEnum.OnPlayerShieldChange, o => RefreshLife());
- _eventFactory.AddEventListener(EventEnum.OnPlayerMaxShieldChange, o => RefreshLife());
- _eventFactory.AddEventListener(EventEnum.OnPlayerGoldChange, o => RefreshGold());
- RefreshLife();
- RefreshGold();
- }
- public void OnHide()
- {
- _eventFactory.RemoveAllEventListener();
- }
- public void Process(float delta)
- {
- if (_refreshHpFlag)
- {
- _refreshHpFlag = false;
- HandlerRefreshLife();
- }
- if (_refreshGoldFlag)
- {
- _refreshGoldFlag = false;
- HandlerRefreshGold();
- }
- }
- public void RefreshGold()
- {
- _refreshGoldFlag = true;
- }
- public void RefreshLife()
- {
- _refreshHpFlag = true;
- }
- private void HandlerRefreshLife()
- {
- var player = Player.Current;
- if (player.MaxHp % 2 != 0)
- {
- Debug.LogError("玩家血量不是偶数!");
- }
- var list = new List<LifeIconEnum>();
- for (var i = 0; i < player.MaxHp / 2; i++)
- {
- if (player.Hp >= i * 2 + 2)
- {
- list.Add(LifeIconEnum.FullHeart);
- }
- else if (player.Hp >= i * 2 + 1)
- {
- list.Add(LifeIconEnum.HalfHeart);
- }
- else
- {
- list.Add(LifeIconEnum.EmptyHeart);
- }
- }
- for (var i = 0; i < player.MaxShield; i++)
- {
- if (player.Shield >= i + 1)
- {
- list.Add(LifeIconEnum.FullShield);
- }
- else
- {
- list.Add(LifeIconEnum.EmptyShield);
- }
- }
- //var maxHp
- _grid.SetDataList(list.ToArray());
- }
- private void HandlerRefreshGold()
- {
- _bar.L_Gold.L_GoldText.Instance.Text = Player.Current.RoleState.Gold.ToString();
- }
- }