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

77 lines
2.8 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_Play = {
GameTime = 0;
GameEndEvent = -1;
}
-- 触发器激活时将执行Action的Execute
function EventAction_Play:Execute(...)
if not UGCGameSystem.IsServer() then return end
self.bEnableActionTick = true
-- 设置当前游戏模式
UGCGameSystem.GameState:SetGameStateType(CustomEnum.EGameState.Playing)
-- 重置所有玩家 位置及游戏得分信息等
local TempPlayerControllers = UGCGameSystem.GetAllPlayerController()
for _,PlayerController in pairs(TempPlayerControllers) do
-- Test
--if UE.IsValid(PlayerController.Pawn) then PlayerController.Pawn:K2_DestroyActor() end
--UGCGameSystem.GetRespawnComponent():AddRespawnPlayer(PlayerController.PlayerKey, 0)
if PlayerController.PlayerState then PlayerController.PlayerState:ResetPlayerState() end
UGCLogSystem.Log("[EventAction_Play_Execute] ResSpawnSucceed Key: %d", PlayerController.PlayerKey)
end
-- Test
-- 重置所有玩家
UGCGameSystem.SendModeCustomEvent("ResetAllPlayer")
-- 更新得分信息
UGCGameSystem.GameState:UpdateAllPlayerScoreDatas()
-- 重置队伍得分
UGCGameSystem.GameState:ResetTeamScore()
-- 绑定游戏结束事件
UGCEventSystem.AddListener(EventEnum.GameStateChange, self.GameFinish, self)
-- 初始化游戏时间
self.GameStartTime = UGCSystemLibrary.GetGameTime();
self.LastUpdateRemainTime = self.GameTime
UGCGameSystem.GameState:SetGameTime(self.GameTime)
UGCLogSystem.Log("[EventAction_Play_Execute] Finish")
return true
end
function EventAction_Play:GameFinish(GameStateType)
if GameStateType == CustomEnum.EGameState.End then
self.bEnableActionTick = false
if self.GameEndEvent then
-- 发送游戏结束事件
UGCEventSystem.SendEvent(self.GameEndEvent)
else
UGCLogSystem.Log("[EventAction_Play_GameFinish] GameEndEvent is nil")
end
UGCEventSystem.RemoveListener(EventEnum.GameStateChange, self.GameFinish, self)
end
end
function EventAction_Play:Update(DeltaSeconds)
local CurrentRealTime = UGCSystemLibrary.GetGameTime();
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()
else
self.LastUpdateRemainTime = CurrentUpdateRemainTime
end
UGCGameSystem.GameState:SetGameTime(self.LastUpdateRemainTime)
-- UGCLogSystem.Log("[EventAction_Play_Update] WaitTime: %d", self.LastUpdateRemainTime)
end
end
return EventAction_Play