Initial version - 1.2.0.60
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
local NpcHudCtrl = class("NpcHudCtrl", BaseCtrl)
|
||||
local AdventureModuleHelper = CS.AdventureModuleHelper
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
NpcHudCtrl._mapNodeConfig = {
|
||||
rtRoot = {},
|
||||
rtTop = {},
|
||||
rtNpc = {},
|
||||
rtChat = {},
|
||||
txtChat = {sComponentName = "TMP_Text"},
|
||||
txtNPCType = {sComponentName = "TMP_Text"},
|
||||
rtStrength = {},
|
||||
txtStrength = {sComponentName = "TMP_Text"},
|
||||
rtCost = {},
|
||||
txtCost = {sComponentName = "TMP_Text"},
|
||||
imgCost = {sComponentName = "Image"},
|
||||
rtFree = {},
|
||||
txtFree = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "ST_StrengthenMachine_Free"
|
||||
},
|
||||
rtBottom = {},
|
||||
txtNPCName = {sComponentName = "TMP_Text"},
|
||||
txtNPCTag = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
NpcHudCtrl._mapEventConfig = {
|
||||
RefreshStarTowerCoin = "OnEvent_RefreshStarTowerCoin",
|
||||
InteractiveNpc = "OnEvent_InteractiveNpc",
|
||||
InteractiveNpcFinish = "OnEvent_InteractiveNpcFinish"
|
||||
}
|
||||
local colorGreen = Color(0.9803921568627451, 0.9803921568627451, 0.9803921568627451, 1)
|
||||
local colorRed = Color(1.0, 0.44313725490196076, 0.5411764705882353, 1)
|
||||
local nInterval = 0.2
|
||||
local chatMinTime = 1
|
||||
local chatMaxTime = 4
|
||||
function NpcHudCtrl:CalChatContentShowTime(sContent)
|
||||
local sPureContent = string.gsub(sContent, "<.->", "")
|
||||
sPureContent = string.gsub(sPureContent, "\n", "")
|
||||
local nDuration = string.utf8len(sPureContent) * nInterval
|
||||
nDuration = math.min(chatMaxTime, nDuration)
|
||||
nDuration = math.max(chatMinTime, nDuration)
|
||||
return nDuration
|
||||
end
|
||||
function NpcHudCtrl:ShowStrengthNpc(sName, nCostCount, nHasCount)
|
||||
self._mapNode.rtStrength.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtStrength, sName)
|
||||
self.nCostCount = nCostCount
|
||||
self:RefreshStrengthCost(nHasCount)
|
||||
end
|
||||
function NpcHudCtrl:RefreshStrengthCost(nHasCount)
|
||||
self._mapNode.rtCost.gameObject:SetActive(self.nCostCount > 0)
|
||||
self._mapNode.rtFree.gameObject:SetActive(self.nCostCount <= 0)
|
||||
if self.nCostCount > 0 then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCost, self.nCostCount)
|
||||
NovaAPI.SetTMPColor(self._mapNode.txtCost, nHasCount >= self.nCostCount and colorGreen or colorRed)
|
||||
self:SetSprite_Coin(self._mapNode.imgCost, AllEnum.CoinItemId.FixedRogCurrency)
|
||||
end
|
||||
end
|
||||
function NpcHudCtrl:ShowNpc(nId, nUId, nCostCount, nHasCount)
|
||||
self.nNpcId = nId
|
||||
self.nNpcUId = nUId
|
||||
self.nCostCount = nCostCount
|
||||
self:Clear()
|
||||
local mapNpcCfg = ConfigTable.GetData("NPCConfig", nId)
|
||||
if mapNpcCfg ~= nil then
|
||||
self._mapNode.rtRoot.gameObject:SetActive(true)
|
||||
self.tbChatPool = mapNpcCfg.Chat
|
||||
self.nChatProp = mapNpcCfg.ChatProp
|
||||
if mapNpcCfg.type == GameEnum.npcNewType.Upgrade and nCostCount ~= nil then
|
||||
self:ShowStrengthNpc(mapNpcCfg.Literary, nCostCount, nHasCount)
|
||||
else
|
||||
self._mapNode.rtBottom.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNPCName, mapNpcCfg.Name)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNPCTag, mapNpcCfg.Desc)
|
||||
if mapNpcCfg.type ~= GameEnum.npcNewType.Narrate then
|
||||
self._mapNode.rtNpc.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNPCType, mapNpcCfg.Literary)
|
||||
self:ShowChat()
|
||||
if self.chatTimer == nil then
|
||||
self.chatTimer = TimerManager.Add(0, mapNpcCfg.ChatTime, self, function()
|
||||
self:ShowChat()
|
||||
end, true, true, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
AdventureModuleHelper.SetHudFollowTarget(nUId, self._mapNode.rtTop.gameObject, Vector3(0, 1.2, 0), true)
|
||||
AdventureModuleHelper.SetHudFollowTarget(nUId, self._mapNode.rtBottom.gameObject, Vector3(0, -0.7, 0), false)
|
||||
end
|
||||
end
|
||||
function NpcHudCtrl:ShowChat()
|
||||
if self.tbChatPool == nil then
|
||||
return
|
||||
end
|
||||
local bTrigger = math.random(1, 100) <= self.nChatProp and true or false
|
||||
self._mapNode.rtChat.gameObject:SetActive(bTrigger)
|
||||
if bTrigger then
|
||||
local nAllCount = #self.tbChatPool
|
||||
local nIndex = math.random(1, nAllCount)
|
||||
local nChatId = self.tbChatPool[nIndex]
|
||||
local mapChatCfg = ConfigTable.GetData("StarTowerTalk", nChatId)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtChat, mapChatCfg.Content)
|
||||
local nDuration = self:CalChatContentShowTime(mapChatCfg.Content)
|
||||
self:AddTimer(1, nDuration, function()
|
||||
self._mapNode.rtChat.gameObject:SetActive(false)
|
||||
end, true, true, true, nil)
|
||||
end
|
||||
end
|
||||
function NpcHudCtrl:Clear()
|
||||
self._mapNode.rtNpc.gameObject:SetActive(false)
|
||||
self._mapNode.rtChat.gameObject:SetActive(false)
|
||||
self._mapNode.rtStrength.gameObject:SetActive(false)
|
||||
self._mapNode.rtBottom.gameObject:SetActive(false)
|
||||
self.tbChatPool = nil
|
||||
self.nChatProp = nil
|
||||
end
|
||||
function NpcHudCtrl:HideNpc()
|
||||
if self.chatTimer ~= nil then
|
||||
TimerManager.Remove(self.chatTimer, false)
|
||||
end
|
||||
self.chatTimer = nil
|
||||
self:Clear()
|
||||
self._mapNode.rtRoot.gameObject:SetActive(false)
|
||||
end
|
||||
function NpcHudCtrl:Awake()
|
||||
self._mapNode.rtRoot.gameObject:SetActive(false)
|
||||
end
|
||||
function NpcHudCtrl:OnDisable()
|
||||
self:HideNpc()
|
||||
self.nNpcId = nil
|
||||
self.nNpcUId = nil
|
||||
self.nCostCount = nil
|
||||
end
|
||||
function NpcHudCtrl:OnEvent_InteractiveNpc(nId)
|
||||
if nId ~= self.nNpcId then
|
||||
return
|
||||
end
|
||||
if self.chatTimer ~= nil then
|
||||
TimerManager.Remove(self.chatTimer, false)
|
||||
end
|
||||
self.chatTimer = nil
|
||||
self._mapNode.rtChat.gameObject:SetActive(false)
|
||||
end
|
||||
function NpcHudCtrl:OnEvent_InteractiveNpcFinish(nId, nCostCount, nHasCount)
|
||||
if nId ~= self.nNpcId then
|
||||
return
|
||||
end
|
||||
local mapNpcCfg = ConfigTable.GetData("NPCConfig", nId)
|
||||
if mapNpcCfg == nil then
|
||||
printError("读取NPCConfig配置失败!!!id = " .. tostring(nId))
|
||||
return
|
||||
end
|
||||
self:ShowChat()
|
||||
if self.chatTimer == nil then
|
||||
self.chatTimer = TimerManager.Add(0, mapNpcCfg.ChatTime, self, function()
|
||||
self:ShowChat()
|
||||
end, true, true, false)
|
||||
end
|
||||
if mapNpcCfg.type == GameEnum.npcNewType.Upgrade and nCostCount ~= nil then
|
||||
self.nCostCount = nCostCount
|
||||
self:RefreshStrengthCost(nHasCount)
|
||||
end
|
||||
end
|
||||
function NpcHudCtrl:OnEvent_RefreshStarTowerCoin(nCoin)
|
||||
if self.nNpcId ~= nil and self.nCostCount ~= nil then
|
||||
local mapNpcCfg = ConfigTable.GetData("NPCConfig", self.nNpcId)
|
||||
if mapNpcCfg ~= nil and mapNpcCfg.type == GameEnum.npcNewType.Upgrade then
|
||||
self:RefreshStrengthCost(nCoin)
|
||||
end
|
||||
end
|
||||
end
|
||||
return NpcHudCtrl
|
||||
Reference in New Issue
Block a user