|
|
- -- <*
- -- @Author: Saber
- -- @Description: 圣物装备装备升星界面
- -- *>
- PsionicAdvanceBreakView = PsionicAdvanceBreakView or BaseClass(BaseItem)
- local PsionicAdvanceBreakView = PsionicAdvanceBreakView
-
- function PsionicAdvanceBreakView:__init(parent_wnd,prefab_asset,layer_name)
- self.base_file = "psionic"
- self.layout_file = "PsionicAdvanceBreakView"
- self.parent_wnd = parent_wnd
- self.layer_name = layer_name
-
- self.selected_equip_list = {} -- 选中的装备列表 格式:{[配置顺序] = {need_num= 123, list = {goods_id, goods_id, ...}}, ...}
- self.cur_star_list = {}
- self.next_star_list = {}
- self.cost_item_list = {}
- self.is_auto_buy_mat = false -- 是否自动购买材料
- self.equip_need_num = 0 -- 进化所需装备数量
- self.model = PsionicModel:getInstance()
- self.goods_model = GoodsModel:getInstance()
- self.slot_break_red_equip_list = {}
-
- self:Load()
- end
-
- function PsionicAdvanceBreakView:Load_callback()
- local nodes = {
- "bg:raw",
- -- 战力节点
- "power_con",
- "power_con/power_lb1:tmp",
- "power_con/up_arrow",
- "power_con/power_cur:txt",
- "power_con/power_up:tmp",
- -- 模型,星星,属性item和装备节点
- "attr_scroll", "attr_scroll/Viewport/attr_con",
- "star_con_cur", "star_con_next",
- "arrow1:obj", "arrow2:obj",
- "item_cur", "item_next",
- "confirm_btn:obj",
- "confirm_btn/confirm_btn_red:obj",
- -- 进化需求相关节点
- "cost_item_bg:obj",
- "line1:obj",
- "line2:obj",
- "sub_title1:obj",
- }
- self:GetChildren(nodes)
-
- lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("ps_break_bg"))
- self.power_lb1_tmp.text = "战力"
- self.cur_equip_item = PsionicArmorItem.New(self.item_cur)
- self.cur_equip_item:SetAnchoredPosition(0, 0)
- self.cur_equip_item:SetVisible(false)
-
- self.next_equip_item = PsionicArmorItem.New(self.item_next)
- self.next_equip_item:SetAnchoredPosition(0, 0)
- self.next_equip_item:SetVisible(false)
-
-
- self:AddEvents()
- if self.need_refreshData then
- self:UpdateView()
- end
- end
-
- function PsionicAdvanceBreakView:AddEvents()
- local function click_event(target)
- if target == self.confirm_btn_obj then -- 确认进化
- self:OnConfirmBtnClick()
- end
- end
- AddClickEvent(self.confirm_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
-
- local function update_break_red(tab_id)
- if not tab_id or tab_id == PsionicConst.TabId.PBreak then
- self:UpdateView()
- end
- end
- self:BindEvent(self.model, PsionicConst.UPDATE_RED_BY_TABID, update_break_red)
- end
-
- function PsionicAdvanceBreakView:SetData( goods_vo, need_show_effect, slot_break_red_equip_list )
- self.goods_vo = goods_vo
- self.need_show_effect = need_show_effect -- 是否需要展示进化成功的属性流光动画
- self.slot_break_red_equip_list = slot_break_red_equip_list
- if self.is_loaded then
- self.need_refreshData = false
- self:UpdateView()
- else
- self.need_refreshData = true
- end
- end
-
- function PsionicAdvanceBreakView:UpdateView()
- -- 获取当前装备的进化配置
- self:UpdateBasicData()
- self:UpdateMaterialArmorItem()
- self:UpdateBreakBtnRed()
- end
-
- -- 加载基础数据(只加载一次)
- function PsionicAdvanceBreakView:UpdateBasicData( )
- -- 加载属性
- -- 获取配置
- self.cur_equip_item:SetData(self.goods_vo, PsionicConst.ArmorItemFlag.Show)
- self.cur_equip_item:SetVisible(true)
-
- self.next_psionic_cfg = self.model:GetPsionicEquipGradeCfg(self.goods_vo.next)
- local attr_cur = self.goods_vo.basic_attrs
- local basic_attr_next = self.next_psionic_cfg and self.next_psionic_cfg.attrs or {}
- local attr_next = self.next_psionic_cfg and self.next_psionic_cfg.attrs or {}
- -- 需要重新构造表来计算战斗力,否则会出错
- local attr_next = {}
- for k, v in ipairs(basic_attr_next) do
- attr_next[k] = {[1] = v[1], [2] = v[2]}
- end
- attr_cur = SortAttrList(attr_cur)
- attr_next = SortAttrList(attr_next)
-
- -- 战斗力表现
- local cur_power = GetFighting(attr_cur, false)
- local t_p_next = GetFighting(attr_next)
- self.power_cur_txt.text = cur_power
- self.power_up_tmp.text = GetFighting(attr_next, false) - cur_power
-
- local total_len = self.power_lb1_tmp.preferredWidth + self.power_cur_txt.preferredWidth
- if t_p_next ~= 0 then
- 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, self.next_psionic_cfg 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 data_list = self.model:GetPsionicLevelAttrList(attr_cur, attr_next)
- self.attr_item_creator = self.attr_item_creator or self:AddUIComponent(UI.ItemListCreator)
- local info = {
- data_list = data_list,
- scroll_view = self.attr_scroll,
- item_con = self.attr_con,
- prefab_ab_name = "psionic",
- prefab_res_name = "PsionicAdvanceBreakAttrItem",
- item_height = 28,
- start_y = -7.5,
- space_y = 8,
- create_frequency = 0.01,
- alignment = UnityEngine.TextAnchor.UpperLeft,
- child_names = {
- "arrow:obj",
- "val_name:tmp",
- "val_cur:tmp",
- "val_next:tmp",
- "attr_effect_con",
- },
- on_update_item = function(item, i, v)
- -- 调整节点大小
- item.arrow_obj:SetActive(self.next_psionic_cfg and true or false)
- item.val_name_tmp.text = WordManager:GetProperties(v.type)
- item.val_cur_tmp.text = WordManager:GetPropertyValue(v.type, v.cur_val)
- item.val_next_tmp.text = self.next_psionic_cfg and WordManager:GetPropertyValue(v.type, v.next_val - v.cur_val) or ""
- -- 属性流光特效
- if self.need_show_effect and not item.showing_attr_effect then
- local function call_back( )
- item.showing_attr_effect = false
- end
- self:ClearUIEffect(item.attr_effect_con)
- self:AddUIEffect("ui_jinjieshuxing", item.attr_effect_con, self.layer_name, Vector3(-175,0,0), 1, false, 0.75, nil, call_back)
- item.showing_attr_effect = true
- end
- end,
- }
- self.attr_item_creator:UpdateItems(info)
- -- 判断是否要显示下一等级的星星表现
- self.arrow1_obj:SetActive(self.next_psionic_cfg and true or false)
- self.arrow2_obj:SetActive(self.next_psionic_cfg and true or false)
- SetAnchoredPositionX(self.star_con_cur, self.next_psionic_cfg and 228.5 or 312.5)
- SetAnchoredPositionX(self.item_cur, self.next_psionic_cfg and 228.5 or 312.5)
- -- 加载当前星数
- for k, v in ipairs(self.cur_star_list) do
- v.gameObject:SetActive(false)
- end
- local cur_star_num = self.goods_vo.star
- local offset_x = (self.star_con_cur.sizeDelta.x - cur_star_num * 22) / 2
- for i = 1, cur_star_num do
- self.cur_star_list[i] = self.cur_star_list[i] or UiFactory.createChild(self.star_con_cur, UIType.Image2, "star" .. i)
- SetAnchoredPosition(self.cur_star_list[i].transform, (i-1) * 22 + offset_x - 1, -3)
- lua_resM:setImageSprite(self, self.cur_star_list[i]:GetComponent("Image"), "psionic_asset", "ps_star_1", true)
- self.cur_star_list[i].gameObject:SetActive(true)
- end
- -- 加载下一级星数
- for k, v in ipairs(self.next_star_list) do
- v.gameObject:SetActive(false)
- end
- if self.next_psionic_cfg then
- self.next_equip_item:SetData(nil, PsionicConst.ArmorItemFlag.Show, nil, self.goods_vo.next)
- self.next_equip_item:SetVisible(true)
- local next_equip_cfg = Config.Nucleonequip[self.goods_vo.next]
- local next_star_num = next_equip_cfg.star
- local offset_x = (self.star_con_next.sizeDelta.x - next_star_num * 22) / 2
- for i = 1, next_star_num do
- self.next_star_list[i] = self.next_star_list[i] or UiFactory.createChild(self.star_con_next, UIType.Image2, "star" .. i)
- SetAnchoredPosition(self.next_star_list[i].transform, (i-1) * 22 + offset_x - 1, -3)
- lua_resM:setImageSprite(self, self.next_star_list[i]:GetComponent("Image"), "psionic_asset", "ps_star_1", true)
- self.next_star_list[i].gameObject:SetActive(true)
- end
- else
- self.next_equip_item:SetVisible(false)
- end
- end
-
- -- 加载进化用材料装备
- function PsionicAdvanceBreakView:UpdateMaterialArmorItem()
- -- 加载材料装备和基础材料的消耗配置
- local cost_cfg = self.goods_vo.cost
- local cost_item_num = #cost_cfg
- for k, v in pairs(self.cost_item_list) do
- v:SetVisible(false)
- end
- self.has_enough_equip = true -- 提前记录,是否已经存在了足够的装备材料
- if self.goods_vo.next == 0 then -- 已经不需要再进化了
- -- 后续补上满破的表现
- self.has_enough_equip = false
- self.cost_item_bg_obj:SetActive(false)
- self.confirm_btn_obj:SetActive(false)
- self.sub_title1_obj:SetActive(false)
- self.line1_obj:SetActive(false)
- self.line2_obj:SetActive(false)
- else
- self.cost_item_bg_obj:SetActive(true)
- self.confirm_btn_obj:SetActive(true)
- self.sub_title1_obj:SetActive(true)
- self.line1_obj:SetActive(true)
- self.line2_obj:SetActive(true)
- local offset_x = (298 - cost_item_num * 80) / 2 + 10
- for k, v in ipairs(cost_cfg) do
- self.cost_item_list[k] = self.cost_item_list[k] or UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.cost_item_bg)
- self.cost_item_list[k]:SetAnchoredPosition(offset_x + (k-1) * 80, 0)
- self.cost_item_list[k]:SetVisible(true)
- self.cost_item_list[k]:SetItemSize(62, 62)
- local typeId, lock = self.goods_model:GetMappingTypeId(v[1], v[2])
- local have_num = self.goods_model:GetPsionicBagGoodsNumByTypeID(typeId, self.goods_vo.goods_id)
- self.cost_item_list[k]:SetData(typeId, 0, nil, nil, lock)
- local get_str = string.format("<color=%s>%s</color>/%s",
- have_num >= v[3] and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK,
- have_num, v[3])
- self.cost_item_list[k]:IsGetGoods(true, get_str)
- self.has_enough_equip = self.has_enough_equip and have_num >= v[3]
- end
- end
- end
-
- function PsionicAdvanceBreakView:UpdateBreakBtnRed( )
- if self.goods_vo then
- -- 先判断有没有红点,再判断是不是身上穿的
- -- local bool = self.model:GetPsionicBreakSlotRed(self.goods_vo.subtype)
- -- if bool then
- -- local cur_equip_vo = self.goods_model:GetPsionicEquipBySlot(self.goods_vo.subtype)
- -- self.confirm_btn_red_obj:SetActive(cur_equip_vo.goods_id == self.goods_vo.goods_id)
- -- else
- -- self.confirm_btn_red_obj:SetActive(false)
- -- end
- local break_red = self.slot_break_red_equip_list[self.goods_vo.subtype] and self.slot_break_red_equip_list[self.goods_vo.subtype] == self.goods_vo.goods_id or false
- self.confirm_btn_red_obj:SetActive(break_red)
- else
- self.confirm_btn_red_obj:SetActive(false)
- end
- end
-
- -- 进化按钮逻辑
- function PsionicAdvanceBreakView:OnConfirmBtnClick( )
- if self.has_enough_equip then
- -- 缓存当前进化对象的物品id,用于做物品升级后的结算表现
- self.model._break_type_id_cache[self.goods_vo.goods_id] = DeepCopy(self.goods_vo)
- -- bag_type 道具背包类型 GoodsModel.GOODS_POS_TYPE
- self.model:Fire(PsionicConst.REQUEST_CCMD_EVENT, 13907, self.goods_vo.goods_id, self.goods_vo.bag_type)
- else
- Message.show("圣物装备不足", "fault")
- end
- end
-
- function PsionicAdvanceBreakView:__delete( )
- if self.cur_equip_item then
- self.cur_equip_item:DeleteMe()
- self.cur_equip_item = nil
- end
-
- if self.next_equip_item then
- self.next_equip_item:DeleteMe()
- self.next_equip_item = nil
- end
-
- for k, v in pairs(self.cost_item_list) do
- UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, v)
- end
- self.cost_item_list = nil
- end
|