StarMapView = StarMapView or BaseClass(BaseView) function StarMapView:__init() self.base_file = "starMap" self.layout_file = "StarMapView" self.layer_name = "UI" self.close_mode = CloseMode.CloseDestroy self.destroy_imm = true self.use_background = true self.append_to_ctl_queue = true self.starMap_data = nil self.star_point_list = {} self.star_line_list = {} self.prop_item_list = {} self.select_index = 0 self.is_max = false self.model = StarMapModel:getInstance() self.load_callback = function() self:LoadSuccess() self:InitEvent() end self.open_callback = function() self.model:Fire(StarMapModel.REQUEST_STAR_MAP_DATA) local function load_end_func( ) self:SetGameObjectDepth(self.fight_con) end self:AddUIEffect("effect_tubiao_005", self.fight_effect, self.layer_name, Vector3(0,4,0),0.8, true,nil,nil,nil,load_end_func) end self.close_callback = function( ) GlobalEventSystem:Fire(EventName.START_AUTO_DO_TASK) GlobalEventSystem:Fire(EventName.CLOSE_GUIDE_PROMPT_VIEW) end self.destroy_callback = function() self:Remove() end end function StarMapView:Remove() if self.update_starmap_data_event_id then self.model:UnBind(self.update_starmap_data_event_id) self.update_starmap_data_event_id = nil end if self.click_point_item_event_id then self.model:UnBind(self.click_point_item_event_id) self.click_point_item_event_id = nil end if self.update_star_power_event_id then self.model:UnBind(self.update_star_power_event_id) self.update_star_power_event_id = nil end for k,v in pairs(self.star_point_list) do v:DeleteMe() v = nil end self.star_point_list = {} for k,v in pairs(self.star_line_list) do v:DeleteMe() v = nil end self.star_line_list = {} for k,v in pairs(self.prop_item_list) do v:DeleteMe() v = nil end self.prop_item_list = {} end function StarMapView:LoadSuccess() self.close_btn = self:GetChild("windowCloseBtn").gameObject self.level_btn = self:GetChild("item_con/levelBtn").gameObject self.point_con = self:GetChild("item_con/point_con") self.line_con = self:GetChild("item_con/line_con") self.bg = self:GetChild("item_con/bg"):GetComponent("Image") self.star_bg = self:GetChild("item_con/star_bg"):GetComponent("Image") self.combat = self:GetChild("fight_con/value"):GetComponent("Text") self.fight_effect = self:GetChild("fight_effect") self.fight_con = self:GetChild("fight_con").gameObject self.name = self:GetChild("item_con/name_bg/name"):GetComponent("Text") self.prop_con = self:GetChild("prop/Group") self.need_num = self:GetChild("upgrate/need/num/value"):GetComponent("Text") self.have_num = self:GetChild("upgrate/have/num/value"):GetComponent("Text") self.help_btn = self:GetChild("help_btn").gameObject self.upgrate_btn = self:GetChild("upgrateBtn").gameObject self.upgrate_img = self:GetChild("upgrateBtn"):GetComponent("ImageExtend") self.upgrate_label = self:GetChild("upgrateBtn/Text"):GetComponent("Text") self.red_point = self:GetChild("upgrateBtn/redpoint").gameObject self.tip = self:GetChild("tip").gameObject self.tip_bg = self:GetChild("tip/ac_bg").gameObject self.effect = self:GetChild("effect") self.point_tip = self:GetChild("item_con/tip").gameObject self.point_tip_bg = self:GetChild("item_con/tip/bg") self.point_tip_value = self:GetChild("item_con/tip/value"):GetComponent("Text") lua_resM:setOutsideImageSprite(self,self.bg,GameResPath.GetJpgImage("bg_starMap.jpg"),false) self.touch = self:GetChild("touch").gameObject end function StarMapView:InitEvent() local function onClickHandler(target,x,y) if target == help_btn or target == self.tip_bg or target == self.upgrate_btn or self.level_btn or self.touch then if self.select_index > 0 then self.star_point_list[self.select_index]:SetSelect(false) self.select_index = 0 self:SetPointTip(false) end end if target == self.close_btn then self:Close() elseif target == self.help_btn then self.tip:SetActive(true) elseif target == self.tip_bg then self.tip:SetActive(false) elseif target == self.upgrate_btn then self:ToUpgrate() elseif target == self.level_btn then local id = self.starMap_data.star_map_id self.model:Fire(StarMapModel.OPEN_STAGE_VIEW,id,x,y) end end AddClickEvent(self.close_btn,onClickHandler) AddClickEvent(self.help_btn,onClickHandler) AddClickEvent(self.tip_bg,onClickHandler) AddClickEvent(self.upgrate_btn,onClickHandler) AddClickEvent(self.level_btn,onClickHandler) AddClickEvent(self.touch,onClickHandler) local function onUpdateData(data) if data == nil then return end self:UpdateJinjie(self.starMap_data,data) self.starMap_data = data self:UpdateView() self:UpdateStarLine() self:UpdateStarPoint() self:UpdatePropData() self:UpdateRedPoint() end self.update_starmap_data_event_id = self.model:Bind(StarMapModel.UPDATE_STAR_MAP_DATA,onUpdateData) local function onClickPoint(index,id) if index == self.select_index then self.star_point_list[index]:SetSelect(false) self.select_index = 0 self:SetPointTip(false) else if self.select_index > 0 then self.star_point_list[self.select_index]:SetSelect(false) end self.select_index = index self.star_point_list[self.select_index]:SetSelect(true) self:SetPointTip(true,index,id) end end self.click_point_item_event_id = self.model:Bind(StarMapModel.CLICK_POINT_ITEM,onClickPoint) local function onUpdateStarPower() self:SetStarPower() self:UpdateRedPoint() end self.update_star_power_event_id = self.model:Bind(StarMapModel.UPDATE_RED_POINT,onUpdateStarPower) end -- 是否进阶,进阶则播放特效 function StarMapView:UpdateJinjie(old_data,new_data) if old_data == nil or new_data == nil then return end local old_cfg = Config.Starmap[old_data.star_map_id+1] local new_cfg = Config.Starmap[new_data.star_map_id+1] if old_cfg == nil or new_cfg == nil then return end if new_cfg.class_id > old_cfg.class_id or new_cfg.cons_id > old_cfg.cons_id then self:AddUIEffect("UI_jinjiechenggong", self.effect,self.layer_name, nil, nil, false) end end -- 更新界面信息 function StarMapView:UpdateView() local data = self.model:GetStarMapData(self.starMap_data.star_map_id) if data == nil then return end lua_resM:setOutsideImageSprite(self,self.star_bg,GameResPath.GetStarMapImage("starMap_"..data.cons_id),false) self:SetStarPower() end -- 星力信息 function StarMapView:SetStarPower() local data = self.model:GetStarMapData(self.starMap_data.star_map_id) if data == nil then return end local next_cosume = self.model:GetStarPointCosume(self.starMap_data.star_map_id + 1) local colorStr = ColorUtil.WHITE if next_cosume == nil then self.need_num.text = "已满级" self.upgrate_img.gray = true self.upgrate_label.text = "已满级" self.is_max = true else self.need_num.text = next_cosume colorStr = self.starMap_data.star_power >= next_cosume and ColorUtil.WHITE or ColorUtil.RED end self.have_num.text = string.format("%s",colorStr,self.starMap_data.star_power) self.name.text = Trim(data.cons_name).."·"..Language.getChineseTxt(data.class_id).."阶" end -- 更新星点连线信息 function StarMapView:UpdateStarLine() local point_list = self.model:GetStarPointList(self.starMap_data.star_map_id) if point_list == nil then return end local len = #point_list -1 -- 线比点数量少1 local item if #self.star_line_list < len then local add_mount = len - #self.star_line_list for i = 1,add_mount do item = StarLineItem.New(self.line_con) table.insert(self.star_line_list,item) end elseif #self.star_line_list > len then local reduce_mount = #self.star_line_list - len for i = #self.star_line_list - reduce_mount + 1,#self.star_line_list do item = self.star_line_list[i] item:SetVisible(false) end end if len > 0 then for i = 1,len do item = self.star_line_list[i] item:SetData(point_list[i]) if point_list[i].star_map_id < self.starMap_data.star_map_id then item:SetLight(true) else item:SetLight(false) end end end end -- 更新星点信息 function StarMapView:UpdateStarPoint() local point_list = self.model:GetStarPointList(self.starMap_data.star_map_id) if point_list == nil then return end local len = #point_list local item if #self.star_point_list < len then local add_mount = len - #self.star_point_list for i = 1,add_mount do item = StarPointItem.New(self.point_con) item:SetVisible(false) table.insert(self.star_point_list,item) end elseif #self.star_point_list > len then local reduce_mount = #self.star_point_list - len for i = #self.star_point_list - reduce_mount + 1,#self.star_point_list do item = self.star_point_list[i] item:SetVisible(false) end end if len > 0 then for i = 1,len do item = self.star_point_list[i] item:SetData(point_list[i]) item:SetVisible(true) if point_list[i].star_map_id <= self.starMap_data.star_map_id then item:SetLight(true) item:SetIsNext(false) elseif point_list[i].star_map_id == self.starMap_data.star_map_id + 1 then item:SetLight(false) item:SetIsNext(true) else item:SetLight(false) item:SetIsNext(false) end end end end -- 更新属性信息 function StarMapView:UpdatePropData() local prop_list = self.starMap_data.attr table.sort(prop_list,function(a,b) return a.attr_type < b.attr_type end) local next_list = self.model:GetStarPointProp(self.starMap_data.star_map_id + 1) local len = #prop_list if #self.prop_item_list < len then local item = nil local add_mount = len - #self.prop_item_list for i = 1,add_mount do item = StarMapPropItem.New(self.prop_con) table.insert(self.prop_item_list,item) end elseif #self.prop_item_list > len then local reduce_mount = #self.prop_item_list - len for i = #self.prop_item_list - reduce_mount + 1,#self.prop_item_list do item = self.prop_item_list[i] item:SetVisible(false) end end if len > 0 then for i = 1,len do local next_val = 0 item = self.prop_item_list[i] -- 检查是否有需要显示增加值 if next_list ~= nil then next_val = 0 for j = 1,#next_list do if tonumber(next_list[j][1]) == prop_list[i].attr_type then next_val = tonumber(next_list[j][2]) end end end item:SetData(prop_list[i],next_val,i) end end self.combat.text = self.model:GetCombat(prop_list) end -- 星点的属性tip function StarMapView:SetPointTip(bool,index,id) if bool == true then local attr_list = self.model:GetStarPointProp(id) local str = "" local width = self.point_tip_bg.sizeDelta.x if #attr_list >0 then local endStr = "" local attr_name = "" local attr_value = "" for i = 1,#attr_list do if i == #attr_list then endStr = "" else endStr = "\n" end attr_name = WordManager:GetProperties(tonumber(attr_list[i][1])) attr_value = string.format(" + %s",ColorUtil.GREEN,WordManager:GetPropertyValue(tonumber(attr_list[i][1]),tonumber(attr_list[i][2]))) str = str .. attr_name..attr_value..endStr end end self.point_tip_value.text = str self.point_tip_bg.sizeDelta = Vector2(width,self.point_tip_value.preferredHeight + 30) self.point_tip:SetActive(true) local pos = self.star_point_list[index].transform.localPosition self.point_tip.transform.localPosition = Vector3(pos.x+175,pos.y) self.point_tip.transform:SetAsLastSibling() else self.point_tip:SetActive(false) end end -- 星图升阶 function StarMapView:ToUpgrate() if self.is_max == false then local light_id = self.starMap_data.star_map_id + 1 self.model:Fire(StarMapModel.LIGHT_STAR_POINT,light_id) self.point_tip:SetActive(false) else Message.show("星图已升阶到最高级!") end end function StarMapView:UpdateRedPoint() self.red_point:SetActive(self.model:HaveRedPoint()) end