-- <* -- @Author: Saber -- @Description: 圣物左侧佩戴装备节点 -- *> PsionicArmorEquipItem = PsionicArmorEquipItem or BaseClass(BaseItem) local PsionicArmorEquipItem = PsionicArmorEquipItem function PsionicArmorEquipItem:__init(parent_wnd,prefab_asset,layer_name) self.base_file = "psionic" self.layout_file = "PsionicArmorEquipItem" self.parent_wnd = parent_wnd self.layer_name = layer_name self.model = PsionicModel:getInstance() self.goods_model = GoodsModel:getInstance() self.is_selected = false self:Load() end function PsionicArmorEquipItem:Load_callback() local nodes = { "add_btn:obj", "red_dot:obj", "item_con", "selected:obj", -- "slot_flag:tmp", "equip_effect_con" } self:GetChildren(nodes) self.circle_item = PsionicArmorCircleItem.New(self.item_con, false, self.layer_name) self.circle_item:SetAnchoredPosition(0, 0) self.circle_item:SetItemSize(78, 78) self.circle_item:SetVisible(false) self.circle_item:OverrideClickEvent(function(target,x,y) self:ClickHandler(target,x,y) end) self:AddEvents() if self.need_refreshData then self:UpdateView() end end -- 需特殊处理隐藏时的特效表现 function PsionicArmorEquipItem:SetVisible(state, force_hide) BaseItem.SetVisible(self, state, force_hide) if not state then self:ClearUIEffect(self.equip_effect_con) self.showing_equip_effect = false end end function PsionicArmorEquipItem:AddEvents( ) local function click_event(target) if target == self.add_btn_obj then self:OnAddBtnClick() end end AddClickEvent(self.add_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE) -- 对应装备位置的属性更新之后刷新数据 local function update_equip_data(slot) if self.slot == slot then self:UpdateView() if self.data then -- 存在数据的情况 -- 魂力球激活特效 if not self.showing_equip_effect then local function call_back( ) self.showing_equip_effect = false end self:ClearUIEffect(self.equip_effect_con) self:AddUIEffect("ui_hunliqiudianliang", self.equip_effect_con, self.layer_name, Vector3(0,0,0), 3, true, 0.6, nil, call_back) self.showing_equip_effect = true end end end end self:BindEvent(self.model, PsionicConst.UPDATE_PISIONIC_EQUIP_ARMOR, update_equip_data) local function update_armor_red(tab_id) if not tab_id or tab_id == PsionicConst.TabId.PArmor or tab_id == PsionicConst.TabId.PAdvance or tab_id == PsionicConst.TabId.PWash or tab_id == PsionicConst.TabId.PSkill then self:UpdateArmorRed() end end self:BindEvent(self.model, PsionicConst.UPDATE_RED_BY_TABID, update_armor_red) end function PsionicArmorEquipItem:SetData( slot, flag, show_flag, equip_callback, skill_callback ) -- self.data = data self.slot = slot + 3 -- 槽位即道具子id,从4开始,需要+3映射 self.flag = flag or PsionicConst.ArmorItemFlag.Equiped -- 决定这个装备要展示的Tip操作按钮的内容 self.show_flag = show_flag -- 根据当前主界面页签不同,来区分点击逻辑的不同 self.equip_callback = equip_callback -- 装备进阶回调 self.skill_callback = skill_callback -- 技能页签回调 if self.is_loaded then self.need_refreshData = false self:UpdateView() else self.need_refreshData = true end end function PsionicArmorEquipItem:UpdateView( ) self.data = self.goods_model:GetPsionicEquipBySlot(self.slot) -- self.slot_flag_tmp.text = PsionicConst.EquipSlotName[self.slot] if not self.data then self.circle_item:SetVisible(false) self.add_btn_obj:SetActive(true) self.circle_item:SetSlotName(false) else self.add_btn_obj:SetActive(false) -- print("Saber:PsionicArmorEquipItem [62] self.data.goods_id: ",self.data.goods_id) self.circle_item:SetData(self.data.type_id, 1, nil, self.data.equip_lv) self.circle_item:SetVisible(true) self.circle_item:SetSlotName(self.show_flag ~= PsionicConst.TabId.PArmor and self.data.subtype or false) end self:UpdateArmorRed() self:SetSelected(self.is_selected) end -- 修改节点的展示标志 function PsionicArmorEquipItem:ChangeShowFlag(show_flag) self.show_flag = show_flag self:SetSelected(self.is_selected) self:UpdateArmorRed() end function PsionicArmorEquipItem:ClickHandler(target, x, y) if not self.data then return end -- 不同情况的点击回调,不做骚套路,严格区分 if self.show_flag == PsionicConst.TabId.PArmor then local has_slot_red = self.model:GetPsionicEquipSlotRed(self.slot) if has_slot_red then -- 该位置有装备穿戴红点就要获取能提升的装备 local power_equip = self.model:GetTopPowerUpEquipInBag(self.slot, true) if power_equip then UIToolTipMgr:getInstance():AppendPsionicTips(power_equip, x, y, PsionicConst.ArmorItemFlag.Bag) else UIToolTipMgr:getInstance():AppendPsionicTips(self.data, x, y, self.flag) end else UIToolTipMgr:getInstance():AppendPsionicTips(self.data, x, y, self.flag) end elseif self.show_flag == PsionicConst.TabId.PAdvance or self.show_flag == PsionicConst.TabId.PWash then if self.equip_callback then self.equip_callback(self.slot) end elseif self.show_flag == PsionicConst.TabId.PSkill then if self.skill_callback then self.skill_callback(self.slot) end end end -- 根据不同的情况展示不同的红点 function PsionicArmorEquipItem:UpdateArmorRed( ) if not self.is_loaded then return end if self.show_flag == PsionicConst.TabId.PArmor then self.red_dot_obj:SetActive(self.model:GetPsionicEquipSlotRed(self.slot)) elseif self.show_flag == PsionicConst.TabId.PAdvance then self.red_dot_obj:SetActive(self.model:GetPsionicAdvanceRed(self.slot)) elseif self.show_flag == PsionicConst.TabId.PWash then self.red_dot_obj:SetActive(self.model:GetPsionicWashSlotRed(self.slot)) elseif self.show_flag == PsionicConst.TabId.PSkill then self.red_dot_obj:SetActive(self.model:GetPsionicSkillSlotRedCache(self.slot)) end end function PsionicArmorEquipItem:OnAddBtnClick( ) local has_slot_red = self.model:GetPsionicEquipSlotRed(self.slot) if has_slot_red then -- 该位置有装备穿戴红点就要获取能提升的装备 local power_equip = self.model:GetTopPowerUpEquipInBag(self.slot, true) if power_equip then UIToolTipMgr:getInstance():AppendPsionicTips(power_equip, x, y, PsionicConst.ArmorItemFlag.Bag) else OpenFun.Open(139, 7) end else OpenFun.Open(139, 7) end end function PsionicArmorEquipItem:SetSelected(selected) self.is_selected = selected if self.is_loaded then self.selected_obj:SetActive(self.is_selected and self.show_flag ~= PsionicConst.TabId.PArmor) end end function PsionicArmorEquipItem:__delete( ) if self.circle_item then self.circle_item:DeleteMe() self.circle_item = nil end self:ClearUIEffect(self.equip_effect_con) end