173 lines
5.6 KiB
Lua
173 lines
5.6 KiB
Lua
local MiniGameMode_DoNotFallDown = {
|
|
IsGameEnd = false;
|
|
-- 给玩家结算添加的得分{[PlayerKey] = AddScore, ...}
|
|
PlayerAddScore = {};
|
|
|
|
bIsInGame = false;
|
|
LastCheckPlayerBackPack = 0.;
|
|
MiniGameScore = {};
|
|
PlayerGravityScale = 1;
|
|
DefaultBackPack = {};
|
|
StarManagerPath = "";
|
|
RespawnList = {};
|
|
}
|
|
|
|
--- 游戏初始化
|
|
function MiniGameMode_DoNotFallDown:Init()
|
|
self.DefaultBackPack = MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.DoNotFallDown].GameParam.DefaultBackPack
|
|
self.PlayerGravityScale = MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.DoNotFallDown].GameParam.GravityScale
|
|
self.MoveSpeedScale = MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.DoNotFallDown].GameParam.MoveSpeedScale
|
|
self.LaunchFloorManagerPath = MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.DoNotFallDown].GameParam.LaunchFloorManagerPath
|
|
self.LaunchFloorManager = UGCSystemLibrary.GetUniqueInstanceFromPath(self.LaunchFloorManagerPath)
|
|
|
|
|
|
UGCEventSystem.AddListener(EventEnum.PlayerDropMiniGameKillBox, self.PlayerDropTrap, self)
|
|
|
|
end
|
|
|
|
--- 准备时间结束游戏开始
|
|
function MiniGameMode_DoNotFallDown:GameBegin()
|
|
self.bIsInGame = true
|
|
-- 二次赋值
|
|
if not UE.IsValid(self.LaunchFloorManager) then
|
|
self.LaunchFloorManager = UGCSystemLibrary.GetUniqueInstanceFromPath(self.LaunchFloorManagerPath)
|
|
end
|
|
self.LaunchFloorManager:SetAllFloorActive(true)
|
|
|
|
UGCEventSystem.SendEvent(EventEnum.UpdateBlockFloorCollision, false)
|
|
UGCLogSystem.Log("[MiniGameMode_DoNotFallDown_GameBegin]")
|
|
end
|
|
|
|
function MiniGameMode_DoNotFallDown:Update(DeltaTime)
|
|
-- 判断该玩法是否已结束
|
|
if self.IsGameEnd then return end
|
|
|
|
-- Update逻辑
|
|
|
|
-- 验证背包
|
|
self.LastCheckPlayerBackPack = self.LastCheckPlayerBackPack + DeltaTime
|
|
if self.LastCheckPlayerBackPack >= 1. then
|
|
self.LastCheckPlayerBackPack = 0.
|
|
self:CheckBackPack()
|
|
end
|
|
|
|
-- Update逻辑 End
|
|
end
|
|
|
|
--- 设置游戏结束,手动触发会结束该玩法,倒计时结束将自动触发该函数
|
|
function MiniGameMode_DoNotFallDown:SetMiniGameModeEnd()
|
|
if not self.IsGameEnd then
|
|
self.IsGameEnd = true
|
|
self:MiniGameEnd()
|
|
end
|
|
end
|
|
|
|
--- 获取当前回合游戏结算,
|
|
---@return "{[PlayerKey] = AddScore, ...}"
|
|
function MiniGameMode_DoNotFallDown:GetPlayerAddScore()
|
|
return self.PlayerAddScore
|
|
end
|
|
|
|
--- 外层调用,判断该玩法是否已结束
|
|
function MiniGameMode_DoNotFallDown:CheckGameFinish()
|
|
return self.IsGameEnd
|
|
end
|
|
|
|
|
|
--- 结束触发
|
|
function MiniGameMode_DoNotFallDown:MiniGameEnd()
|
|
|
|
for i, v in pairs(self.RespawnList) do
|
|
UGCEventSystem.StopTimer(v)
|
|
end
|
|
self.RespawnList = {}
|
|
|
|
self.PlayerAddScore = UGCGameSystem.GameState:GetPlayerMiniGameAddScore()
|
|
|
|
self.LaunchFloorManager:SetAllFloorActive(false)
|
|
|
|
UGCEventSystem.RemoveListener(EventEnum.PlayerDropMiniGameKillBox, self.PlayerDropTrap, self)
|
|
end
|
|
|
|
|
|
|
|
------------------------------------------ Player ------------------------------------------
|
|
|
|
--- 玩家死亡
|
|
function MiniGameMode_DoNotFallDown:PlayerDead(VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue, Assister)
|
|
UGCGameSystem.GameState:PlayerAddMiniGameScore(VictimKey, -1)
|
|
|
|
if CauserKey then
|
|
UGCGameSystem.GameState:PlayerAddMiniGameScore(CauserKey, 1)
|
|
MiniGameConfig.CheckPlayerTask(CauserKey, MiniGameConfig.MiniGameType.DoNotFallDown, UGCGameSystem.GameState:GetPlayerMiniGameScore(CauserKey), false)
|
|
end
|
|
|
|
-- 复活死者
|
|
self:RespawnPlayer(VictimKey)
|
|
end
|
|
|
|
--- 玩家伤害修改
|
|
function MiniGameMode_DoNotFallDown:PlayerDamageModify(DamageAmount, VictimPawn, CauserPC)
|
|
if self.bIsInGame then
|
|
return DamageAmount
|
|
else
|
|
return 0.
|
|
end
|
|
end
|
|
|
|
--- 玩家受控时
|
|
function MiniGameMode_DoNotFallDown:PlayerPossessed(PlayerKey)
|
|
|
|
end
|
|
|
|
--- 玩家BeginPlay触发
|
|
function MiniGameMode_DoNotFallDown:PlayerBeginPlay(PlayerPawn)
|
|
PlayerPawn:SetGravityScale(self.PlayerGravityScale)
|
|
UGCEventSystem.SetTimer(UGCGameSystem.GameState, function()
|
|
if UE.IsValid(PlayerPawn) then
|
|
PlayerPawn:SetGravityScale(self.PlayerGravityScale)
|
|
UGCPawnAttrSystem.SetSpeedScale(PlayerPawn, self.MoveSpeedScale)
|
|
UGCLogSystem.Log("[MiniGameMode_AvoidingSpikeStick_PlayerBeginPlay]")
|
|
end
|
|
end, 1)
|
|
end
|
|
|
|
---------------------------------------- Player End ----------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
--- 验证背包
|
|
function MiniGameMode_DoNotFallDown:CheckBackPack()
|
|
local AllPawn = UGCGameSystem.GetAllPlayerPawn()
|
|
for _, PlayerPawn in pairs(AllPawn) do
|
|
for i, ItemID in pairs(self.DefaultBackPack) do
|
|
if ItemID > 0 and UGCBackPackSystem.GetItemCount(PlayerPawn, ItemID) == 0 then
|
|
UGCBackPackSystem.AddItem(PlayerPawn, ItemID, 1)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function MiniGameMode_DoNotFallDown:PlayerDropTrap(PlayerKey)
|
|
UGCGameSystem.GameState:PlayerAddMiniGameScore(PlayerKey, -1)
|
|
local PP = UGCGameSystem.GetPlayerPawnByPlayerKey(PlayerKey)
|
|
UGCPawnAttrSystem.SetHealth(PP, -1);
|
|
end
|
|
|
|
function MiniGameMode_DoNotFallDown:RespawnPlayer(PlayerKey)
|
|
-- 复活死者
|
|
self.RespawnList[PlayerKey] = UGCEventSystem.SetTimer(UGCGameSystem.GameState,
|
|
function()
|
|
if not self.IsGameEnd then
|
|
UGCGameSystem.RespawnPlayer(PlayerKey)
|
|
end
|
|
self.RespawnList[PlayerKey] = nil
|
|
end,
|
|
MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.DoNotFallDown].GameParam.RespawnTime
|
|
)
|
|
end
|
|
|
|
|
|
return MiniGameMode_DoNotFallDown |