Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / roomUI / ReloadBar.cs
@lijincheng lijincheng on 11 Jul 2023 1 KB 调整生成Ui的代码
  1. using Godot;
  2.  
  3. namespace UI.RoomUI;
  4.  
  5. /// <summary>
  6. /// 换弹进度组件
  7. /// </summary>
  8. public class ReloadBar
  9. {
  10. private RoomUI.RoomUI_ReloadBar _reloadBar;
  11. private int width;
  12. private float startX = 1;
  13.  
  14. public ReloadBar(RoomUI.RoomUI_ReloadBar reloadBar)
  15. {
  16. reloadBar.Instance.Visible = false;
  17. _reloadBar = reloadBar;
  18. width = _reloadBar.L_Slot.Instance.Texture.GetWidth();
  19. //startX = -(width - 3) / 2f;
  20. }
  21. public void OnShow()
  22. {
  23. GameCamera.Main.OnPositionUpdateEvent += OnCameraPositionUpdate;
  24. }
  25.  
  26. public void OnHide()
  27. {
  28. GameCamera.Main.OnPositionUpdateEvent -= OnCameraPositionUpdate;
  29. }
  30.  
  31. /// <summary>
  32. /// 隐藏换弹进度组件
  33. /// </summary>
  34. public void HideBar()
  35. {
  36. _reloadBar.Instance.Visible = false;
  37. }
  38.  
  39. /// <summary>
  40. /// 显示换弹进度组件
  41. /// </summary>
  42. /// <param name="position">坐标</param>
  43. /// <param name="progress">进度, 0 - 1</param>
  44. public void ShowBar(Vector2 position, float progress)
  45. {
  46. _reloadBar.Instance.Visible = true;
  47. _reloadBar.Instance.GlobalPosition = GameApplication.Instance.ViewToGlobalPosition(position);
  48. progress = Mathf.Clamp(progress, 0, 1);
  49. _reloadBar.L_Slot.L_Block.Instance.Position = new Vector2(startX + (width - 3) * progress, 0);
  50. }
  51.  
  52. /// <summary>
  53. /// 相机更新回调
  54. /// </summary>
  55. public void OnCameraPositionUpdate(float delta)
  56. {
  57. var player = Player.Current;
  58. if (player.WeaponPack.ActiveItem != null && player.WeaponPack.ActiveItem.Reloading)
  59. {
  60. ShowBar(player.GlobalPosition, player.WeaponPack.ActiveItem.ReloadProgress);
  61. }
  62. else
  63. {
  64. HideBar();
  65. }
  66. }
  67. }