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

115 lines
2.6 KiB
Lua

local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
TrashToggle = HL.Class('TrashToggle', UIWidgetBase)
TrashToggle.itemId = HL.Field(HL.String) << ""
TrashToggle.instId = HL.Field(HL.Number) << 0
TrashToggle._OnFirstTimeInit = HL.Override() << function(self)
self:RegisterMessage(MessageConst.ON_ITEM_TRASH_STATE_CHANGED, function(arg)
self:_OnItemTrashStateChanged(arg)
end)
self.view.toggle.onValueChanged:AddListener(function(isOn)
self:_TrashItem(isOn)
end)
end
TrashToggle.InitTrashToggle = HL.Method(HL.String, HL.Number).Return(HL.Boolean) << function(self, itemId, instId)
self:_FirstTimeInit()
self.itemId = ""
if not instId or instId <= 0 or not (GameInstance.player.inventory:TryGetInstItem(Utils.getCurrentScope(), instId)) then
self.view.gameObject:SetActive(false)
return false
end
local itemData = Tables.itemTable[itemId]
if itemData == nil then
self.view.gameObject:SetActive(false)
return false
end
local itemType = itemData.type
if itemType == GEnums.ItemType.WeaponGem then
self.view.gameObject:SetActive(true)
else
self.view.gameObject:SetActive(false)
return false
end
self.itemId, self.instId = itemId, instId
self:_UpdateTrashState()
return true
end
TrashToggle._TrashItem = HL.Method(HL.Boolean) << function(self, isOn)
if string.isEmpty(self.itemId) then
return
end
local isItemTrash = GameInstance.player.inventory:IsItemTrash(Utils.getCurrentScope(), self.itemId, self.instId)
if isItemTrash ~= isOn then
GameInstance.player.inventory:TrashItem(Utils.getCurrentScope(), self.itemId, self.instId, isOn)
end
end
TrashToggle._OnItemTrashStateChanged = HL.Method(HL.Table) << function(self, args)
if string.isEmpty(self.itemId) then
return
end
self:_UpdateTrashState()
end
TrashToggle._UpdateTrashState = HL.Method() << function(self)
local isTrash = GameInstance.player.inventory:IsItemTrash(Utils.getCurrentScope(), self.itemId, self.instId)
self.view.toggle:SetIsOnWithoutNotify(isTrash)
if DeviceInfo.usingController then
self:_UpdateControllerKeyHint(isTrash)
end
end
TrashToggle._UpdateControllerKeyHint = HL.Method(HL.Boolean) << function(self, isTrash)
local bindingId = self.view.toggle.hoverConfirmBindingId
if bindingId > 0 then
InputManagerInst:SetBindingText(bindingId, isTrash and
Language.LUA_ITEM_UNTRASH_KEY_HINT or Language.LUA_ITEM_TRASH_KEY_HINT)
end
end
HL.Commit(TrashToggle)
return TrashToggle