137 lines
3.5 KiB
Lua
137 lines
3.5 KiB
Lua
local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LockToggle = HL.Class('LockToggle', UIWidgetBase)
|
|
|
|
|
|
LockToggle.itemId = HL.Field(HL.String) << ""
|
|
|
|
|
|
LockToggle.instId = HL.Field(HL.Number) << 0
|
|
|
|
|
|
LockToggle.canLock = HL.Field(HL.Boolean) << true
|
|
|
|
|
|
|
|
|
|
LockToggle._OnFirstTimeInit = HL.Override() << function(self)
|
|
self:RegisterMessage(MessageConst.ON_ITEM_LOCKED_STATE_CHANGED, function(arg)
|
|
self:_OnItemLockedStateChanged(arg)
|
|
end)
|
|
|
|
self.view.toggle.onValueChanged:AddListener(function(isOn)
|
|
self:_LockItem(isOn)
|
|
end)
|
|
|
|
self.view.canLockBtn.onClick:AddListener(function()
|
|
Notify(MessageConst.SHOW_TOAST, Language.LUA_FORBID_ITEM_LOCK_TOAST)
|
|
end)
|
|
|
|
self.view.toggle.clickOnHintTextId = "key_hint_item_lock_toggle"
|
|
self.view.toggle.clickOffHintTextId = "key_hint_item_lock_toggle"
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
LockToggle.InitLockToggle = 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.Weapon or itemType == GEnums.ItemType.WeaponGem or itemType == GEnums.ItemType.Equip then
|
|
self.view.gameObject:SetActive(true)
|
|
else
|
|
self.view.gameObject:SetActive(false)
|
|
return false
|
|
end
|
|
|
|
local isItemInDepot = GameInstance.player.inventory:IsItemInDepot(Utils.getCurrentScope(), itemId, instId)
|
|
self.view.toggle.interactable = isItemInDepot
|
|
self.view.canLockBtn.gameObject:SetActive(not isItemInDepot)
|
|
if not isItemInDepot then
|
|
self.view.toggle:SetIsOnWithoutNotify(false)
|
|
return false
|
|
end
|
|
|
|
self.itemId, self.instId = itemId, instId
|
|
self:_UpdateLockedState()
|
|
|
|
return true
|
|
end
|
|
|
|
|
|
|
|
|
|
LockToggle._LockItem = HL.Method(HL.Boolean) << function(self, isOn)
|
|
if string.isEmpty(self.itemId) then
|
|
return
|
|
end
|
|
|
|
local isItemLock = GameInstance.player.inventory:IsItemLocked(Utils.getCurrentScope(), self.itemId, self.instId)
|
|
if isItemLock ~= isOn then
|
|
GameInstance.player.inventory:LockItem(Utils.getCurrentScope(), self.itemId, self.instId, isOn)
|
|
if isOn then
|
|
AudioAdapter.PostEvent("au_ui_btn_valuable_lock")
|
|
else
|
|
AudioAdapter.PostEvent("au_ui_btn_valuable_unlock")
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
LockToggle._OnItemLockedStateChanged = HL.Method(HL.Table) << function(self, args)
|
|
if string.isEmpty(self.itemId) then
|
|
return
|
|
end
|
|
self:_UpdateLockedState()
|
|
end
|
|
|
|
|
|
|
|
LockToggle._UpdateLockedState = HL.Method() << function(self)
|
|
local isLocked = GameInstance.player.inventory:IsItemLocked(Utils.getCurrentScope(), self.itemId, self.instId)
|
|
self.view.toggle:SetIsOnWithoutNotify(isLocked)
|
|
if DeviceInfo.usingController then
|
|
self:_UpdateControllerKeyHint(isLocked)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
LockToggle._UpdateControllerKeyHint = HL.Method(HL.Boolean) << function(self, isLocked)
|
|
local bindingId = self.view.toggle.hoverConfirmBindingId
|
|
if bindingId > 0 then
|
|
InputManagerInst:SetBindingText(bindingId, isLocked and
|
|
Language.LUA_ITEM_UNLOCK_KEY_HINT or Language.LUA_ITEM_LOCK_KEY_HINT)
|
|
end
|
|
end
|
|
|
|
HL.Commit(LockToggle)
|
|
return LockToggle
|