2025-01-04 23:00:19 +08:00

118 lines
4.2 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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