|
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
|