65 lines
2.4 KiB
Lua
65 lines
2.4 KiB
Lua
local Action_Play = {
|
||
GameTime = 0;
|
||
GameEndEvent = "";
|
||
}
|
||
|
||
-- 触发器激活时,将执行Action的Execute
|
||
function Action_Play:Execute(...)
|
||
self.bEnableActionTick = true
|
||
UGCGameSystem.GameState:SetGameStateType(Enum.EGameState.Playing)
|
||
|
||
|
||
local TempPlayerControllers = UGCGameSystem.GetAllPlayerController()
|
||
for _,PlayerController in pairs(TempPlayerControllers) do
|
||
local Pawn = UGCGameSystem.GetPlayerPawnByPlayerKey(PlayerController.PlayerKey);
|
||
if UE.IsValid(Pawn) then Pawn:K2_DestroyActor() end
|
||
UGCGameSystem.GetRespawnComponent():AddRespawnPlayer(PlayerController.PlayerKey, 0)
|
||
if PlayerController.PlayerState then PlayerController.PlayerState:ResetPlayerState() end
|
||
UGCLogSystem.Log("[Action_Play_Execute] ResSpawnSucceed Key: %d", PlayerController.PlayerKey)
|
||
end
|
||
UGCGameSystem.GameState:ResetTrophy()
|
||
UGCGameSystem.GameState:UpdateAllPlayerScoreDatas()
|
||
--UGCGameSystem.GameState:ClearPlayerBuff()
|
||
|
||
UGCEventSystem.AddListener(EventEnum.GameEnd, self.GameFinish, self)
|
||
|
||
self.GameStartTime = GameplayStatics.GetRealTimeSeconds(self);
|
||
self.LastUpdateRemainTime = self.GameTime
|
||
UGCGameSystem.GameState.GameTime = self.GameTime
|
||
|
||
UGCLogSystem.Log("[Action_Play_Execute] Finish")
|
||
|
||
return true
|
||
end
|
||
|
||
function Action_Play:GameFinish()
|
||
self.bEnableActionTick = false
|
||
if self.GameEndEvent ~= "" then
|
||
UGCGameSystem.SendModeCustomEvent(self.GameEndEvent)
|
||
else
|
||
UGCLogSystem.Log("[Action_Play_GameFinish] GameEndEvent is nil")
|
||
end
|
||
end
|
||
|
||
function Action_Play:Update(DeltaSeconds)
|
||
local CurrentRealTime = GameplayStatics.GetRealTimeSeconds(self);
|
||
local RemainTime = self.GameTime - (CurrentRealTime - self.GameStartTime);
|
||
local CurrentUpdateRemainTime = math.ceil(RemainTime)
|
||
|
||
|
||
if self.LastUpdateRemainTime - CurrentUpdateRemainTime >= 1 then
|
||
if CurrentUpdateRemainTime <= 0 then
|
||
self.LastUpdateRemainTime = 0
|
||
UGCGameSystem.GameState:GameFinish(UGCGameSystem.GameState:GetTop1Player())
|
||
-- UGCGameSystem.GameState:SetGameStateType(Enum.EGameState.End)
|
||
-- UGCEventSystem.SendEvent(EventEnum.GameEnd)
|
||
else
|
||
self.LastUpdateRemainTime = CurrentUpdateRemainTime
|
||
end
|
||
UGCGameSystem.GameState.GameTime = self.LastUpdateRemainTime
|
||
UGCLogSystem.Log("[Action_Play_Update] WaitTime: %d", self.LastUpdateRemainTime)
|
||
end
|
||
end
|
||
|
||
|
||
return Action_Play |