123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- Containers = {}
-
- -- private variables
- local m_containers = {}
-
- -- public functions
- function Containers.clean()
- m_containers = {}
- end
-
- function Containers.getFreeContainerId()
- for i=0,15 do
- if not m_containers[i] then
- return i
- end
- end
- return 0
- end
-
- -- hooked events
- function Containers.onContainerOpen(containerId, itemId, name, capacity, hasParent, items)
- local container = m_containers[containerId]
- if container then
- Game.gameRightPanel:removeChild(container)
- end
-
- container = displayUI('container.otui', { parent = Game.gameRightPanel })
- name = name:sub(1,1):upper() .. name:sub(2)
- container:setText(name)
-
- -- set icon, itemid
- -- closebutton
- -- resize
- if hasParent then
- -- parent button
- end
-
- container.itemCount = #items
- container.capacity = capacity
-
- for i=1,capacity do
- local itemWidget = UIItem.create()
- itemWidget:setStyle('Item')
- container:addChild(itemWidget)
- itemWidget.position = {x=65535, y=containerId+64, z=i-1}
-
- if i <= #items then
- local item = items[i]
- item:setPosition(itemWidget.position)
- itemWidget:setItem(item)
- end
- end
-
- m_containers[containerId] = container
- end
-
- function Containers.onContainerClose(containerId)
- local container = m_containers[containerId]
- if container then
- Game.gameRightPanel:removeChild(container)
- end
- m_containers[containerId] = nil
- end
-
- function Containers.onContainerAddItem(containerId, item)
- local container = m_containers[containerId]
- if not container or not item or container.itemCount >= container.capacity then return end
-
- local i = container.itemCount
- while i >= 1 do
- local itemWidget = container:getChildByIndex(i)
- if not itemWidget then return end
-
- local nextItemWidget = container:getChildByIndex(i+1)
- if not nextItemWidget then return end
-
- local swapItem = itemWidget:getItem()
- if swapItem then
- swapItem:setPosition(nextItemWidget.position)
- nextItemWidget:setItem(swapItem)
- end
-
- i = i - 1
- end
-
- local itemWidget = container:getChildByIndex(1)
- if not itemWidget then return end
- item:setPosition(itemWidget.position)
- itemWidget:setItem(item)
-
- container.itemCount = container.itemCount + 1
- end
-
- function Containers.onContainerUpdateItem(containerId, slot, item)
- local container = m_containers[containerId]
- if not container then return end
-
- local itemWidget = container:getChildByIndex(slot + 1)
- if not itemWidget then return end
- itemWidget:setItem(item)
- item:setPosition(itemWidget.position)
- end
-
- function Containers.onContainerRemoveItem(containerId, slot)
- local container = m_containers[containerId]
- if not container then return end
-
- local itemWidget = container:getChildByIndex(slot+1)
- if not itemWidget then return end
- itemWidget:setItem(nil)
-
- for i=slot,container.itemCount-2 do
- local itemWidget = container:getChildByIndex(i+1)
- if not itemWidget then return end
-
- local nextItemWidget = container:getChildByIndex(i+2)
- if not nextItemWidget then return end
-
- local item = nextItemWidget:getItem()
- local pos = item:getPosition()
- pos.z = pos.z - 1
- item:setPosition(pos)
-
- itemWidget:setItem(item)
- nextItemWidget:setItem(nil)
- end
-
- container.itemCount = container.itemCount - 1
- end
-
- connect(Game, { onGameStart = Containers.clean,
- onGameEnd = Containers.clean,
- onContainerOpen = Containers.onContainerOpen,
- onContainerClose = Containers.onContainerClose,
- onContainerAddItem = Containers.onContainerAddItem,
- onContainerUpdateItem = Containers.onContainerUpdateItem,
- onContainerRemoveItem = Containers.onContainerRemoveItem })
|