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