装备分解
简单理解:将待分解的装备放入右侧分解的卡槽中 然后待分解装备变灰
同时保证卡槽区域满了之后点击再无效(右侧卡槽区域的装备也可点击返回到左侧将待分解的装备变亮)
Mvc中的v层
--[[
-- added by author @ 2023/11/21 16:18:00
-- UIDeCompose视图层
-- 注意:
-- 1、成员变量最好预先在__init函数声明,提高代码可读性
-- 2、OnEnable函数每次在窗口打开时调用,直接刷新
-- 3、组件命名参考代码规范
--]]
local UIDeComposeView = BaseClass("UIDeComposeView", UIBaseView)
local base = UIBaseView
local ComItem=require"UI.UIDeCompose.Component.ComItem"
local function RefreshItem(self)
--设置刷新函数
self.scrollView:SetOnRefresh(function (item,index)
local data=self.model.equipList[index+1]
item:Refresh(data)
end)
--设置数据长度
self.scrollView:SetLength(self.model.bagCount)
--设置滑动列表置顶
self.scrollView:ResetToBeginning()
end
local function OnCreate(self)
base.OnCreate(self)
-- 窗口生命周期内保持的成员变量放这
self.scrollView=self:AddComponent(UIWrapGroup,"Scroll View/Viewport/Content",ComItem)
self.holdUI={}
for i = 1, 4, 1 do
self.holdUI[i]=self:AddComponent(UIImage,"Decompose/DecomCell/"..i,AtlasConfig.Goods)
self.holdUI[i]:SetSpriteName("empty.png")
local btn=self:AddComponent(UIPointerClick,"Decompose/DecomCell/"..i)
btn:SetOnClick(function ()
self.ctrl:CancleDeComposeData(i)
end)
end
self.decomposeClick=self:AddComponent(UIButton,"Decompose/DecomBtn")
self.decomposeClick:SetOnClick(function ()
self.ctrl:Decompose()
end)
self.toggles={}
for i = 1, 2, 1 do
self.toggles[i]=self:AddComponent(UIToggle,"Decompose/Toggle"..i)
end
--一键分解
self.oneKeyDecomposeClick=self:AddComponent(UIButton,"Decompose/AutoDecomBtn")
self.oneKeyDecomposeClick:SetOnClick(function ()
local tb={}
for i = 1, 2, 1 do
if self.toggles[i]:IsOn() then
table.insert(tb,i)
end
end
self.ctrl:OneKeyDecompose(tb)
end)
--关闭
self.closeBtn=self:AddComponent(UIButton,"CloseBtn")
self.closeBtn:SetOnClick(function ()
UIManager:GetInstance():CloseWindow(UIWindowNames.UIDeCompose)
end)
end
-- 打开
local function OnEnable(self)
base.OnEnable(self)
-- 窗口关闭时可以清理的成员变量放这
RefreshItem(self)
end
-- 关闭
local function OnDestroy(self)
base.OnDestroy(self)
-- 清理成员变量
end
--刷新数据
local function OnRefreshHold(self)
for k, v in ipairs(self.model.isHold) do
if v then
local data=self.model.holds[k]
local equipData=LangUtil.GetEquipById(data[1].equipmentId)
self.holdUI[k]:SetSpriteName(equipData.icon..".png")
else
self.holdUI[k]:SetSpriteName("empty.png")
end
end
RefreshItem(self)
end
local function OnAddListener(self)
base.OnAddListener(self)
-- UI消息注册
self:AddUIListener("RefreshHold", OnRefreshHold)
end
local function OnRemoveListener(self)
base.OnRemoveListener(self)
-- UI消息注销
self:RemoveUIListener("RefreshHold", OnRefreshHold)
end
UIDeComposeView.OnCreate = OnCreate
UIDeComposeView.OnEnable = OnEnable
UIDeComposeView.OnDestroy = OnDestroy
UIDeComposeView.OnAddListener = OnAddListener
UIDeComposeView.OnRemoveListener = OnRemoveListener
return UIDeComposeView
Mvc中的M层 有卡槽区域的表 卡槽是否有装备的表
--[[
-- added by author @ 2023/11/21 16:18:00
-- UIDeComposeUIMain模型层
-- 注意:
-- 1、成员变量预先在OnCreate、OnEnable函数声明,提高代码可读性
-- 2、OnCreate内放窗口生命周期内保持的成员变量,窗口销毁时才会清理
-- 3、OnEnable内放窗口打开时才需要的成员变量,窗口关闭后及时清理
-- 4、OnEnable函数每次在窗口打开时调用,可传递参数用来初始化Model
--]]
local UIDeComposeModel = BaseClass("UIDeComposeModel", UIBaseModel)
local base = UIBaseModel-- 创建
local curNum=0
local function OnCreate(self)
base.OnCreate(self)
-- 窗口生命周期内保持的成员变量放这
end
local function InitEquipData(self,bagData)
curNum=0
self.equipList={}
self.holds={{},{},{},{}}
self.isHold={false,false,false,false}
self.bagCount=UserData:GetInstance():GetBagCount()
for k, v in ipairs(bagData) do
if v.goodsType==1 and v.equipmentId~=-1 then
table.insert(self.equipList,{v,false})
end
end
end
-- 打开
local function OnEnable(self)
base.OnEnable(self)
-- 窗口关闭时可以清理的成员变量放这
InitEquipData(self,UserData:GetInstance():GetBagDate())
end
-- 关闭
local function OnDestroy(self)
base.OnDestroy(self)
-- 清理成员变量
end
local function OnAddDeComPoseData(self,data)
if curNum>=4 then
return
end
curNum=curNum+1
local index=0
for k, v in ipairs(self.isHold) do
if v==false then
index=k
break
end
end
self.isHold[index]=true
data[2]=true
self.holds[index]=data
self:UIBroadcast("RefreshHold")
end
local function OnCancleDeCompose(self,index)
local state=self.isHold[index]
if state then
curNum=curNum-1
self.isHold[index]=false
self.holds[index][2]=false
self.holds[index]={}
self:UIBroadcast("RefreshHold")
end
end
local function OnSynBagData(self,param1)
print(#param1)
InitEquipData(self,param1)
self:UIBroadcast("RefreshHold")
end
-- 监听选服变动
local function OnAddListener(self)
base.OnAddListener(self)
self:AddDataListener("AddDeComPoseData", OnAddDeComPoseData)
self:AddDataListener("CancleDeCompose", OnCancleDeCompose)
--同步背包数据消息
self:AddDataListener("SynBagData", OnSynBagData)
end
local function OnRemoveListener(self)
base.OnRemoveListener(self)
self:RemoveDataListener("AddDeComPoseData", OnAddDeComPoseData)
self:RemoveDataListener("CancleDeCompose", OnCancleDeCompose)
--同步背包数据消息
self:RemoveDataListener("SynBagData", OnSynBagData)
end
UIDeComposeModel.OnCreate = OnCreate
UIDeComposeModel.OnEnable = OnEnable
UIDeComposeModel.OnDestroy = OnDestroy
UIDeComposeModel.OnAddListener = OnAddListener
UIDeComposeModel.OnRemoveListener = OnRemoveListener
return UIDeComposeModel
无线滑动列表中的item项 并给你刷新数据
local ComItem=BaseClass("ComItem",UIWrapComponent)
local base=UIWrapComponent
local function OnCreate(self)
base.OnCreate(self)
self.icon=self:AddComponent(UIImage,"icon",AtlasConfig.Goods)
self.itemClick=self:AddComponent(UIPointerClick,"icon")
self.itemClick:SetOnClick(function ()
DataManager:GetInstance():Broadcast("AddDeComPoseData",self.data)
end)
end
local function Refresh(self,data)
self.data=data
if data==nil then
self.icon:SetSpriteName("装备格子.png")
self.icon:SetColor(Color.white)
self.icon:SetRayCastTarget(true)
else
local tbData=LangUtil.GetEquipById(self.data[1].equipmentId)
self.icon:SetSpriteName(tbData.icon..".png")
if self.data[2] then
self.icon:SetColor(Color.gray)
self.icon:SetRayCastTarget(false)
else
self.icon:SetColor(Color.white)
self.icon:SetRayCastTarget(true)
end
end
end
ComItem.OnCreate=OnCreate
ComItem.Refresh=Refresh
return ComItem
简单漂字和飞图片(从一个位置飞到另外一个位置)
local n=0
function FlyText(content)
GameObjectPool:GetInstance():GetGameObjectAsync("UI/Prefabs/View/Fly.prefab",function (fly)
local topLayer=UIManager:GetInstance().layers["TopLayer"]
fly.transform:SetParent(topLayer.transform)
fly.transform.localPosition=Vector3.zero
fly.transform.localEulerAngles=Vector3.zero
fly.transform.localScale=Vector3.one
n=n+1
fly.name="fly"..n
local baseContainer=UIBaseContainer.New(topLayer,fly.name)
baseContainer:OnCreate()
baseContainer.rectTransform.offsetMax = Vector2.zero
baseContainer.rectTransform.offsetMin = Vector2.zero
baseContainer.rectTransform.localScale = Vector3.one
baseContainer.rectTransform.localPosition = Vector3.zero
local flyText=baseContainer:AddComponent(UIText,"Text")
flyText:SetText(content)
flyText:SetColor(Color.red)
flyText.transform.localPosition=Vector3.zero
flyText.transform:DOLocalMove(Vector3(0,200,0),2):OnComplete(function ()
flyText.unity_uitext:DOFade(0,1):OnComplete(function ()
GameObjectPool:GetInstance():RecycleGameObject("UI/Prefabs/View/Fly.prefab",fly)
print("11111")
end)
end)
end)
end
function FlyPropImage(content)
GameObjectPool:GetInstance():GetGameObjectAsync("UI/Prefabs/View/Item.prefab",function (go)
local layer=UIManager:GetInstance().layers["TopLayer"]
go.transform:SetParent(layer.transform)
go.transform.localPosition=Vector3.zero
go.transform.localEulerAngles=Vector3.zero
go.transform.localScale=Vector3.one
go.name="img"..n
local baseContainer=UIBaseContainer.New(layer,go.name)
baseContainer:OnCreate()
baseContainer.rectTransform.offsetMax = Vector2.zero
baseContainer.rectTransform.offsetMin = Vector2.zero
baseContainer.rectTransform.localScale = Vector3.one
baseContainer.rectTransform.localPosition = Vector3.zero
local flyImg=baseContainer:AddComponent(UIImage,"Item",AtlasConfig.Goods)
flyImg:SetSpriteName(content)
flyImg.transform.localPosition=Vector3.zero
flyImg.transform:DOLocalMove(Vector3(147,-243,10),3):OnComplete(function ()
GameObjectPool:GetInstance():RecycleGameObject("UI/Prefabs/View/Item.prefab",go)
end)
end)
end