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