Files
SL1900 80af235e05 Update - 1.12.0.120
EN: 1.12.0.120
CN: 1.12.0.120
JP: 1.12.0.124
KR: 1.12.0.124
2026-06-30 14:30:00 +09:00

275 lines
10 KiB
Lua

local StarTowerEventBookCtrl = class("StarTowerEventBookCtrl", BaseCtrl)
local GameResourceLoader = require("Game.Common.Resource.GameResourceLoader")
local typeof = typeof
local Path = require("path")
local Offset = CS.Actor2DOffsetData
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
StarTowerEventBookCtrl._mapNodeConfig = {
tabLsv = {
sComponentName = "LoopScrollView"
},
trSv = {sNodeName = "tabLsv", sComponentName = "Transform"},
txtCollectCn = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Event_Book_Collect"
},
txtCollect = {sComponentName = "TMP_Text"},
txtEventName = {sComponentName = "TMP_Text"},
eventDescSv = {sComponentName = "ScrollRect"},
txtEventDesc = {sComponentName = "TMP_Text"},
goArea = {},
txtAreaCn = {
nCount = 2,
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Event_Book_Source"
},
txtArea = {nCount = 2, sComponentName = "TMP_Text"},
txtProc = {sComponentName = "TMP_Text"},
btnReceive = {
sComponentName = "UIButton",
callback = "OnBtnClick_Receive"
},
imgReceived = {},
txtReward = {
sComponentName = "TMP_Text",
sLanguageId = "StarTower_Event_Book_Received"
},
goEventLock = {},
goEventUnlock = {},
UIParticle = {nCount = 2},
imgReward = {nCount = 2, sComponentName = "Image"},
txtRewardCount = {sComponentName = "TMP_Text"},
rtActor2D = {
sNodeName = "----Actor2D_PNG----",
sComponentName = "Transform"
},
rtTxtAreaCn2 = {
sNodeName = "txtAreaCn2",
sComponentName = "RectTransform"
},
btnReceiveAllEvent = {
sComponentName = "UIButton",
callback = "OnBtnClick_ReceiveAll"
},
TMPReceiveAllEventTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Quest_Btn_ReceiveAll"
}
}
StarTowerEventBookCtrl._mapEventConfig = {}
StarTowerEventBookCtrl._mapRedDotConfig = {}
function StarTowerEventBookCtrl:UnRegisterRedDot()
end
function StarTowerEventBookCtrl:Init()
self.nSelectIndex = 1
self.nSelectEventId = 0
self:RefreshEventList()
self:RefreshSelectEvent()
end
function StarTowerEventBookCtrl:Back()
self:UnRegisterRedDot()
EventManager.Hit("ChangeStarTowerBookPanel", AllEnum.StarTowerBookPanelType.Main)
end
function StarTowerEventBookCtrl:RefreshSelectEvent()
local eventData = self.mapEventBook[self.nSelectIndex]
if eventData ~= nil then
self._mapNode.goEventLock.gameObject:SetActive(eventData.Status == AllEnum.BookQuestStatus.UnComplete)
self._mapNode.goEventUnlock.gameObject:SetActive(eventData.Status ~= AllEnum.BookQuestStatus.UnComplete)
NovaAPI.SetVerticalNormalizedPosition(self._mapNode.eventDescSv, 1)
NovaAPI.SetTMPText(self._mapNode.txtEventName, eventData.CfgData.Name)
NovaAPI.SetTMPText(self._mapNode.txtEventDesc, eventData.CfgData.Story)
NovaAPI.SetTMPText(self._mapNode.txtArea[1], eventData.CfgData.Source)
NovaAPI.SetTMPText(self._mapNode.txtArea[2], eventData.CfgData.Source)
NovaAPI.SetTMPText(self._mapNode.txtProc, orderedFormat(ConfigTable.GetUIText("StarTower_Event_Book_EventProc") or "", eventData.nCurProgress, eventData.nGoal))
self._mapNode.imgReceived.gameObject:SetActive(eventData.Status == AllEnum.BookQuestStatus.Received)
self._mapNode.imgReward[1].gameObject:SetActive(eventData.Status ~= AllEnum.BookQuestStatus.Received)
self._mapNode.imgReward[2].gameObject:SetActive(eventData.Status == AllEnum.BookQuestStatus.Received)
for _, v in ipairs(self._mapNode.UIParticle) do
v.gameObject:SetActive(eventData.Status == AllEnum.BookQuestStatus.Complete)
end
local nRewardId = eventData.CfgData.ItemId
local itemCfg = ConfigTable.GetData_Item(nRewardId)
if itemCfg ~= nil then
self:SetPngSprite(self._mapNode.imgReward[1], itemCfg.Icon)
self:SetPngSprite(self._mapNode.imgReward[2], itemCfg.Icon)
end
local nCount = eventData.CfgData.ItemQty
NovaAPI.SetTMPText(self._mapNode.txtRewardCount, "x" .. nCount)
local nCharId = eventData.CfgData.NPCId
local nType = eventData.CfgData.Type
if nCharId ~= nil then
local trans = self._mapNode.rtActor2D
local trPanelOffset = trans:GetChild(0)
local trOffset = trPanelOffset:GetChild(0)
local imgBody = trOffset:GetChild(0):GetComponent("Image")
local imgFace = trOffset:GetChild(1):GetComponent("Image")
local nShowPanelId = self:GetPanelId()
local tbPanelOffsetData = Actor2DManager.GetMapPanelConfig(nShowPanelId)
local x, y, s = 0, 0, 1
if tbPanelOffsetData ~= nil then
if 0 < tbPanelOffsetData.nReuse then
x = tbPanelOffsetData.v3PanelOffset.x
y = tbPanelOffsetData.v3PanelOffset.y
s = tbPanelOffsetData.v3PanelOffset.z
end
if s <= 0 then
s = 1
end
end
trPanelOffset.localPosition = Vector3(x * 100, y * 100, 0)
trPanelOffset.localScale = Vector3(s, s, 1)
local v3OffsetPos, v3OffsetScale = self:GetCharPortrait(imgBody, imgFace, nCharId, nType)
trOffset.localScale = v3OffsetScale
trOffset.localPosition = v3OffsetPos
end
end
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
NovaAPI.SetScrollRectVertical(self._mapNode.eventDescSv, true)
end
cs_coroutine.start(wait)
end
function StarTowerEventBookCtrl:GetCharPortrait(imgBody, imgFace, nCharId, nType)
local nSkinId = 0
if nType == 1 then
nSkinId = ConfigTable.GetData_Character(nCharId).DefaultSkinId
else
nSkinId = ConfigTable.GetData("StarTowerNPC", nCharId).NPCSkin
end
local GetName = function(sPortrait, Face)
local sFileFullName = Path.basename(sPortrait)
local sFileExtName = Path.extension(sPortrait)
local sFileName = string.gsub(sFileFullName, sFileExtName, "")
sFileName = string.gsub(sFileName, "_a", "")
local sBodyName = string.format("%s_%s", sFileName, "001")
local sFaceName = string.format("%s_%s", sFileName, Face)
return sBodyName, sFaceName
end
local GetSprite = function(sPortrait, sName)
local _sPath = string.format("%s/atlas_png/a/%s.png", Path.dirname(sPortrait), sName)
return self:LoadAsset(_sPath, typeof(Sprite))
end
local mapSkinData
if nType == 1 then
mapSkinData = ConfigTable.GetData("CharacterSkin", nSkinId)
else
mapSkinData = ConfigTable.GetData("NPCSkin", nSkinId)
end
if mapSkinData == nil then
return Vector3.zero, Vector3.one
end
local sAssetPath = mapSkinData.Portrait
local sFace = "002"
local sBodyName, sFaceName = GetName(sAssetPath, sFace)
NovaAPI.SetImageSpriteAsset(imgBody, GetSprite(sAssetPath, sBodyName))
NovaAPI.SetImageSpriteAsset(imgFace, GetSprite(sAssetPath, sFaceName))
NovaAPI.SetImageNativeSize(imgBody)
NovaAPI.SetImageNativeSize(imgFace)
local objOffset = self:LoadOffset(mapSkinData.Offset)
local nX, nY = 0, 0
local s, x, y = objOffset:GetOffsetData(self:GetPanelId(), indexOfPose("a"), true, nX, nY)
local v3OffsetPos = Vector3(x * 100, y * 100, 0)
local v3OffsetScale = Vector3(s, s, 1)
return v3OffsetPos, v3OffsetScale
end
function StarTowerEventBookCtrl:LoadOffset(sPath)
return self:LoadAsset(sPath, typeof(Offset))
end
function StarTowerEventBookCtrl:RefreshEventList()
self.mapEventBook = PlayerData.StarTowerBook:GetAllEventBookData()
for nIndex, v in ipairs(self.mapEventBook) do
if RedDotManager.GetValid(RedDotDefine.StarTowerBook_Event_Reward, v.Id) then
self.nSelectIndex = nIndex
break
end
end
for nInstanceId, objCtrl in pairs(self.mapGrids) do
self:UnbindCtrlByNode(objCtrl)
self.mapGrids[nInstanceId] = nil
end
if self.nSelectIndex == 1 then
self._mapNode.tabLsv:SetAnim(0.02)
end
self._mapNode.tabLsv:Init(#self.mapEventBook, self, self.OnRefreshGrid, self.OnGridBtnClick)
self._mapNode.tabLsv:SetScrollGridPos(self.nSelectIndex - 1, 0.1, 0)
local nAllCount = 0
local nCount = 0
local bShowAllReceive = false
for _, v in pairs(self.mapEventBook) do
nAllCount = nAllCount + 1
if v.Status ~= AllEnum.BookQuestStatus.UnComplete then
nCount = nCount + 1
end
if v.Status == AllEnum.BookQuestStatus.Complete then
bShowAllReceive = true
end
end
self._mapNode.btnReceiveAllEvent.gameObject:SetActive(bShowAllReceive)
NovaAPI.SetTMPText(self._mapNode.txtCollect, string.format("%s/%s", nCount, nAllCount))
end
function StarTowerEventBookCtrl:OnRefreshGrid(goGrid, gridIndex)
local nInstanceID = goGrid:GetInstanceID()
if nil == self.mapGrids[nInstanceID] then
self.mapGrids[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.StarTowerBook.Event.EventBookTogItemCtrl")
end
local nIndex = gridIndex + 1
local eventData = self.mapEventBook[nIndex]
self.mapGrids[nInstanceID]:InitItem(eventData)
self.mapGrids[nInstanceID]:SetSelect(self.nSelectIndex == nIndex)
end
function StarTowerEventBookCtrl:OnGridBtnClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local eventData = self.mapEventBook[nIndex]
if self.nSelectEventId == eventData.Id then
return
end
local nInstanceId = goGrid:GetInstanceID()
local goSelect = self._mapNode.trSv:Find("Viewport/Content/" .. self.nSelectIndex - 1)
if goSelect then
self.mapGrids[goSelect.gameObject:GetInstanceID()]:SetSelect(false)
end
self.mapGrids[nInstanceId]:SetSelect(true)
self.nSelectIndex = nIndex
self.nSelectEventId = eventData.Id
self:RefreshSelectEvent()
end
function StarTowerEventBookCtrl:Awake()
self.nSelectEventId = 0
self.nSelectIndex = 0
self.mapGrids = {}
end
function StarTowerEventBookCtrl:OnEnable()
end
function StarTowerEventBookCtrl:OnDisable()
self:UnRegisterRedDot()
for nInstanceId, objCtrl in pairs(self.mapGrids) do
self:UnbindCtrlByNode(objCtrl)
self.mapGrids[nInstanceId] = nil
end
self.mapGrids = {}
end
function StarTowerEventBookCtrl:OnDestroy()
end
function StarTowerEventBookCtrl:OnRelease()
end
function StarTowerEventBookCtrl:OnBtnClick_Receive()
local eventData = self.mapEventBook[self.nSelectIndex]
if eventData ~= nil and eventData.Status == AllEnum.BookQuestStatus.Complete then
local callback = function()
self.mapEventBook = PlayerData.StarTowerBook:GetAllEventBookData()
self:RefreshSelectEvent()
end
PlayerData.Quest:ReceiveStarTowerEventReward(eventData.Id, callback)
end
end
function StarTowerEventBookCtrl:OnBtnClick_ReceiveAll()
local callback = function()
self.mapEventBook = PlayerData.StarTowerBook:GetAllEventBookData()
self:RefreshSelectEvent()
self._mapNode.btnReceiveAllEvent.gameObject:SetActive(false)
end
PlayerData.Quest:ReceiveStarTowerEventReward(0, callback)
end
return StarTowerEventBookCtrl