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