KLMapHookPointsPanel.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. ---@class KLMapHookPointsPanel:UIKmlLuaPanelBase
  2. ---@field view KLMapHookPointsPanelView
  3. local KLMapHookPointsPanel = class(UIKmlLuaPanelBase)
  4. local this =KLMapHookPointsPanel
  5. local maxHeight = 415
  6. local indexList = {
  7. "①","②","③","④","⑤","⑥","⑦","⑧","⑨","⑩", "⑪", "⑫", "⑬", "⑭", "⑮", "⑯", "⑰", "⑱", "⑲", "⑳"
  8. }
  9. local itemY = 40
  10. local spacing = 5
  11. ---创建时调用一次
  12. function this:Init()
  13. SL:KeepOpenPanel("KLMapHookPointsPanelKml",true)
  14. self.mapId = self.args.mapId
  15. self.points = self.args.points
  16. local count = 0
  17. for k, v in pairs(self.points) do
  18. GUI:UIPanel_Open("dev/outui/Hook/Item/KLMapHookPoint/KLMapHookPointItem", self.view.layout4, self,
  19. {index=indexList[k] or tostring(k), pos=v, mapId = self.mapId}, true)
  20. count = count + 1
  21. end
  22. --根据item的数量计算出总高度
  23. local size = count * itemY + (count - 1) * spacing
  24. if size > maxHeight then
  25. size = maxHeight
  26. end
  27. GUI:setContentSize(self.view.scroll, 180, size)
  28. GUI:setContentSize(self.view.Bg, 200, size + 10)
  29. ----------------------------------------------------------------------
  30. local kmlcontrol = self.args.kmlcontrol
  31. local x, y, z = GUI:GetWorldPosition(kmlcontrol)
  32. --获取滚动条上下范围的极限坐标
  33. ---@type KLHookPointItem
  34. local hookPointsItem = GUI:GetUI("dev/outui/Hook/Item/KLHookPoint/KLHookPointItem", true)
  35. local x_, y_, z_ = GUI:GetWorldPosition(hookPointsItem.view.scrollview2)
  36. local scrPoint_ = SL:ConvertWorldPos2Screen(x_, y_)
  37. local bool_, endPos_ = GUI:ScreenPointToLocalPointInRectangle(self.view.btnBG,scrPoint_)
  38. local maxY = endPos_.y + 415/2
  39. local minY = endPos_.y - 415/2
  40. --获取点击按钮的屏幕坐标
  41. local scrPoint = SL:ConvertWorldPos2Screen(x, y)
  42. --将该屏幕坐标转换为基于背景的相对坐标
  43. local bool, endPos = GUI:ScreenPointToLocalPointInRectangle(self.view.btnBG,scrPoint)
  44. if bool then
  45. GUI:setPositionY(self.view.Bg, endPos.y)
  46. local size_ = size + 10
  47. local halfSize_ = size_ / 2
  48. if size_ >= maxHeight then
  49. --达到最大高度了就显示在中间
  50. GUI:setPositionY(self.view.Bg, endPos_.y)
  51. elseif endPos.y >= endPos_.y and halfSize_ + endPos.y > maxY then
  52. --点击的item在上半,往上不能超过最大高度
  53. local resY = maxY - halfSize_
  54. GUI:setPositionY(self.view.Bg, resY)
  55. elseif endPos.y <= endPos_.y and endPos.y - halfSize_ < minY then
  56. --点击的item在下半,往下不能低于最低高度
  57. local resY = minY + halfSize_
  58. GUI:setPositionY(self.view.Bg, resY)
  59. end
  60. end
  61. end
  62. ---注册UI事件和服务器消息
  63. function this:RegistEvents()
  64. GUI:AddOnClickEvent(self.view.btnBG, self, self.CloseSelf)
  65. end
  66. function this:CloseSelf()
  67. GUI:UIPanel_Close(self.filePath)
  68. end
  69. ---创建或者刷新界面数据时调用
  70. function this:Refresh()
  71. end
  72. function this:Close()
  73. GUI:UIPanel_Close("dev/outui/Hook/Item/KLMapHookPoint/KLMapHookPointItem")
  74. SL:onLUAEvent(LUA_EVENT_UI_HOOK_POINTS_PANEL_HIDE)
  75. SL:KeepOpenPanel("KLMapHookPointsPanelKml",false)
  76. end
  77. return this