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