UGCProjects/ProjectTemp_T/Script/gamemode/Action_WaitPlayerJoin.lua
2025-01-04 23:00:19 +08:00

85 lines
3.3 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 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