PGRData/Script/matrix/xentity/xmonstercombat/entity/XMonsterCombatChapterEntity.lua

188 lines
6.6 KiB
Lua
Raw Normal View History

2024-09-01 22:49:41 +02:00
local XMonsterTeam = require("XEntity/XMonsterCombat/XMonsterTeam")
-- 章节配置类
---@class XMonsterCombatChapterEntity
---@field MonsterTeam XMonsterTeam
local XMonsterCombatChapterEntity = XClass(nil, "XMonsterCombatChapterEntity")
function XMonsterCombatChapterEntity:Ctor(chapterId)
self:UpdateChapterId(chapterId)
self.MonsterTeam = nil
end
function XMonsterCombatChapterEntity:UpdateChapterId(chapterId)
self.ChapterId = chapterId
self.Config = XMonsterCombatConfigs.GetCfgByIdKey(XMonsterCombatConfigs.TableKey.MonsterCombatChapter, chapterId)
self.ConfigDetail = XMonsterCombatConfigs.GetCfgByIdKey(XMonsterCombatConfigs.TableKey.MonsterCombatChapterDetail, chapterId)
end
function XMonsterCombatChapterEntity:GetTimeId()
return self.Config.TimeId or 0
end
-- 章节名称
function XMonsterCombatChapterEntity:GetName()
return self.Config.Name or ""
end
-- 章节类型1-普通章节2-核心章节)
function XMonsterCombatChapterEntity:GetType()
return self.Config.Type or 1
end
-- 前置章节Id
function XMonsterCombatChapterEntity:GetPreChapterId()
return self.Config.PreChapterId or 0
end
-- 解锁怪物id列表
function XMonsterCombatChapterEntity:GetUnlockMonsterIds()
return self.Config.UnlockMonsterIds or {}
end
-- 章节关卡列表
function XMonsterCombatChapterEntity:GetStageIds()
return self.Config.StageIds or {}
end
-- 章节限制怪物
function XMonsterCombatChapterEntity:GetLimitMonsters()
return self.Config.LimitMonsters or {}
end
-- 章节限制机器人
function XMonsterCombatChapterEntity:GetLimitRobotIds()
return self.Config.LimitRobotIds or {}
end
--region 详情信息
function XMonsterCombatChapterEntity:GetDescription()
local desc = self.ConfigDetail.Description or ""
return XUiHelper.ConvertLineBreakSymbol(desc)
end
function XMonsterCombatChapterEntity:GetPrefabName()
return self.ConfigDetail.PrefabName or ""
end
function XMonsterCombatChapterEntity:GetBgIcon()
return self.ConfigDetail.BgIcon or ""
end
--endregion
-- 章节评分
function XMonsterCombatChapterEntity:GetChapterScore()
local maxScore = -1
for _, stageId in pairs(self:GetStageIds()) do
local stageEntity = XDataCenter.MonsterCombatManager.GetStageEntity(stageId)
if stageEntity:CheckIsScoreModel() and stageEntity:CheckIsPass() then
local score = stageEntity:GetStageMaxScore()
if score > maxScore then
maxScore = score
end
end
end
if maxScore > 0 then
return maxScore
end
return XUiHelper.GetText("UiMonsterCombatStageNotClear")
end
-- 检查是否是核心章节
function XMonsterCombatChapterEntity:CheckIsCoreChapter()
return self:GetType() == XMonsterCombatConfigs.ChapterType.Core
end
-- 检查是否在开启时间内
function XMonsterCombatChapterEntity:CheckInTime()
return XFunctionManager.CheckInTimeByTimeId(self:GetTimeId())
end
-- 检查章节是否解锁
-- 参数1 是否解锁 true为解锁 参数2 未解锁提示信息
function XMonsterCombatChapterEntity:CheckIsUnlock()
-- 是否在开启时间内
if not self:CheckInTime() then
return false, XUiHelper.GetText("UiMonsterCombatChapterNotOpen")
end
-- 前置章节是否通关
local preChapterId = self:GetPreChapterId()
local viewModel = XDataCenter.MonsterCombatManager.GetViewModel()
if not viewModel then
return false, ""
end
if XTool.IsNumberValid(preChapterId) and not viewModel:CheckChapterPass(preChapterId) then
local preChapterEntity = XDataCenter.MonsterCombatManager.GetChapterEntity(preChapterId)
return false, XUiHelper.GetText("UiMonsterCombatChapterNotClear", preChapterEntity:GetName())
end
return true, ""
end
-- 获取未解锁显示信息 默认显示空
function XMonsterCombatChapterEntity:GetLockShowDesc()
if not self:CheckInTime() then
local startTime = XFunctionManager.GetStartTimeByTimeId(self:GetTimeId())
return XUiHelper.GetText("UiMonsterCombatChapterOpenTime", XTime.TimestampToGameDateTimeString(startTime, "MM-dd"))
end
-- 前置章节是否通关
local preChapterId = self:GetPreChapterId()
local viewModel = XDataCenter.MonsterCombatManager.GetViewModel()
if not viewModel then
return ""
end
if XTool.IsNumberValid(preChapterId) and not viewModel:CheckChapterPass(preChapterId) then
local preChapterEntity = XDataCenter.MonsterCombatManager.GetChapterEntity(preChapterId)
return XUiHelper.GetText("UiMonsterCombatChapterClearUnlock", preChapterEntity:GetName())
end
return ""
end
-- 获取未解锁关卡的最小下标
function XMonsterCombatChapterEntity:GetUnPassedStageIndex()
local stageIds = self:GetStageIds()
local minIndex = table.nums(stageIds)
for i, stageId in pairs(stageIds) do
local stageEntity = XDataCenter.MonsterCombatManager.GetStageEntity(stageId)
if not stageEntity:CheckIsPass() then
if i < minIndex then
minIndex = i
end
end
end
return minIndex
end
-- 检查是否有新章节解锁
-- 规则为:解锁且未点击
function XMonsterCombatChapterEntity:CheckNewUnlockChapter()
local isUnlock = self:CheckIsUnlock()
local isClick = XDataCenter.MonsterCombatManager.CheckChapterClick(self.ChapterId)
return isUnlock and not isClick
end
-- 队伍信息
-- 编队保存规则:编队数据仅会在章节内进行保存,不继承到下一个章节中。
-- 优先使用本地数据 如果没有本地数据使用服务端数据
-- 本地数据必须同时存在角色和怪物,否则使用服务端数据
function XMonsterCombatChapterEntity:GetMonsterTeam()
if not self.MonsterTeam then
self.MonsterTeam = XMonsterTeam.New(self.ChapterId)
end
local isEmpty = self.MonsterTeam:GetIsEmpty()
local isMonsterEmpty = self.MonsterTeam:GetMonsterIsEmpty()
if not isEmpty and not isMonsterEmpty then
return self.MonsterTeam
end
-- 同步服务端数据
self.MonsterTeam:Clear()
local viewModel = XDataCenter.MonsterCombatManager.GetViewModel()
if viewModel then
-- 角色Id
local entityId = viewModel:GetFormationEntityId(self.ChapterId)
if XTool.IsNumberValid(entityId) then
self.MonsterTeam:UpdateEntityTeamPos(entityId, self.MonsterTeam:GetCaptainPos(), true)
end
-- 怪物列表
local monsterIds = viewModel:GetFormationMonsters(self.ChapterId)
if not XTool.IsTableEmpty(monsterIds) then
self.MonsterTeam:UpdateMonsterIds(monsterIds)
end
end
return self.MonsterTeam
end
return XMonsterCombatChapterEntity