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