|
|
- PsionicSkillView = PsionicSkillView or BaseClass(BaseItem)
- local PsionicSkillView = PsionicSkillView
-
- function PsionicSkillView:__init(parent_wnd,prefab_asset,layer_name)
- self.base_file = "psionic"
- self.layout_file = "PsionicSkillView"
- self.parent_wnd = parent_wnd
- self.layer_name = layer_name
-
- self.model = PsionicModel:getInstance()
- self.goods_model = GoodsModel:getInstance()
- self.cur_lv_pro = {}
- self.next_lv_pro = {}
- self.upgrade_need_num = nil -- 缓存升级需要材料数
- self:Load()
- end
-
- function PsionicSkillView:Load_callback()
- local nodes = {
- "bg:raw",
- "upgrade_btn:obj:img", "upgrade_btn/upgrade_red:obj", "upgrade_btn/upgrade_btn_lb:tmp",
- -- 技能等级描述相关节点
- "skill_stage_lb1:tmp",
- "skill_stage_lb2:tmp",
- "skill_progress_con1",
- "skill_progress_con2:obj",
- "arrow1:obj",
- "arrow2:obj",
- "skill_lvBg1",
- "skill_lvBg2:obj",
- -- 等级战力相关
- "power_con:obj",
- "power_con/up_arrow:obj",
- "power_con/power_cur:txt",
- "power_con/power_up:tmp",
- "power_con/power_lb1:tmp",
- -- 技能节点相关
- "skill_icon1:img",
- "skill_lv1:tmp",
- "skill_icon2:obj:img",
- "skill_lv2:tmp",
- -- 技能描述
- "skill_desc:tmp",
- -- 技能描述容器内节点
- "attr_scroll", "attr_scroll/Viewport/attr_con",
- -- 觉醒花费相关
- "cost_item_bg:obj",
- "cost_item_con", "cost_item_name:tmp", "cost_item_num:tmp",
- }
- self:GetChildren(nodes)
- self.power_lb1_tmp.text = "战力"
- lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("ps_main_skill_bg"))
- self.cost_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.cost_item_con)
- self.cost_item:SetAnchoredPosition(0, 0)
- self.cost_item:SetItemSize(78, 78)
- self.cost_item:SetVisible(false)
-
- self:AddEvents()
- if self.need_refreshData then
- self:UpdateView()
- end
- end
-
- function PsionicSkillView:AddEvents( )
- local function click_event(target, x, y)
- if target == self.upgrade_btn_obj then -- 升级按钮
- self:OnClickUpgradeBtn()
- end
- end
- AddClickEvent(self.upgrade_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
-
- -- 技能等级提升后刷新技能等级相关数据
- local function update_skill_data(pos)
- if not pos or (self.skill_data and self.skill_data.pos == pos) then
- self:UpdateView()
- end
- end
- self:BindEvent(self.model, PsionicConst.UPDATE_SLOT_SKILL, update_skill_data)
-
- -- 技能觉醒等级提升后刷新下级突破配置及消耗信息
- local function update_awake_data(pos)
- if not pos or (self.skill_data and self.skill_data.pos == pos) then
- self:UpdateAttrItem()
- self:UpdateUpgradeCost()
- self:UpdateSkillRed()
- end
- end
- self:BindEvent(self.model, PsionicConst.UPDATE_PSIONIC_AWAKE_DATA, update_awake_data)
-
- local function update_skill_red(tab_id)
- if not tab_id or tab_id == PsionicConst.TabId.PSkill then
- self:UpdateUpgradeCost()
- end
- end
- self:BindEvent(self.model, PsionicConst.UPDATE_RED_BY_TABID, update_skill_red)
- end
-
- -- data为服务端返回的技能数据 13900
- function PsionicSkillView:SetData( skill_data )
- self.skill_data = skill_data
- if self.is_loaded then
- self.need_refreshData = false
- self:UpdateView()
- else
- self.need_refreshData = true
- end
- end
-
- function PsionicSkillView:UpdateView( )
- if self.skill_data then
- self.skill_lv = self.skill_data and self.skill_data.skill_lv or 1 -- 技能等级
- self.awake_lv = self.skill_data and self.skill_data.sec_lv or 0 -- 觉醒等级
- -- 技能等级配置 Config.Nucleonsection
- self.skill_lv_cfg = self.model:GetPsionicAwakeCfg(self.skill_data.pos, self.awake_lv)
- self.skill_cfg = ConfigItemMgr.Instance:GetSkillItem(self.skill_data.skill_id)
- local is_max = self.skill_lv_cfg.next == 0 -- 是否已经升满
- self.next_skill_lv_cfg = not is_max and self.model:GetPsionicAwakeCfg(self.skill_data.pos, self.awake_lv + 1) or nil
- self.sec_skill_id = self.next_skill_lv_cfg and self.next_skill_lv_cfg.sec_skill[1][1] or nil
- if not self.sec_skill_id then -- 拿不到下一级的配置,就拿当前的配置
- self.sec_skill_id = self.skill_lv_cfg and self.skill_lv_cfg.sec_skill[1][1] or nil
- end
- self.next_sec_skill_lv = self.next_skill_lv_cfg and self.next_skill_lv_cfg.sec_skill[1][2] or 1
- self.sec_skill_cfg = self.sec_skill_id and ConfigItemMgr.Instance:GetSkillItem(self.sec_skill_id) or nil
- self:UpdateBasicData()
- self:UpdateSkillLvData()
- self:UpdateAttrItem()
- self:UpdateUpgradeCost()
- end
- self:UpdateSkillRed()
- end
-
- -- 加载基础数据(一次更新只加载一次)
- function PsionicSkillView:UpdateBasicData( )
- -- self.skill_name_tmp.text = Trim(self.skill_cfg.name)
- lua_resM:setOutsideImageSprite(self, self.skill_icon1_img, GameResPath.GetSkillIcon(self.skill_data.skill_id))
- lua_resM:setOutsideImageSprite(self, self.skill_icon2_img, GameResPath.GetSkillIcon(self.skill_data.skill_id))
- end
-
- -- 根据技能等级记载配置数据
- function PsionicSkillView:UpdateSkillLvData( )
- local is_max = self.skill_lv_cfg.next == 0 -- 是否已经升满
- self.skill_lv1_tmp.text = string.format("Lv.%s", self.awake_lv)
- self.skill_lv2_tmp.text = is_max and "" or string.format("Lv.%s", self.awake_lv+1)
- -- 加载描述
- -- 获取目标等级的配置
- 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 next_lvs_cfg = not is_max and self.sec_skill_cfg.lvs and self.sec_skill_cfg.lvs[self.next_sec_skill_lv] or nil
- if next_lvs_cfg then
- desc = desc .. string.format("\n<color=#fdffc2>下一级:%s</color>", Trim(next_lvs_cfg.desc))
- elseif is_max then -- 满级的情况,就使用当前等级的
- 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<color=#fdffc2>%s</color>", Trim(self.sec_skill_cfg.lvs[cur_sec_skill_lv].desc))
- end
- self.skill_desc_tmp.text = desc
- -- 加载等级描述
- self.skill_stage_lb1_tmp.text = string.format("%s段觉醒", ChineseNumber(self.awake_lv))
- self.skill_stage_lb2_tmp.text = is_max and "" or string.format("%s段觉醒", ChineseNumber(self.awake_lv+1))
- -- 加载进度节点
- -- 当前等级
- for i = 1, 6 do
- self.cur_lv_pro[i] = self.cur_lv_pro[i] or UiFactory.createChild(self.skill_progress_con1, 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
- -- 下一等级
- if not is_max then
- for i = 1, 6 do
- self.next_lv_pro[i] = self.next_lv_pro[i] or UiFactory.createChild(self.skill_progress_con2, UIType.Image, "pro" .. i)
- SetAnchoredPosition(self.next_lv_pro[i].transform, (i-3) * 12 - 6, -6)
- lua_resM:setImageSprite(self, self.next_lv_pro[i]:GetComponent("Image"), "psionic_asset",
- i <= (self.awake_lv + 1) and "ps_skill_pro1" or "ps_skill_pro0", true)
- end
- end
- -- 根据技能等级调整节点
- self:UpdateNodePos(is_max)
- end
-
- -- 加载属性节点和升级道具
- function PsionicSkillView:UpdateAttrItem( )
- local is_max = self.skill_lv_cfg.next == 0 -- 是否已经升满
-
- self.attr_next = not is_max and self.model:GetPsionicAwakeCfg(self.skill_data.pos, self.skill_lv_cfg.next) or nil
- local info_list = {}
- -- 组合配置
- local cur_attr = self.skill_lv_cfg.attrs
- local cur_power = GetFighting(cur_attr)
- self.power_cur_txt.text = cur_power
- local next_attr = self.attr_next and self.attr_next.attrs or nil
- -- 更新战力和战力节点位置
- local total_len = self.power_cur_txt.preferredWidth + self.power_lb1_tmp.preferredWidth
- if next_attr then
- local next_power = GetFighting(next_attr)
- self.power_up_tmp.text = next_power - cur_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, next_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(cur_attr, next_attr)
- -- 属性条目
- for k, v in ipairs(combine_attr_list) do
- info_list[#info_list+1] = {attr_list = v, is_max = is_max}
- 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
-
- -- 根据技能等级调整节点
- function PsionicSkillView:UpdateNodePos(is_max)
- self.arrow1_obj:SetActive(not is_max)
- self.arrow2_obj:SetActive(not is_max)
- self.skill_lvBg2_obj:SetActive(not is_max)
- self.skill_icon2_obj:SetActive(not is_max)
- self.skill_progress_con2_obj:SetActive(not is_max)
- SetAnchoredPositionX(self.skill_stage_lb1, is_max and 304.5 or 213)
- SetAnchoredPositionX(self.skill_progress_con1, is_max and 304.5 or 213)
- SetAnchoredPositionX(self.skill_icon1, is_max and 304.5 or 213)
- SetAnchoredPositionX(self.skill_lv1, is_max and 304.5 or 213)
- SetAnchoredPositionX(self.skill_lvBg1, is_max and 304.5 or 213)
- end
-
- function PsionicSkillView:UpdateUpgradeCost( )
- -- 加载升级花费
- if self.attr_next then -- 存在下一级的配置,就还没满级
- local cost = self.skill_lv_cfg.cost[1]
- local typeId, lock = self.goods_model:GetMappingTypeId(cost[1], cost[2])
- local have_num = self.goods_model:GetTypeGoodsNum(typeId)
- self.cost_item:SetData(typeId, 0, nil, nil, lock)
- self.cost_item:SetVisible(true)
- self.cost_item_name_tmp.text = self.goods_model:getGoodsName(typeId, true, true)
- self.cost_item_num_tmp.text = string.format("需求数量:<color=%s>%s</color>/%s",
- cost[3] <= have_num and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK,
- have_num, cost[3])
- self.upgrade_need_num = cost[3]
- self.upgrade_btn_obj:SetActive(true)
- self.cost_item_bg_obj:SetActive(true)
- else
- self.cost_item_name_tmp.text = ""
- self.cost_item_num_tmp.text = ""
- self.cost_item:SetVisible(false)
- self.upgrade_btn_obj:SetActive(false)
- self.cost_item_bg_obj:SetActive(false)
- self.upgrade_need_num = nil
- end
- end
-
- -- 点击升级按钮回调
- function PsionicSkillView:OnClickUpgradeBtn( )
- if self.skill_data and self.attr_next and self.upgrade_need_num then
- local cost = self.skill_lv_cfg.cost[1]
- local have_num = self.goods_model:GetTypeGoodsNum(cost[2])
- if have_num < self.upgrade_need_num then
- Message.show("道具不足")
- UIToolTipMgr:getInstance():AppendGoodsTips(cost[2], x, y, nil, nil, nil, nil, true)
- return
- end
- -- local function ok( ... )
- if not self.model._block_skill_upgrade_click then
- self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13908, self.skill_data.pos)
- self.model._block_skill_upgrade_click = true
- end
- -- end
- -- local ask_str = string.format("是否确定消耗%s %s进行圣物觉醒?",
- -- self.upgrade_need_num, self.goods_model:getGoodsName(cost[2], true, false))
- -- Alert.show(ask_str, Alert.Type.Two, ok, nil, "确定", "取消")
- end
- end
-
- function PsionicSkillView:UpdateSkillRed( )
- local skill_red = self.skill_data and self.model:GetPsionicSkillSlotRedCache(self.skill_data.pos) or false
- self.upgrade_red_obj:SetActive(skill_red)
- SetImageGray(self.upgrade_btn_img, not skill_red)
- SetTMPSharedMaterial(self.upgrade_btn_lb_tmp,
- skill_red and ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn
- or ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
- end
-
- function PsionicSkillView:__delete( )
- if self.cost_item then
- UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.cost_item)
- end
- self.cost_item = nil
- self.model._block_skill_upgrade_click = false -- 关闭界面时取消掉这个点击屏蔽
- end
|