源战役客户端
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 

300 rindas
12 KiB

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