Files
Endfield-Data/LuaScripts/UI/Widgets/ItemLock.lua
2025-12-02 20:37:18 +07:00

96 lines
2.2 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
ItemLock = HL.Class('ItemLock', UIWidgetBase)
ItemLock.itemId = HL.Field(HL.String) << ""
ItemLock.instId = HL.Field(HL.Number) << 0
ItemLock._OnFirstTimeInit = HL.Override() << function(self)
self:RegisterMessage(MessageConst.ON_ITEM_FLAG_CHANGED, function(arg)
self:_OnItemFlagChanged(arg)
end)
end
ItemLock.InitItemLock = HL.Method(HL.Opt(HL.String, HL.Number)) << function(self, itemId, instId)
self.itemId = ""
if not instId or instId <= 0 then
self.view.gameObject:SetActive(false)
return
end
local itemData = Tables.itemTable[itemId]
if itemData == nil then
self.view.gameObject:SetActive(false)
return
end
local itemType = itemData.type
if itemType == GEnums.ItemType.Weapon or itemType == GEnums.ItemType.WeaponGem or itemType == GEnums.ItemType.Equip then
self.view.gameObject:SetActive(true)
else
self.view.gameObject:SetActive(false)
return
end
self:_FirstTimeInit()
self.itemId, self.instId = itemId, instId
local isLock = GameInstance.player.inventory:IsItemLocked(Utils.getCurrentScope(), itemId, instId)
local isTrash = GameInstance.player.inventory:IsItemTrash(Utils.getCurrentScope(), itemId, instId)
self:_UpdateState(isLock, isTrash)
end
ItemLock._OnItemFlagChanged = HL.Method(HL.Table) << function(self, arg)
if string.isEmpty(self.itemId) then
return
end
local itemId, instId = unpack(arg)
local isCurItem = self.itemId == itemId and self.instId == instId
if not isCurItem then
return
end
local isLock = GameInstance.player.inventory:IsItemLocked(Utils.getCurrentScope(), itemId, instId)
local isTrash = GameInstance.player.inventory:IsItemTrash(Utils.getCurrentScope(), itemId, instId)
self:_UpdateState(isLock, isTrash)
end
ItemLock._UpdateState = HL.Method(HL.Boolean, HL.Boolean) << function(self, isLock, isTrash)
local stateName = "normal"
if isLock then
stateName = "lock"
elseif isTrash then
stateName = "trash"
end
self.view.stateController:SetState(stateName)
end
HL.Commit(ItemLock)
return ItemLock