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