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