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