源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

256 rivejä
10 KiB

PsionicWashView = PsionicWashView or BaseClass(BaseItem)
local PsionicWashView = PsionicWashView
local SortAttrList = SortAttrList
function PsionicWashView:__init(parent_wnd,prefab_asset,layer_name)
self.base_file = "psionic"
self.layout_file = "PsionicWashView"
self.parent_wnd = parent_wnd
self.layer_name = layer_name
self.model = PsionicModel:getInstance()
self.goods_model = GoodsModel:getInstance()
self.wash_cfg = nil
self:Load()
end
function PsionicWashView:Load_callback()
local nodes = {
"bg:raw",
-- awardItem容器
"equip_con", "cost_item_con",
-- 按钮
"break_btn:obj:img", "break_btn/break_btn_lb:tmp", "break_btn/break_red:obj",
"wash_btn:obj:img", "wash_btn/wash_btn_lb:tmp", "wash_btn/wash_red:obj",
-- 属性容器
"attr_scroll",
"attr_scroll/Viewport/attr_con",
-- 战斗力节点
"power_con",
"power_con/power_lb1:tmp",
"power_con/power_cur:txt",
-- 消费节点描述
"cost_item_name:tmp", "cost_item_num:tmp",
-- 洗练装备描述
"equip_lv:tmp", "equip_break_tip:tmp", "equip_lv_tip:tmp",
}
self:GetChildren(nodes)
lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("ps_main_wash_bg"))
self.equip_item = PsionicArmorItem.New(self.equip_con)
self.equip_item:SetAnchoredPosition(0, 0)
self.equip_item:SetVisible(false)
self.cost_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.cost_item_con)
self.cost_item:SetAnchoredPosition(0, 0)
self.cost_item:SetItemSize(62, 62)
self.cost_item:SetVisible(false)
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
function PsionicWashView:AddEvents( )
local function click_event(target)
if target == self.break_btn_obj then
self:OnBreakBtnClick()
elseif target == self.wash_btn_obj then
self:OnWashBtnClick()
end
end
AddClickEvent(self.break_btn_obj, click_event)
AddClickEvent(self.wash_btn_obj, click_event)
local function update_wash_data(pos, reports) -- 洗练或突破成功时刷新
if not pos or self.goods_vo and self.goods_vo.subtype == pos then
self:UpdateWashInfo() -- 加载槽位洗练信息
-- self:UpdateWashCostItem()
self:UpdateEquipWashAttr() -- 加载装备洗练属性信息
-- self:UpdateWashAndBreakRed() -- 更新红点
end
end
self:BindEvent(self.model, PsionicConst.UPDATE_SLOT_WASH_DATA, update_wash_data)
local function update_wash_btn_red(tab_id)
if tab_id and tab_id == PsionicConst.TabId.PWash then
self:UpdateWashCostItem()
self:UpdateWashAndBreakRed() -- 更新红点
end
end
self:BindEvent(self.model, PsionicConst.UPDATE_RED_BY_TABID, update_wash_btn_red)
end
-- 需传入当前装备vo
function PsionicWashView:SetData( goods_vo )
self.goods_vo = goods_vo
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function PsionicWashView:UpdateView( )
if self.goods_vo then
-- 如今洗练属性跟槽位绑定,不跟装备
self.slot_data = self.model:GetPsionicSlotData(self.goods_vo.subtype)
self:UpdateBasicInfo() -- 加载装备基础信息
self:UpdateWashInfo() -- 加载槽位洗练信息
self:UpdateWashCostItem() -- 加载槽位洗练花费
self:UpdateEquipWashAttr() -- 加载装备洗练属性信息
end
self:UpdateWashAndBreakRed()
end
-- 加载装备基础信息
function PsionicWashView:UpdateBasicInfo( )
-- 展示当前装备
self.equip_item:SetData(self.goods_vo, PsionicConst.ArmorItemFlag.Show)
self.equip_item:SetVisible(true)
end
-- 加载槽位洗练信息
function PsionicWashView:UpdateWashInfo( )
if self.slot_data then
-- 洗练配置
self.wash_cfg = self.model:GetPsionicWashCfg(self.goods_vo.subtype, self.slot_data.grade)
local stage_max_lv, max_stage = self.model:GetPsionicSlotStageMaxLevel(self.slot_data.grade)
self.equip_lv_tmp.text = string.format("等级:<color=%s>%s</color>/%s", ColorUtil.GREEN_DARK,
self.slot_data.lv, stage_max_lv)
if max_stage > self.slot_data.grade then -- 还没有到达最终阶段
local lv_data = Config.Nucleonlv[self.slot_data.lv]
local slot_can_break = stage_max_lv <= self.slot_data.lv and self.slot_data.exp >= lv_data.exp -- 当前槽位已达到阶段满级满经验
-- 达到突破条件
if slot_can_break then
local next_max_lv = self.model:GetPsionicSlotStageMaxLevel(self.slot_data.grade + 1) -- 获取下一阶段的最高等级
self.equip_lv_tip_tmp.text = string.format("突破后 <color=%s>等级上限拓展至%s</color>", ColorUtil.GREEN_DARK, next_max_lv)
else
self.equip_lv_tip_tmp.text = string.format("圣物升级到满级后 <color=%s>可突破</color>", ColorUtil.GREEN_DARK)
end
-- 设置突破所需属性条件
self.equip_break_tip_tmp.text = string.format("至少 <color=%s>1条属性洗练满值</color> 可突破", ColorUtil.GREEN_DARK)
else
self.equip_lv_tip_tmp.text = "当前开放等级已达上限"
self.equip_break_tip_tmp.text = "当前突破阶段已达上限"
end
end
end
function PsionicWashView:UpdateWashCostItem( )
if self.slot_data then
-- 设置洗练花费
local cost_data = self.wash_cfg.cost[1]
local typeId, lock = self.goods_model:GetMappingTypeId(cost_data[1], cost_data[2])
self.cost_item:SetData(typeId, 0, nil, nil, lock)
self.cost_item:SetVisible(true)
local has_num = self.goods_model:GetTypeGoodsNum(typeId)
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_data[3] <= has_num and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK,
has_num, cost_data[3])
end
end
function PsionicWashView:UpdateEquipWashAttr( )
-- 协议属性
local attr_list, attr_id_list = {}, {}
for k, v in pairs(self.slot_data.attrs) do
attr_list[#attr_list+1] = {[1] = v.attr_id, [2] = v.attr_value}
attr_id_list[v.attr_id] = v.attr_value
end
-- 创建属性节点
self.attr_item_creator = self.attr_item_creator or self:AddUIComponent(UI.ItemListCreator)
local info = {
data_list = self.wash_cfg.maxs, -- 使用满级属性列表的数据作为节点数据
scroll_view = self.attr_scroll,
item_con = self.attr_con,
item_class = PsionicWashAttrItem,
item_height = 50,
start_x = -2,
start_y = -3,
create_frequency = 0.01,
alignment = UnityEngine.TextAnchor.UpperLeft,
on_update_item = function(item, i, v)
local attr_id = v[1]
local cur_val = attr_id_list[attr_id] or 0
item:SetData(self.goods_vo.subtype, v, cur_val)
end,
}
self.attr_item_creator:UpdateItems(info)
-- 更新战斗力
self.power_cur_txt.text = GetFighting(attr_list)
local total_len = self.power_lb1_tmp.preferredWidth + self.power_cur_txt.preferredWidth
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)
end
-- 突破按钮
function PsionicWashView:OnBreakBtnClick( )
if self.goods_vo then
self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13906, self.goods_vo.subtype)
-- self.model:Fire(PsionicConst.OPEN_MAIN_VIEW, true, PsionicConst.TabId.PAdvance) -- 切换到升级突破界面
end
end
-- 洗练按钮
function PsionicWashView:OnWashBtnClick( )
if self.goods_vo and self.wash_cfg then
--先判断宠物生活技能 如果有免费次数 直接发协议
local wash_red = self.goods_vo and self.model:GetPsionicWashSlotRed(self.goods_vo.subtype) or false
local left_free_wash_times = self.model:GetPsionicFreeWashTimes()
if left_free_wash_times > 0 and wash_red then--如果是词条满了那红点必是false,那么免费洗练也不用判断
self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13909, self.goods_vo.subtype) -- 发送洗练协议
return
end
local cost_data = self.wash_cfg.cost[1]
local typeId, lock = self.goods_model:GetMappingTypeId(cost_data[1], cost_data[2])
local has_num = self.goods_model:GetTypeGoodsNum(typeId)
if has_num > 0 then
self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13909, self.goods_vo.subtype) -- 发送洗练协议
else
UIToolTipMgr:getInstance():AppendGoodsTips(typeId, x, y, nil, nil, nil, nil, true)
end
end
end
-- 更新洗练和突破的红点
function PsionicWashView:UpdateWashAndBreakRed( )
local break_red = self.goods_vo and self.model:GetPsionicWashSlotBreakRed(self.goods_vo.subtype) or false
self.break_red_obj:SetActive(break_red)
SetImageGray(self.break_btn_img, not break_red)
SetTMPSharedMaterial(self.break_btn_lb_tmp,
break_red and ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn
or ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
local wash_red = self.goods_vo and self.model:GetPsionicWashSlotRed(self.goods_vo.subtype) or false
self.wash_red_obj:SetActive(wash_red)
SetImageGray(self.wash_btn_img, not wash_red)
SetTMPSharedMaterial(self.wash_btn_lb_tmp,
wash_red and ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn
or ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
--宠物生活技能多加一次免费洗练
local left_free_wash_times = self.model:GetPsionicFreeWashTimes()
if left_free_wash_times > 0 and wash_red then--如果是词条满了那红点必是false,那么免费洗练也不用判断
self.wash_btn_lb_tmp.text = "免费洗练"
else
self.wash_btn_lb_tmp.text = "洗练"
end
end
function PsionicWashView:__delete( )
if self.equip_item then
self.equip_item:DeleteMe()
self.equip_item = nil
end
if self.cost_item then
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.cost_item)
end
self.cost_item = nil
end