Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / roomUI / InteractiveTipBarHandler.cs
@小李xl 小李xl on 29 Nov 2023 2 KB 小地图制作中
  1. using Godot;
  2.  
  3. namespace UI.RoomUI;
  4.  
  5. /// <summary>
  6. /// 互动提示文本
  7. /// </summary>
  8. public class InteractiveTipBarHandler
  9. {
  10. private RoomUI.InteractiveTipBar _interactiveTipBar;
  11. private EventBinder _binder;
  12. private ActivityObject _interactiveTarget;
  13. public InteractiveTipBarHandler(RoomUI.InteractiveTipBar interactiveTipBar)
  14. {
  15. interactiveTipBar.Instance.Visible = false;
  16. _interactiveTipBar = interactiveTipBar;
  17. }
  18.  
  19. public void OnShow()
  20. {
  21. GameCamera.Main.OnPositionUpdateEvent += OnCameraPositionUpdate;
  22. _binder = EventManager.AddEventListener(EventEnum.OnPlayerChangeInteractiveItem, OnPlayerChangeInteractiveItem);
  23. }
  24.  
  25. public void OnHide()
  26. {
  27. GameCamera.Main.OnPositionUpdateEvent -= OnCameraPositionUpdate;
  28. _binder.RemoveEventListener();
  29. _binder = null;
  30. }
  31. /// <summary>
  32. /// 隐藏互动提示ui
  33. /// </summary>
  34. public void HideBar()
  35. {
  36. _interactiveTipBar.Instance.Visible = false;
  37. }
  38.  
  39. /// <summary>
  40. /// 显示互动提示ui
  41. /// </summary>
  42. /// <param name="target">所在坐标</param>
  43. /// <param name="showText">显示文本</param>
  44. /// <param name="icon">显示图标</param>
  45. public void ShowBar(ActivityObject target, string showText, Texture2D icon)
  46. {
  47. _interactiveTipBar.Instance.GlobalPosition = GameApplication.Instance.ViewToGlobalPosition(_interactiveTarget.GlobalPosition);
  48. _interactiveTipBar.L_Icon.Instance.Texture = icon;
  49. _interactiveTipBar.Instance.Visible = true;
  50. _interactiveTipBar.L_NameLabel.Instance.Text = showText;
  51. }
  52.  
  53. public void OnPlayerChangeInteractiveItem(object o)
  54. {
  55. if (o == null)
  56. {
  57. _interactiveTarget = null;
  58. //隐藏互动提示
  59. HideBar();
  60. }
  61. else
  62. {
  63. var result = (CheckInteractiveResult)o;
  64. var interactiveItem = Player.Current.InteractiveItem;
  65. //if (interactiveItem is Weapon)
  66. var icon = result.GetIcon();
  67. if (icon != null)
  68. {
  69. _interactiveTarget = interactiveItem;
  70. //显示互动提示
  71. ShowBar(result.Target, result.Target.ActivityBase.Name, icon);
  72. }
  73. else
  74. {
  75. _interactiveTarget = null;
  76. }
  77. }
  78. }
  79. /// <summary>
  80. /// 相机更新回调
  81. /// </summary>
  82. public void OnCameraPositionUpdate(float delta)
  83. {
  84. if (_interactiveTarget != null)
  85. {
  86. _interactiveTipBar.Instance.GlobalPosition = GameApplication.Instance.ViewToGlobalPosition(_interactiveTarget.GlobalPosition);
  87. }
  88. }
  89. }