73 lines
2.8 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
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
if UE.IsValid(PlayerController.Pawn) then PlayerController.Pawn:K2_DestroyActor() end
UGCGameSystem.GetRespawnComponent():AddRespawnPlayer(PlayerController.PlayerKey, 0)
--UGCGameSystem.RespawnPlayer(self.PlayerKey)
if PlayerController.PlayerState then PlayerController.PlayerState:ResetPlayerState() end
UGCLogSystem.Log("[EventAction_Play_Execute] ResSpawnSucceed Key: %d", PlayerController.PlayerKey)
end
-- 更新得分信息
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