77 lines
2.8 KiB
Lua
77 lines
2.8 KiB
Lua
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 |