225 lines
4.9 KiB
Lua
225 lines
4.9 KiB
Lua
|
XDynamicTableCurve = {}
|
|||
|
|
|||
|
function XDynamicTableCurve.New(gameObject)
|
|||
|
if gameObject == nil then
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
local dynamicTable = {}
|
|||
|
setmetatable(dynamicTable, { __index = XDynamicTableCurve })
|
|||
|
|
|||
|
local imp = dynamicTable:Init(gameObject)
|
|||
|
|
|||
|
if not imp then
|
|||
|
return nil
|
|||
|
end
|
|||
|
|
|||
|
return dynamicTable
|
|||
|
end
|
|||
|
|
|||
|
--初始化
|
|||
|
function XDynamicTableCurve:Init(gameObject)
|
|||
|
local imp = gameObject:GetComponent(typeof(CS.XDynamicTableCurve))
|
|||
|
if not imp then
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
self.Proxy = nil
|
|||
|
self.ProxyMap = {}
|
|||
|
self.ProxyImpMap = {}
|
|||
|
self.DataSource = {}
|
|||
|
self.DynamicEventDelegate = nil
|
|||
|
|
|||
|
self.Imp = imp
|
|||
|
self.Imp.DynamicTableGridDelegate = function(event, index, grid)
|
|||
|
self:OnDynamicTableEvent(event, index, grid)
|
|||
|
end
|
|||
|
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
--获取实体组件
|
|||
|
function XDynamicTableCurve:GetImpl()
|
|||
|
return self.Imp
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--设置回调主体
|
|||
|
function XDynamicTableCurve:SetDelegate(delegate)
|
|||
|
if not self.Imp then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- self.Imp:SetDelegate(self)
|
|||
|
self.Delegate = delegate
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--事件回调
|
|||
|
function XDynamicTableCurve:OnDynamicTableEvent(event, index, grid)
|
|||
|
|
|||
|
if not self.Proxy then
|
|||
|
XLog.Warning("XDynamicTableCurve Proxy is nil,Please Setup First!!")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not self.Delegate then
|
|||
|
XLog.Warning("XDynamicTableCurve Delegate is nil,Please Setup First!!")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if not self.Delegate.OnDynamicTableEvent then
|
|||
|
XLog.Warning("XDynamicTableCurve Delegate func OnDynamicTableEvent is nil,Please Setup First!!")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
--使用代理器,Lua代理器是一个 Table,IL使用C#脚本
|
|||
|
local proxy = nil
|
|||
|
if grid ~= nil then
|
|||
|
proxy = self.ProxyMap[grid]
|
|||
|
if not proxy then
|
|||
|
proxy = self.Proxy.New(grid)
|
|||
|
self.ProxyMap[grid] = proxy
|
|||
|
--初始化只调动一次
|
|||
|
proxy.Index = index
|
|||
|
proxy.DynamicGrid = grid
|
|||
|
|
|||
|
if self.DynamicEventDelegate then
|
|||
|
self.DynamicEventDelegate(DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT, index, proxy)
|
|||
|
else
|
|||
|
self.Delegate.OnDynamicTableEvent(self.Delegate, DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT, index, proxy)
|
|||
|
end
|
|||
|
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
|||
|
proxy.Index = index
|
|||
|
proxy.DynamicGrid = grid
|
|||
|
self.ProxyImpMap[index] = proxy
|
|||
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RECYCLE then
|
|||
|
proxy.Index = -1
|
|||
|
proxy.DynamicGrid = nil
|
|||
|
self.ProxyImpMap[index] = nil
|
|||
|
end
|
|||
|
|
|||
|
if self.DynamicEventDelegate then
|
|||
|
self.DynamicEventDelegate(event, index, proxy)
|
|||
|
else
|
|||
|
self.Delegate.OnDynamicTableEvent(self.Delegate, event, index, proxy)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--设置事件回调
|
|||
|
function XDynamicTableCurve:SetDynamicEventDelegate(fun)
|
|||
|
self.DynamicEventDelegate = fun
|
|||
|
end
|
|||
|
|
|||
|
--设置代理器
|
|||
|
function XDynamicTableCurve:SetProxy(proxy)
|
|||
|
self.ProxyMap = {}
|
|||
|
self.ProxyImpMap = {}
|
|||
|
self.Proxy = proxy
|
|||
|
end
|
|||
|
|
|||
|
--设置总数
|
|||
|
function XDynamicTableCurve:SetTotalCount(totalCout)
|
|||
|
if not self.Imp then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self.Imp.TotalCount = totalCout
|
|||
|
end
|
|||
|
|
|||
|
--设置总数
|
|||
|
function XDynamicTableCurve:SetDataSource(datas)
|
|||
|
if not datas or not self.Imp then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self.DataSource = datas
|
|||
|
self.Imp.TotalCount = #self.DataSource
|
|||
|
end
|
|||
|
|
|||
|
--获取代理器
|
|||
|
function XDynamicTableCurve:GetGridByIndex(index)
|
|||
|
return self.ProxyImpMap[index]
|
|||
|
end
|
|||
|
|
|||
|
--获取所有代理器
|
|||
|
function XDynamicTableCurve:GetGrids()
|
|||
|
return self.ProxyImpMap
|
|||
|
end
|
|||
|
|
|||
|
--设置可视区域
|
|||
|
function XDynamicTableCurve:SetViewSize(viewSize)
|
|||
|
if not self.Imp then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self.Imp:SetViewSize(viewSize)
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--重载数据
|
|||
|
function XDynamicTableCurve:ReloadData(startIndex)
|
|||
|
startIndex = startIndex or -1
|
|||
|
if not self.Imp then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
self.Imp:ReloadData(startIndex)
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--回收所有节点
|
|||
|
function XDynamicTableCurve:RecycleAllTableGrid()
|
|||
|
if not self.Imp then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self.Imp:RecycleAllTableGrid()
|
|||
|
end
|
|||
|
|
|||
|
--清空节点
|
|||
|
function XDynamicTableCurve:Clear()
|
|||
|
if not self.Imp then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self.Imp:Clear()
|
|||
|
end
|
|||
|
|
|||
|
--设置节点大小
|
|||
|
function XDynamicTableCurve:SetGridSize(GridSize)
|
|||
|
if not self.Imp then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self.Imp.OriginGridSize = GridSize
|
|||
|
end
|
|||
|
|
|||
|
function XDynamicTableCurve:GetGridSize()
|
|||
|
return self.Imp and self.Imp.GridSize
|
|||
|
end
|
|||
|
|
|||
|
-- 跳转到指定节点
|
|||
|
function XDynamicTableCurve:TweenToIndex(index)
|
|||
|
if not self.Imp then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self.Imp:TweenToIndex(index)
|
|||
|
end
|
|||
|
|
|||
|
function XDynamicTableCurve:GetTweenIndex()
|
|||
|
if not self.Imp then
|
|||
|
return 0
|
|||
|
end
|
|||
|
return self.Imp.StartIndex
|
|||
|
end
|
|||
|
|
|||
|
--todo 其他布局接口这里暂时不一一实现,因为布局属性在编辑阶段已经设置过
|
|||
|
return XDynamicTableCurve
|