jass基礎(chǔ)-倉(cāng)庫(kù)UI-使用交互

#include "../../jass/BlizzardAPI.j"
library demo initializer test
? ? // 倉(cāng)庫(kù)UI - 使用交互
? ? globals
? ? ? ? Storage sto
? ? ? ? unit hero
? ? endglobals
? ? struct Storage
? ? ? ? integer parentUI ?// 父UI
? ? ? ? integer backUI ? // 背景圖
? ? ? ? integer array cellArr[100] ?// 格子
? ? ? ? integer array cellBtnArr[100] ?// 格子按鈕
? ? ? ? integer array itemTypeIdArr[100] // 存起來(lái)的道具id
? ? ? ? real cellSize ?// 格子的大?。ㄩL(zhǎng)寬)
? ? ? ? real borderSize // 邊框大小
? ? ? ? integer row ?// 橫向格子數(shù)
? ? ? ? integer col ?// 縱向格子數(shù)
? ? ? ? string backStr = "" ?// 背景圖路徑
? ? ? ? string cellStr = "ReplaceableTextures\\PassiveButtons\\PASBTNStatUp.blp" // 格子圖路徑
? ? ? ? boolean isOpen = false
? ? ? ? integer array btnUIArr[3] // 背包開關(guān)按鈕數(shù)組
? ? ? ? public static method create takes integer row, integer col, real cellSize, real borderSize returns thistype
? ? ? ? ? ? local Storage this = Storage.allocate()
? ? ? ? ? ? set this.row = row
? ? ? ? ? ? set this.col = col
? ? ? ? ? ? set this.cellSize = cellSize
? ? ? ? ? ? set this.borderSize = borderSize
? ? ? ? ? ? return this
? ? ? ? endmethod
? ? endstruct
? ? function openOrClose takes nothing returns nothing
? ? ? ? if sto.isOpen == true then
? ? ? ? ? ? set sto.isOpen = false
? ? ? ? else
? ? ? ? ? ? set sto.isOpen = true
? ? ? ? endif
? ? ? ? call DzFrameShow(sto.parentUI, sto.isOpen)
? ? endfunction
? ? function storageInit takes nothing returns nothing
? ? ? ? local integer i = 0
? ? ? ? local integer j = 0
? ? ? ? local integer index
? ? ? ? set sto = Storage.create(10, 6, 0.04, 0.01)
? ? ? ? set sto.parentUI = DzCreateFrameByTagName("FRAME", "", DzGetGameUI(), "", 0)
? ? ? ? call DzFrameSetAbsolutePoint(sto.parentUI, 0, 0.2, 0.5)
? ? ? ? call DzFrameSetSize(sto.parentUI, 2 * sto.borderSize + sto.row * sto.cellSize, 2 * sto.borderSize + sto.col * sto.cellSize)
? ? ? ? set sto.backUI = DzCreateFrameByTagName("BACKDROP", "", sto.parentUI, "", 0)
? ? ? ? call DzFrameSetPoint(sto.backUI, 0, sto.parentUI, 0, 0, 0)
? ? ? ? call DzFrameSetSize(sto.backUI, 2 * sto.borderSize + sto.row * sto.cellSize, 2 * sto.borderSize + sto.col * sto.cellSize)
? ? ? ? call DzFrameSetTexture(sto.backUI, sto.backStr, 0)
? ? ? ? set sto.btnUIArr[0] = DzCreateFrameByTagName("FRAME", "", DzGetGameUI(), "", 0)
? ? ? ? call DzFrameSetAbsolutePoint(sto.btnUIArr[0], 6, 0.78, 0.2)
? ? ? ? call DzFrameSetSize(sto.btnUIArr[0], 0.02, 0.02)
? ? ? ? set sto.btnUIArr[1] = DzCreateFrameByTagName("BACKDROP", "", sto.btnUIArr[0], "", 0)
? ? ? ? call DzFrameSetPoint(sto.btnUIArr[1], 6, sto.btnUIArr[0], 6, 0, 0)
? ? ? ? call DzFrameSetSize(sto.btnUIArr[1], 0.02, 0.02)
? ? ? ? call DzFrameSetTexture(sto.backUI, "", 0)
? ? ? ? set sto.btnUIArr[2] = DzCreateFrameByTagName("GLUEBUTTON", "", sto.btnUIArr[1], "", 0)
? ? ? ? call DzFrameSetPoint(sto.btnUIArr[2], 6, sto.btnUIArr[1], 6, 0, 0)
? ? ? ? call DzFrameSetSize(sto.btnUIArr[2], 0.02, 0.02)
? ? ? ? call DzFrameSetScript(sto.btnUIArr[2], 1, "openOrClose", false)
? ? ? ? loop
? ? ? ? ? ? exitwhen i >= sto.col
? ? ? ? ? ? loop
? ? ? ? ? ? ? ? exitwhen j >= sto.row
? ? ? ? ? ? ? ? set index = j + i * sto.row
? ? ? ? ? ? ? ? set sto.cellArr[index] = DzCreateFrameByTagName("BACKDROP", "", sto.backUI, "", 0)
? ? ? ? ? ? ? ? call DzFrameSetPoint(sto.cellArr[index], 0, sto.backUI, 0, sto.borderSize + j * sto.cellSize, - (sto.borderSize + i * sto.cellSize))
? ? ? ? ? ? ? ? call DzFrameSetSize(sto.cellArr[index], sto.cellSize, sto.cellSize)
? ? ? ? ? ? ? ? call DzFrameSetTexture(sto.cellArr[index], sto.cellStr, 0)
? ? ? ? ? ? ? ? set j = j + 1
? ? ? ? ? ? endloop
? ? ? ? ? ? set j = 0
? ? ? ? ? ? set i = i + 1
? ? ? ? endloop
? ? ? ? call DzFrameShow(sto.parentUI, false)
? ? endfunction
? ? function doSomething takes nothing returns nothing
? ? ? ? call storageInit()
? ? endfunction
? ? function findFreeIndex takes integer btn returns integer
? ? ? ? local integer i = 0
? ? ? ? loop
? ? ? ? ? ? exitwhen i >= sto.row * sto.col
? ? ? ? ? ? if sto.cellBtnArr[i] == btn then
? ? ? ? ? ? ? ? return i
? ? ? ? ? ? endif
? ? ? ? ? ? set i = i + 1
? ? ? ? endloop
? ? ? ? return - 1
? ? endfunction
? ? function isFull takes nothing returns boolean
? ? ? ? local integer i = 0
? ? ? ? loop
? ? ? ? ? ? exitwhen i >= 6
? ? ? ? ? ? if UnitItemInSlot(hero, i) == null then
? ? ? ? ? ? ? ? return false
? ? ? ? ? ? endif
? ? ? ? ? ? set i = i + 1
? ? ? ? endloop
? ? ? ? return true
? ? endfunction
? ? function clickBtn takes nothing returns nothing
? ? ? ? local integer btn = DzGetTriggerUIEventFrame()
? ? ? ? local integer index = findFreeIndex(btn)
? ? ? ? if index == -1 then
? ? ? ? ? ? return
? ? ? ? endif
? ? ? ? if isFull() then
? ? ? ? ? ? call BJDebugMsg("背包滿了")
? ? ? ? ? ? return
? ? ? ? endif
? ? ? ? call DzFrameSetTexture(sto.cellArr[index], sto.cellStr, 0)
? ? ? ? call DzFrameClearAllPoints(btn)
? ? ? ? call DzDestroyFrame(btn)
? ? ? ? set sto.cellBtnArr[index] = 0
? ? ? ? call UnitAddItemById(hero, sto.itemTypeIdArr[index])
? ? endfunction
? ? function useAction takes nothing returns nothing
? ? ? ? local item it = GetManipulatedItem()
? ? ? ? local unit u = GetTriggerUnit()
? ? ? ? ?// 獲取道具的圖標(biāo)
? ? ? ? ?local string str = YDWEGetItemDataString(GetItemTypeId(it), 1)
? ? ? ? ?local integer freeIndex = findFreeIndex(0)
? ? ? ? ?if index == -1 then
? ? ? ? ? ? call BJDebugMsg("倉(cāng)庫(kù)滿了")
? ? ? ? ? ? return
? ? ? ? endif
? ? ? ? ?if u == hero then
? ? ? ? ? ? call DzFrameSetTexture(sto.cellArr[freeIndex], str, 0)
? ? ? ? ? ? set sto.cellBtnArr[freeIndex] = DzCreateFrameByTagName("GLUEBUTTON", "", sto.cellArr[freeIndex], "", 0)
? ? ? ? ? ? call DzFrameSetPoint(sto.cellBtnArr[freeIndex], 6, sto.cellArr[freeIndex], 6, 0, 0)
? ? ? ? ? ? call DzFrameSetSize(sto.cellBtnArr[freeIndex], sto.cellSize, sto.cellSize)
? ? ? ? ? ? call DzFrameSetScript(sto.cellBtnArr[freeIndex], 1, "clickBtn", false)
? ? ? ? ? ? set sto.itemTypeIdArr[freeIndex] = GetItemTypeId(it)
? ? ? ? ?endif
? ? ? ? ?set it = null
? ? ? ? ?set u = null
? ? endfunction
? ? function triggerInit takes nothing returns nothing
? ? ? ? local trigger t = CreateTrigger()
? ? ? ? local trigger t2 = CreateTrigger()
? ? ? ? local trigger t3 = CreateTrigger()
? ? ? ? call TriggerRegisterPlayerChatEvent(t, Player(0), "1", true)
? ? ? ? call TriggerAddAction(t, function doSomething)
? ? ? ? call TriggerRegisterTimerEventSingle(t2, 0)
? ? ? ? call TriggerAddAction(t2, function storageInit)
? ? ? ? call TriggerRegisterPlayerUnitEvent(t3, Player(0), EVENT_PLAYER_UNIT_USE_ITEM, null)
? ? ? ? call TriggerAddAction(t3, function useAction)
? ? ? ? set t = null
? ? ? ? set t2 = null
? ? ? ? set t3 = null
? ? endfunction
? ? function gameInit takes nothing returns nothing
? ? ? ? local unit u2 = CreateUnit(Player(0), 'hrif', 100, 100, 0)
? ? ? ? set hero = CreateUnit(Player(0), 'Hpal', 0, 0, 0)
? ? ? ? call EnableDragSelect(false, true)
? ? ? ? call FogEnable(false)
? ? ? ? call FogMaskEnable(false)
? ? ? ? call CreateItem('I006', 0, 0)
? ? ? ? call CreateItem('I006', 0, 0)
? ? ? ? call CreateItem('I006', 0, 0)
? ? ? ? call CreateItem('I006', 0, 0)
? ? ? ? call CreateItem('I006', 0, 0)
? ? ? ? call CreateItem('I006', 0, 0)
? ? ? ? call CreateItem('I006', 0, 0)
? ? ? ? call CreateItem('I007', 0, 0)
? ? ? ? call CreateItem('I007', 0, 0)
? ? ? ? call CreateItem('I007', 0, 0)
? ? ? ? call CreateItem('I007', 0, 0)
? ? ? ? call CreateItem('I007', 0, 0)
? ? ? ? call CreateItem('I007', 0, 0)
? ? ? ? call CreateItem('I007', 0, 0)
? ? ? ? call CreateItem('I008', 0, 0)
? ? ? ? call CreateItem('I008', 0, 0)
? ? ? ? call CreateItem('I008', 0, 0)
? ? ? ? call CreateItem('I008', 0, 0)
? ? ? ? call CreateItem('I008', 0, 0)
? ? ? ? call CreateItem('I008', 0, 0)
? ? ? ? call CreateItem('I008', 0, 0)
? ? endfunction
? ? function test takes nothing returns nothing
? ? ? ? call gameInit()
? ? ? ? call triggerInit()
? ? endfunction
endlibrary