123 lines
3.6 KiB
Lua
123 lines
3.6 KiB
Lua
|
---@class XTaikoMasterInfo@音游基础信息
|
|||
|
local XTaikoMasterInfo = XClass(nil, "XTaikoMasterInfo")
|
|||
|
|
|||
|
function XTaikoMasterInfo:Ctor()
|
|||
|
self._ActivityId = XTaikoMasterConfigs.GetDefaultActivityId()
|
|||
|
---@type {StageId:number,MaxScore:number,MaxAccuracy:number,MaxCombo:number}[]
|
|||
|
self._StageDataList = {}
|
|||
|
self._AppearScale = 0
|
|||
|
self._JudgeScale = 0
|
|||
|
self._RankData = {}
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:GetActivityId()
|
|||
|
return self._ActivityId
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:SetData(data)
|
|||
|
if not data then
|
|||
|
return
|
|||
|
end
|
|||
|
if XTool.IsNumberValid(data.ActivityId) then
|
|||
|
self._ActivityId = data.ActivityId
|
|||
|
end
|
|||
|
self._StageDataList = {}
|
|||
|
for i = 1, #data.StageDataList do
|
|||
|
local stage = data.StageDataList[i]
|
|||
|
self._StageDataList[stage.StageId] = stage
|
|||
|
end
|
|||
|
local setting = data.Setting
|
|||
|
if setting then
|
|||
|
self:SetSetting(setting.AppearOffset, setting.JudgeOffset)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:SetSetting(appearScale, judgeScale)
|
|||
|
self._AppearScale = appearScale
|
|||
|
self._JudgeScale = judgeScale
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:GetSettingAppearScale()
|
|||
|
return self._AppearScale
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:GetSettingJudgeScale()
|
|||
|
return self._JudgeScale
|
|||
|
end
|
|||
|
|
|||
|
---@return {Ranking:number,TotalCount:number,RankPlayerInfoList:table}
|
|||
|
function XTaikoMasterInfo:GetRankData(songId)
|
|||
|
return self._RankData[songId] or {}
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:SetRankData(songId, rankData)
|
|||
|
if rankData.RankPlayerInfoList then
|
|||
|
for rank = 1, #rankData.RankPlayerInfoList do
|
|||
|
local playerRank = rankData.RankPlayerInfoList[rank]
|
|||
|
-- 服务端没将排行放进结构,index隐含排行
|
|||
|
if not playerRank.Rank then
|
|||
|
playerRank.Rank = rank
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
self._RankData[songId] = rankData
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_TAIKO_MASTER_RANK_UPDATE, songId)
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:GetStageData(stageId)
|
|||
|
return self._StageDataList[stageId]
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:GetMyScore(stageId)
|
|||
|
local stage = self:GetStageData(stageId)
|
|||
|
local score = stage and stage.MaxScore
|
|||
|
return score or 0, score and true or false
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:GetMyAccuracy(stageId)
|
|||
|
local stage = self:GetStageData(stageId)
|
|||
|
return stage and stage.MaxAccuracy or 0
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:GetMyCombo(stageId)
|
|||
|
local stage = self:GetStageData(stageId)
|
|||
|
return stage and stage.MaxCombo or 0
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:GetMyPerfect(stageId)
|
|||
|
local stage = self:GetStageData(stageId)
|
|||
|
return stage and stage.MaxPerfect or 0
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:GetMyAccuracyUnderMaxScore(stageId)
|
|||
|
local stage = self:GetStageData(stageId)
|
|||
|
return stage and stage.AccuracyUnderMaxScore or 0
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:GetMyComboUnderMaxScore(stageId)
|
|||
|
local stage = self:GetStageData(stageId)
|
|||
|
return stage and stage.ComboUnderMaxScore or 0
|
|||
|
end
|
|||
|
|
|||
|
function XTaikoMasterInfo:HandleWinData(stageId, winData)
|
|||
|
if not winData then
|
|||
|
return
|
|||
|
end
|
|||
|
local stage = self._StageDataList[stageId]
|
|||
|
if not stage then
|
|||
|
stage = {}
|
|||
|
self._StageDataList[stageId] = stage
|
|||
|
end
|
|||
|
local maxScore = stage.MaxScore or 0
|
|||
|
stage.MaxAccuracy = math.max((stage.MaxAccuracy or 0), winData.Accuracy)
|
|||
|
stage.MaxScore = math.max((maxScore), winData.Score)
|
|||
|
stage.MaxCombo = math.max((stage.MaxCombo or 0), winData.Combo)
|
|||
|
stage.MaxPerfect = math.max((stage.MaxPerfect or 0), winData.Perfect)
|
|||
|
if winData.Score >= maxScore then
|
|||
|
stage.AccuracyUnderMaxScore = winData.Accuracy
|
|||
|
stage.ComboUnderMaxScore = winData.Combo
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return XTaikoMasterInfo
|