118 lines
4.2 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
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