200 lines
4.5 KiB
Lua
200 lines
4.5 KiB
Lua
local UIWidgetBase = require_ex('Common/Core/UIWidgetBase')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Monster = HL.Class('Monster', UIWidgetBase)
|
|
|
|
|
|
|
|
|
|
Monster._OnFirstTimeInit = HL.Override() << function(self)
|
|
self.redDot = self.view.redDot
|
|
end
|
|
|
|
|
|
|
|
|
|
Monster.redDot = HL.Field(HL.Forward("RedDot"))
|
|
|
|
|
|
Monster.id = HL.Field(HL.String) << ""
|
|
|
|
|
|
Monster.m_isSelected = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
Monster.m_showingHover = HL.Field(HL.Boolean) << false
|
|
|
|
|
|
Monster.m_enableHoverTips = HL.Field(HL.Boolean) << true
|
|
|
|
|
|
|
|
|
|
|
|
Monster._ResetOnInit = HL.Method() << function(self)
|
|
self.view.button.onIsNaviTargetChanged = nil
|
|
self.view.button.onClick:RemoveAllListeners()
|
|
self.view.button.onHoverChange:RemoveAllListeners()
|
|
self.view.button.onLongPress:RemoveAllListeners()
|
|
if self.redDot then
|
|
self.redDot:Stop()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Monster.InitMonster = HL.Method(HL.Opt(HL.Any, HL.Any, HL.String, HL.Boolean))
|
|
<< function(self, monsterTemplateId, onClick, clickableEvenEmpty)
|
|
|
|
|
|
|
|
|
|
self:_FirstTimeInit()
|
|
self:_ResetOnInit()
|
|
|
|
|
|
local isEmpty = monsterTemplateId == nil or string.isEmpty(monsterTemplateId)
|
|
self.view.content.gameObject:SetActive(not isEmpty)
|
|
|
|
if isEmpty then
|
|
self.id = ""
|
|
if clickableEvenEmpty then
|
|
self.view.button.enabled = true
|
|
self.view.button.onClick:AddListener(function()
|
|
onClick(monsterBundle)
|
|
end)
|
|
elseif DeviceInfo.usingController then
|
|
self.view.button.enabled = true
|
|
else
|
|
self.view.button.enabled = false
|
|
end
|
|
|
|
self:_UpdateIcon(nil)
|
|
return
|
|
end
|
|
|
|
if self.id ~= monsterTemplateId then
|
|
self.id = monsterTemplateId
|
|
self:SetSelected(false)
|
|
end
|
|
|
|
|
|
local _, data = Tables.EnemyTemplateDisplayInfoTable:TryGetValue(monsterTemplateId)
|
|
|
|
if not data then
|
|
logger.error("EnemyTemplateDisplayInfoTable not found: " .. monsterTemplateId)
|
|
return
|
|
end
|
|
|
|
self.view.name.text = data.nickname
|
|
if self.view.nameScrollText then
|
|
self.view.nameScrollText:ForceUpdate()
|
|
end
|
|
|
|
self:_UpdateIcon(data)
|
|
|
|
if onClick then
|
|
self.view.button.enabled = true
|
|
if onClick then
|
|
self.view.button.onClick:AddListener(function()
|
|
onClick(monsterTemplateId)
|
|
end)
|
|
end
|
|
else
|
|
self.view.button.enabled = false
|
|
end
|
|
|
|
self.view.button.onHoverChange:RemoveAllListeners()
|
|
if self.view.config.SHOW_HOVER_TIP and not isEmpty then
|
|
self.view.button.onHoverChange:AddListener(function(isHover)
|
|
if not self.m_enableHoverTips and isHover then
|
|
return
|
|
end
|
|
|
|
local _, typeInfo = Tables.displayEnemyTypeTable:TryGetValue(data.displayType)
|
|
if isHover and not self.m_isSelected then
|
|
Notify(MessageConst.SHOW_COMMON_HOVER_TIP, {
|
|
mainText = data.name,
|
|
subText = typeInfo.name,
|
|
delay = self.view.config.HOVER_TIP_DELAY,
|
|
})
|
|
self.m_showingHover = true
|
|
else
|
|
Notify(MessageConst.HIDE_COMMON_HOVER_TIP)
|
|
self.m_showingHover = false
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
Monster.SetSelected = HL.Method(HL.Opt(HL.Boolean, HL.Boolean)) << function(self, isSelected, forceUpdate)
|
|
self.m_isSelected = isSelected == true
|
|
if isSelected and self.view.config.SHOW_HOVER_TIP then
|
|
Notify(MessageConst.HIDE_COMMON_HOVER_TIP)
|
|
self.m_showingHover = false
|
|
end
|
|
self.view.selectedBG.gameObject:SetActive(isSelected)
|
|
self.view.selectedNode.gameObject:SetActive(isSelected)
|
|
end
|
|
|
|
|
|
|
|
|
|
Monster.SetEnableHoverTips = HL.Method(HL.Boolean) << function(self, enabled)
|
|
self.m_enableHoverTips = enabled
|
|
if DeviceInfo.usingController and self.view.button.isNaviTarget then
|
|
if not enabled and self.m_showingHover then
|
|
Notify(MessageConst.HIDE_COMMON_HOVER_TIP)
|
|
self.m_showingHover = false
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Monster._UpdateIcon = HL.Method(HL.Opt(HL.Any)) << function(self, data)
|
|
local loadPath = self.view.config.USE_BIG_ICON and UIConst.UI_SPRITE_MONSTER_ICON_BIG or UIConst.UI_SPRITE_MONSTER_ICON
|
|
self.view.icon:LoadSprite(loadPath, data.templateId)
|
|
end
|
|
|
|
|
|
|
|
Monster._OnDestroy = HL.Override() << function(self)
|
|
if self.m_showingHover then
|
|
Notify(MessageConst.HIDE_COMMON_HOVER_TIP)
|
|
self.m_showingHover = false
|
|
end
|
|
end
|
|
|
|
HL.Commit(Monster)
|
|
return Monster
|
|
|