-- <* -- @Author: Saber -- @Description: 圣物觉醒成功结算界面 -- *> PsionicSkillUpgradeSuccessView = PsionicSkillUpgradeSuccessView or BaseClass(BaseView) local PsionicSkillUpgradeSuccessView = PsionicSkillUpgradeSuccessView local TimeUtil = TimeUtil local string_format = string.format function PsionicSkillUpgradeSuccessView:__init() self.base_file = "psionic" self.layout_file = "PsionicSkillUpgradeSuccessView" self.layer_name = "Activity" self.destroy_imm = true self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置 self.hide_maincancas = true --全屏界面需要隐藏主UI self.change_scene_close = true --是否切换场景时关闭(弹出界面使用) self.is_set_zdepth = true self.model = PsionicModel:getInstance() -- 初始化数据 self.slot_data = nil self.pre_lv_pro = {} self.cur_lv_pro = {} self.load_callback = function () self:LoadSuccess() self:AddEvent() end self.open_callback = function ( ) self:UpdateView() end self.destroy_callback = function ( ) self:DestroySuccess() end end -- slot_data 槽位数据,其中的等级为升级后的等级,旧等级在这个基础上减1 function PsionicSkillUpgradeSuccessView:Open(slot_data) self.slot_data = slot_data BaseView.Open(self) end function PsionicSkillUpgradeSuccessView:LoadSuccess() local nodes = { "bg:raw", "bg/title:img", "content:cg", "content/close_btn:obj", "content/model_con", "content/skill_icon1:img", "content/skill_icon2:img", "content/skill_progress_con1", "content/skill_progress_con2", "content/power_con", "content/power_con/up_arrow:img", "content/power_con/power_cur:txt", "content/power_con/power_lb1:tmp", "content/power_con/power_up:tmp", "content/attr_scroll", "content/attr_scroll/Viewport/attr_con", "content/skill_lv1:tmp", "content/skill_lv2:tmp", "content/skill_stage_lb1:tmp", "content/skill_stage_lb2:tmp", "content/skill_desc:tmp", "content/auto_close_timer:tmp", } self:GetChildren(nodes) lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("ps_skill_upgrade_success_bg")) lua_resM:setImageSprite(self, self.title_img, "psionicExtra_asset", "ps_skill_upgrade_success_title") end function PsionicSkillUpgradeSuccessView:AddEvent() local function click_event(target) if target == self.close_btn_obj then self:Close() end end AddClickEvent(self.close_btn_obj, click_event) end function PsionicSkillUpgradeSuccessView:UpdateView() self:UpdatePsionicModel() self:UpdateBasicData() self:UpdateAutoCloseTimer() end -- 更新界面的模型表现 function PsionicSkillUpgradeSuccessView:UpdatePsionicModel( ) if self.slot_data then -- 加载圣物模型 local model_data = PsionicConst.SlotModel[self.slot_data.pos] local res_data = { father_node = self, transform = self.model_con, fashion_type = FuncOpenModel.TypeId.OtherGoods, raycast_size = Vector2(0,0), rotate = model_data.rotate, scale = model_data.scale, figure_id = model_data.model, position = model_data.pos + Vector3(0, 65, 0), layer_name = self.layer_name, ui_model_type = UIModelCommon.ModelType.Model, } FuncOpenModel:getInstance():SetModelRes(res_data) end end -- 更新界面的基础数据 function PsionicSkillUpgradeSuccessView:UpdateBasicData( ) if self.slot_data then --- 获取配置和必要数据 --- self.awake_lv = self.slot_data and self.slot_data.sec_lv or 1 -- 觉醒等级 -- 技能等级配置 Config.Nucleonsection self.skill_lv_cfg = self.model:GetPsionicAwakeCfg(self.slot_data.pos, self.awake_lv) self.skill_cfg = ConfigItemMgr.Instance:GetSkillItem(self.slot_data.skill_id) self.skill_id = self.skill_lv_cfg and self.skill_lv_cfg.sec_skill[1][1] or nil -- 这个指的是觉醒后获得的第二技能的技能id,不是展示用的技能id self.sec_skill_cfg = self.skill_id and ConfigItemMgr.Instance:GetSkillItem(self.skill_id) or nil self.pre_skill_lv_cfg = self.model:GetPsionicAwakeCfg(self.slot_data.pos, self.awake_lv - 1) -- 技能图标 lua_resM:setOutsideImageSprite(self, self.skill_icon1_img, GameResPath.GetSkillIcon(self.slot_data.skill_id)) lua_resM:setOutsideImageSprite(self, self.skill_icon2_img, GameResPath.GetSkillIcon(self.slot_data.skill_id)) self.skill_lv1_tmp.text = string.format("Lv.%s", self.awake_lv - 1) self.skill_lv2_tmp.text = string.format("Lv.%s", self.awake_lv) -- 加载描述 -- 获取目标等级的配置 local desc = "" local lvs_cfg = self.skill_cfg.lvs and self.skill_cfg.lvs[1] or nil -- 主技能只有1级 if lvs_cfg then desc = Trim(lvs_cfg.desc) end -- 当前等级的描述 local cur_sec_skill_lv = self.skill_lv_cfg and self.skill_lv_cfg.sec_skill[1] and self.skill_lv_cfg.sec_skill[1][2] or 1 desc = desc .. string.format("\n效果追加:%s", Trim(self.sec_skill_cfg.lvs[cur_sec_skill_lv].desc)) self.skill_desc_tmp.text = desc -- 加载等级描述 self.skill_stage_lb1_tmp.text = string.format("%s段觉醒", ChineseNumber(self.awake_lv - 1)) self.skill_stage_lb2_tmp.text = string.format("%s段觉醒", ChineseNumber(self.awake_lv)) -- 加载进度节点 -- 当前等级 for i = 1, 6 do self.pre_lv_pro[i] = self.pre_lv_pro[i] or UiFactory.createChild(self.skill_progress_con1, UIType.Image, "pro" .. i) SetAnchoredPosition(self.pre_lv_pro[i].transform, (i-3) * 12 - 6, -6) lua_resM:setImageSprite(self, self.pre_lv_pro[i]:GetComponent("Image"), "psionic_asset", i <= (self.awake_lv - 1) and "ps_skill_pro1" or "ps_skill_pro0", true) end -- 下一等级 for i = 1, 6 do self.cur_lv_pro[i] = self.cur_lv_pro[i] or UiFactory.createChild(self.skill_progress_con2, UIType.Image, "pro" .. i) SetAnchoredPosition(self.cur_lv_pro[i].transform, (i-3) * 12 - 6, -6) lua_resM:setImageSprite(self, self.cur_lv_pro[i]:GetComponent("Image"), "psionic_asset", i <= self.awake_lv and "ps_skill_pro1" or "ps_skill_pro0", true) end --- 计算战力和列举属性 --- local info_list = {} -- 组合配置 local pre_attr = self.pre_skill_lv_cfg.attrs local pre_power = GetFighting(pre_attr) self.power_cur_txt.text = pre_power -- 懒得改节点名称了,这里展示的实际上是旧的战斗力 local cur_attr = self.skill_lv_cfg.attrs -- 升级后(当前)的属性数据 -- 更新战力和战力节点位置 local total_len = self.power_cur_txt.preferredWidth + self.power_lb1_tmp.preferredWidth if cur_attr then local next_power = GetFighting(cur_attr) self.power_up_tmp.text = next_power - pre_power total_len = total_len + self.up_arrow.sizeDelta.x + self.power_up_tmp.preferredWidth + 15 end local offset_x = (self.power_con.sizeDelta.x - total_len) / 2 SetAnchoredPositionX(self.power_lb1, offset_x) SetAnchoredPositionX(self.power_cur, offset_x + self.power_lb1_tmp.preferredWidth + 5) SetAnchoredPositionX(self.up_arrow, cur_attr and self.power_cur.anchoredPosition.x + self.power_cur_txt.preferredWidth + 5 or 999999) SetAnchoredPositionX(self.power_up, self.up_arrow.anchoredPosition.x + 20) local combine_attr_list = self.model:GetPsionicLevelAttrList(pre_attr, cur_attr) -- 属性条目 for k, v in ipairs(combine_attr_list) do info_list[#info_list+1] = {attr_list = v, is_max = false} end self.attr_item_creator = self.attr_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = info_list, scroll_view = self.attr_scroll, item_con = self.attr_con, item_class = PsionicSkillAttrItem, item_height = 36, start_x = 6, start_y = -4, space_y = 0, create_frequency = 0.01, alignment = UnityEngine.TextAnchor.UpperLeft, on_update_item = function(item, i, v) item:SetData(v, i) end, } self.attr_item_creator:UpdateItems(info) end end function PsionicSkillUpgradeSuccessView:UpdateAutoCloseTimer( ) local close_time = TimeUtil:getServerTime() + 10 local color1 = ColorUtil.GREEN_DARK local function auto_close_func() local left_time = close_time - TimeUtil:getServerTime() if left_time > 0 then self.auto_close_timer_tmp.text = string_format("%s 秒后自动关闭", color1, left_time) else self.auto_close_timer_tmp.text = string_format("%s 秒后自动关闭", color1, 0) self:ClearAutoCloseTimerId() self:Close() end end self:ClearAutoCloseTimerId() self.auto_close_func_id = GlobalTimerQuest:AddPeriodQuest(auto_close_func, 0.5, -1) auto_close_func() end function PsionicSkillUpgradeSuccessView:ClearAutoCloseTimerId( ) if self.auto_close_func_id then GlobalTimerQuest:CancelQuest(self.auto_close_func_id) self.auto_close_func_id = nil end end function PsionicSkillUpgradeSuccessView:DestroySuccess( ) self:ClearAutoCloseTimerId() end