KLMonsterMapPointPanel.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. ---@class KLMonsterMapPointPanel:UIKmlLuaPanelBase
  2. ---@field view KLMonsterMapPointPanelView
  3. local KLMonsterMapPointPanel = class(UIKmlLuaPanelBase)
  4. local this = KLMonsterMapPointPanel
  5. ---创建时调用一次
  6. function this:Init()
  7. self.is_open = true
  8. this.mapMonsterSelect = {}
  9. this.oldSelectItem = nil
  10. GUI:DataListInitData(self.view.loopscrollviewData, function()
  11. return self:ItemCountFunc()
  12. end, function(realIndex)
  13. return self:ItemGetFunc(realIndex)
  14. end, function(realIndex, kmlCtrl)
  15. return self:ItemInitFunc(realIndex, kmlCtrl)
  16. end, function(realIndex, kmlCtrl)
  17. return self:ItemUpdateFunc(realIndex, kmlCtrl)
  18. end, function(realIndex)
  19. return self:ItemSizeGetFunc(realIndex)
  20. end)
  21. self.mapMonsterData = {}
  22. self.nextDoRevTime = Time.time+Time.deltaTime
  23. self.change_y = true
  24. self.updateID = SL:Schedule(self.updateID,0,0.2,-1,function()
  25. self:Update()
  26. end)
  27. ---@type table<KingML.KmlControl,KLMonsterMapPointItemItem>
  28. self.MapItems = {}
  29. end
  30. function this:Update()
  31. if not self.nextDoRevTime then
  32. return
  33. end
  34. if Time.time>self.nextDoRevTime then
  35. self.nextDoRevTime = nil
  36. self:RefresfAll()
  37. end
  38. end
  39. function this:RefresfAll()
  40. self.mapMonsterData = {}
  41. local mapId = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
  42. for i, v in pairs(SL:FindConfigs('cfg_mongen', "mapid", mapId)) do
  43. if v.monsterShowList == 1 then
  44. v.reliveTime = 0
  45. table.insert(self.mapMonsterData, v)
  46. end
  47. end
  48. local monsterPoints = SL:GetMapMonsterStatus()
  49. if monsterPoints then
  50. for i=1,#self.mapMonsterData,1 do
  51. local monsterid = self.mapMonsterData[i].monsterid
  52. local id = self.mapMonsterData[i].id
  53. for _, v in pairs(monsterPoints) do
  54. if v.groupId == id and v.configId == monsterid then
  55. if v.reliveTime and v.reliveTime ~= 0 then
  56. self.mapMonsterData[i].reliveTime = v.reliveTime
  57. end
  58. end
  59. end
  60. end
  61. table.sort(self.mapMonsterData,function(a,b)
  62. if a.reliveTime == b.reliveTime then
  63. if a.grading == b.grading then
  64. return a.id < b.id
  65. else
  66. return a.grading < b.grading
  67. end
  68. else
  69. return a.reliveTime < b.reliveTime
  70. end
  71. end)
  72. end
  73. GUI:DataListUpdateData(self.view.loopscrollviewData)
  74. if not next(self.mapMonsterData) then
  75. GUI:UIPanel_Close("dev/ui/Monster/Panel/KLMonsterMapPoint/KLMonsterMapPointPanel")
  76. return
  77. else
  78. if self.change_y then
  79. self.change_y = false
  80. GUI:setPositionY(self.view.root,0)
  81. end
  82. end
  83. end
  84. function this:ItemCountFunc()
  85. return #self.mapMonsterData
  86. end
  87. function this:ItemGetFunc(realIndex)
  88. ---@type KLUISkillPageItem
  89. local item = GUI:UIPanel_Open("dev/ui/Monster/Item/KLMonsterMapPointItem/KLMonsterMapPointItemItem", self.view.loopscrollviewData, self, nil, true)
  90. local luaIndex = realIndex + 1
  91. if not this.mapMonsterSelect[luaIndex] then
  92. this.mapMonsterSelect[luaIndex] = {}
  93. end
  94. this.mapMonsterSelect[luaIndex] = false
  95. local kmlCtrl = item.view.root
  96. self.MapItems[kmlCtrl] = item
  97. return kmlCtrl
  98. end
  99. ---@param kmlCtrl KingML.KmlControl
  100. function this:ItemInitFunc(realIndex, kmlCtrl)
  101. end
  102. ---@param kmlCtrl KingML.KmlControl
  103. function this:ItemUpdateFunc(realIndex, kmlCtrl)
  104. local item = self.MapItems[kmlCtrl]
  105. local luaIndex = realIndex + 1
  106. local List = self.mapMonsterData[luaIndex]
  107. local isSelect = this.mapMonsterSelect[luaIndex]
  108. if isSelect then
  109. this.oldSelectItem = item
  110. end
  111. if luaIndex % 2 == 0 then
  112. GUI:SetActive(self.MapItems[kmlCtrl].view.MainBg,true)
  113. --GUI:Image_loadTexture(self.MapItems[kmlCtrl].view.BG, "monsterlist2", "Atlas/TS_Common.spriteatlas")
  114. else
  115. GUI:SetActive(self.MapItems[kmlCtrl].view.MainBg,false)
  116. --GUI:Image_loadTexture(self.MapItems[kmlCtrl].view.BG, "monsterlist1", "Atlas/TS_Common.spriteatlas")
  117. end
  118. item:UpdateUI(List, self.OnClickGoButton, isSelect, luaIndex)
  119. end
  120. function this:OnClickGoButton(data, luaIndex)
  121. if data then
  122. if data.instruction[1] and data.instruction[1] ~= "" then
  123. SL:ShortcutDO(data.instruction[1])
  124. else
  125. --local mongenCfg = SL:GetConfig("cfg_mongen", data.groupId)
  126. local mapMoveCfg = SL:GetConfigMultiKeys("cfg_mapMove", data.mapid, "mapID")
  127. local Pos = string.split(data.coordinates, '#')
  128. --ShortcutMgr.Do({ "moveTo", mapMoveCfg.id, tonumber(Pos[1]), tonumber(Pos[2]) })
  129. ---{ "moveTo", 1, 150, 167}"moveTo", mapMoveCfg.id, tonumber(Pos[1]), tonumber(Pos[2])
  130. SL:StopOnHook(true)
  131. local line = SL:GetMetaValue(EMetaVarGetKey.MAP_LINE)
  132. local map_id = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
  133. this.pos_monster_id = data.monsterid
  134. local x = tonumber(Pos[1])
  135. local y = tonumber(Pos[2])
  136. this.map_data = {map_id, line, x, y}
  137. SL:Pathfinding(map_id, line, x, y,this.PointPosEnd,this.pos_monster_id)
  138. end
  139. for i, v in pairs(this.mapMonsterSelect) do
  140. if luaIndex == i then
  141. this.mapMonsterSelect[i] = true
  142. else
  143. this.mapMonsterSelect[i] = false
  144. end
  145. end
  146. if this.oldSelectItem then
  147. this.oldSelectItem:SetSelect(false)
  148. this.oldSelectItem = self
  149. else
  150. this.oldSelectItem = self
  151. end
  152. self:SetSelect(true)
  153. end
  154. end
  155. function this:PointPosEnd(pos)
  156. --SL:LogError(this.pos_monster_id .. " " ..x .. " ".. y)
  157. --SL:StartOnHook(true,true,this.pos_monster_id)
  158. if pos and pos.x and pos.z then
  159. this.scheduleId = SL:ScheduleOnce(0.1, function()
  160. SL:Pathfinding( this.map_data[1], this.map_data[2], pos.x, pos.z,this.BossPointOnHook)
  161. end)
  162. else
  163. SL:StartOnHook(true,true,this.pos_monster_id)
  164. end
  165. end
  166. function this:BossPointOnHook(pos)
  167. SL:StartOnHook(true,true,this.pos_monster_id)
  168. end
  169. ---@return Vector2
  170. function this:ItemSizeGetFunc(realIndex)
  171. local x = 208
  172. local y = 39
  173. return Vector2(x, y)
  174. end
  175. ---创建或者刷新界面数据时调用
  176. function this:Refresh()
  177. local panel = GUI:GetUI("dev/ui/Preview/Panel/KLActivityTip/KLActivityTipPanel")
  178. if GUI:getVisible(self.view.bgImg) then
  179. if panel then
  180. panel:SetUIMapPoint(false)
  181. end
  182. GUI:setRotation(self.view.closeBtn, 0)
  183. else
  184. if panel then
  185. panel:SetUIMapPoint(true)
  186. end
  187. end
  188. local panel2 = GUI:GetUI("dev/outui/Activity/Panel/KLActivityPreview/KLActivityPreviewPanel")
  189. if panel2 then
  190. panel2:OnClickClose()
  191. end
  192. end
  193. ---注册UI事件和服务器消息
  194. function this:RegistEvents()
  195. GUI:AddOnClickEvent(self.view.closeBtn, self, self.OnClickCloseButton)
  196. GUI:AddOnClickEvent(self.view.closeBtn_2, self, self.OnClickCloseButton)
  197. GUI:AddOnClickEvent(self.view.closeBtn_3, self, self.OnClickCloseButton)
  198. SL:RegisterLuaNetMsg(MessageDef.ResMapMonsterStatusMessage, self.ResMapMonsterStatusMessage, self)
  199. SL:RegisterLUAEvent(LUA_EVENT_UI_SHOW_ME_PATH_STOP, self.LUA_EVENT_UI_SHOW_ME_PATH_STOP, self)
  200. SL:RegisterLuaNetMsg(MessageDef.ResPlayerChangeMapMessage, self.ResPlayerChangeMapMessage, self)
  201. SL:RegisterLUAEvent(LUA_EVENT_MAP_MONSTER_STATUS, self.LUA_EVENT_MAP_MONSTER_STATUS, self) --地图怪物状态
  202. SL:RegisterLUAEvent(LUA_EVENT_MAP_MONSTER_STATUS_CHANGE, self.LUA_EVENT_MAP_MONSTER_STATUS_CHANGE, self) --地图怪物状态改变
  203. end
  204. function this:UnRegistEvents()
  205. SL:UnRegisterLUAEvent(LUA_EVENT_MAP_MONSTER_STATUS, self.LUA_EVENT_MAP_MONSTER_STATUS, self) --地图怪物状态
  206. SL:UnRegisterLUAEvent(LUA_EVENT_MAP_MONSTER_STATUS_CHANGE, self.LUA_EVENT_MAP_MONSTER_STATUS_CHANGE, self) --地图怪物状态改变
  207. end
  208. function this:ResPlayerChangeMapMessage()
  209. self.mapMonsterData = {}
  210. for i, v in pairs(SL:GetConfigFieldToList('cfg_mongen', "mapid", SL:GetMetaValue(EMetaVarGetKey.MAP_ID))) do
  211. if v.monsterShowList == 1 then
  212. table.insert(self.mapMonsterData, v)
  213. end
  214. end
  215. if not next(self.mapMonsterData) then
  216. GUI:UIPanel_Close("dev/ui/Monster/Panel/KLMonsterMapPoint/KLMonsterMapPointPanel")
  217. return
  218. end
  219. end
  220. function this:LUA_EVENT_UI_SHOW_ME_PATH_STOP(_, data)
  221. if this.oldSelectItem then
  222. this.oldSelectItem:SetSelect(false)
  223. for i, v in pairs(this.mapMonsterSelect) do
  224. this.mapMonsterSelect[i] = false
  225. end
  226. end
  227. end
  228. function this:ResMapMonsterStatusMessage(_, message)
  229. if message then
  230. GUI:DataListUpdateData(self.view.loopscrollviewData)
  231. end
  232. end
  233. function this:HidePanel()
  234. GUI:setVisible(self.view.bgImg, false)
  235. for i, v in pairs(self.MapItems) do
  236. v:SetSelect(false)
  237. end
  238. --if panel then
  239. -- panel:SetUIMapPoint(false)
  240. --end
  241. GUI:setRotation(self.view.closeBtn, -180)
  242. end
  243. function this:OnClickCloseButton()
  244. local panel = GUI:GetUI("dev/ui/Preview/Panel/KLActivityTip/KLActivityTipPanel")
  245. if GUI:getVisible(self.view.bgImg) then
  246. GUI:setVisible(self.view.bgImg, false)
  247. for i, v in pairs(self.MapItems) do
  248. v:SetSelect(false)
  249. end
  250. if panel then
  251. panel:SetUIMapPoint(false)
  252. end
  253. GUI:setRotation(self.view.closeBtn, -180)
  254. else
  255. GUI:setVisible(self.view.bgImg, true)
  256. GUI:DataListUpdateData(self.view.loopscrollviewData)
  257. GUI:setRotation(self.view.closeBtn, 0)
  258. if panel then
  259. panel:SetUIMapPoint(true)
  260. end
  261. end
  262. local panel2 = GUI:GetUI("dev/outui/Activity/Panel/KLActivityPreview/KLActivityPreviewPanel")
  263. if panel2 then
  264. panel2:OnClickClose()
  265. end
  266. end
  267. function this:Close()
  268. self.is_open = false
  269. self:UnRegistEvents()
  270. if self.updateID then
  271. SL:UnSchedule(self.updateID)
  272. self.updateID = nil
  273. end
  274. end
  275. function this:LUA_EVENT_MAP_MONSTER_STATUS( ... )
  276. if not self.is_open then
  277. return
  278. end
  279. self.nextDoRevTime = Time.time+Time.deltaTime
  280. end
  281. function this:LUA_EVENT_MAP_MONSTER_STATUS_CHANGE( _id,message )
  282. if not self.is_open then
  283. return
  284. end
  285. self.nextDoRevTime = Time.time+Time.deltaTime
  286. end
  287. return this