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
|