KLUITeamWindowPanel.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. ---@class KLUITeamWindowPanel:UIKmlLuaPanelBase
  2. ---@field view KLUITeamWindowPanelView
  3. ---@field KLUITeamHeadData TeamProto.TeamInfo
  4. ---@field selectItem KLUITeamHeadItem
  5. local KLUITeamWindowPanel = class(UIKmlLuaPanelBase)
  6. local this =KLUITeamWindowPanel
  7. ---创建时调用一次
  8. function this:Init()
  9. GUI:DataListInitData(self.view.Members_list,function()
  10. return self:PlayerDataListItemCountFunc()
  11. end,function(realIndex)
  12. return self:PlayerDataListItemGetFunc(realIndex)
  13. end,function(realIndex, kmlcontrol)
  14. return self:PlayerDataListItemInitFunc(realIndex, kmlcontrol)
  15. end, function(realIndex, kmlcontrol)
  16. return self:PlayerDataListItemUpdateFunc(realIndex, kmlcontrol)
  17. end)
  18. GUI:DataListUpdateData(self.view.Members_list)
  19. end
  20. ---创建或者刷新界面数据时调用
  21. function this:Refresh()
  22. self:TeamInfoChange(_,SL:GetMetaValue(EMetaVarGetKey.TEAM_MEMBER_INFO))
  23. if self.args and self.args.x then
  24. GUI:setPositionX(self.view.root,self.args.x)
  25. end
  26. if self.args and self.args.y then
  27. GUI:setPositionY(self.view.root,self.args.y)
  28. end
  29. --self.view.tog_autoJoin:SetTogIsOn(SL:GetMetaValue(EMetaVarGetKey.GET_IS_AUTO_ACCEPT_TEAM_INVITATION))
  30. GUI:Toggle_setIsOn(self.view.tog_autoJoin,SL:GetMetaValue(EMetaVarGetKey.GET_IS_AUTO_ACCEPT_TEAM_INVITATION))
  31. end
  32. ---注册UI事件和服务器消息
  33. function this:RegistEvents()
  34. GUI:SetToggleOnValueChange(self.view.tog_autoJoin,self,self.AutoToggleChaneg)
  35. GUI:AddOnClickEvent(self.view.btn_createTeam, self, self.OnClickCreatTeam)
  36. GUI:AddOnClickEvent(self.view.btn_team, self, self.OnClickOpenTeamMainPanel,1)
  37. GUI:AddOnClickEvent(self.view.btn_joinTeam, self, self.OnClickOpenTeamMainPanel,2)
  38. GUI:AddOnClickEvent(self.view.btn_invitation, self, self.OnClickOpenTeamMainPanel,3)
  39. GUI:AddOnClickEvent(self.view.CloseSelectPlayerUIButton, self, self.CloseSelectPlayerUI)
  40. GUI:AddOnClickEvent(self.view.LockButton, self, self.OnClickSelectPlayerButton,1)
  41. GUI:AddOnClickEvent(self.view.ChatButton, self, self.OnClickSelectPlayerButton,2)
  42. GUI:AddOnClickEvent(self.view.KickButton, self, self.OnClickSelectPlayerButton,3)
  43. GUI:AddOnClickEvent(self.view.PromotedButton, self, self.OnClickSelectPlayerButton,4)
  44. GUI:AddOnClickEvent(self.view.SelectPlayerButton, self, self.OnClickSelectPlayerButton,5)
  45. GUI:AddOnClickEvent(self.view.ReqPointButton, self, self.OnClickSelectPlayerButton,6)
  46. GUI:AddOnClickEvent(self.view.LeaveTeamButton, self, self.OnClickSelectPlayerButton,7)
  47. SL:RegisterLUAEvent(LUA_EVENT_TEAM_INFO_CHANGE, self.TeamInfoChange,self)
  48. SL:RegisterLUAEvent(LUA_EVENT_TEAM_PLAYER_HP_CHANGE, self.TeamInfoHpChange,self)
  49. SL:RegisterLUAEvent(Event.CloseTeamTipsUI,self.CloseTeamTipsUI,self)
  50. end
  51. function this:OnClickSelectPlayerButton(_,eventData)
  52. if eventData == 1 then--查看装备
  53. --角色装备信息
  54. GUI:UIPanel_Open("dev/ui/Equip/Panel/KLEquipUI/KLEquipUIPanel", nil, nil, {
  55. isOther = true,
  56. rid = self.selectItem.data.roleInfo.rid,
  57. x = 0
  58. })
  59. SL.HideMainPanel()
  60. elseif eventData == 2 then--私聊
  61. SL:OpenChatUI({channel=8,rid=self.selectItem.data.roleInfo.rid,name=self.selectItem.data.roleInfo.name})
  62. elseif eventData == 3 then--踢出队伍
  63. SL:ReqKickOutMember(self.selectItem.data.roleInfo.rid)
  64. elseif eventData == 4 then--升为队长
  65. SL:ReqChangeCaptain(self.selectItem.data.roleInfo.rid)
  66. elseif eventData == 5 then--选中玩家
  67. SL:OpenBossHp(self.selectItem.data.roleInfo.rid)
  68. elseif eventData == 6 then--发送位置
  69. local x = SL:MeData_GetCoord().x
  70. local y = SL:MeData_GetCoord().z
  71. local mapId = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
  72. local line = SL:GetMetaValue(EMetaVarGetKey.MAP_LINE)
  73. local posStr = string.format("pos@%s,%s,%s,%s@",x,y,mapId,line)
  74. SL:SendChat(7,posStr,nil,nil)
  75. elseif eventData == 7 then--离开队伍
  76. SL:ReqQuitTeam()
  77. end
  78. self:CloseSelectPlayerUI()
  79. end
  80. function this:CloseTeamTipsUI()
  81. if self.selectItem then
  82. self.selectItem:SetSelectImage(false)
  83. end
  84. end
  85. ---邀请队员按钮是否显示
  86. function this:InvitationButtonIsShow()
  87. local isShow = self.KLUITeamHeadData and self.KLUITeamHeadData.leaderId and self.KLUITeamHeadData.leaderId == SL:GetMetaValue(EMetaVarGetKey.UID)
  88. GUI:SetActive(self.view.btn_invitation,isShow)
  89. GUI:setPosition(self.view.btn_team,10,-80)
  90. if isShow then
  91. GUI:setPosition(self.view.btn_team,60,-80)
  92. end
  93. end
  94. ---队伍信息变化
  95. ---@param message TeamProto.TeamInfo
  96. function this:TeamInfoChange(_,message)
  97. local isShowTeamUI = message and message.teamMember and table.count(message.teamMember) > 0
  98. GUI:SetActive(self.view.MemberPanel,isShowTeamUI)
  99. GUI:SetActive(self.view.NoMemberPanel,not isShowTeamUI)
  100. if message then
  101. self.KLUITeamHeadData = message
  102. GUI:DataListUpdateData(self.view.Members_list)
  103. end
  104. self:CloseSelectPlayerUI()
  105. self:InvitationButtonIsShow()
  106. end
  107. ---队伍信息中血量变化
  108. ---@param message TeamProto.TeamMemberHpChangeRes
  109. function this:TeamInfoHpChange(_,message)
  110. if self.KLUITeamHeadData and self.KLUITeamHeadData.teamMember then
  111. for i, v in pairs(self.KLUITeamHeadData.teamMember) do
  112. if v.roleInfo.rid == message.targetRid then
  113. v.hp = message.hp
  114. v.maxHp = message.maxHp
  115. break
  116. end
  117. end
  118. end
  119. GUI:DataListUpdateData(self.view.Members_list)
  120. self:InvitationButtonIsShow()
  121. end
  122. ---创建队伍
  123. function this:OnClickCreatTeam()
  124. SL:RequestCreateTeam()
  125. end
  126. ---打开队伍界面
  127. ---@param data number @对应页签 1:我的队伍,2:附近队伍,3:附近玩家,4:申请列表
  128. function this:OnClickOpenTeamMainPanel(control,data)
  129. GUI:UIPanel_Open("dev/ui/Team/Panel/KLUITeamMain/KLUITeamMainPanel",_,_,{panelType = data})
  130. end
  131. function this:AutoToggleChaneg(_,customData,eventData)
  132. if eventData[1]==SL:GetMetaValue(EMetaVarGetKey.GET_IS_AUTO_ACCEPT_TEAM_INVITATION) then
  133. return
  134. end
  135. SL:SetMetaValue(EMetaVarSetKey.SET_IS_AUTO_ACCEPT_TEAM_INVITATION,eventData[1])
  136. end
  137. function this:SelectTeamPlayer(control, eventData)
  138. if self.selectItem then
  139. self.selectItem:SetSelectImage(false)
  140. self.selectItem = nil
  141. end
  142. if eventData.data.roleInfo.roleInfoExt.teamId == SL:MeData_GetTeamId() then
  143. self.selectItem = eventData
  144. self.selectItem:SetSelectImage(true)
  145. --GUI:UIPanel_Open("dev/ui/Team/Panel/KLUITeamTips/KLUITeamTipsPanel",_,_,{onClickData = self.selectItem.data
  146. --,teamId = self.selectItem.data.roleInfo.roleInfoExt.teamId
  147. --,leaderId = self.selectItem.leaderId})
  148. --GUI:UIPanel_Open("dev/ui/FriendSys/Panel/KLFriendOperate/KLFriendOperatePanel", nil, nil, {rid = self.selectItem.data.roleInfo.rid, roleInfo = self.selectItem.data.roleInfo, uiType = 2})
  149. self:OpenSelectPlayerUI()
  150. end
  151. end
  152. ---隐藏所有选择玩家操作的按钮
  153. function this:HideAllSelectPlayerButton()
  154. GUI:SetActive(self.view.LockButton, false)
  155. GUI:SetActive(self.view.ChatButton, false)
  156. GUI:SetActive(self.view.KickButton, false)
  157. GUI:SetActive(self.view.PromotedButton, false)
  158. GUI:SetActive(self.view.SelectPlayerButton, false)
  159. GUI:SetActive(self.view.ReqPointButton,false)
  160. GUI:SetActive(self.view.LeaveTeamButton,false)
  161. end
  162. ---打开选择玩家界面
  163. function this:OpenSelectPlayerUI()
  164. self:HideAllSelectPlayerButton()
  165. GUI:SetActive(self.view.go_playerPanelBg,true)
  166. local isLeader = self.KLUITeamHeadData and self.KLUITeamHeadData.leaderId and self.KLUITeamHeadData.leaderId == SL:GetMetaValue(EMetaVarGetKey.UID)
  167. ---玩家是队长
  168. if isLeader then
  169. if self.selectItem.data.roleInfo.rid == SL:GetMetaValue(EMetaVarGetKey.UID) then--玩家是队长点击自己
  170. GUI:setContentSize(self.view.sp_playerPanelBg,135,103)
  171. GUI:setPosition(self.view.sp_playerPanelBg,0,-20)
  172. GUI:SetActive(self.view.ReqPointButton,true)
  173. GUI:SetActive(self.view.LeaveTeamButton,true)
  174. else--玩家是队长点其他人
  175. GUI:setContentSize(self.view.sp_playerPanelBg,135,234)
  176. GUI:setPosition(self.view.sp_playerPanelBg,0,-79)
  177. GUI:SetActive(self.view.LockButton, true)
  178. GUI:SetActive(self.view.ChatButton, true)
  179. GUI:SetActive(self.view.KickButton, true)
  180. GUI:SetActive(self.view.PromotedButton, true)
  181. GUI:SetActive(self.view.SelectPlayerButton, true)
  182. end
  183. else--不是队长点其他人的操作
  184. if self.selectItem.data.roleInfo.rid == SL:GetMetaValue(EMetaVarGetKey.UID) then--点自己
  185. GUI:setContentSize(self.view.sp_playerPanelBg,135,103)
  186. GUI:setPosition(self.view.sp_playerPanelBg,0,-20)
  187. GUI:SetActive(self.view.ReqPointButton,true)
  188. GUI:SetActive(self.view.LeaveTeamButton,true)
  189. else
  190. GUI:setContentSize(self.view.sp_playerPanelBg,135,153)
  191. GUI:setPosition(self.view.sp_playerPanelBg,0,-38)
  192. GUI:SetActive(self.view.LockButton, true)
  193. GUI:SetActive(self.view.ChatButton, true)
  194. GUI:SetActive(self.view.SelectPlayerButton, true)
  195. end
  196. end
  197. GUI:SetActive(self.view.go_playerPanelBg,true)
  198. end
  199. ---关闭选择玩家界面
  200. function this:CloseSelectPlayerUI()
  201. self:CloseTeamTipsUI()
  202. GUI:SetActive(self.view.go_playerPanelBg,false)
  203. end
  204. ----------------------队伍人员--------------------------
  205. function this:PlayerDataListItemCountFunc()
  206. if self.KLUITeamHeadData and self.KLUITeamHeadData.teamMember then
  207. return #self.KLUITeamHeadData.teamMember
  208. end
  209. return 0
  210. end
  211. function this:PlayerDataListItemGetFunc(realIndex)
  212. ---@type KLUITeamHeadItem
  213. local item = GUI:UIPanel_Open("dev/ui/Team/Item/KLUITeamHead/KLUITeamHeadItem", self.view.Members_list, self, nil, true)
  214. if not self.PlayerItem then
  215. ---@type table<KingML.KmlControl,KLUITeamHeadItem>
  216. self.PlayerItem = {}
  217. end
  218. local kmlCtrl = item.view.root
  219. GUI:AddOnClickEvent(item.view.KLUITeamHeadButton,self,self.SelectTeamPlayer,item)
  220. self.PlayerItem[kmlCtrl] = item
  221. return kmlCtrl
  222. end
  223. function this:PlayerDataListItemInitFunc(realIndex, kmlcontrol)
  224. end
  225. function this:PlayerDataListItemUpdateFunc(realIndex, kmlcontrol)
  226. local item = self.PlayerItem[kmlcontrol]
  227. local luaIndex = realIndex + 1
  228. local data = self.KLUITeamHeadData.teamMember[luaIndex]
  229. item:ShowInfo(data,self.KLUITeamHeadData.leaderId)
  230. end
  231. -----------------------------------------------------
  232. function this:Close()
  233. if self.PlayerItem then
  234. for i, v in pairs(self.PlayerItem) do
  235. GUI:UIPanel_Close(nil,v)
  236. end
  237. end
  238. end
  239. return this