118 lines
4.2 KiB
Lua
118 lines
4.2 KiB
Lua
local EventAction_MiniGameLoad = {
|
||
WaitTime = 20;
|
||
WaitFinishEvent = 0;
|
||
}
|
||
|
||
-- 触发器激活时,将执行Action的Execute
|
||
function EventAction_MiniGameLoad:Execute(...)
|
||
if not UGCGameSystem.IsServer() then return end
|
||
self.bLoadMapFinish = false
|
||
|
||
UGCGameSystem.GameState:ResetPlayerMiniGameReady()
|
||
UGCGameSystem.GameState:SetGameStateType(CustomEnum.EGameState.Playing)
|
||
UGCEventSystem.AddListener(EventEnum.UpdatePlayerIsReady, self.CheckAllPlayerReady, self)
|
||
|
||
-- 重置小玩法回合
|
||
UGCGameSystem.GameState:SetMiniGameInternalRound(0)
|
||
-- 重置小玩法得分
|
||
UGCGameSystem.GameState:ResetMiniGameScore()
|
||
|
||
self:MapPreparation()
|
||
|
||
-- 清除可拾取的装备及死亡盒子
|
||
UGCSystemLibrary.RemoveActorFromClassName("PickUpWrapperActor")
|
||
UGCSystemLibrary.RemoveActorFromClassName("PlayerTombBox")
|
||
|
||
self.bEnableActionTick = true
|
||
return true
|
||
end
|
||
|
||
|
||
function EventAction_MiniGameLoad:Update(DeltaSeconds)
|
||
self.WaitTime = self.WaitTime - DeltaSeconds
|
||
UGCGameSystem.GameState.GameTime = math.ceil(self.WaitTime > 0 and self.WaitTime or 0)
|
||
|
||
if self.WaitTime <= 0 then
|
||
self:WaitPlayerJoinFinishPreload()
|
||
self.bEnableActionTick = false
|
||
end
|
||
|
||
end
|
||
|
||
|
||
|
||
--- 地图准备,移除旧关卡加载新关卡
|
||
function EventAction_MiniGameLoad:MapPreparation()
|
||
local MiniGameIndex = UGCGameSystem.GameState:GetNowMiniGameIndex()
|
||
if MiniGameIndex == 1 then
|
||
self:AsyncUnLoadMap(MiniGameConfig.DefaultMap)
|
||
else
|
||
local LastMiniGameType = UGCGameSystem.GameState:GetMiniGameTypeFromMiniGameIndex(MiniGameIndex - 1)
|
||
self:AsyncUnLoadMap(MiniGameConfig.MiniGameInfo[LastMiniGameType].Maps)
|
||
end
|
||
local MiniGameType = UGCGameSystem.GameState:GetNowMiniGameType()
|
||
-- UGCSendRPCSystem.ClientShowUI(nil, WidgetConfig.EUIType.MiniGameLoading, true, false, MiniGameType, UGCSystemLibrary.GetOnlinePlayers())
|
||
UGCGameSystem.GameState:SetMutuallyExclusiveUI(WidgetConfig.EUIType.MiniGameLoading, {MiniGameType, UGCSystemLibrary.GetOnlinePlayers()})
|
||
UGCLogSystem.Log("[EventAction_MiniGameLoad_MapPreparation] MiniGameType:%s", tostring(MiniGameType))
|
||
self:AsyncLoadMap(MiniGameConfig.MiniGameInfo[MiniGameType].Maps)
|
||
end
|
||
|
||
--- 等待时间结束
|
||
function EventAction_MiniGameLoad:WaitPlayerJoinFinishPreload()
|
||
self.bWaitFinish = true
|
||
-- self:CheckStartMiniGame()
|
||
self:LoadMapStageFinish()
|
||
end
|
||
|
||
--- 异步加载关卡
|
||
function EventAction_MiniGameLoad:AsyncLoadMap(Maps)
|
||
LevelStreamUtil.LoadStreamLevels(Maps, {Object = self, Func = self.LoadMapFinish}, false);
|
||
end
|
||
|
||
--- 异步移除关卡
|
||
function EventAction_MiniGameLoad:AsyncUnLoadMap(Maps)
|
||
-- 这个回调不会调
|
||
LevelStreamUtil.UnLoadStreamLevels(Maps, {Object = self, Func = self.UnLoadMapFinish}, false);
|
||
end
|
||
|
||
function EventAction_MiniGameLoad:LoadMapFinish()
|
||
UGCLogSystem.Log("[EventAction_MiniGameLoad_LoadMapFinish]")
|
||
self.bLoadMapFinish = true
|
||
self:CheckAllPlayerReady()
|
||
self:CheckStartMiniGame()
|
||
end
|
||
|
||
function EventAction_MiniGameLoad:UnLoadMapFinish(bWaitSucceed)
|
||
UGCLogSystem.Log("[EventAction_MiniGameLoad_UnLoadMapFinish] bWaitSucceed:%s", tostring(bWaitSucceed))
|
||
self.bUnLoadLastMapFinsh = true
|
||
self:CheckStartMiniGame()
|
||
end
|
||
|
||
|
||
function EventAction_MiniGameLoad:CheckStartMiniGame()
|
||
if self.bWaitFinish and self.bLoadMapFinish and self.bUnLoadLastMapFinsh then
|
||
-- self:LoadMapStageFinish()
|
||
end
|
||
end
|
||
|
||
function EventAction_MiniGameLoad:CheckAllPlayerReady()
|
||
local IsAllPlayerIsRead = UGCGameSystem.GameState:CheckAllPlayerIsReady()
|
||
UGCLogSystem.Log("[EventAction_MiniGameLoad_CheckAllPlayerReady] IsAllPlayerIsRead:%s", tostring(IsAllPlayerIsRead))
|
||
if IsAllPlayerIsRead and self.bLoadMapFinish then
|
||
self.WaitTime = (self.WaitTime < 3 and self.WaitTime or 3)
|
||
end
|
||
end
|
||
|
||
--- 阶段结束
|
||
function EventAction_MiniGameLoad:LoadMapStageFinish()
|
||
-- UGCSendRPCSystem.ClientShowUI(nil, WidgetConfig.EUIType.MiniGameLoading, false)
|
||
UGCEventSystem.RemoveListener(EventEnum.UpdatePlayerIsReady, self.CheckAllPlayerReady, self)
|
||
-- 客户端关闭加载界面
|
||
-- 客户端开启新关卡的战斗界面
|
||
-- 执行小玩法开始Action
|
||
UGCEventSystem.SendEvent(self.WaitFinishEvent)
|
||
end
|
||
|
||
|
||
|
||
return EventAction_MiniGameLoad |