This commit is contained in:
lantiannb 2025-02-02 16:26:56 +08:00
parent dba79ac752
commit 848b21b727
94 changed files with 818 additions and 154 deletions

View File

@ -153,16 +153,20 @@ function UGCSystemLibrary.AsyncLoadAsset(AssetPath, CallBackFunc, Obj, SaveAsset
end
end
---@param AssetPath:string
---@param SaveAsset:bool 是否保存
function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)
if SaveAsset == nil then SaveAsset = true end
if not UE.IsValid(UGCSystemLibrary.CacheAsset[AssetPath]) then
local TargetAsset = UE.LoadObject(AssetPath)
if SaveAsset and UE.IsValid(TargetAsset) then UGCSystemLibrary.CacheAsset[AssetPath] = TargetAsset end
return TargetAsset
--- 通过路径获取DataTable
---@param DataTablePath string
---@param ToNumberKey bool 是否将Key值转化为Number类型再返回
function UGCSystemLibrary.GetDataTableFromPath(DataTablePath, ToNumberKey)
local ResDataTable = Gameplay.GetTable(DataTablePath)
if ToNumberKey then
local Res = {}
for i, v in pairs(ResDataTable) do
Res[tonumber(i)] = v
end
return Res
else
return UGCSystemLibrary.CacheAsset[AssetPath]
return ResDataTable
end
end

View File

@ -14,7 +14,7 @@ DefaultLevelDirectorPath=/Asset/Blueprint/UGCLevelDirector.UGCLevelDirector_C
[MatchSetting]
NumberOfTeams=2
TeamPlayers=4
TeamPlayers=2
bEnableChat=1
bEnableRoomChat=1
ChannelName=全部
@ -53,18 +53,18 @@ SwitchesInMaps=((Key="r.Mobile.EnableIBL",Value=0),(Key="s.StreamableDelegateLim
PlayBindingArray=[]
[JobOption]
LastJobId=600043001
LastWindowsJobId=600039234
LastAndroidJobId=600039234
LastIOSJobId=600039234
PakOnly=1
LastSkipBake=True
LastTargetPlatform=LinuxServer+Android_ETC2
LastJobId=-1
LastWindowsJobId=-1
LastAndroidJobId=-1
LastIOSJobId=-1
PakOnly=0
LastSkipBake=False
LastTargetPlatform=LinuxServer
[UGCUploadOption]
PlatformIndex=0
SkipBake=True
TargetPlatform=LinuxServer+WindowsNoEditor+Android_ETC2+IOS+OpenHarmony_ETC2
TargetPlatform=LinuxServer+Android_ETC2
[DebugSettings]
bRoomOB=0

View File

@ -153,6 +153,22 @@ function UGCSystemLibrary.AsyncLoadAsset(AssetPath, CallBackFunc, Obj, SaveAsset
end
end
--- 通过路径获取DataTable
---@param DataTablePath string
---@param ToNumberKey bool 是否将Key值转化为Number类型再返回
function UGCSystemLibrary.GetDataTableFromPath(DataTablePath, ToNumberKey)
local ResDataTable = Gameplay.GetTable(DataTablePath)
if ToNumberKey then
local Res = {}
for i, v in pairs(ResDataTable) do
Res[tonumber(i)] = v
end
return Res
else
return ResDataTable
end
end
---@param AssetPath:string
---@param SaveAsset:bool 是否保存
function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,20 +1,106 @@
---@class BP_PreViewFXActor_C:AActor
---@field DynamicTextRender UDynamicTextRenderComponent
---@field DefaultSceneRoot USceneComponent
---@field MuzzleParticle UParticleSystem
---@field KillParticle UParticleSystem
---@field BulletParticle UParticleSystem
---@field TailedMuzzle UParticleSystem
---@field HitParticle UParticleSystem
---@field DefaultFX TMap:TEnumAsByte<EFXType>,UParticleSystem
---@field KillParticleOffsetTF FTransform
--Edit Below--
local BP_PreViewFXActor = {}
local BP_PreViewFXActor = {
FXTable = {};
FXIDList = {};
OverrideColor = {};
NowFXIndex = {};
}
--[[
function BP_PreViewFXActor:ReceiveBeginPlay()
BP_PreViewFXActor.SuperClass.ReceiveBeginPlay(self)
if UGCGameSystem.IsServer() then
else
--self.DefaultFX = {
-- [EFXType.Muzzle] = self.MuzzleParticle;
-- [EFXType.Kill] = self.KillParticle;
-- [EFXType.Bullet] = self.BulletParticle;
-- [EFXType.MuzzleTailed] = self.TailedMuzzle;
-- [EFXType.Hit] = self.HitParticle;
--}
self:InitFXTable()
end
end
--[[
FFXData
ID int32
FXType EFXType
Rarity int32
Name FString
Desc FString
Particle UParticleSystem
ColorValue float[]
BaseColor FLinearColor
]]
function BP_PreViewFXActor:InitFXTable()
for i, v in pairs(EFXType) do
self.FXIDList[v] = {}
self.NowFXIndex[v] = 0
end
local ReadFXTable = UGCSystemLibrary.GetDataTableFromPath(UGCGameSystem.GetUGCResourcesFullPath('Asset/FX/A_Table/Table_FXData.Table_FXData'))
self.FXTable = table.DeepCopy(ReadFXTable)
for i, v in pairs(self.FXTable) do
UGCLogSystem.Log("[BP_PreViewFXActor_LoadFXTable] Key:%s", tostring(i))
table.insert(self.FXIDList[v.FXType], v.ID)
end
for i, v in pairs(self.FXIDList) do
table.sort(self.FXIDList[i])
end
end
--- 覆盖对应特效的颜色
---@param FXType EFXType
---@param NewColor FLinearColor 为nil则重置为默认颜色
function BP_PreViewFXActor:SetOverrideColor(FXType, NewColor)
---@field SetColorParameter:fun(ParameterName:FName,param:FLinearColor)
---@field SetVectorParameter:fun(ParameterName:FName,param:FVector)
self.OverrideColor[FXType] = NewColor
UGCEventSystem.SendEvent(EventEnum.OverrideFXColor, FXType)
end
function BP_PreViewFXActor:GetParticleColor(FXType)
return self.OverrideColor[FXType]
end
function BP_PreViewFXActor:GetParticleDefaultColor(FXType)
local FXIndex = self:GetNowFXIndex(FXType)
local FXID = self.FXIDList[FXType][FXIndex]
if FXID then
return self.FXTable[FXID].BaseColor
end
return nil
end
function BP_PreViewFXActor:GetNowFXIndex(FXType)
return self.NowFXIndex[FXType]
end
function BP_PreViewFXActor:GetNowFXFromFXType(FXType)
local FXIndex = self:GetNowFXIndex(FXType)
local FXID = self.FXIDList[FXType][FXIndex]
if FXID then
return self.FXTable[FXID].Particle
else
return self.DefaultFX[FXType]
end
end
function BP_PreViewFXActor:SetNextFX(FXType)
if #self.FXIDList[FXType] > 0 then
self.NowFXIndex[FXType] = (self.NowFXIndex[FXType] % #self.FXIDList[FXType]) + 1
UGCEventSystem.SendEvent(EventEnum.ChangeFX, FXType)
end
end
--]]
--[[
function BP_PreViewFXActor:ReceiveTick(DeltaTime)

View File

@ -27,13 +27,16 @@ end
function UGCGameState:SpawnParticleAtPos(Pos)
local TempPreViewActor = self:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then
local KillParticle = TempPreViewActor:GetNowFXFromFXType(EFXType.Kill)
if UE.IsValid(KillParticle) then
Pos = {
X = Pos.X + TempPreViewActor.KillParticleOffsetTF.Translation.X,
Y = Pos.Y + TempPreViewActor.KillParticleOffsetTF.Translation.Y,
Z = Pos.Z + TempPreViewActor.KillParticleOffsetTF.Translation.Z,
}
local FXScale = {X = TempPreViewActor.KillParticleOffsetTF.Scale3D.X, Y = TempPreViewActor.KillParticleOffsetTF.Scale3D.Y, Z = TempPreViewActor.KillParticleOffsetTF.Scale3D.Z}
GameplayStatics.SpawnEmitterAtLocation(self, TempPreViewActor.KillParticle, Pos, {Roll = 0, Pitch = 0, Yaw = 0}, FXScale, true)
GameplayStatics.SpawnEmitterAtLocation(self, KillParticle, Pos, {Roll = 0, Pitch = 0, Yaw = 0}, FXScale, true)
end
end
end

View File

@ -116,9 +116,10 @@ function UGCPlayerPawn:WeaponAttachEffect(Weapon)
--"RemoteMuzzleFX",
--"ScopeMuzzleFX",
}
if UE.IsValid(Effect) and UE.IsValid(TempPreViewActor.MuzzleParticle) then
local MuzzleParticle = TempPreViewActor:GetNowFXFromFXType(EFXType.Muzzle)
if UE.IsValid(Effect) and UE.IsValid(MuzzleParticle) then
for i, v in pairs(MuzzleFXParamName) do
Effect[v] = TempPreViewActor.MuzzleParticle
Effect[v] = MuzzleParticle
end
UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] Succeed")
end
@ -134,17 +135,18 @@ function UGCPlayerPawn:WeaponAttachEffect(Weapon)
-- 枪口拖尾特效
if UE.IsValid(TempPreViewActor.TailedMuzzle) then
local MuzzleTailedParticle = TempPreViewActor:GetNowFXFromFXType(EFXType.MuzzleTailed)
if UE.IsValid(MuzzleTailedParticle) then
UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] 11111111111111111111111111")
if UE.IsValid(SKMesh) then
UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] 22222222222222222222222222222")
UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] Bind TailedMuzzle")
self.BoundOnceEffectWeapons[#self.BoundOnceEffectWeapons + 1] = Weapon
GameplayStatics.SpawnEmitterAttached(TempPreViewActor.TailedMuzzle, SKMesh, "MuzzleEffect", {X=0,Y=0,Z=0}, {Roll = 0, Pitch = 0, Yaw = 0}, {X=1,Y=1,Z=1}, EAttachLocation.SnapToTarget, true)
GameplayStatics.SpawnEmitterAttached(MuzzleTailedParticle, SKMesh, "MuzzleEffect", {X=0,Y=0,Z=0}, {Roll = 0, Pitch = 0, Yaw = 0}, {X=1,Y=1,Z=1}, EAttachLocation.SnapToTarget, true)
end
end
-- 子弹拖尾特效
if TempPreViewActor.BulletParticle then
if TempPreViewActor:GetNowFXFromFXType(EFXType.Bullet) then
Weapon.OnBulletBeforeShootDelegate:Add(self.BindBulletTailFX, self)
end
end
@ -160,23 +162,11 @@ function UGCPlayerPawn:BindBulletTailFX(Bullet)
local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor()
if UE.IsValid(TempPreViewActor) then
if UE.IsValid(Bullet) then
-- GameplayStatics.SpawnEmitterAttached(TempPreViewActor.BulletParticle, Bullet:K2_GetRootComponent(), "", {X=0,Y=0,Z=0}, {Roll = 0, Pitch = 0, Yaw = 0}, {X=1,Y=1,Z=1}, EAttachLocation.SnapToTarget, true)
local BulletTailFXActor = UGCGameSystem.GameState:GetBulletFXActor()
--BulletTailFXActor.ProjectileMovement.InitialSpeed = InitialSpeed
--BulletTailFXActor.ProjectileMovement.Velocity = VectorHelper.MulNumber(Bullet:GetActorForwardVector(), InitialSpeed)
local InitialSpeed = Bullet:GetMaxBulletFlySpeed()
local Velocity = VectorHelper.MulNumber(Bullet:GetActorForwardVector(), InitialSpeed)
BulletTailFXActor:ActiveFly(Bullet:K2_GetActorRotation(), Bullet:K2_GetActorLocation(), Velocity, TempPreViewActor.BulletParticle)
BulletTailFXActor:ActiveFly(Bullet:K2_GetActorRotation(), Bullet:K2_GetActorLocation(), Velocity, TempPreViewActor:GetNowFXFromFXType(EFXType.Bullet))
UGCLogSystem.Log("[UGCPlayerPawn_BindBulletTailFX] InitialSpeed:%s", tostring(InitialSpeed))
--Bullet.NormalTailFX = TempPreViewActor.BulletParticle
--Bullet.BeamTailFX = TempPreViewActor.BulletParticle
--
--Bullet.NormalTailFXComp:SetTemplate(TempPreViewActor.BulletParticle)
--Bullet.BeamTailFXComp:SetTemplate(TempPreViewActor.BulletParticle)
--
--Bullet.bShowNormalTailFXImpactInfo = true
end
end
end

View File

@ -2,3 +2,13 @@
-- sorted by enum name asc
---@enum EFXType
EFXType = {
Muzzle = 0,
Kill = 1,
Bullet = 2,
MuzzleTailed = 3,
Hit = 4,
};

View File

@ -0,0 +1,14 @@
-- auto exported UStruct while compiling
-- sorted by struct name asc
---@class FFXData
---@field ID int32
---@field FXType EFXType
---@field Rarity int32
---@field Name FString
---@field Desc FString
---@field Particle UParticleSystem
---@field ColorValue float[]
---@field BaseColor FLinearColor

View File

@ -1,56 +1,14 @@
NowEventID = 0;
function GetNewEventID()
NowEventID = NowEventID + 1
return NowEventID
end
EventEnum = {
-- DefaultEvent
DSStartUp = 1001, -- 服务器启动
PlayerLogin = 1003, -- 玩家加入房间 PlayerKey
PlayerExit = 1004, -- 玩家离开房间 PlayerKey
-- GameState
GameStateChange = 2001, -- 游戏模式改变 CustomEnum.EGameState
WaitPlayerJoin = 2002, -- 等待玩家加入
GamePlay = 2003, -- 游戏开始
GameEnd = 2004, -- 游戏结束
RoundBegining = 2005, -- 回合开始
RoundEnd = 2006, -- 回合结束
RoundReadyFinish = 2007, -- 回合准备阶段结束
-- PlayerEvent
PlayerDeathInfo = 3001, -- 死亡信息 VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue uint, uint, int, int, bool, float, float
PlayerInjuryInfo = 3002, -- 受伤信息 VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue uint, uint, int, int, bool, float, float
PlayerPossessed = 3003, -- 玩家受控 PlayerKey
PlayerBeginPlay = 3004, -- 玩家受控 PlayerPawn
BulletHitCallBack = 3005, -- 玩家射出的子弹命中物体或玩家的回调 (PlayerPawn:UGCPlayerPawn, ShootWeapon:ASTExtraShootWeapon,Bullet:ASTExtraShootWeaponBulletBase,HitInfo:FHitResult)
PlayerTeamChange = 3006, -- 玩家的队伍改变 PC, TeamID
-- PlayerPawn同步参数更新 更新传入Pawn及其同步变量值
UpdateCanObtainIncreaseCount = 4001,
UpdateNowCanSelectIncrease = 4002,
UpdateOwnedIncrease = 4003,
UpdateToGodSchedule = 4004,
-- PlayerEvent End
UpdatePlayerStartList = 10001, -- 通知出生点控制器进行更新出生点指针
AchievementSettlement = 10002, -- 成就事件游戏结算
UpdateTeamScore = 10003, -- 队伍得分信息更新
UpdatePlayerScoreData = 10004, -- 玩家得分信息更新 通过UGCGameSystem.GameState.PlayerScoreDatas 获取玩家得分信息
AddTip = 10005, -- 添加提提示 TipStr TipType
GameWillBegin = 10006, -- 游戏即将开始
PlayerIsAliveIsChange = 10007, -- 玩家存活列表改变
UpdatePlayerInfo = 10008, -- 玩家个人信息更新
PlayerWeaponCombinationUpdate = 11001, -- 玩家可选的武器配置列表更新 [PlayerKey] = CombinationType
PlayerSelectedWeaponIndexUpdate = 11002, -- 玩家选择的武器配置索引更新 [PlayerKey] = Index
--- SelectMap
LoadMap = 20001, -- 关卡加载 MapConifg.MapType
SelectMapCallBack = 20002, -- 地图选择服务器的回调 bSucceed, MapType
SelectDefaultWeaponCallBack = 20003, -- 默认武器选择回调 bSucceed, WeaponID
RandomSelectVoteMap = 20004,
UpdateMapKey = 20005, -- 随机出的地图索引 MapKey
PlayerDeathInfo = GetNewEventID(), -- 死亡信息 VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue uint, uint, int, int, bool, float, float
PlayerInjuryInfo = GetNewEventID(), -- 受伤信息 VictimKey, CauserKey, WeaponID, DamageType, IsHeadShotDamage, Distance, DamageValue uint, uint, int, int, bool, float, float
ChangeFX = GetNewEventID(), -- 切换特效 传入EFXType
OverrideFXColor = GetNewEventID(), -- 切换特效颜色 传入EFXType
}

View File

@ -153,6 +153,23 @@ function UGCSystemLibrary.AsyncLoadAsset(AssetPath, CallBackFunc, Obj, SaveAsset
end
end
--- 通过路径获取DataTable
---@param DataTablePath string
---@param ToNumberKey bool 是否将Key值转化为Number类型再返回
function UGCSystemLibrary.GetDataTableFromPath(DataTablePath, ToNumberKey)
local ResDataTable = Gameplay.GetTable(DataTablePath)
if ToNumberKey then
local Res = {}
for i, v in pairs(ResDataTable) do
Res[tonumber(i)] = v
end
return Res
else
return ResDataTable
end
end
---@param AssetPath:string
---@param SaveAsset:bool 是否保存
function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)
@ -166,6 +183,7 @@ function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)
end
end
--- 通过ItemID获取item类型
---@param ItemID int
---@return ItemTypeID int

View File

@ -0,0 +1,20 @@
---@class WB_FX_Main_C:UUserWidget
---@field NewButton_ShowPanel UNewButton
--Edit Below--
local WB_FX_Main = { bInitDoOnce = false }
--[==[ Construct
function WB_FX_Main:Construct()
end
-- Construct ]==]
-- function WB_FX_Main:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_FX_Main:Destruct()
-- end
return WB_FX_Main

View File

@ -0,0 +1,25 @@
---@class WB_Item_FXType_C:UUserWidget
---@field NewButton_BindColor UNewButton
---@field NewButton_Change UNewButton
---@field NewButton_ResetColor UNewButton
---@field TextBlock_TypeName UTextBlock
---@field WidgetSwitcher_BindColor UWidgetSwitcher
---@field Setting_PickUp_BP USetting_Pickup_UIBP_C
--Edit Below--
local WB_Item_Slide = { bInitDoOnce = false }
--[==[ Construct
function WB_Item_Slide:Construct()
end
-- Construct ]==]
-- function WB_Item_Slide:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_Item_Slide:Destruct()
-- end
return WB_Item_Slide

View File

@ -0,0 +1,27 @@
---@class WB_Item_Slide_C:UUserWidget
---@field Button_SlideMode_add UButton
---@field Button_SlideMode_minus UButton
---@field CanvasPanel_11 UCanvasPanel
---@field ProgressBar_SlideMode UProgressBar
---@field SlideMode_Value UTextBlock
---@field Slider_SlideMode USlider
---@field TextBlock_Range UTextBlock
---@field Setting_PickUp_BP USetting_Pickup_UIBP_C
--Edit Below--
local WB_Item_Slide = { bInitDoOnce = false }
--[==[ Construct
function WB_Item_Slide:Construct()
end
-- Construct ]==]
-- function WB_Item_Slide:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_Item_Slide:Destruct()
-- end
return WB_Item_Slide

View File

@ -0,0 +1,24 @@
---@class WB_PreviewFX_C:UUserWidget
---@field Image_Color UImage
---@field NewButton_Close UNewButton
---@field WB_Item_Slide_B UWB_Item_Slide_C
---@field WB_Item_Slide_G UWB_Item_Slide_C
---@field WB_Item_Slide_R UWB_Item_Slide_C
--Edit Below--
local WB_PreviewFX = { bInitDoOnce = false }
--[==[ Construct
function WB_PreviewFX:Construct()
end
-- Construct ]==]
-- function WB_PreviewFX:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_PreviewFX:Destruct()
-- end
return WB_PreviewFX

Binary file not shown.

View File

@ -53,13 +53,13 @@ SwitchesInMaps=((Key="r.Mobile.EnableIBL",Value=0),(Key="s.StreamableDelegateLim
PlayBindingArray=[]
[JobOption]
LastJobId=600040486
LastWindowsJobId=600040035
LastAndroidJobId=600040035
LastIOSJobId=600040035
PakOnly=1
LastSkipBake=True
LastTargetPlatform=LinuxServer+WindowsNoEditor+Android_ETC2+IOS+OpenHarmony_ETC2
LastJobId=-1
LastWindowsJobId=-1
LastAndroidJobId=-1
LastIOSJobId=-1
PakOnly=0
LastSkipBake=False
LastTargetPlatform=LinuxServer
[UGCUploadOption]
PlatformIndex=0
@ -68,6 +68,6 @@ TargetPlatform=LinuxServer+WindowsNoEditor+Android_ETC2+IOS+OpenHarmony_ETC2
[DebugSettings]
bRoomOB=0
TeamPlayers=5,0;
TeamPlayers=2,0;

View File

@ -567,7 +567,7 @@ end
function UGCGameState:SetPlayerWeaponCombination(PlayerKey, WeaponCombinationType)
self.PlayerWeaponCombination[PlayerKey] = WeaponCombinationType
self:ResetPlayerSelectWeaponIndex(PlayerKey)
-- self:ResetPlayerSelectWeaponIndex(PlayerKey)
end
function UGCGameState:GetPlayerWeaponCombination(PlayerKey)
@ -580,7 +580,8 @@ end
--- 重置玩家选择的武器配置索引
function UGCGameState:ResetPlayerSelectWeaponIndex(PlayerKey)
self.PlayerSelectedWeaponIndex[PlayerKey] = 1
if self.PlayerSelectedWeaponIndex[PlayerKey] == nil then self.PlayerSelectedWeaponIndex[PlayerKey] = {} end
self.PlayerSelectedWeaponIndex[PlayerKey][self:GetPlayerWeaponCombination(PlayerKey)] = 1
end
--- 重置所有玩家的武器配置索引
@ -590,7 +591,8 @@ end
--- 设置玩家选择的武器配置索引
function UGCGameState:PlayerSelectWeaponIndex(PlayerKey, WeaponCombinationIndex)
self.PlayerSelectedWeaponIndex[PlayerKey] = WeaponCombinationIndex
if self.PlayerSelectedWeaponIndex[PlayerKey] == nil then self.PlayerSelectedWeaponIndex[PlayerKey] = {} end
self.PlayerSelectedWeaponIndex[PlayerKey][self:GetPlayerWeaponCombination(PlayerKey)] = WeaponCombinationIndex
self:UpdatePlayerWeapon(PlayerKey)
if self.PlayerAutoSelectWeaponHandle[PlayerKey] then
UGCEventSystem.StopTimer(self.PlayerAutoSelectWeaponHandle[PlayerKey])
@ -614,15 +616,16 @@ end
--- 获取玩家选择的武器配置索引
function UGCGameState:GetPlayerSelectedWeaponIndex(PlayerKey)
return self.PlayerSelectedWeaponIndex[PlayerKey]
if self.PlayerSelectedWeaponIndex[PlayerKey] == nil then self.PlayerSelectedWeaponIndex[PlayerKey] = {} end
if self.PlayerSelectedWeaponIndex[PlayerKey][self:GetPlayerWeaponCombination(PlayerKey)] == nil then
self.PlayerSelectedWeaponIndex[PlayerKey][self:GetPlayerWeaponCombination(PlayerKey)] = 1
end
return self.PlayerSelectedWeaponIndex[PlayerKey][self:GetPlayerWeaponCombination(PlayerKey)]
end
--- 获取玩家选择的武器索引对应的武器及配件
function UGCGameState:GetPlayerSelectedWeaponAndParts(PlayerKey)
local Res = {}
if not self:CheckPlayerSelectWeaponIndex(PlayerKey) then
self.PlayerSelectedWeaponIndex[PlayerKey] = 1
end
local PlayerWeaponCombination = self:GetPlayerWeaponCombination(PlayerKey)
local PlayerSelectedWeaponIndex = self:GetPlayerSelectedWeaponIndex(PlayerKey)
local WeaponCombination = WeaponSelectionCombinationConfig.WeaponCombinationList[PlayerWeaponCombination]
@ -666,9 +669,6 @@ end
--- 获取玩家选择的武器Item表
function UGCGameState:GetPlayerSelectedWeaponItemInfo(PlayerKey)
local Res = {}
if not self:CheckPlayerSelectWeaponIndex(PlayerKey) then
self.PlayerSelectedWeaponIndex[PlayerKey] = 1
end
local PlayerWeaponCombination = self:GetPlayerWeaponCombination(PlayerKey)
local PlayerSelectedWeaponIndex = self:GetPlayerSelectedWeaponIndex(PlayerKey)
local WeaponCombination = WeaponSelectionCombinationConfig.WeaponCombinationList[PlayerWeaponCombination]
@ -1169,6 +1169,59 @@ function UGCGameState:PlayerIsChallenge(InPlayerKey)
return self:GetChallengePlayer() == InPlayerKey
end
function UGCGameState:GetNextChallenge()
local AllPK = UGCSystemLibrary.GetAllPlayerKeys()
if self.ChallengedPlayers == nil then self.ChallengedPlayers = {} end
local TempChallengePlayer = nil
for i, v in pairs(AllPK) do
if not table.hasValue(self.ChallengedPlayers, v) then
TempChallengePlayer = v
break
end
end
return TempChallengePlayer
end
-- 更新玩家的队伍
function UGCGameState:ChangePlayerTeamLogic(PlayerKey, PlayerTeamID)
-- 设置出生点类型
local PC = UGCGameSystem.GetPlayerControllerByPlayerKey(PlayerKey)
if PlayerTeamID == 1 then
PC:SetStartPointType(EPlayerStartType.Team1)
self:SetPlayerWeaponCombination(PlayerKey, WeaponSelectionCombinationConfig.ECombinationType.Combination1)
else
PC:SetStartPointType(EPlayerStartType.Team2)
self:SetPlayerWeaponCombination(PlayerKey, WeaponSelectionCombinationConfig.ECombinationType.Combination2)
end
-- 官方逻辑设置队伍ID
UGCTeamSystem.ChangePlayerTeamID(PlayerKey, PlayerTeamID)
-- 玩家信息栏设置队伍信息
self.PlayerPersonalInfos[PlayerKey].TeamID = PlayerTeamID
-- 玩家比分栏设置比分信息
PlayerScoreSystem.UpdatePlayerTeamID(PlayerKey, PlayerTeamID)
end
-- 选出下一个挑战者
function UGCGameState:SelectNextChallenge()
local TempChallengePlayer = self:GetNextChallenge()
if TempChallengePlayer then
self.ChallengePlayer = TempChallengePlayer
self.ChallengedPlayers[#self.ChallengedPlayers + 1] = TempChallengePlayer
local AllPK = UGCSystemLibrary.GetAllPlayerKeys()
-- 配置队伍ID
for i, PlayerKey in pairs(AllPK) do
if PlayerKey == self.ChallengePlayer then
self:ChangePlayerTeamLogic(self.ChallengePlayer, 2)
else
self:ChangePlayerTeamLogic(PlayerKey, 1)
end
end
UGCSendRPCSystem.RPCEvent(nil, EventEnum.AddTip, TipConfig.TipType.ChallengerPlayer, self.ChallengePlayer)
return true
end
end
-- 工程设置-------------------------------------------------------------------------------------------------------------

View File

@ -19,7 +19,7 @@ function EventAction_PlayerExit:Execute(...)
local HasNotControlled = false
for k, Pawn in pairs(AllPawn) do
if not Pawn:IsControlled() then
Pawn:K2_DestroyActor()
-- Pawn:K2_DestroyActor()
HasNotControlled = true
end
end

View File

@ -105,6 +105,8 @@ end
-- 根据工程的修改而改变的开始执行逻辑
function EventAction_RoundBegin:ExecuteOtherLogic()
-- 选出下一个挑战者
UGCGameSystem.GameState:SelectNextChallenge()
-- 判断玩家是否死亡,死亡则重生
local AllPC = UGCGameSystem.GetAllPlayerController()

View File

@ -44,9 +44,11 @@ end
--- 判断玩法是否结束 根据玩法进行修改
function EventAction_RoundEnd:CheckGameEnd()
return UGCGameSystem.GameState:IsFinishRound()
or UGCGameSystem.GameState:GetMaxTeamScore() > GlobalConfigs.GameSetting.MaxRound // 2
or #UGCTeamSystem.GetPlayerKeysByTeamID(1) < 1 or #UGCTeamSystem.GetPlayerKeysByTeamID(2) < 1
--return UGCGameSystem.GameState:IsFinishRound()
-- or UGCGameSystem.GameState:GetMaxTeamScore() > GlobalConfigs.GameSetting.MaxRound // 2
-- or #UGCTeamSystem.GetPlayerKeysByTeamID(1) < 1 or #UGCTeamSystem.GetPlayerKeysByTeamID(2) < 1
-- or UGCGameSystem.GameState:GettNextChallenge() == nil
return UGCGameSystem.GameState:IsFinishRound() or UGCGameSystem.GameState:GetNextChallenge() == nil
end
--其他逻辑可修改替换 ------------------------
@ -63,18 +65,18 @@ end
function EventAction_RoundEnd:OtherGameFinishLogic()
-- 调换出生点
if GlobalConfigs.GameSetting.ActiveChangeTeam then
if UGCGameSystem.GameState:GetRoundCount() == GlobalConfigs.GameSetting.MaxRound // 2 then
local AllPC = UGCGameSystem.GetAllPlayerController()
for i, PC in pairs(AllPC) do
if PC:GetStartPointType() == EPlayerStartType.Team1 then
PC:SetStartPointType(EPlayerStartType.Team2)
else
PC:SetStartPointType(EPlayerStartType.Team1)
end
end
end
end
--if GlobalConfigs.GameSetting.ActiveChangeTeam then
-- if UGCGameSystem.GameState:GetRoundCount() == GlobalConfigs.GameSetting.MaxRound // 2 then
-- local AllPC = UGCGameSystem.GetAllPlayerController()
-- for i, PC in pairs(AllPC) do
-- if PC:GetStartPointType() == EPlayerStartType.Team1 then
-- PC:SetStartPointType(EPlayerStartType.Team2)
-- else
-- PC:SetStartPointType(EPlayerStartType.Team1)
-- end
-- end
-- end
--end
end

View File

@ -124,7 +124,7 @@ function EventAction_WaitingPlayer:OtherFinishLogic()
UGCEventSystem.SendEvent(EventEnum.UpdatePlayerStartList)
-- 选出挑战者
UGCGameSystem.GameState:ElectChallengePlayer()
-- UGCGameSystem.GameState:ElectChallengePlayer()
-- 广播提示XXX成为挑战者
-- 显示武器选择界面

View File

@ -153,6 +153,23 @@ function UGCSystemLibrary.AsyncLoadAsset(AssetPath, CallBackFunc, Obj, SaveAsset
end
end
--- 通过路径获取DataTable
---@param DataTablePath string
---@param ToNumberKey bool 是否将Key值转化为Number类型再返回
function UGCSystemLibrary.GetDataTableFromPath(DataTablePath, ToNumberKey)
local ResDataTable = Gameplay.GetTable(DataTablePath)
if ToNumberKey then
local Res = {}
for i, v in pairs(ResDataTable) do
Res[tonumber(i)] = v
end
return Res
else
return ResDataTable
end
end
---@param AssetPath:string
---@param SaveAsset:bool 是否保存
function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)

View File

@ -134,7 +134,7 @@ WidgetConfig.Configs = {
ShowOnce = false,
},
[WidgetConfig.EUIType.Settlement] = {
Widget = UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/Settlement/WB_TeamSettlement.WB_TeamSettlement_C'),
Widget = UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/Settlement/WB_Settlement_2.WB_Settlement_2_C'),
Layer = WidgetConfig.EUILayerGroup.High,
ShowOnce = false,
},

View File

@ -1,6 +1,7 @@
---@class WB_PlayerHead_48_C:UUserWidget
---@field Border_HeadMain UBorder
---@field Common_Avatar_BP_C_0 UCommon_Avatar_BP_C
---@field Overlay_Dead UOverlay
---@field Overlay_KnockedDown UOverlay
---@field ProgressBar_Health UProgressBar
---@field WidgetSwitcher_Frame UWidgetSwitcher
@ -107,11 +108,13 @@ function WB_PlayerHead_48:UpdateWidgetState(InPlayerHeadState)
end
self.Overlay_KnockedDown:SetVisibility(ESlateVisibility.Collapsed)
self.Border_HeadMain:SetContentColorAndOpacity({R=1,G=1,B=1,A=1})
self.Overlay_Dead:SetVisibility(ESlateVisibility.Collapsed)
elseif self.PlayerHeadState == EPlayerHeadInfoState.Death then
-- 死亡
self.ProgressBar_Health:SetVisibility(ESlateVisibility.Collapsed)
self.Overlay_KnockedDown:SetVisibility(ESlateVisibility.Collapsed)
self.Border_HeadMain:SetContentColorAndOpacity({R=0.281250,G=0.281250,B=0.281250,A=1.000000})
self.Overlay_Dead:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
elseif self.PlayerHeadState == EPlayerHeadInfoState.KnockedDown then
-- 倒地
if self.IsShowHealth then
@ -120,6 +123,7 @@ function WB_PlayerHead_48:UpdateWidgetState(InPlayerHeadState)
end
self.Overlay_KnockedDown:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.Border_HeadMain:SetContentColorAndOpacity({R=1,G=1,B=1,A=1})
self.Overlay_Dead:SetVisibility(ESlateVisibility.Collapsed)
end
end
end

View File

@ -0,0 +1,87 @@
---@class WB_Settlement_2_C:UUserWidget
---@field Button_AutoReturnToLobby UButton
---@field Button_share UButton
---@field Image_Left UImage
---@field Image_Right UImage
---@field Image_titlebg UImage
---@field TextBlock_AutoReturnToLobby UTextBlock
---@field TextBlock_Levels2_2 UTextBlock
---@field UIParticleEmitter_95 UUIParticleEmitter
---@field VerticalBox_Left UVerticalBox
--Edit Below--
local WB_TeamSettlement = {
bInitDoOnce = false;
LeftTeamType = 1;
RightTeamType = 2;
};
function WB_TeamSettlement:Construct()
WidgetLibrary.BindButtonClicked(self.Button_AutoReturnToLobby, self.Button_AutoReturnToLobby_OnClicked, self)
WidgetLibrary.BindButtonClicked(self.Button_share, self.ShareSettlement, self)
for i = 0, self.VerticalBox_Left:GetChildrenCount() - 1 do
local ItemLeftInst = self.VerticalBox_Left:GetChildAt(i)
ItemLeftInst:SetIndex(i + 1)
end
end
function WB_TeamSettlement:OnShowPanel()
self:AutoReturnToLobby()
self:UpdateRank()
end
function WB_TeamSettlement:UpdateRank()
UGCLogSystem.Log("[WB_TeamSettlement_UpdateRank]")
local RankData = PlayerScoreSystem.GetRank()
UGCLogSystem.LogTree("[WB_TeamRank_UpdateRank]", RankData)
for i = 0, self.VerticalBox_Left:GetChildrenCount() - 1 do
local ItemLeftInst = self.VerticalBox_Left:GetChildAt(i)
local PlayerKeyLeft = RankData and RankData[i + 1] or nil
if PlayerKeyLeft then
ItemLeftInst:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
ItemLeftInst:InitRankInfo(PlayerKeyLeft)
else
ItemLeftInst:SetVisibility(ESlateVisibility.Collapsed)
end
end
end
function WB_TeamSettlement:AutoReturnToLobby()
self.DelayReturnToLobbyTime = GlobalConfigs.GameSetting.DelayReturnToLobbyTime
self.SettlementTime = KismetSystemLibrary.GetGameTimeInSeconds(self)
self.DelayReturnToLobbyTimerHandle = UGCEventSystem.SetTimerLoop(
self,
function ()
local NowTime = KismetSystemLibrary.GetGameTimeInSeconds(self)
local ShowTime = math.floor(self.DelayReturnToLobbyTime - (NowTime - self.SettlementTime))
ShowTime = ShowTime >= 0 and ShowTime or 0
self.TextBlock_AutoReturnToLobby:SetText(string.format("返回大厅(%ds)", ShowTime))
if ShowTime <= 0 then self:Button_AutoReturnToLobby_OnClicked() end
end,
0.5
)
end
function WB_TeamSettlement:Button_AutoReturnToLobby_OnClicked()
-- if UGCGameSystem.GameState.GameStateType ~= CustomEnum.EGameState.End then return end
if self == nil or self.DoOnceReturnToLobby then return end
if self.DelayReturnToLobbyTimerHandle then
UGCEventSystem.StopTimer(self.DelayReturnToLobbyTimerHandle)
self.DelayReturnToLobbyTimerHandle = nil
end
self.DoOnceReturnToLobby = true
UGCGameSystem.ReturnToLobby()
UGCLogSystem.Log("[WB_TeamSettlement_Button_AutoReturnToLobby_OnClicked]")
end
--- 分享战绩
function WB_TeamSettlement:ShareSettlement()
UGCWidgetManagerSystem.Share();
end
return WB_TeamSettlement;

View File

@ -0,0 +1,76 @@
---@class WB_TeamSettlementItem_2_C:UUserWidget
---@field Button_Result_AddFriend UButton
---@field Image_0 UImage
---@field Image_PlayerIcon UImage
---@field TextBlock_Deaths UTextBlock
---@field TextBlock_Kills UTextBlock
---@field TextBlock_PlayerName UTextBlock
---@field TextBlock_RankNum UTextBlock
---@field WidgetSwitcher_IsLocalPlayer UWidgetSwitcher
--Edit Below--
---@type WB_TeamSettlementItem_C
local WB_TeamSettlementItem = {
bInitDoOnce = false;
PlayerKey = -1;
};
function WB_TeamSettlementItem:LuaInit()
if self.bInitDoOnce then
return;
end
self.bInitDoOnce = true;
WidgetLibrary.BindButtonClicked(self.Button_Result_AddFriend, self.AddFriend, self)
end
function WB_TeamSettlementItem:SetIndex(Index)
self.TextBlock_RankNum:SetText(tostring(Index));
end
function WB_TeamSettlementItem:SetTeam(TeamType)
-- UGCLogSystem.Log("[WB_TeamRankItem_SetTeam]")
local TeamColor = TeamConfig.TeamColor[TeamType]
-- 设置队伍颜色
if TeamColor then
self.TextBlock_RankNum:SetColorAndOpacity({SpecifiedColor = TeamColor, ColorUseRule = 0})
self.TextBlock_PlayerName:SetColorAndOpacity({SpecifiedColor = TeamColor, ColorUseRule = 0})
else
UGCLogSystem.LogError("[WB_TeamRankItem_SetTeam] TeamType:%s, TeamColorType: %s", tostring(TeamType), type(TeamColor))
end
end
function WB_TeamSettlementItem:InitRankInfo(PlayerKey)
self:LuaInit()
self.PlayerKey = PlayerKey
if self.PlayerKey == UGCSystemLibrary.GetLocalPlayerKey() then
self.WidgetSwitcher_IsLocalPlayer:SetActiveWidgetIndex(1)
self.Button_Result_AddFriend:SetVisibility(ESlateVisibility.Collapsed)
else
self.WidgetSwitcher_IsLocalPlayer:SetActiveWidgetIndex(0)
end
local PlayerName = UGCGameSystem.GameState:GetPlayerNameByPlayerKey(self.PlayerKey);
--local RankNum = UGCGameSystem.GameState:GetPlayerRankByPlayerKey(self.PlayerKey)
local Kills = PlayerScoreSystem.GetPlayerScoreDataFromType(PlayerKey, PlayerScoreSystem.Config.EScoreType.Kills)
local Damage = PlayerScoreSystem.GetPlayerScoreDataFromType(PlayerKey, PlayerScoreSystem.Config.EScoreType.Damage)
local Deaths = PlayerScoreSystem.GetPlayerScoreDataFromType(PlayerKey, PlayerScoreSystem.Config.EScoreType.Deaths)
self.TextBlock_PlayerName:SetText(PlayerName);
--self.TextBlock_RankNum:SetText(tostring(RankNum));
--self.TextBlock_Kills:SetText(tostring(Kills));
self.TextBlock_Kills:SetText(math.floor(Damage));
self.TextBlock_Deaths:SetText(tostring(Deaths));
UGCSystemLibrary.DownloadImageToUImage(self.Image_PlayerIcon, UGCGameSystem.GameState:GetHeadIconByPlayerKey(PlayerKey), true);
end
function WB_TeamSettlementItem:AddFriend()
local TargetPlayerData = UGCGameSystem.GameState.PlayerPersonalInfos[self.PlayerKey]
if TargetPlayerData then
UGCGameSystem.AddFriend(TargetPlayerData.UID)
end
end
return WB_TeamSettlementItem;

View File

@ -0,0 +1,209 @@
---@class W_TeamScore_RoundMode_3_C:UUserWidget
---@field HorizontalBox_EnemyTeamPlayers UHorizontalBox
---@field HorizontalBox_SelfTeamPlayers UHorizontalBox
---@field NewButton_TC_ScoreBoard UNewButton
---@field TextBlock_EnemyAlive UTextBlock
---@field TextBlock_LeftPlayerCount UTextBlock
---@field TextBlock_RightPlayerCount UTextBlock
---@field TextBlock_Round UTextBlock
---@field TextBlock_SelfTeamAlive UTextBlock
---@field WidgetSwitcher_AliveState UWidgetSwitcher
---@field WidgetSwitcher_EnemyTextTip UWidgetSwitcher
---@field WidgetSwitcher_SelfTextTip UWidgetSwitcher
--Edit Below--
---@type W_TeamScore_RoundMode_3_C
local W_TeamScore_RoundMode_3 = {
bInitDoOnce = false;
TeamLessThanOneMinute = true;
LeftTeamID = 1;
RightTeamID = 2;
UpdateFPS = 1.;
LocalPlayerIsInBattle = false;
};
function W_TeamScore_RoundMode_3:OnShowPanel()
if self.LoopUpdateHandle == nil then
self.LoopUpdateHandle = UGCEventSystem.SetTimerLoop(self, self.LoopUpdate, 1. / self.UpdateFPS)
end
end
function W_TeamScore_RoundMode_3:OnClosePanel()
if self.LoopUpdateHandle then
UGCEventSystem.StopTimer(self.LoopUpdateHandle)
self.LoopUpdateHandle = nil
end
if WidgetManager:IsVisiblePanel(WidgetConfig.EUIType.Ranking) then
WidgetManager:ClosePanel(WidgetConfig.EUIType.Ranking)
end
end
function W_TeamScore_RoundMode_3:Construct()
UGCLogSystem.Log("[W_TeamScore_RoundMode_3_Construct]")
WidgetLibrary.BindButtonClicked(self.NewButton_TC_ScoreBoard, self.ShowRankingWidget, self)
UGCEventSystem.AddListener(EventEnum.UpdateTeamScore, self.UpdateTeamScore, self)
UGCEventSystem.AddListener(EventEnum.UpdatePlayerInfo, self.UpdateLocalPlayerTeam, self)
UGCEventSystem.AddListener(EventEnum.PlayerIsAliveIsChange, self.UpdatePlayerAliveCount, self)
UGCEventSystem.AddListener(EventEnum.NewRound, self.UpdateRoundCount, self)
-- 显示己方队伍血量
for i = 1, self.HorizontalBox_SelfTeamPlayers:GetChildrenCount() do
local Item = self.HorizontalBox_SelfTeamPlayers:GetChildAt(i - 1);
Item:SetShowHealth(true)
Item:SetShowFrame(false)
Item:ShowTeamFrame(1)
end
-- 显示设置敌方框
for i = 1, self.HorizontalBox_EnemyTeamPlayers:GetChildrenCount() do
local Item = self.HorizontalBox_EnemyTeamPlayers:GetChildAt(i - 1);
Item:SetShowFrame(false)
Item:ShowTeamFrame(2)
end
self:UpdateLocalPlayerTeam()
self:UpdateTeamScore()
self:UpdateRoundCount(UGCGameSystem.GameState:GetRoundCount())
end
function W_TeamScore_RoundMode_3:LoopUpdate()
local LocalPawn = UGCSystemLibrary.GetLocalPlayerPawn()
--if UE.IsValid(LocalPawn) and not UGCPawnSystem.HasPawnState(LocalPawn, EPawnState.Dead) and not UGCGameSystem.GameState:IsReadyState() then
-- self:ChangeScorePanelState(true)
--else
-- self:ChangeScorePanelState(false)
--end
self:ChangeScorePanelState(false)
local AllPawn = UGCGameSystem.GetAllPlayerPawn()
local TeamAliveCount = {}
for i, v in pairs(AllPawn) do
if UE.IsValid(v) and not UGCPawnSystem.HasPawnState(v, EPawnState.Dead) then
local PlayerKey = v.PlayerKey
if PlayerKey then
local TeamID = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(PlayerKey)
if TeamAliveCount[TeamID] == nil then
TeamAliveCount[TeamID] = 0
end
TeamAliveCount[TeamID] = TeamAliveCount[TeamID] + 1
end
end
end
local LeftCount = TeamAliveCount[self.LeftTeamID]
local RightCount = TeamAliveCount[self.RightTeamID]
LeftCount = (LeftCount and LeftCount or 0)
RightCount = (RightCount and RightCount or 0)
self.TextBlock_LeftPlayerCount:SetText(LeftCount)
self.TextBlock_RightPlayerCount:SetText(RightCount)
self.TextBlock_SelfTeamAlive:SetText(LeftCount)
self.TextBlock_EnemyAlive:SetText(RightCount)
end
function W_TeamScore_RoundMode_3:ChangeScorePanelState(InLocalPlayerIsInBattle)
if self.LocalPlayerIsInBattle ~= InLocalPlayerIsInBattle then
-- UGCLogSystem.Log("[W_TeamScore_RoundMode_3_ChangeScorePanelState] InLocalPlayerIsInBattle:%s", tostring(InLocalPlayerIsInBattle))
self.LocalPlayerIsInBattle = InLocalPlayerIsInBattle
if self.LocalPlayerIsInBattle then
--self.CanvasPanel_EnemyAlive:SetVisibility(ESlateVisibility.Collapsed)
--self.CanvasPanel_SelfAlive:SetVisibility(ESlateVisibility.Collapsed)
self.WidgetSwitcher_SelfTextTip:SetActiveWidgetIndex(1)
self.WidgetSwitcher_EnemyTextTip:SetActiveWidgetIndex(1)
self.WidgetSwitcher_AliveState:SetActiveWidgetIndex(1)
else
--self.CanvasPanel_EnemyAlive:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
--self.CanvasPanel_SelfAlive:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.WidgetSwitcher_SelfTextTip:SetActiveWidgetIndex(0)
self.WidgetSwitcher_EnemyTextTip:SetActiveWidgetIndex(0)
self.WidgetSwitcher_AliveState:SetActiveWidgetIndex(0)
end
end
end
function W_TeamScore_RoundMode_3:UpdateLocalPlayerTeam()
-- 判断己方是team2还是team1
local LocalPlayerTeamID = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(UGCSystemLibrary.GetLocalPlayerKey())
if LocalPlayerTeamID == TeamConfig.TeamType.CT then
self.LeftTeamID, self.RightTeamID = 1, 2
else
self.LeftTeamID, self.RightTeamID = 2, 1
end
local SelfTeamPlayers = UGCGameSystem.GameState:GetTeamPlayer(self.LeftTeamID)
local EnemyTeamPlayers = UGCGameSystem.GameState:GetTeamPlayer(self.RightTeamID)
for i = 1, self.HorizontalBox_SelfTeamPlayers:GetChildrenCount() do
local Item = self.HorizontalBox_SelfTeamPlayers:GetChildAt(i - 1);
Item:UpdatePlayerInfo(SelfTeamPlayers[i])
end
for i = 1, self.HorizontalBox_EnemyTeamPlayers:GetChildrenCount() do
local Item = self.HorizontalBox_EnemyTeamPlayers:GetChildAt(i - 1);
Item:UpdatePlayerInfo(EnemyTeamPlayers[i])
end
end
--- 更新比分
function W_TeamScore_RoundMode_3:UpdateTeamScore()
local LeftTeamScore = UGCGameSystem.GameState:GetTeamScore(self.LeftTeamID)
local RightTeamScore = UGCGameSystem.GameState:GetTeamScore(self.RightTeamID)
end
--- 显示排行榜UI
function W_TeamScore_RoundMode_3:ShowRankingWidget()
if WidgetManager:IsVisiblePanel(WidgetConfig.EUIType.Ranking) then
WidgetManager:ClosePanel(WidgetConfig.EUIType.Ranking)
else
WidgetManager:ShowPanel(WidgetConfig.EUIType.Ranking, false)
end
end
--- 更新显示时间
function W_TeamScore_RoundMode_3:UpdateShowTime()
local Time = UGCGameSystem.GameState:GetGameTime()
self:CheckAddTip(Time)
self.TextBlock_RemainTime:SetText(UGCSystemLibrary.formatTime(Time, true))
end
--- 判断是否要结束时给予提示
function W_TeamScore_RoundMode_3:CheckAddTip(Time)
if UGCGameSystem.GameState:GetGameStateType() ~= CustomEnum.EGameState.Playing then
return
end
local TeamLessThanOneMinute = false
if Time <= 60 then
TeamLessThanOneMinute = true
end
if self.LessThanOneMinute ~= TeamLessThanOneMinute then
self.LessThanOneMinute = TeamLessThanOneMinute
if self.LessThanOneMinute then
UGCEventSystem.SendEvent(EventEnum.AddTip, TipConfig.TipType.OneMinuteRemaining)
--- 播放即将结束的音乐
SoundSystem.PlaySound(SoundSystem.ESound.AboutToEnd)
self.DoOnceTip1min = false
self.TextBlock_RemainTime:SetColorAndOpacity({SpecifiedColor = {R = 1, G = 0, B = 0, A = 1}, ColorUseRule = 0})
else
self.TextBlock_RemainTime:SetColorAndOpacity({SpecifiedColor = {R = 1, G = 1, B = 1, A = 1}, ColorUseRule = 0})
end
end
end
function W_TeamScore_RoundMode_3:UpdatePlayerAliveCount()
local LeftCount = UGCGameSystem.GameState:GetTeamAlivePlayerCount(self.LeftTeamID)
local RightCount = UGCGameSystem.GameState:GetTeamAlivePlayerCount(self.RightTeamID)
self.TextBlock_LeftPlayerCount:SetText(LeftCount)
self.TextBlock_RightPlayerCount:SetText(RightCount)
self.TextBlock_SelfTeamAlive:SetText(LeftCount)
self.TextBlock_EnemyAlive:SetText(RightCount)
end
function W_TeamScore_RoundMode_3:UpdateRoundCount(InRound)
self.TextBlock_Round:SetText(InRound .. " / " .. GlobalConfigs.GameSetting.MaxRound)
--self.TextBlock_Round:SetText(InRound)
end
return W_TeamScore_RoundMode_3;

View File

@ -1,8 +1,7 @@
---@class WB_FightPanel_C:UAEUserWidget
---@field Button_ShowGuide UButton
---@field NewButton_GM UNewButton
---@field W_TeamScore_RoundMode UW_TeamScore_RoundMode_C
---@field W_TeamScore_RoundMode_2 UW_TeamScore_RoundMode_2_C
---@field W_TeamScore_RoundMode_3 UW_TeamScore_RoundMode_3_C
---@field WB_HP UWB_HP_C
---@field WidgetSwitcher_0 UWidgetSwitcher
--Edit Below--
@ -25,13 +24,12 @@ function WB_FightPanel:LuaInit()
end
function WB_FightPanel:OnShowPanel()
self.W_TeamScore_RoundMode_2:OnShowPanel()
self.W_TeamScore_RoundMode:OnShowPanel()
self.W_TeamScore_RoundMode_3:OnShowPanel()
end
function WB_FightPanel:OnClosePanel()
self.W_TeamScore_RoundMode_2:OnClosePanel()
self.W_TeamScore_RoundMode:OnClosePanel()
self.W_TeamScore_RoundMode_3:OnClosePanel()
-- self.W_TeamScore_RoundMode:OnClosePanel()
end

Binary file not shown.

View File

@ -153,6 +153,23 @@ function UGCSystemLibrary.AsyncLoadAsset(AssetPath, CallBackFunc, Obj, SaveAsset
end
end
--- 通过路径获取DataTable
---@param DataTablePath string
---@param ToNumberKey bool 是否将Key值转化为Number类型再返回
function UGCSystemLibrary.GetDataTableFromPath(DataTablePath, ToNumberKey)
local ResDataTable = Gameplay.GetTable(DataTablePath)
if ToNumberKey then
local Res = {}
for i, v in pairs(ResDataTable) do
Res[tonumber(i)] = v
end
return Res
else
return ResDataTable
end
end
---@param AssetPath:string
---@param SaveAsset:bool 是否保存
function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)

Binary file not shown.

View File

@ -158,16 +158,20 @@ function UGCSystemLibrary.AsyncLoadAsset(AssetPath, CallBackFunc, Obj, SaveAsset
end
end
---@param AssetPath:string
---@param SaveAsset:bool 是否保存
function UGCSystemLibrary.LoadAsset(AssetPath, SaveAsset)
if SaveAsset == nil then SaveAsset = true end
if not UE.IsValid(UGCSystemLibrary.CacheAsset[AssetPath]) then
local TargetAsset = UE.LoadObject(AssetPath)
if SaveAsset and UE.IsValid(TargetAsset) then UGCSystemLibrary.CacheAsset[AssetPath] = TargetAsset end
return TargetAsset
--- 通过路径获取DataTable
---@param DataTablePath string
---@param ToNumberKey bool 是否将Key值转化为Number类型再返回
function UGCSystemLibrary.GetDataTableFromPath(DataTablePath, ToNumberKey)
local ResDataTable = Gameplay.GetTable(DataTablePath)
if ToNumberKey then
local Res = {}
for i, v in pairs(ResDataTable) do
Res[tonumber(i)] = v
end
return Res
else
return UGCSystemLibrary.CacheAsset[AssetPath]
return ResDataTable
end
end