源战役客户端
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

309 lines
13 KiB

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