源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

378 行
12 KiB

  1. StarMapView = StarMapView or BaseClass(BaseView)
  2. function StarMapView:__init()
  3. self.base_file = "starMap"
  4. self.layout_file = "StarMapView"
  5. self.layer_name = "UI"
  6. self.close_mode = CloseMode.CloseDestroy
  7. self.destroy_imm = true
  8. self.use_background = true
  9. self.append_to_ctl_queue = true
  10. self.starMap_data = nil
  11. self.star_point_list = {}
  12. self.star_line_list = {}
  13. self.prop_item_list = {}
  14. self.select_index = 0
  15. self.is_max = false
  16. self.model = StarMapModel:getInstance()
  17. self.load_callback = function()
  18. self:LoadSuccess()
  19. self:InitEvent()
  20. end
  21. self.open_callback = function()
  22. self.model:Fire(StarMapModel.REQUEST_STAR_MAP_DATA)
  23. local function load_end_func( )
  24. self:SetGameObjectDepth(self.fight_con)
  25. end
  26. self:AddUIEffect("effect_tubiao_005", self.fight_effect, self.layer_name, Vector3(0,4,0),0.8, true,nil,nil,nil,load_end_func)
  27. end
  28. self.close_callback = function( )
  29. GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK)
  30. GlobalEventSystem:Fire(EventName.CLOSE_GUIDE_PROMPT_VIEW)
  31. end
  32. self.destroy_callback = function()
  33. self:Remove()
  34. end
  35. end
  36. function StarMapView:Remove()
  37. if self.update_starmap_data_event_id then
  38. self.model:UnBind(self.update_starmap_data_event_id)
  39. self.update_starmap_data_event_id = nil
  40. end
  41. if self.click_point_item_event_id then
  42. self.model:UnBind(self.click_point_item_event_id)
  43. self.click_point_item_event_id = nil
  44. end
  45. if self.update_star_power_event_id then
  46. self.model:UnBind(self.update_star_power_event_id)
  47. self.update_star_power_event_id = nil
  48. end
  49. for k,v in pairs(self.star_point_list) do
  50. v:DeleteMe()
  51. v = nil
  52. end
  53. self.star_point_list = {}
  54. for k,v in pairs(self.star_line_list) do
  55. v:DeleteMe()
  56. v = nil
  57. end
  58. self.star_line_list = {}
  59. for k,v in pairs(self.prop_item_list) do
  60. v:DeleteMe()
  61. v = nil
  62. end
  63. self.prop_item_list = {}
  64. end
  65. function StarMapView:LoadSuccess()
  66. self.close_btn = self:GetChild("windowCloseBtn").gameObject
  67. self.level_btn = self:GetChild("item_con/levelBtn").gameObject
  68. self.point_con = self:GetChild("item_con/point_con")
  69. self.line_con = self:GetChild("item_con/line_con")
  70. self.bg = self:GetChild("item_con/bg"):GetComponent("Image")
  71. self.star_bg = self:GetChild("item_con/star_bg"):GetComponent("Image")
  72. self.combat = self:GetChild("fight_con/value"):GetComponent("Text")
  73. self.fight_effect = self:GetChild("fight_effect")
  74. self.fight_con = self:GetChild("fight_con").gameObject
  75. self.name = self:GetChild("item_con/name_bg/name"):GetComponent("Text")
  76. self.prop_con = self:GetChild("prop/Group")
  77. self.need_num = self:GetChild("upgrate/need/num/value"):GetComponent("Text")
  78. self.have_num = self:GetChild("upgrate/have/num/value"):GetComponent("Text")
  79. self.help_btn = self:GetChild("help_btn").gameObject
  80. self.upgrate_btn = self:GetChild("upgrateBtn").gameObject
  81. self.upgrate_img = self:GetChild("upgrateBtn"):GetComponent("ImageExtend")
  82. self.upgrate_label = self:GetChild("upgrateBtn/Text"):GetComponent("Text")
  83. self.red_point = self:GetChild("upgrateBtn/redpoint").gameObject
  84. self.tip = self:GetChild("tip").gameObject
  85. self.tip_bg = self:GetChild("tip/ac_bg").gameObject
  86. self.effect = self:GetChild("effect")
  87. self.point_tip = self:GetChild("item_con/tip").gameObject
  88. self.point_tip_bg = self:GetChild("item_con/tip/bg")
  89. self.point_tip_value = self:GetChild("item_con/tip/value"):GetComponent("Text")
  90. lua_resM:setOutsideImageSprite(self,self.bg,GameResPath.GetJpgImage("bg_starMap.jpg"),false)
  91. self.touch = self:GetChild("touch").gameObject
  92. end
  93. function StarMapView:InitEvent()
  94. local function onClickHandler(target,x,y)
  95. if target == help_btn or target == self.tip_bg or target == self.upgrate_btn or self.level_btn or self.touch then
  96. if self.select_index > 0 then
  97. self.star_point_list[self.select_index]:SetSelect(false)
  98. self.select_index = 0
  99. self:SetPointTip(false)
  100. end
  101. end
  102. if target == self.close_btn then
  103. self:Close()
  104. elseif target == self.help_btn then
  105. self.tip:SetActive(true)
  106. elseif target == self.tip_bg then
  107. self.tip:SetActive(false)
  108. elseif target == self.upgrate_btn then
  109. self:ToUpgrate()
  110. elseif target == self.level_btn then
  111. local id = self.starMap_data.star_map_id
  112. self.model:Fire(StarMapModel.OPEN_STAGE_VIEW,id,x,y)
  113. end
  114. end
  115. AddClickEvent(self.close_btn,onClickHandler)
  116. AddClickEvent(self.help_btn,onClickHandler)
  117. AddClickEvent(self.tip_bg,onClickHandler)
  118. AddClickEvent(self.upgrate_btn,onClickHandler)
  119. AddClickEvent(self.level_btn,onClickHandler)
  120. AddClickEvent(self.touch,onClickHandler)
  121. local function onUpdateData(data)
  122. if data == nil then return end
  123. self:UpdateJinjie(self.starMap_data,data)
  124. self.starMap_data = data
  125. self:UpdateView()
  126. self:UpdateStarLine()
  127. self:UpdateStarPoint()
  128. self:UpdatePropData()
  129. self:UpdateRedPoint()
  130. end
  131. self.update_starmap_data_event_id = self.model:Bind(StarMapModel.UPDATE_STAR_MAP_DATA,onUpdateData)
  132. local function onClickPoint(index,id)
  133. if index == self.select_index then
  134. self.star_point_list[index]:SetSelect(false)
  135. self.select_index = 0
  136. self:SetPointTip(false)
  137. else
  138. if self.select_index > 0 then
  139. self.star_point_list[self.select_index]:SetSelect(false)
  140. end
  141. self.select_index = index
  142. self.star_point_list[self.select_index]:SetSelect(true)
  143. self:SetPointTip(true,index,id)
  144. end
  145. end
  146. self.click_point_item_event_id = self.model:Bind(StarMapModel.CLICK_POINT_ITEM,onClickPoint)
  147. local function onUpdateStarPower()
  148. self:SetStarPower()
  149. self:UpdateRedPoint()
  150. end
  151. self.update_star_power_event_id = self.model:Bind(StarMapModel.UPDATE_RED_POINT,onUpdateStarPower)
  152. end
  153. -- 是否进阶,进阶则播放特效
  154. function StarMapView:UpdateJinjie(old_data,new_data)
  155. if old_data == nil or new_data == nil then return end
  156. local old_cfg = Config.Starmap[old_data.star_map_id+1]
  157. local new_cfg = Config.Starmap[new_data.star_map_id+1]
  158. if old_cfg == nil or new_cfg == nil then return end
  159. if new_cfg.class_id > old_cfg.class_id or new_cfg.cons_id > old_cfg.cons_id then
  160. self:AddUIEffect("UI_jinjiechenggong", self.effect,self.layer_name, nil, nil, false)
  161. end
  162. end
  163. -- 更新界面信息
  164. function StarMapView:UpdateView()
  165. local data = self.model:GetStarMapData(self.starMap_data.star_map_id)
  166. if data == nil then return end
  167. lua_resM:setOutsideImageSprite(self,self.star_bg,GameResPath.GetStarMapImage("starMap_"..data.cons_id),false)
  168. self:SetStarPower()
  169. end
  170. -- 星力信息
  171. function StarMapView:SetStarPower()
  172. local data = self.model:GetStarMapData(self.starMap_data.star_map_id)
  173. if data == nil then return end
  174. local next_cosume = self.model:GetStarPointCosume(self.starMap_data.star_map_id + 1)
  175. local colorStr = ColorUtil.WHITE
  176. if next_cosume == nil then
  177. self.need_num.text = "已满级"
  178. self.upgrate_img.gray = true
  179. self.upgrate_label.text = "已满级"
  180. self.is_max = true
  181. else
  182. self.need_num.text = next_cosume
  183. colorStr = self.starMap_data.star_power >= next_cosume and ColorUtil.WHITE or ColorUtil.RED
  184. end
  185. self.have_num.text = string.format("<color=%s>%s</color>",colorStr,self.starMap_data.star_power)
  186. self.name.text = Trim(data.cons_name).."·"..Language.getChineseTxt(data.class_id)..""
  187. end
  188. -- 更新星点连线信息
  189. function StarMapView:UpdateStarLine()
  190. local point_list = self.model:GetStarPointList(self.starMap_data.star_map_id)
  191. if point_list == nil then return end
  192. local len = #point_list -1 -- 线比点数量少1
  193. local item
  194. if #self.star_line_list < len then
  195. local add_mount = len - #self.star_line_list
  196. for i = 1,add_mount do
  197. item = StarLineItem.New(self.line_con)
  198. table.insert(self.star_line_list,item)
  199. end
  200. elseif #self.star_line_list > len then
  201. local reduce_mount = #self.star_line_list - len
  202. for i = #self.star_line_list - reduce_mount + 1,#self.star_line_list do
  203. item = self.star_line_list[i]
  204. item:SetVisible(false)
  205. end
  206. end
  207. if len > 0 then
  208. for i = 1,len do
  209. item = self.star_line_list[i]
  210. item:SetData(point_list[i])
  211. if point_list[i].star_map_id < self.starMap_data.star_map_id then
  212. item:SetLight(true)
  213. else
  214. item:SetLight(false)
  215. end
  216. end
  217. end
  218. end
  219. -- 更新星点信息
  220. function StarMapView:UpdateStarPoint()
  221. local point_list = self.model:GetStarPointList(self.starMap_data.star_map_id)
  222. if point_list == nil then return end
  223. local len = #point_list
  224. local item
  225. if #self.star_point_list < len then
  226. local add_mount = len - #self.star_point_list
  227. for i = 1,add_mount do
  228. item = StarPointItem.New(self.point_con)
  229. item:SetVisible(false)
  230. table.insert(self.star_point_list,item)
  231. end
  232. elseif #self.star_point_list > len then
  233. local reduce_mount = #self.star_point_list - len
  234. for i = #self.star_point_list - reduce_mount + 1,#self.star_point_list do
  235. item = self.star_point_list[i]
  236. item:SetVisible(false)
  237. end
  238. end
  239. if len > 0 then
  240. for i = 1,len do
  241. item = self.star_point_list[i]
  242. item:SetData(point_list[i])
  243. item:SetVisible(true)
  244. if point_list[i].star_map_id <= self.starMap_data.star_map_id then
  245. item:SetLight(true)
  246. item:SetIsNext(false)
  247. elseif point_list[i].star_map_id == self.starMap_data.star_map_id + 1 then
  248. item:SetLight(false)
  249. item:SetIsNext(true)
  250. else
  251. item:SetLight(false)
  252. item:SetIsNext(false)
  253. end
  254. end
  255. end
  256. end
  257. -- 更新属性信息
  258. function StarMapView:UpdatePropData()
  259. local prop_list = self.starMap_data.attr
  260. table.sort(prop_list,function(a,b) return a.attr_type < b.attr_type end)
  261. local next_list = self.model:GetStarPointProp(self.starMap_data.star_map_id + 1)
  262. local len = #prop_list
  263. if #self.prop_item_list < len then
  264. local item = nil
  265. local add_mount = len - #self.prop_item_list
  266. for i = 1,add_mount do
  267. item = StarMapPropItem.New(self.prop_con)
  268. table.insert(self.prop_item_list,item)
  269. end
  270. elseif #self.prop_item_list > len then
  271. local reduce_mount = #self.prop_item_list - len
  272. for i = #self.prop_item_list - reduce_mount + 1,#self.prop_item_list do
  273. item = self.prop_item_list[i]
  274. item:SetVisible(false)
  275. end
  276. end
  277. if len > 0 then
  278. for i = 1,len do
  279. local next_val = 0
  280. item = self.prop_item_list[i]
  281. -- 检查是否有需要显示增加值
  282. if next_list ~= nil then
  283. next_val = 0
  284. for j = 1,#next_list do
  285. if tonumber(next_list[j][1]) == prop_list[i].attr_type then
  286. next_val = tonumber(next_list[j][2])
  287. end
  288. end
  289. end
  290. item:SetData(prop_list[i],next_val,i)
  291. end
  292. end
  293. self.combat.text = self.model:GetCombat(prop_list)
  294. end
  295. -- 星点的属性tip
  296. function StarMapView:SetPointTip(bool,index,id)
  297. if bool == true then
  298. local attr_list = self.model:GetStarPointProp(id)
  299. local str = ""
  300. local width = self.point_tip_bg.sizeDelta.x
  301. if #attr_list >0 then
  302. local endStr = ""
  303. local attr_name = ""
  304. local attr_value = ""
  305. for i = 1,#attr_list do
  306. if i == #attr_list then
  307. endStr = ""
  308. else
  309. endStr = "\n"
  310. end
  311. attr_name = WordManager:GetProperties(tonumber(attr_list[i][1]))
  312. attr_value = string.format("<color=%s> + %s</color>",ColorUtil.GREEN,WordManager:GetPropertyValue(tonumber(attr_list[i][1]),tonumber(attr_list[i][2])))
  313. str = str .. attr_name..attr_value..endStr
  314. end
  315. end
  316. self.point_tip_value.text = str
  317. self.point_tip_bg.sizeDelta = Vector2(width,self.point_tip_value.preferredHeight + 30)
  318. self.point_tip:SetActive(true)
  319. local pos = self.star_point_list[index].transform.localPosition
  320. self.point_tip.transform.localPosition = Vector3(pos.x+175,pos.y)
  321. self.point_tip.transform:SetAsLastSibling()
  322. else
  323. self.point_tip:SetActive(false)
  324. end
  325. end
  326. -- 星图升阶
  327. function StarMapView:ToUpgrate()
  328. if self.is_max == false then
  329. local light_id = self.starMap_data.star_map_id + 1
  330. self.model:Fire(StarMapModel.LIGHT_STAR_POINT,light_id)
  331. self.point_tip:SetActive(false)
  332. else
  333. Message.show("星图已升阶到最高级!")
  334. end
  335. end
  336. function StarMapView:UpdateRedPoint()
  337. self.red_point:SetActive(self.model:HaveRedPoint())
  338. end