源战役客户端
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

421 righe
15 KiB

4 settimane fa
  1. HeadRoleItem = HeadRoleItem or BaseClass(BaseItem)
  2. function HeadRoleItem:__init(parent_wnd, prefab_asset, layer_name)
  3. self.base_file = "uiComponent"
  4. self.layout_file = "HeadRoleItem"
  5. self.is_delay_callback = true
  6. -- self.use_local_view = true
  7. self.vo = nil
  8. self.parent = parent_wnd
  9. self.layer_name = layer_name
  10. self.gray_mat = ShaderTools.gray_mat
  11. self.show_sex = false
  12. self.show_sex_type = 1 -- 性别展示类型 1:左下角带底图 2:左上角无底图
  13. -- 不同背景图片下的背景坐标
  14. self.bg_offsets = {
  15. [1] = {x = 0, y = 0},
  16. [2] = {x = 2, y = -2.5},
  17. [3] = {x = 0, y = 0},
  18. }
  19. self.bg_sizeDelta = {
  20. [1] = {x = 165, y = 165},
  21. [2] = {x = 176, y = 176},
  22. [3] = {x = 165, y = 165},
  23. }
  24. self.duration = 0.1
  25. self.long_click_time = 1500 -- 长按判定时间(毫秒)
  26. self:Load()
  27. end
  28. function HeadRoleItem:__delete( )
  29. if self.bind_wait_for_protocal then
  30. GlobalEventSystem:UnBind(self.bind_wait_for_protocal)
  31. self.bind_wait_for_protocal = nil
  32. end
  33. if self.long_click_timer_id then
  34. GlobalTimerQuest:CancelQuest(self.long_click_timer_id)
  35. self.long_click_timer_id = nil
  36. end
  37. end
  38. function HeadRoleItem:Load_callback()
  39. local node = {
  40. "head",
  41. "head/bg:obj:imgex",
  42. "head/dressBoard:img:obj",
  43. "head/icon:raw", "head/effect", "head/sex_bg:obj",
  44. "head/sex_icon:obj:img",
  45. "head/lv_bg:obj:img", "head/lv_bg/lv:tmp",
  46. "head/career_icon:obj:img",--职业图标
  47. }
  48. self:GetChildren(node)
  49. self.head_size_x = self.head.sizeDelta.x
  50. self.head_size_y = self.head.sizeDelta.y
  51. local function onClickBtnHandler(target, x, y)
  52. if self.vo and not self.long_click_call_back then
  53. self:OnClickFunc( x, y )
  54. end
  55. end
  56. AddClickEvent(self.gameObject, onClickBtnHandler, nil, false)
  57. local function touch_end_func(target,x,y)
  58. if not self.long_click_call_back then return end
  59. local cur_time = TimeUtil:getClientTimeMs( )
  60. if self.vo and cur_time - self.click_start_time <= self.long_click_time then
  61. self:OnClickFunc( x, y )
  62. end
  63. if self.long_click_timer_id then
  64. GlobalTimerQuest:CancelQuest(self.long_click_timer_id)
  65. self.long_click_timer_id = nil
  66. end
  67. end
  68. local function touch_begin_func(target,x,y)
  69. if not self.long_click_call_back then return end
  70. self.click_start_time = TimeUtil:getClientTimeMs( )
  71. local function clockFun()
  72. local cur_time = TimeUtil:getClientTimeMs( )
  73. if cur_time - self.click_start_time > self.long_click_time then
  74. if self.long_click_call_back then
  75. self.long_click_call_back(self.vo)
  76. end
  77. if self.long_click_timer_id then
  78. GlobalTimerQuest:CancelQuest(self.long_click_timer_id)
  79. self.long_click_timer_id = nil
  80. end
  81. end
  82. end
  83. if not self.long_click_timer_id then
  84. self.long_click_timer_id = GlobalTimerQuest:AddPeriodQuest(clockFun, self.duration, -1)
  85. end
  86. clockFun()
  87. end
  88. AddDownEvent(self.gameObject, touch_begin_func)
  89. AddUpEvent(self.gameObject, touch_end_func)
  90. if self.need_refresh then
  91. self:UpdateView()
  92. end
  93. if self.gray_cache ~= nil then
  94. self:SetGray(self.gray_cache)
  95. end
  96. if self.need_effect then
  97. self:SetEffect(self.effect_name, self.eff_layer_name, self.eff_scale, self.mask_id)
  98. end
  99. if self.career_icon_cache ~= nil then
  100. self:SetCareerIconVisible(self.career_icon_cache)
  101. end
  102. end
  103. --[[
  104. 20191129 table,
  105. data = {
  106. vo, -- 玩家头像的具体参数
  107. show_tip, -- 是否可以查看玩家数据,默认可以
  108. custom_callback, -- 自己传callback
  109. use_bg, -- 使用的背景图片的类型,如果自己加了新样式在记得上面的self.bg_offsets中添加自己的新背景图片坐标
  110. }
  111. vo范例
  112. vo = {
  113. id = RoleManager.Instance.mainRoleInfo.role_id,
  114. server_id = RoleManager.Instance.mainRoleInfo.server_id,
  115. career = RoleManager.Instance.mainRoleInfo.career,
  116. sex = RoleManager.Instance.mainRoleInfo.sex,
  117. turn = RoleManager.Instance.mainRoleInfo.turn,
  118. picture_ver = RoleManager.Instance.mainRoleInfo.picture_ver, --不支持自定义头像,此字段废弃
  119. picture = RoleManager.Instance.mainRoleInfo.picture, --不支持自定义头像,此字段废弃
  120. profile_photo_id = RoleManager.Instance.mainRoleInfo.profile_photo_id,
  121. dress_board_id = ChatDressModel:getInstance().use_dress_list[2],--头像框id,默认为0(无头像框)
  122. level = RoleManager.Instance.mainRoleInfo.level,
  123. do_not_click = true,--不可点击
  124. empty_head = false, -- 是否是空数据头像
  125. not_show_level = true
  126. }
  127. ]]
  128. function HeadRoleItem:SetData(data)
  129. -- data.vo = data.vo
  130. -- data.vo.turn = data.vo.turn or 0
  131. local temp_vo = {}
  132. if data and data.vo then
  133. temp_vo = data.vo
  134. elseif data then
  135. temp_vo = data
  136. end
  137. self.vo = temp_vo
  138. -- self.vo.turn = data.vo and data.vo.turn or 0
  139. -- 这两个暂时废弃
  140. self:SetSomeInfo(data)
  141. self:UpdateView()
  142. end
  143. --[[
  144. id展示头像SetData一样module_id填自己的标记id
  145. --]]
  146. function HeadRoleItem:SetShowByRoleId( data )
  147. local temp_vo = {}
  148. if data and data.vo then
  149. temp_vo = data.vo
  150. elseif data then
  151. temp_vo = data
  152. end
  153. self.vo = temp_vo
  154. self.module_id = data.module_id or 0
  155. -------------------------
  156. self:SetSomeInfo(data)
  157. if (self.vo.role_id or self.vo.id) then
  158. self.wait_for_protocal = true
  159. -------------------------
  160. if not self.bind_wait_for_protocal then
  161. local function ANS_OTHER_HEAD_INFO( head_data )
  162. if self._use_delete_method then return end
  163. if head_data.mod ~= self.module_id then return end
  164. -------------------------
  165. self.vo = self.vo or {}
  166. for k,v in pairs(head_data) do
  167. self.vo[k] = v
  168. end
  169. self:UpdateView()
  170. -------------------------
  171. if self.bind_wait_for_protocal then
  172. GlobalEventSystem:UnBind(self.bind_wait_for_protocal)
  173. self.bind_wait_for_protocal = nil
  174. end
  175. self.wait_for_protocal = nil
  176. end
  177. self.bind_wait_for_protocal = GlobalEventSystem:Bind(EventName.ANS_OTHER_HEAD_INFO,ANS_OTHER_HEAD_INFO)
  178. GlobalEventSystem:Fire( EventName.REQ_OTHER_HEAD_INFO, self.module_id, (self.vo.role_id or self.vo.id) )
  179. end
  180. else
  181. Message.show("缺少角色信息~")
  182. end
  183. end
  184. function HeadRoleItem:SetSomeInfo( data )
  185. self.bg_size = data.bg_size
  186. self.icon_size = data.icon_size
  187. ----------------
  188. self.show_tip = data.show_tip == nil and true or data.show_tip --默认弹提示
  189. self.not_show_level = data.not_show_level
  190. self.do_not_click = data.do_not_click or (self.vo and self.vo.do_not_click)
  191. self.custom_callback = data.custom_callback
  192. -- self.use_bg = data.use_bg or (self.vo and self.vo.use_bg) or 1 -- 使用的背景样式(1为白底渐变外框正方形)
  193. self.use_bg = 3--20201026头像背景写死为3
  194. end
  195. function HeadRoleItem:UpdateView()
  196. if not self.vo then return end
  197. if not self.is_loaded then
  198. self.need_refresh = true
  199. return
  200. end
  201. local vo = self.vo
  202. self.bg_imgex.raycastTarget = not self.do_not_click and true or false
  203. -- 选择好需要使用的背景图
  204. lua_resM:setImageSprite(self, self.bg_imgex, "uiComponent_asset", "pw_ckxx_0"..self.use_bg)
  205. SetAnchoredPosition(self.bg, self.bg_offsets[self.use_bg].x, self.bg_offsets[self.use_bg].y)
  206. SetSizeDeltaX(self.bg, self.bg_sizeDelta[self.use_bg].x)
  207. SetSizeDeltaY(self.bg, self.bg_sizeDelta[self.use_bg].y)
  208. -- 暂时废弃这段逻辑
  209. -- if self.bg_size then
  210. -- if self.use_bg == 1 then
  211. -- self.bg.sizeDelta = self.bg_size
  212. -- elseif self.use_bg == 2 then
  213. -- self.bg2.sizeDelta = self.bg_size
  214. -- end
  215. -- end
  216. -- if self.icon_size then
  217. -- self.icon.sizeDelta = self.icon_size
  218. -- end
  219. ------------------
  220. -- print("Saber:HeadRoleItem [start:127] vo ------------------------------------------")
  221. -- PrintTable(vo)
  222. --头像
  223. if self.vo.empty_head then
  224. self.icon.gameObject:SetActive(false)
  225. self.dressBoard_obj:SetActive(false)
  226. else
  227. self.icon.gameObject:SetActive(true)
  228. -- if vo.career and vo.sex and vo.turn and vo.career ~= 0 and vo.sex ~= 0 then
  229. CustomRoleHead:getInstance():Create(self, self.icon_raw, vo.id or vo.role_id, vo.career, vo.sex, vo.turn, nil, vo.picture_ver, vo.picture, false, vo.profile_photo_id)
  230. -- end
  231. --头像框
  232. if (vo.dress_board_id and vo.dress_board_id ~=0 and vo.dress_board_id ~= 420001) or
  233. (vo.dress_id and vo.dress_id ~=0 and vo.dress_id ~= 420001) then
  234. local id = vo.dress_board_id or vo.dress_id
  235. lua_resM:setOutsideImageSprite(self,self.dressBoard_img,GameResPath.GetChatDressIcon(id),false)
  236. self.dressBoard_obj:SetActive(true)
  237. else
  238. -- lua_resM:setImageSprite(self, self.dressBoard_img, "uiComponent_asset","com_empty", false)
  239. self.dressBoard_obj:SetActive(false)
  240. end
  241. --职业 (策划说先屏蔽了 2020.10.21 by msh)
  242. self.career_icon_obj:SetActive(false)
  243. -- if vo.career and vo.career ~= 0 then
  244. -- self.career_icon_obj:SetActive(true)
  245. -- lua_resM:setImageSprite(self, self.career_icon_img, "common_asset","common_career_"..vo.career)
  246. -- else
  247. -- self.career_icon_obj:SetActive(false)
  248. -- end
  249. if self.custom_callback then
  250. self.custom_callback()
  251. end
  252. end
  253. --设置大小
  254. self:SetItemSize()
  255. self:SetSexConShow(self.show_sex, self.show_sex_type)
  256. if RoleManager and RoleManager.Instance and RoleManager.Instance.mainRoleInfo.level < Config.Modulesub["110@2"].open_lv then
  257. if self.lv_bg_obj.activeSelf then
  258. self.lv_bg_obj:SetActive(false)
  259. end
  260. self.lv_tmp.text = ""
  261. else
  262. self.lv_bg_obj:SetActive(vo.level and vo.level~=0 and true or false)
  263. self.lv_tmp.text = vo.level or ""
  264. end
  265. --AI管家:不显示AI管家的等级
  266. if vo.id == 1 then
  267. self.lv_tmp.text = ""
  268. end
  269. if self.not_show_level then
  270. self.lv_tmp.text = ""
  271. self.lv_bg_obj:SetActive(false)
  272. end
  273. end
  274. function HeadRoleItem:SetGray(bool)
  275. if self.is_loaded then
  276. local mat = bool and self.gray_mat or nil
  277. self.icon_raw.material = mat
  278. self.dressBoard_img.material = mat
  279. SetImageGray(self.lv_bg_img,bool)
  280. SetImageGray(self.career_icon_img,bool)
  281. SetImageGray(self.bg_imgex,bool)
  282. else
  283. self.gray_cache = bool
  284. end
  285. end
  286. function HeadRoleItem:SetItemSize(x, y)
  287. self.now_size_x = tonumber(x) or self.now_size_x or self.head_size_x
  288. self.now_size_y = tonumber(y) or self.now_size_y or self.head_size_y
  289. if self.is_loaded then
  290. local x_ratio = self.now_size_x / self.head_size_x
  291. local y_ratio = self.now_size_y / self.head_size_y
  292. self.head.localScale = Vector2(x_ratio, y_ratio)
  293. end
  294. end
  295. function HeadRoleItem:SetSexConShow(show, show_type)
  296. self.show_sex = show or self.show_sex
  297. self.show_sex_type = show_type or self.show_sex_type
  298. if self.is_loaded then
  299. if show then
  300. self.sex_icon_obj:SetActive(true)
  301. if self.show_sex_type == 1 then
  302. self.sex_bg_obj:SetActive(true)
  303. SetAnchoredPositionY(self.sex_icon, -55)
  304. elseif self.show_sex_type == 2 then
  305. self.sex_bg_obj:SetActive(false)
  306. SetAnchoredPositionY(self.sex_icon, 58)
  307. SetLocalScale(self.sex_icon, 0.8, 0.8, 0.8)
  308. end
  309. lua_resM:setImageSprite(self, self.sex_icon_img, "uiComponent_asset", "headrole_sex_"..(self.vo and self.vo.sex or 1), true)
  310. else
  311. self.sex_icon_obj:SetActive(false)
  312. self.sex_bg_obj:SetActive(false)
  313. end
  314. end
  315. end
  316. function HeadRoleItem:SetEffect(effect_name, layer_name, scale, mask_id)
  317. self.effect_name = effect_name
  318. self.eff_layer_name = layer_name
  319. self.eff_scale = scale
  320. self.mask_id = mask_id
  321. if self.is_loaded then
  322. local function load_end_func()
  323. end
  324. --没有传mask_id而且要显示特效的情况才去获取mask_id
  325. if not self.mask_id then
  326. local p_wnd = self.parent
  327. repeat
  328. p_wnd = p_wnd.parent
  329. if p_wnd and p_wnd.parent then
  330. local rect = p_wnd.parent:GetComponent(typeof(UnityEngine.UI.ScrollRect))
  331. if rect then
  332. if p_wnd:GetComponent("EffectMask") then
  333. self.mask_id = 1
  334. else
  335. local image = p_wnd:GetComponent("Image")
  336. if image then
  337. self.mask_id = self:RegisterMask(image)
  338. end
  339. end
  340. end
  341. end
  342. until not p_wnd or self.mask_id
  343. end
  344. self:AddUIEffect(effect_name, self.effect, layer_name or "UI", nil, scale or 1, true, nil, self.mask_id, nil, load_end_func)
  345. self.need_effect = false
  346. else
  347. self.need_effect = true
  348. end
  349. end
  350. function HeadRoleItem:SetCareerIconVisible( flag )
  351. if not self.is_loaded then
  352. self.career_icon_cache = flag
  353. return
  354. end
  355. if self.career_icon_obj then
  356. self.career_icon_obj:SetActive(flag)
  357. end
  358. end
  359. function HeadRoleItem:SetClickCall( call_back )
  360. self.call_back = call_back
  361. end
  362. -- 设置长按事件
  363. function HeadRoleItem:SetLongClickCall( call_back )
  364. self.long_click_call_back = call_back
  365. end
  366. -- 单击轻点
  367. function HeadRoleItem:OnClickFunc( x, y )
  368. if self.do_not_click then
  369. return
  370. end
  371. if self.call_back then
  372. self.call_back(self.vo)
  373. return
  374. end
  375. local role_id = self.vo.id or self.vo.role_id
  376. --AI管家:role_id==1是AI管家的情况,这种情况不能打开交互面板
  377. if self.show_tip and role_id ~= RoleManager.Instance.mainRoleInfo.role_id and role_id ~= 1 then
  378. -- print("-------self.vo.server_id ~= RoleManager.Instance.mainRoleInfo.server_id",role_id , RoleManager.Instance.mainRoleInfo.server_id)
  379. -- if self.vo.server_id and self.vo.server_id ~= RoleManager.Instance.mainRoleInfo.server_id then
  380. -- Message.show("无法查看跨服玩家信息")
  381. -- return
  382. -- end
  383. if RoleManager.Instance.mainRoleInfo.level < Config.Modulesub["110@2"].open_lv then
  384. Message.show("查看功能未开放")
  385. return
  386. end
  387. --请求协议获取对方信息
  388. if role_id then
  389. SocialityModel:getInstance():Fire(SocialityModel.REQUEST_OTHER_INFO, role_id, x, y, self.vo.info)
  390. end
  391. end
  392. end