源战役客户端
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 

283 righe
10 KiB

-- <*
-- @Author: Saber
-- @Description: 圣物系统内通用装备item
-- *>
PsionicArmorItem = PsionicArmorItem or BaseClass(BaseItem)
local PsionicArmorItem = PsionicArmorItem
function PsionicArmorItem:__init(parent_wnd,prefab_asset,layer_name)
self.base_file = "psionic"
self.layout_file = "PsionicArmorItem"
self.parent_wnd = parent_wnd
self.layer_name = layer_name
self.is_selected = false
self.item_scale = 1
self.item_gray = false
self.item_total_gray = false
self.break_show_locktype = 0 -- 圣物突破右侧展示节点无数据表现类型
self.model = PsionicModel:getInstance()
self.goods_model = GoodsModel:getInstance()
self.pos = false
self.slot_break_red_equip_list = {}
self:Load()
end
function PsionicArmorItem:Load_callback()
local nodes = {
"empty_bg:obj",
"item_con",
"reddot:obj",
"equiped:obj", -- 穿戴中标识
"selected:obj", -- 选中标识
"selected2:obj",
"locked:obj",
"break_add:obj",
"quality_flag:obj:img", -- 最高品质标识
-- 可穿戴/可替换标识
"equip_flag:obj",
"replace_flag:obj",
}
self:GetChildren(nodes)
self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.item_con)
self.award_item:SetItemSize(78, 78)
self.award_item:SetVisible(false)
local function short_click_callback(target, x, y)
self:ClickHandler(target,x,y)
end
self.award_item.ClickCallFun = short_click_callback --覆盖AwardItem 的点击方法
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
self:SetSelected(self.is_selected)
end
end
function PsionicArmorItem:AddEvents( )
local function update_equip_state(tab_type)
if not tab_type then
self:UpdateEquipState()
elseif tab_type == PsionicConst.TabId.PArmor then
self:UpdateEquipState()
elseif tab_type == PsionicConst.TabId.PBreak then
self:UpdateItemReddot()
end
end
self:BindEvent(self.model, PsionicConst.UPDATE_RED_BY_TABID, update_equip_state)
end
-- data:道具数据 flag:道具的展示类型 default_typeId:没data的情况下用于展示的默认id
function PsionicArmorItem:SetData(data, flag, callback, default_typeId, pos)
self.data = data
self.flag = flag or PsionicConst.ArmorItemFlag.Bag
self.callback = callback
self.default_typeId = default_typeId
self.pos = pos
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
-- 获取圣物突破红点显示的goodsid列表
function PsionicArmorItem:SetBreakSlotRedEquipList(slot_break_red_equip_list)
self.slot_break_red_equip_list = slot_break_red_equip_list
if self.is_loaded then
self:UpdateItemReddot()
end
end
function PsionicArmorItem:UpdateView( )
self:SetItemScale(self.item_scale)
if not self.data or self.data.is_empty then
self.empty_bg_obj:SetActive(true)
self.equiped_obj:SetActive(false)
if self.default_typeId then -- 显示默认id配置装备
self.award_item:SetData(self.default_typeId, 1, nil)
self.award_item:SetVisible(true)
else
self.award_item:SetVisible(false)
end
else
self.empty_bg_obj:SetActive(false)
self.award_item:SetData(self.data.type_id, 1, nil)
self.award_item:SetVisible(true)
end
-- 穿戴flag相关
self:UpdateEquipState()
-- 灰化和整体灰化部分
self:SetItemGray(self.item_gray)
self:SetItemTotalGray(self.item_total_gray)
-- 更新突破操作界面锁定展示
self:UpdateBreakShowLockType(self.break_show_locktype)
self:AddToStageHandler()
-- 更新红点
self:UpdateItemReddot()
end
-- 节点加上一层灰色蒙版
function PsionicArmorItem:SetItemGray(bool)
self.item_gray = bool
if self.award_item then
self.award_item:SetGray(bool)
end
end
-- 节点完全置灰
function PsionicArmorItem:SetItemTotalGray(bool)
self.item_total_gray = bool
if self.award_item then
self.award_item:SetIconGray(bool)
end
end
-- 调整【本节点】的缩放比例
function PsionicArmorItem:SetItemScale(scale)
self.item_scale = scale or 1
if self.is_loaded then
SetLocalScale(self.transform, self.item_scale, self.item_scale, self.item_scale)
end
end
-- 判断这件装备是否是已穿戴/替换后能提升战斗力,根据情况显示标识
function PsionicArmorItem:UpdateEquipState()
local is_cur_equiped = false -- 是否是当前上阵的装备
local show_equip_flag = false -- 是否显示可装备标志
local show_replace_flag = false -- 是否显示可替换标志
if (self.flag == PsionicConst.ArmorItemFlag.Bag or self.flag == PsionicConst.ArmorItemFlag.Resolve or self.flag == PsionicConst.ArmorItemFlag.Break) and self.award_item
and self.data and not self.data.is_empty then
local cur_equip_vo = self.goods_model:GetPsionicEquipBySlot(self.data.subtype)
if cur_equip_vo then -- 根据情况区分展示可替换还是可装备
if cur_equip_vo.goods_id == self.data.goods_id then
is_cur_equiped = true
else
local equip_state = self.model:IsPsionicEquipPowerUpOrNot(self.data.goods_id) and 1 or nil
show_replace_flag = equip_state == 1
end
else -- 当前栏位没有装备,则获取栏位红点
show_equip_flag = self.model:GetPsionicEquipSlotRed(self.data.subtype)
end
end
if self.equiped_obj.activeSelf ~= is_cur_equiped then
self.equiped_obj:SetActive(is_cur_equiped)
end
if self.equip_flag_obj.activeSelf ~= show_equip_flag then
self.equip_flag_obj:SetActive(show_equip_flag)
end
if self.replace_flag_obj.activeSelf ~= show_replace_flag then
self.replace_flag_obj:SetActive(show_replace_flag)
end
end
function PsionicArmorItem:ClickHandler(target, x, y)
-- 默认展示id的强制固定展示类型
if self.pos == 1 then
local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_PSIONIC,3)
if helpVo then
GlobalEventSystem:Fire(EventName.FINISH_CURRENT_HELP_STEP,helpVo)
end
end
if self.default_typeId then
UIToolTipMgr:getInstance():AppendPsionicTips(nil, x, y, PsionicConst.ArmorItemFlag.Show, self.default_typeId)
return
end
if not self.data then return end
local function selected_callback(flag)
self:SetSelected(flag)
end
if self.flag == PsionicConst.ArmorItemFlag.Resolve then -- 装备分解展示
if self.callback then
self.callback(self.data, selected_callback)
end
elseif self.flag == PsionicConst.ArmorItemFlag.Break then -- 装备突破展示
if self.data and self.callback then
-- 修改为切换查看的装备数据
self.callback(self.data)
end
else
UIToolTipMgr:getInstance():AppendPsionicTips(self.data, x, y, self.flag)
end
end
-- 设置item的选中状态
function PsionicArmorItem:SetSelected(flag)
self.is_selected = flag and true or false
if self.is_loaded then
if self.flag == PsionicConst.ArmorItemFlag.Resolve -- 装备分解展示
or self.flag == PsionicConst.ArmorItemFlag.Break then -- 装备突破展示
if self.selected_obj.activeSelf ~= (self.is_selected and self.flag == PsionicConst.ArmorItemFlag.Break) then
self.selected_obj:SetActive(self.is_selected and self.flag == PsionicConst.ArmorItemFlag.Break)
end
if self.selected2_obj.activeSelf ~= (self.is_selected and self.flag == PsionicConst.ArmorItemFlag.Resolve) then
self.selected2_obj:SetActive(self.is_selected and self.flag == PsionicConst.ArmorItemFlag.Resolve)
end
self.award_item:SetGray(self.is_selected and self.flag == PsionicConst.ArmorItemFlag.Resolve)
end
end
end
-- 更新圣物突破时展示节点的数据缺失表现 lock_type:1 无数据但不锁定 2 无数据锁定
function PsionicArmorItem:UpdateBreakShowLockType(lock_type)
self.break_show_locktype = lock_type
if self.is_loaded then
if not self.data and self.flag == PsionicConst.ArmorItemFlag.BreakSelected then
self.break_add_obj:SetActive(lock_type == 1)
self.locked_obj:SetActive(lock_type == 2)
elseif self.data and self.flag == PsionicConst.ArmorItemFlag.BreakSelected then
self.break_add_obj:SetActive(false)
self.locked_obj:SetActive(false)
end
end
end
function PsionicArmorItem:UpdateItemReddot( )
if not self.data or self.data.is_empty then
self.reddot_obj:SetActive(false)
return
end
if self.flag == PsionicConst.ArmorItemFlag.Break then -- 突破红点
-- 先获取突破红点,再判断是否是身上穿的装备
-- local break_bool = self.model:GetPsionicBreakSlotRed(self.data.subtype)
-- if break_bool then
-- local cur_equip_vo = self.goods_model:GetPsionicEquipBySlot(self.data.subtype)
-- self.reddot_obj:SetActive(cur_equip_vo.goods_id == self.data.goods_id)
-- else
-- self.reddot_obj:SetActive(false)
-- end
local break_red = self.slot_break_red_equip_list[self.data.subtype] and self.slot_break_red_equip_list[self.data.subtype] == self.data.goods_id or false
self.reddot_obj:SetActive(break_red)
else
self.reddot_obj:SetActive(false)
end
end
function PsionicArmorItem:__delete( )
if self.award_item then
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item)
end
self.award_item = nil
end
function PsionicArmorItem:AddToStageHandler()
if self.pos ~= 1 then return end
local helpVo = GuideModel:getInstance():GetHelpVo(HelpType.TYPE_PSIONIC,3)
if not helpVo then return end
local help_type = helpVo.help_type
local step = helpVo.step
local button = false
if (help_type == HelpType.TYPE_PSIONIC) and step == 3 then
button = self.item_con
end
if button then
local function call_back()
end
GlobalEventSystem:Fire(EventName.OPEN_GUIDE_PROMPT_VIEW, button.transform, self.transform, call_back, helpVo, self.layout_file)
end
end