308 lines
7.0 KiB
Lua
308 lines
7.0 KiB
Lua
local TutorialConst = require "app/module/tutorial/tutorial_const"
|
|
|
|
local TUTORIAL_CFG = ConfigManager:getConfig("tutorial")
|
|
local TUTORIAL_STARTCFG = ConfigManager:getConfig("tutorial_start")
|
|
|
|
local TutorialData = class("TutorialData", BaseData)
|
|
|
|
function TutorialData:ctor()
|
|
self.inTutorial = false
|
|
self.data.tutorialId = 0 -- 强制引导步骤
|
|
self.data.stopId = 0 -- 中断步骤
|
|
self.isFuncTutorial = false
|
|
end
|
|
|
|
function TutorialData:clear()
|
|
self.inTutorial = false
|
|
self.data.tutorialId = 0
|
|
self.data.stopId = 0
|
|
self.isFuncTutorial = false
|
|
end
|
|
|
|
function TutorialData:init(data)
|
|
data = data or {}
|
|
self.inTutorial = false
|
|
-- 强制引导步骤
|
|
self.data.tutorialId = data.id or 0
|
|
if self.data.tutorialId > 0 then
|
|
self.tutorialInfo = TUTORIAL_CFG[self.data.tutorialId]
|
|
end
|
|
-- 功能开启引导列表
|
|
self.funcTutorialMap = {}
|
|
if data.func then
|
|
for k,v in pairs(data.func) do
|
|
self.funcTutorialMap[k] = v
|
|
end
|
|
end
|
|
end
|
|
|
|
function TutorialData:getIsHaveTutorial()
|
|
if self.data.tutorialId > 0 and self.tutorialInfo ~= nil then
|
|
self.isFuncTutorial = false
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function TutorialData:getIsFuncTutorial()
|
|
return self.isFuncTutorial
|
|
end
|
|
|
|
-- 是不是引导的第一步
|
|
function TutorialData:getIsInFirstStep()
|
|
return self.data.tutorialId == 10010
|
|
end
|
|
|
|
-- 是否有下一步,中断步骤是否改变
|
|
function TutorialData:nextTutorial()
|
|
local id = self.tutorialInfo.next_id
|
|
local tutorialInfo = TUTORIAL_CFG[id]
|
|
if tutorialInfo == nil then
|
|
return false, false
|
|
end
|
|
self.data.tutorialId = id
|
|
self.tutorialInfo = tutorialInfo
|
|
local stopId = self.tutorialInfo and self.tutorialInfo.stop_id or 0
|
|
if stopId ~= self.data.stopId then -- 中断步骤发生了改变
|
|
self.data.stopId = stopId
|
|
return true, true
|
|
end
|
|
return true, false
|
|
end
|
|
|
|
function TutorialData:getStopId()
|
|
return self.data.stopId
|
|
end
|
|
|
|
function TutorialData:stopTutorial()
|
|
self.inTutorial = false
|
|
self.data.tutorialId = 0
|
|
end
|
|
|
|
-- 当前是否处于引导中
|
|
function TutorialData:getIsInTutorial()
|
|
return self.inTutorial
|
|
end
|
|
|
|
-- 开启引导
|
|
function TutorialData:setInTutorial(value)
|
|
self.inTutorial = value
|
|
end
|
|
|
|
-- 获取当前引导的id
|
|
function TutorialData:getTutorialId()
|
|
return self.data.tutorialId
|
|
end
|
|
|
|
-- 是否显示遮罩
|
|
function TutorialData:getShowMask()
|
|
return self.tutorialInfo.show_mask
|
|
end
|
|
|
|
-- 遮罩半径
|
|
function TutorialData:getMaskRadius()
|
|
return self.tutorialInfo.circle_r
|
|
end
|
|
|
|
-- 圆形遮罩偏移
|
|
function TutorialData:getMaskCircleOffset()
|
|
return self.tutorialInfo.circle_offset
|
|
end
|
|
|
|
-- 遮罩半径尺寸
|
|
function TutorialData:getMaskSquareSize()
|
|
return self.tutorialInfo.square_size
|
|
end
|
|
|
|
-- 遮罩坐标偏移
|
|
function TutorialData:getMaskSquareOffset()
|
|
return self.tutorialInfo.square_offset
|
|
end
|
|
|
|
-- 获取延迟开始的时间
|
|
function TutorialData:getDelayStartTime()
|
|
return self.tutorialInfo.delay or 0
|
|
end
|
|
|
|
-- 是否需要屏蔽点击
|
|
function TutorialData:getTouchEnabled()
|
|
return true
|
|
end
|
|
|
|
function TutorialData:getTutorialType()
|
|
return self.tutorialInfo.type
|
|
end
|
|
|
|
function TutorialData:getTutorialStopFight()
|
|
return self.tutorialInfo.stop_fight ~= nil
|
|
end
|
|
|
|
function TutorialData:getTutorialTypeById(id)
|
|
local tutorialInfo = TUTORIAL_CFG[id]
|
|
if tutorialInfo == nil then
|
|
return nil
|
|
end
|
|
return tutorialInfo.type
|
|
end
|
|
|
|
-- 完成条件
|
|
function TutorialData:getFinishType()
|
|
return self.tutorialInfo.finish
|
|
end
|
|
|
|
function TutorialData:getFinishTypeById(id)
|
|
local tutorialInfo = TUTORIAL_CFG[id]
|
|
if tutorialInfo == nil then
|
|
return nil
|
|
end
|
|
return tutorialInfo.finish
|
|
end
|
|
|
|
-- 完成条件的参数
|
|
function TutorialData:getFinishTypeParams()
|
|
return self.tutorialInfo.finish_parameter
|
|
end
|
|
|
|
-- 引导参数
|
|
function TutorialData:getTypeParameter()
|
|
return self.tutorialInfo.type_parameter
|
|
end
|
|
|
|
function TutorialData:getIsHaveTutorialText()
|
|
if self.tutorialInfo.txt and self.tutorialInfo.txt ~= "" then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function TutorialData:getTutorialText()
|
|
local tutorialInfoTx = I18N:getConfig("tutorial")[self.tutorialInfo.txt]
|
|
if tutorialInfoTx == nil then
|
|
return GConst.EMPTY_STRING
|
|
end
|
|
return tutorialInfoTx.value
|
|
end
|
|
|
|
function TutorialData:getTutorialDirLeft()
|
|
return self.tutorialInfo.txt_direction == 1
|
|
end
|
|
|
|
function TutorialData:getTutorialOffset()
|
|
return self.tutorialInfo.txt_offset
|
|
end
|
|
|
|
function TutorialData:getFingerDir()
|
|
return self.tutorialInfo.arrow_direction or 2
|
|
end
|
|
|
|
function TutorialData:getFingerOffset()
|
|
return self.tutorialInfo.arrow_offset
|
|
end
|
|
|
|
function TutorialData:getTargetName()
|
|
return self.tutorialInfo.target_name
|
|
end
|
|
|
|
function TutorialData:getTutorialTalkRoleId()
|
|
return self.tutorialInfo.head
|
|
end
|
|
|
|
function TutorialData:getIsHaveFuncTutorial(tutorialId, tutorialInfo)
|
|
-- 说明已经完成了
|
|
if self.funcTutorialMap[tutorialId] then
|
|
return false
|
|
end
|
|
|
|
self.tutorialInfo = tutorialInfo
|
|
self.data.tutorialId = tutorialId
|
|
self.data.stopId = 0
|
|
self.isFuncTutorial = true
|
|
return true
|
|
end
|
|
|
|
function TutorialData:markFuncTutorialFinish(id)
|
|
self.funcTutorialMap[id] = true
|
|
end
|
|
|
|
function TutorialData:getIsFuncTutorialFinished(id)
|
|
return self.funcTutorialMap[id] == true
|
|
end
|
|
|
|
function TutorialData:getTutorialIdList()
|
|
if not self.tutorialIdlist then
|
|
self.tutorialIdlist = {}
|
|
self.tutorialIdMap = {}
|
|
self.funcTutorialUImap = {}
|
|
self.tutorialId2UIPath = {}
|
|
for id, info in ipairs(TUTORIAL_STARTCFG) do
|
|
table.insert(self.tutorialIdlist, id)
|
|
self.tutorialIdMap[id] = true
|
|
if info.uires_path then
|
|
if not self.funcTutorialUImap[info.uires_path] then
|
|
self.funcTutorialUImap[info.uires_path] = {}
|
|
end
|
|
table.insert(self.funcTutorialUImap[info.uires_path], id)
|
|
end
|
|
if info.start_id and info.uires_path then
|
|
self.tutorialId2UIPath[info.start_id] = info.uires_path
|
|
end
|
|
end
|
|
end
|
|
return self.tutorialIdlist
|
|
end
|
|
|
|
function TutorialData:getTutorialIdMap(id)
|
|
self:getTutorialIdList()
|
|
return self.tutorialIdMap[id]
|
|
end
|
|
|
|
function TutorialData:getTutorialId2UIPath(id)
|
|
self:getTutorialIdList()
|
|
return self.tutorialId2UIPath[id]
|
|
end
|
|
|
|
function TutorialData:getFuncTutorialId(uiPath)
|
|
self:getTutorialIdList()
|
|
local list = self.funcTutorialUImap[uiPath]
|
|
if list then
|
|
for _, id in ipairs(list) do
|
|
local info = TUTORIAL_STARTCFG[id]
|
|
local tId = info.start_id
|
|
if tId then
|
|
if not self:getIsFuncTutorialFinished(tId) then
|
|
return id
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function TutorialData:getTaskOpenTutorial(taskId)
|
|
if not self.taskOpenTutorialMap then
|
|
self.taskOpenTutorialMap = {}
|
|
local cfg = ConfigManager:getConfig("func_open")
|
|
for id, info in pairs(cfg) do
|
|
if info.task and info.tutorial_id then
|
|
self.taskOpenTutorialMap[info.task] = info.tutorial_id
|
|
end
|
|
end
|
|
end
|
|
|
|
return self.taskOpenTutorialMap[taskId]
|
|
end
|
|
|
|
function TutorialData:getStageOpenTutorial(stageId)
|
|
if not self.stageOpenTutorialMap then
|
|
self.stageOpenTutorialMap = {}
|
|
local cfg = ConfigManager:getConfig("func_open")
|
|
for id, info in pairs(cfg) do
|
|
if info.stage and info.tutorial_id then
|
|
self.stageOpenTutorialMap[info.stage] = info.tutorial_id
|
|
end
|
|
end
|
|
end
|
|
|
|
return self.stageOpenTutorialMap[stageId]
|
|
end
|
|
|
|
return TutorialData |