Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / roomUI / InteractiveTipBar.cs
@小李xl 小李xl on 30 Jun 2023 2 KB 互动显示道具名称
  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="showText">显示文本</param>
  45. /// <param name="icon">显示图标</param>
  46. public void ShowBar(ActivityObject target, string showText, string icon)
  47. {
  48. _interactiveTipBar.Instance.GlobalPosition = target.GlobalPosition;
  49. if (_currImage != icon)
  50. {
  51. _currImage = icon;
  52. _interactiveTipBar.L_Icon.Instance.Texture = ResourceManager.Load<Texture2D>(icon);
  53. }
  54. _interactiveTipBar.Instance.Visible = true;
  55. _interactiveTipBar.L_NameLabel.Instance.Text = showText;
  56. }
  57.  
  58. public void OnPlayerChangeInteractiveItem(object o)
  59. {
  60. if (o == null)
  61. {
  62. _interactiveTarget = null;
  63. //隐藏互动提示
  64. HideBar();
  65. }
  66. else
  67. {
  68. var result = (CheckInteractiveResult)o;
  69. var interactiveItem = Player.Current.InteractiveItem;
  70. //if (interactiveItem is Weapon)
  71. if (!string.IsNullOrEmpty(result.ShowIcon))
  72. {
  73. _interactiveTarget = interactiveItem;
  74. //显示互动提示
  75. ShowBar(result.Target, result.Target.ItemConfig.Name, result.ShowIcon);
  76. }
  77. else
  78. {
  79. _interactiveTarget = null;
  80. }
  81. }
  82. }
  83. /// <summary>
  84. /// 相机更新回调
  85. /// </summary>
  86. public void OnCameraPositionUpdate(float delta)
  87. {
  88. if (_interactiveTarget != null)
  89. {
  90. _interactiveTipBar.Instance.GlobalPosition = GameApplication.Instance.ViewToGlobalPosition(_interactiveTarget.GlobalPosition);
  91. }
  92. }
  93. }