112 lines
3.3 KiB
Lua
112 lines
3.3 KiB
Lua
------------------------------------------------
|
|
--作者: yangqf
|
|
--日期: 2021-04-09
|
|
--文件: GuideSystem.lua
|
|
--模块: GuideSystem
|
|
--描述: 引导系统
|
|
------------------------------------------------
|
|
local L_GuideKey = "GuideFinishKey_%d"
|
|
|
|
local GuideSystem = {
|
|
GuideTable = nil,
|
|
FinishList = nil,
|
|
}
|
|
|
|
function GuideSystem:Initialize()
|
|
end
|
|
|
|
function GuideSystem:UnInitialize()
|
|
self.GuideTable = nil
|
|
self.FinishList = nil
|
|
end
|
|
|
|
|
|
function GuideSystem:Check(type, param)
|
|
if type == GuideTriggerType.None then
|
|
return false
|
|
end
|
|
local _lp = GameCenter.GameSceneSystem:GetLocalPlayer()
|
|
if _lp == nil then
|
|
return false
|
|
end
|
|
|
|
if self.FinishList == nil then
|
|
self.FinishList = List:New()
|
|
local _finishText = PlayerPrefs.GetString(string.format(L_GuideKey, _lp.ID), nil)
|
|
if _finishText ~= nil and string.len(_finishText) > 0 then
|
|
local _paramsArray = Utils.SplitNumber(_finishText, '_')
|
|
for i = 1, #_paramsArray do
|
|
self.FinishList:Add(_paramsArray[i])
|
|
end
|
|
end
|
|
end
|
|
if self.GuideTable == nil then
|
|
self.GuideTable = Dictionary:New()
|
|
local _func = function(k, cfg)
|
|
if not self.FinishList:Contains(k) then
|
|
local _list = self.GuideTable[cfg.TriggerType]
|
|
if _list == nil then
|
|
_list = List:New()
|
|
self.GuideTable:Add(cfg.TriggerType, _list)
|
|
end
|
|
_list:Add(cfg)
|
|
end
|
|
end
|
|
DataConfig.DataGuide:Foreach(_func)
|
|
end
|
|
|
|
local _waitCheckList = self.GuideTable[type]
|
|
if _waitCheckList == nil then
|
|
return false
|
|
end
|
|
|
|
if #_waitCheckList <= 0 then
|
|
self.GuideTable:Remove(type)
|
|
return false
|
|
end
|
|
|
|
local _lpLevel = _lp.Level
|
|
for i = #_waitCheckList, 1, -1 do
|
|
local _guideItem = _waitCheckList[i]
|
|
if (_guideItem.TriggerParam == param and
|
|
(_guideItem.LimitLevelMin <= 0 or _lpLevel >= _guideItem.LimitLevelMin) and
|
|
(_guideItem.LimitLevelMax <= 0 or _lpLevel <= _guideItem.LimitLevelMax)) then
|
|
GameCenter.BlockingUpPromptSystem:AddForceGuide(_guideItem)
|
|
if _guideItem.Type == GuideForcedType.NotForced or _guideItem.Type == GuideForcedType.SceneAnim or _guideItem.Type == GuideForcedType.TimelineAnim then
|
|
--非强制引导直接设置为已经引导
|
|
self:SaveGuide(_guideItem.Id)
|
|
end
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function GuideSystem:SaveGuide(guideID)
|
|
local _lp = GameCenter.GameSceneSystem:GetLocalPlayer()
|
|
if _lp == nil or self.FinishList==nil then
|
|
return
|
|
end
|
|
if not self.FinishList:Contains(guideID) then
|
|
self.FinishList:Add(guideID)
|
|
local _text = ""
|
|
for i = 1, #self.FinishList do
|
|
_text = _text .. self.FinishList[i]
|
|
if i < #self.FinishList then
|
|
_text = _text .. "_"
|
|
end
|
|
end
|
|
PlayerPrefs.SetString(string.format(L_GuideKey, _lp.ID), _text)
|
|
PlayerPrefs.Save()
|
|
end
|
|
|
|
for k, v in pairs(self.GuideTable) do
|
|
for i = #v, 1, -1 do
|
|
if v[i].Id == guideID then
|
|
v:RemoveAt(i)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return GuideSystem |