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