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