Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / roomUI / LifeBar.cs
@小李xl 小李xl on 11 Oct 2023 2 KB 日志系统
  1. using System.Collections.Generic;
  2. using Godot;
  3.  
  4. namespace UI.RoomUI;
  5.  
  6. public class LifeBar
  7. {
  8.  
  9. private RoomUI.RoomUI_LifeBar _bar;
  10. private UiGrid<RoomUI.RoomUI_Life, LifeIconEnum> _grid;
  11. private EventFactory _eventFactory;
  12. private bool _refreshFlag = false;
  13.  
  14. public LifeBar(RoomUI.RoomUI_LifeBar lifeBar)
  15. {
  16. _bar = lifeBar;
  17. var uiNodeLife = lifeBar.L_Life;
  18.  
  19. _grid = new UiGrid<RoomUI.RoomUI_Life, LifeIconEnum>(uiNodeLife, typeof(LifeCell));
  20. _grid.SetColumns(20);
  21. _grid.SetCellOffset(new Vector2I(1, 2));
  22. }
  23.  
  24. public void OnShow()
  25. {
  26. _eventFactory = EventManager.CreateEventFactory();
  27. _eventFactory.AddEventListener(EventEnum.OnPlayerHpChange, o => RefreshLife());
  28. _eventFactory.AddEventListener(EventEnum.OnPlayerMaxHpChange, o => RefreshLife());
  29. _eventFactory.AddEventListener(EventEnum.OnPlayerShieldChange, o => RefreshLife());
  30. _eventFactory.AddEventListener(EventEnum.OnPlayerMaxShieldChange, o => RefreshLife());
  31. RefreshLife();
  32. }
  33.  
  34. public void OnHide()
  35. {
  36. _eventFactory.RemoveAllEventListener();
  37. }
  38.  
  39. public void Process(float delta)
  40. {
  41. if (_refreshFlag)
  42. {
  43. _refreshFlag = false;
  44. HandlerRefreshLife();
  45. }
  46. }
  47. public void RefreshLife()
  48. {
  49. _refreshFlag = true;
  50. }
  51.  
  52. private void HandlerRefreshLife()
  53. {
  54. var player = Player.Current;
  55. if (player.MaxHp % 2 != 0)
  56. {
  57. Debug.LogError("玩家血量不是偶数!");
  58. }
  59. var list = new List<LifeIconEnum>();
  60. for (var i = 0; i < player.MaxHp / 2; i++)
  61. {
  62. if (player.Hp >= i * 2 + 2)
  63. {
  64. list.Add(LifeIconEnum.FullHeart);
  65. }
  66. else if (player.Hp >= i * 2 + 1)
  67. {
  68. list.Add(LifeIconEnum.HalfHeart);
  69. }
  70. else
  71. {
  72. list.Add(LifeIconEnum.EmptyHeart);
  73. }
  74. }
  75.  
  76. for (var i = 0; i < player.MaxShield; i++)
  77. {
  78. if (player.Shield >= i + 1)
  79. {
  80. list.Add(LifeIconEnum.FullShield);
  81. }
  82. else
  83. {
  84. list.Add(LifeIconEnum.EmptyShield);
  85. }
  86. }
  87. //var maxHp
  88. _grid.SetDataList(list.ToArray());
  89. }
  90.  
  91. }