UGCProjects/ProjectTemp_T/Script/gamemode/Action_WaitPlayerJoin.lua

85 lines
3.3 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
local Action_WaitPlayerJoin = {
WaitTime = 0;
WaitTeamPlayerNum = 2;
WaitFinishEvent = "";
WaitFailureEvent = "";
AtLeastWaitingTime = 20;
GameWillBeginWaitTime = 8;
}
-- 触发器激活时将执行Action的Execute
function Action_WaitPlayerJoin:Execute(...)
UGCGameSystem.GameState:SetGameStateType(Enum.EGameState.Waiting)
self.DoOnceGameWillBegin = true;
self.EnterStateTime = GameplayStatics.GetRealTimeSeconds(self)
self.ModifiableWaitTime = self.WaitTime
self.LastUpdateRemainTime = self.WaitTime
self.JoinedPlayerNum = 0
-- 申请玩家加入
UGCGameSystem.GameState:UpdatePlayerJoin()
self.bEnableActionTick = true
return true
end
function Action_WaitPlayerJoin:Update(DeltaSeconds)
local CurrentRealTime = GameplayStatics.GetRealTimeSeconds(self);
local RemainTime = self.ModifiableWaitTime - (CurrentRealTime - self.EnterStateTime);
RemainTime = RemainTime >= 0 and RemainTime or 0
local CurrentUpdateRemainTime = math.ceil(RemainTime)
self.JoinedPlayerNum = #UGCGameSystem.GetAllPlayerState(false)
if self.LastUpdateRemainTime - CurrentUpdateRemainTime >= 1 then
self.LastUpdateRemainTime = CurrentUpdateRemainTime
end
-- UGCLogSystem.Log("[Action_WaitPlayerJoin_Update]CurrentRealTime:%f, RemainTime:%f, CurrentUpdateRemainTime:%f, LastUpdateRemainTime:%f, EnterStateTime:%f, ModifiableWaitTime:%f",
-- CurrentRealTime, RemainTime, CurrentUpdateRemainTime, self.LastUpdateRemainTime, self.EnterStateTime, self.ModifiableWaitTime
-- )
local NowWaitTime = CurrentRealTime - self.EnterStateTime
-- 玩家等待时间即将结束,且满足最低开局要求,发送即将开局信息
if (self.DoOnceGameWillBegin and self.JoinedPlayerNum >= 2 and self.LastUpdateRemainTime < self.GameWillBeginWaitTime) then
self.DoOnceGameWillBegin = false
UGCGameSystem.GameState:GameWillBeginNotify()
self.EnterStateTime = GameplayStatics.GetRealTimeSeconds(self)
self.ModifiableWaitTime = self.LastUpdateRemainTime
end
-- 玩家满足直接开局要求,发送即将开局信息
if self.JoinedPlayerNum >= self.WaitTeamPlayerNum
and NowWaitTime >= self.AtLeastWaitingTime then
self.LastUpdateRemainTime = math.min(self.GameWillBeginWaitTime, self.LastUpdateRemainTime)
if self.DoOnceGameWillBegin then
self.DoOnceGameWillBegin = false
UGCGameSystem.GameState:GameWillBeginNotify()
self.EnterStateTime = GameplayStatics.GetRealTimeSeconds(self)
self.ModifiableWaitTime = self.LastUpdateRemainTime
end
-- 等待时间结束游戏开局
elseif CurrentUpdateRemainTime <= 0 then
if self.JoinedPlayerNum >= 2 then
UGCGameSystem.SendModeCustomEvent(self.WaitFinishEvent)
self.LastUpdateRemainTime = 0
UGCLogSystem.Log("[Action_WaitPlayerJoin_Update] WaitFinish")
else
UGCGameSystem.GameState:SetGameStateType(Enum.EGameState.InsufficientNumberOfPeople)
UGCGameSystem.SendModeCustomEvent(self.WaitFailureEvent)
end
self.bEnableActionTick = false
end
--更新GameState.WaitPlayerJoinTime
UGCGameSystem.GameState.WaitPlayerJoinTime = self.LastUpdateRemainTime
end
return Action_WaitPlayerJoin