------------------------------------------------ --作者: 何健 --日期: 2019-06-1 --文件: UIPlayerBagItem.lua --模块: UIPlayerBagItem --描述: 背包格子公用组件,在需要双击的地方可以用这个 ------------------------------------------------ local L_ItemBase = CS.Thousandto.Code.Logic.ItemBase local UIPlayerBagItem = { Trans = nil, Go = nil, --选中图标 SelectGo = nil, --ICON Icon = nil, IconGo = nil, --格子锁定图标 LockSprGo = nil, --绑定图标 BindSprGo = nil, --物品数量 NumLabel = nil, --品质 QualitySpr = nil, --装备阶数 LevelLabel = nil, --装备向上箭头,用于和身上装备比较 UpSprGo = nil, --装备特效1 EffectSprGo1 = nil, --装备特效2 EffectSprGo2 = nil, EffectScript2 = nil, --不可穿戴装备图标 UnUseEquipSprGo = nil, --星星 StarGrid = nil, StarGridGo = nil, StarGridTrans = nil, StarItemGo = nil, --动画,可穿载装备显示效果 TweenScale = nil, TweenColor = nil, --数据缓存 ShowData = nil, --回调 SingleClick = nil, DoubleClick = nil, --是否选中 IsSelect = false, --下标 Index = 0, --背包格子是否开启 IsOpened = false, --是否在计时,用于判断单击还是双击 IsTime = false, --计时 TimeCount = 0, } local L_ItemMap = {} --创建一个新对像 function UIPlayerBagItem:New(trans) if L_ItemMap[trans] then return L_ItemMap[trans] end local _m = Utils.DeepCopy(self) _m.Trans = trans _m.Go = trans.gameObject _m:FindAllComponents() LuaBehaviourManager:Add(_m.Trans, _m) L_ItemMap[trans] = _m return _m end --克隆一个对象 function UIPlayerBagItem:Clone() return UnityUtils.Clone(self.Go) end --查找各控件 function UIPlayerBagItem:FindAllComponents() self.SelectGo = UIUtils.FindGo(self.Trans, "Back/select") self.IconGo = UIUtils.FindGo(self.Trans, "Back/icon") self.Icon = UIUtils.RequireUIIconBase(UIUtils.FindTrans(self.Trans, "Back/icon")) self.TweenColor = UIUtils.FindTweenColor(self.Trans, "Back/icon") self.TweenScale = UIUtils.FindTweenScale(self.Trans, "Back/icon") self.LockSprGo = UIUtils.FindGo(self.Trans, "Back/Lock") self.BindSprGo = UIUtils.FindGo(self.Trans, "Back/Bind") self.NumLabel = UIUtils.FindLabel(self.Trans, "Back/Num") self.LevelLabel = UIUtils.FindLabel(self.Trans, "Back/Level") self.QualitySpr = UIUtils.FindSpr(self.Trans, "Back/Qualty") self.StarGrid = UIUtils.FindGrid(self.Trans, "Back/Grid") self.StarGridGo = UIUtils.FindGo(self.Trans, "Back/Grid") self.StarGridTrans = UIUtils.FindTrans(self.Trans, "Back/Grid") self.StarItemGo = self.StarGridTrans:GetChild(0).gameObject self.UpSprGo = UIUtils.FindGo(self.Trans, "Back/up") self.UnUseEquipSprGo = UIUtils.FindGo(self.Trans, "Back/UnUseSprite") self.EffectSprGo1 = UIUtils.FindGo(self.Trans, "Back/Effect") self.EffectSprGo2 = UIUtils.FindGo(self.Trans, "Back/Effect1") self.EffectSprGo3 = UIUtils.FindGo(self.Trans, "Back/Effect2") local trans = UIUtils.FindTrans(self.Trans, "Back/LvBg") if(trans ~= nil) then self.LvBgGo = UIUtils.FindGo(trans) end trans = UIUtils.FindTrans(self.Trans, "Back/XJbg") if(trans ~= nil) then self.XijiaBgGo = UIUtils.FindGo(trans) end trans = UIUtils.FindTrans(self.Trans, "Back/TimeOut") if(trans ~= nil) then self.TimeOutGo = UIUtils.FindGo(trans) end trans = UIUtils.FindTrans(self.Trans, "Back/StarNum") if(trans ~= nil) then self.StarNumLabel = UIUtils.FindLabel(trans) end self:SelectItem(false) local _button = UIUtils.FindBtn(self.Trans) UIUtils.AddBtnEvent(_button, self.OnOwnClick, self) UIUtils.AddBtnDoubleClickEvent(_button, self.onOwnDoubleClick, self) end --帧更新 function UIPlayerBagItem:Update(dt) if self.IsTime then self.TimeCount = self.TimeCount + Time.GetDeltaTime() if self.TimeCount > 0.3 then if self.SingleClick ~= nil then self.SingleClick(self) self.IsTime = false end end end end --设置特效图片,图片特效及帧动画 function UIPlayerBagItem:OnSetEffect(effectID) if self.EffectSprGo1 ~= nil then self.EffectSprGo1:SetActive(effectID == 1 or effectID == 3) end if self.EffectSprGo2 ~= nil then if effectID == 2 or effectID > 3 then if self.EffectScript2 == nil then self.EffectScript2 = UIUtils.RequireUISpriteAnimation(UIUtils.FindTrans(self.Trans, "Back/Effect1")) end if self.EffectScript2 ~= nil then self.EffectScript2.PrefixSnap = false self.EffectScript2.framesPerSecond = 10 if effectID == 2 then self.EffectScript2.namePrefix = "item_" elseif effectID == 4 then self.EffectScript2.namePrefix = "item3_" elseif effectID == 5 then self.EffectScript2.namePrefix = "item4_" elseif effectID == 6 then self.EffectScript2.namePrefix = "item5_" elseif effectID == 7 then self.EffectScript2.namePrefix = "item6_" end end self.EffectSprGo2:SetActive(true) else self.EffectSprGo2:SetActive(false) end end if self.EffectSprGo3 ~= nil then self.EffectSprGo3:SetActive(effectID == 3) if self.Effect2Script == nil then --注册脚本 local _animation = UIUtils.RequireUISpriteAnimation(self.EffectSprGo3.transform) if(_animation ~= nil) then _animation.namePrefix = "item1_" _animation.framesPerSecond = 10 _animation.PrefixSnap = false end self.Effect2Script = _animation end end end --设置装备星级 function UIPlayerBagItem:OnSetStarSpr(diaNum) if self.StarGrid == nil then return end self.StarGridGo:SetActive(diaNum > 0 and diaNum <= 5) if self.StarNumLabel then self.StarNumLabel.gameObject:SetActive(diaNum > 5) if diaNum > 5 then UIUtils.SetTextByNumber(self.StarNumLabel, diaNum) end end if diaNum > 0 and diaNum <= 5 then local childGo = nil for i = 1, diaNum do if i <= self.StarGridTrans.childCount then childGo = self.StarGridTrans:GetChild(i - 1).gameObject else childGo = UnityUtils.Clone(self.StarItemGo) end if childGo ~= nil then childGo:SetActive(true) end end for i = diaNum, self.StarGridTrans.childCount - 1 do self.StarGridTrans:GetChild(i).gameObject:SetActive(false) end end self.StarGrid.repositionNow = true end --设置是否选中 function UIPlayerBagItem:SelectItem(isSelect) self.IsSelect = isSelect self.SelectGo:SetActive(isSelect) end --判断装备是否可穿 function UIPlayerBagItem:OnCheckCanEquip() local _isShow = false; local localPlayer = GameCenter.GameSceneSystem:GetLocalPlayer() if self.ShowData ~= nil and localPlayer ~= nil then _isShow = true; if not self.ShowData:CheckLevel(localPlayer.Level) then _isShow = false end if not self.ShowData:CheackOcc(localPlayer.IntOcc) then _isShow = false end if self.ShowData:isTimeOut() then _isShow = false end if not self.ShowData:CheckClass() then _isShow = false end end return _isShow end --单击事件 function UIPlayerBagItem:OnOwnClick() if self.DoubleClick ~= nil and not self.IsTime then self.IsTime = true self.TimeCount = 0 elseif self.DoubleClick == nil then if self.SingleClick ~= nil then self.SingleClick(self) end end end --双击 function UIPlayerBagItem:onOwnDoubleClick() self.IsTime = false if self.DoubleClick ~= nil then self.DoubleClick(self) end end --设置外部响应回调 function UIPlayerBagItem:OnSetCallBack(singleFunc, doubleFunc) self.SingleClick = singleFunc self.DoubleClick = doubleFunc end --设置显示数据 function UIPlayerBagItem:UpdateItem(good, userData) local canShowSprite = false local isSelectActive = false local isIconSpriteActive = false local isLockSpriteActive = false local isBindSpriteActive = false local isUpEquip = false self.Index = 6 local isNumLabelActive = false; local isShowStren = false; if self.XijiaBgGo then self.XijiaBgGo:SetActive(false); end self.ItemInfo = good; if self.TimeOutGo then self.TimeOutGo:SetActive(false); end UIUtils.ClearText(self.LevelLabel) self.TimeCount = 0 self.ShowData = good if self.LvBgGo then self.LvBgGo:SetActive(good ~= nil) end if good == nil then canShowSprite = false isSelectActive = false isIconSpriteActive = false isLockSpriteActive = false isBindSpriteActive = false local qualityName = "" self.QualitySpr.spriteName = qualityName self:OnSetStarSpr(0) self:OnSetEffect(0) UIUtils.ClearText(self.NumLabel) else isLockSpriteActive = false isSelectActive = false isIconSpriteActive = true if good.IsBind then isBindSpriteActive = true end local num = good.Count if num <= 1 then UIUtils.ClearText(self.NumLabel) else UIUtils.SetTextByNumber(self.NumLabel, num, true, 4) end local qulityValue = 0 if good.Type == ItemType.Equip or good.Type == ItemType.HolyEquip or good.Type == ItemType.ImmortalEquip or good.Type == ItemType.UnrealEquip or good.Type == ItemType.PetEquip or good.Type == ItemType.HorseEquip or good.Type == ItemType.SoulPearl or good.Type == ItemType.DevilSoulEquip then local localPlayer = GameCenter.GameSceneSystem:GetLocalPlayer() if self.ShowData.ItemInfo ~= nil and localPlayer ~= nil then self.Icon:UpdateIcon(good.Icon) qulityValue = good.Quality self:OnSetEffect(good.Effect) local _occRight = good:CheackOcc(localPlayer.Occ) canShowSprite = not _occRight isUpEquip = _occRight and good:CheckBetterThanDress() if userData then if good.Type == ItemType.HorseEquip then isUpEquip = good.ItemInfo.Score > userData elseif good.Type == ItemType.DevilSoulEquip then isUpEquip = good.ItemInfo.Quality > userData else isUpEquip = good.Power > userData end end if good.Type == ItemType.Equip or good.Type == ItemType.HolyEquip or good.Type == ItemType.HorseEquip or good.Type == ItemType.UnrealEquip then UIUtils.SetTextByEnum(self.LevelLabel, "LEVEL_FOR_JIE", good.ItemInfo.Grade) end self:OnSetStarSpr(good.StarNum) end else if good.ItemInfo ~= nil then self.Icon:UpdateIcon(good.Icon) qulityValue = good.Quality self:OnSetStarSpr(0) self:OnSetEffect(good.Effect) end end local qualityName = Utils.GetQualitySpriteName(qulityValue) self.QualitySpr.spriteName = qualityName end if not self.IsOpened then isLockSpriteActive = true isSelectActive = false isIconSpriteActive = false isBindSpriteActive = false UIUtils.ClearText(self.NumLabel) end self.IsSelect = isSelectActive self.SelectGo:SetActive(isSelectActive) self.IconGo:SetActive(isIconSpriteActive) self.LockSprGo:SetActive(isLockSpriteActive) self.BindSprGo:SetActive(isBindSpriteActive) if self.UpSprGo ~= nil then self.UpSprGo:SetActive(isUpEquip) end if self.UnUseEquipSprGo ~= nil then self.UnUseEquipSprGo:SetActive(canShowSprite) end if self.TweenColor ~= nil and self.TweenScale ~= nil then if isUpEquip and self:OnCheckCanEquip() then self.TweenColor.enabled = true self.TweenScale.enabled = true else self.TweenColor.enabled = false self.TweenScale.enabled = false UnityUtils.SetLocalScale(self.IconGo.transform, 1, 1, 1) end end end function UIPlayerBagItem:OnDestroy() L_ItemMap[self.Trans] = nil; end return UIPlayerBagItem