diff --git a/AsymmetricChallenge/Script/Global/System/UGCSystemLibrary.lua b/AsymmetricChallenge/Script/Global/System/UGCSystemLibrary.lua index 17d0a327..066973b0 100644 --- a/AsymmetricChallenge/Script/Global/System/UGCSystemLibrary.lua +++ b/AsymmetricChallenge/Script/Global/System/UGCSystemLibrary.lua @@ -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 diff --git a/Counterattack/Asset/Blueprint/PlayerStart/BP_HDPlayerStart.uasset b/Counterattack/Asset/Blueprint/PlayerStart/BP_HDPlayerStart.uasset index ed32b8e6..ea20aeb5 100644 Binary files a/Counterattack/Asset/Blueprint/PlayerStart/BP_HDPlayerStart.uasset and b/Counterattack/Asset/Blueprint/PlayerStart/BP_HDPlayerStart.uasset differ diff --git a/Counterattack/Counterattack.ugcproj b/Counterattack/Counterattack.ugcproj index 492bbf73..0b973001 100644 --- a/Counterattack/Counterattack.ugcproj +++ b/Counterattack/Counterattack.ugcproj @@ -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 diff --git a/Counterattack/Script/Global/System/UGCSystemLibrary.lua b/Counterattack/Script/Global/System/UGCSystemLibrary.lua index 079f8213..281113c8 100644 --- a/Counterattack/Script/Global/System/UGCSystemLibrary.lua +++ b/Counterattack/Script/Global/System/UGCSystemLibrary.lua @@ -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) diff --git a/FX_Preview/Asset/Blueprint/SceneActor/BP_PreViewFXActor.uasset b/FX_Preview/Asset/Blueprint/SceneActor/BP_PreViewFXActor.uasset index 44063936..07d1c2f2 100644 Binary files a/FX_Preview/Asset/Blueprint/SceneActor/BP_PreViewFXActor.uasset and b/FX_Preview/Asset/Blueprint/SceneActor/BP_PreViewFXActor.uasset differ diff --git a/FX_Preview/Asset/FX/A_Table/EFXType.uasset b/FX_Preview/Asset/FX/A_Table/EFXType.uasset new file mode 100644 index 00000000..0b9e2ef6 Binary files /dev/null and b/FX_Preview/Asset/FX/A_Table/EFXType.uasset differ diff --git a/FX_Preview/Asset/FX/A_Table/FFXData.uasset b/FX_Preview/Asset/FX/A_Table/FFXData.uasset new file mode 100644 index 00000000..35451827 Binary files /dev/null and b/FX_Preview/Asset/FX/A_Table/FFXData.uasset differ diff --git a/FX_Preview/Asset/FX/A_Table/Table_FXData.uasset b/FX_Preview/Asset/FX/A_Table/Table_FXData.uasset new file mode 100644 index 00000000..b02d0d05 Binary files /dev/null and b/FX_Preview/Asset/FX/A_Table/Table_FXData.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXMaterial/MAT_FX_Square_4.uasset b/FX_Preview/Asset/FX/ArtBase/FXMaterial/MAT_FX_Square_4.uasset new file mode 100644 index 00000000..32bed6db Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXMaterial/MAT_FX_Square_4.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXMaterial/MAT_FX_Tailed_Base.uasset b/FX_Preview/Asset/FX/ArtBase/FXMaterial/MAT_FX_Tailed_Base.uasset deleted file mode 100644 index 635bdc55..00000000 Binary files a/FX_Preview/Asset/FX/ArtBase/FXMaterial/MAT_FX_Tailed_Base.uasset and /dev/null differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXMaterial/Tailed/Children/MAT_Tailed_1.uasset b/FX_Preview/Asset/FX/ArtBase/FXMaterial/Tailed/Children/MAT_Tailed_1.uasset new file mode 100644 index 00000000..388dcf95 Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXMaterial/Tailed/Children/MAT_Tailed_1.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXMaterial/Tailed/MAT_FX_Tailed_Base.uasset b/FX_Preview/Asset/FX/ArtBase/FXMaterial/Tailed/MAT_FX_Tailed_Base.uasset new file mode 100644 index 00000000..8d404942 Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXMaterial/Tailed/MAT_FX_Tailed_Base.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Glow_02.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Glow_02.uasset new file mode 100644 index 00000000..9c9fa3aa Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Glow_02.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_01.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_01.uasset new file mode 100644 index 00000000..92147635 Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_01.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_04.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_04.uasset new file mode 100644 index 00000000..f671da27 Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_04.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_05.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_05.uasset new file mode 100644 index 00000000..83eb1999 Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_05.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_06.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_06.uasset new file mode 100644 index 00000000..348aa4ce Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_06.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_07.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_07.uasset new file mode 100644 index 00000000..cba7617e Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Noise_07.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail.uasset new file mode 100644 index 00000000..a4237684 Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_02.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_02.uasset new file mode 100644 index 00000000..0756cc71 Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_02.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_03.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_03.uasset new file mode 100644 index 00000000..77fff796 Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_03.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_04.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_04.uasset new file mode 100644 index 00000000..40d1fc7f Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_04.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_05.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_05.uasset new file mode 100644 index 00000000..52c5d2aa Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_05.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_07.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_07.uasset new file mode 100644 index 00000000..666a640f Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trail_07.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trails.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trails.uasset new file mode 100644 index 00000000..dfeaf43d Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trails.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trails_02.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trails_02.uasset new file mode 100644 index 00000000..e5cbfd0d Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trails_02.uasset differ diff --git a/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trails_03.uasset b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trails_03.uasset new file mode 100644 index 00000000..687f3ba2 Binary files /dev/null and b/FX_Preview/Asset/FX/ArtBase/FXTexture/Trailing/T_Trails_03.uasset differ diff --git a/FX_Preview/Asset/FX/BulletFX/TailType3/P_TailType3.uasset b/FX_Preview/Asset/FX/BulletFX/TailType3/P_TailType3.uasset index adafbd03..7cd30366 100644 Binary files a/FX_Preview/Asset/FX/BulletFX/TailType3/P_TailType3.uasset and b/FX_Preview/Asset/FX/BulletFX/TailType3/P_TailType3.uasset differ diff --git a/FX_Preview/Asset/FX/TailedMuzzle/Type1/P_TailedMuzzle_Base.uasset b/FX_Preview/Asset/FX/TailedMuzzle/Type1/P_TailedMuzzle_Base.uasset index 145ebe81..5a02313d 100644 Binary files a/FX_Preview/Asset/FX/TailedMuzzle/Type1/P_TailedMuzzle_Base.uasset and b/FX_Preview/Asset/FX/TailedMuzzle/Type1/P_TailedMuzzle_Base.uasset differ diff --git a/FX_Preview/Asset/FX/TailedMuzzle/Type3/P_TailedMuzzle_Star_P.uasset b/FX_Preview/Asset/FX/TailedMuzzle/Type3/P_TailedMuzzle_Star_P.uasset new file mode 100644 index 00000000..e2485a67 Binary files /dev/null and b/FX_Preview/Asset/FX/TailedMuzzle/Type3/P_TailedMuzzle_Star_P.uasset differ diff --git a/FX_Preview/Asset/FX/TailedMuzzle/Type3/P_TailedMuzzle_T3_C.uasset b/FX_Preview/Asset/FX/TailedMuzzle/Type3/P_TailedMuzzle_T3_C.uasset index f6226fbe..9efafe08 100644 Binary files a/FX_Preview/Asset/FX/TailedMuzzle/Type3/P_TailedMuzzle_T3_C.uasset and b/FX_Preview/Asset/FX/TailedMuzzle/Type3/P_TailedMuzzle_T3_C.uasset differ diff --git a/FX_Preview/Asset/FX/TailedMuzzle/Type6/P_TailedMuzzle_LP.uasset b/FX_Preview/Asset/FX/TailedMuzzle/Type6/P_TailedMuzzle_LP.uasset index 59dd5256..409a9683 100644 Binary files a/FX_Preview/Asset/FX/TailedMuzzle/Type6/P_TailedMuzzle_LP.uasset and b/FX_Preview/Asset/FX/TailedMuzzle/Type6/P_TailedMuzzle_LP.uasset differ diff --git a/FX_Preview/Asset/FX/TailedMuzzle/Type6/P_TailedMuzzle_LP_2.uasset b/FX_Preview/Asset/FX/TailedMuzzle/Type6/P_TailedMuzzle_LP_2.uasset index 931cea3c..6bfba248 100644 Binary files a/FX_Preview/Asset/FX/TailedMuzzle/Type6/P_TailedMuzzle_LP_2.uasset and b/FX_Preview/Asset/FX/TailedMuzzle/Type6/P_TailedMuzzle_LP_2.uasset differ diff --git a/FX_Preview/Asset/FX/TailedMuzzle/Type7/P_TailedMuzzle_7.uasset b/FX_Preview/Asset/FX/TailedMuzzle/Type7/P_TailedMuzzle_7.uasset new file mode 100644 index 00000000..108b6c44 Binary files /dev/null and b/FX_Preview/Asset/FX/TailedMuzzle/Type7/P_TailedMuzzle_7.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_MGL_Ball_Inner01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_MGL_Ball_Inner01.uasset new file mode 100644 index 00000000..7d7e9862 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_MGL_Ball_Inner01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_MGL_Ball_Outter01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_MGL_Ball_Outter01.uasset new file mode 100644 index 00000000..fc240573 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_MGL_Ball_Outter01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_MGL_Shooting_01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_MGL_Shooting_01.uasset new file mode 100644 index 00000000..3a1ee326 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_MGL_Shooting_01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Nitrog_min_01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Nitrog_min_01.uasset new file mode 100644 index 00000000..3780395e Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Nitrog_min_01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_BNT_A_02.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_BNT_A_02.uasset new file mode 100644 index 00000000..42255b61 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_BNT_A_02.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_BNT_B_01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_BNT_B_01.uasset new file mode 100644 index 00000000..8d2677d6 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_BNT_B_01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_BNT_B_02.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_BNT_B_02.uasset new file mode 100644 index 00000000..a93b90c8 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_BNT_B_02.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_PT_A_01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_PT_A_01.uasset new file mode 100644 index 00000000..44b4c510 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_PT_A_01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SBT_A_01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SBT_A_01.uasset new file mode 100644 index 00000000..6acdf318 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SBT_A_01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SDT_A_01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SDT_A_01.uasset new file mode 100644 index 00000000..60503aee Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SDT_A_01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SDT_B_01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SDT_B_01.uasset new file mode 100644 index 00000000..191ec496 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SDT_B_01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_burst_01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_burst_01.uasset new file mode 100644 index 00000000..9748cc68 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_burst_01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_mofadan_01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_mofadan_01.uasset new file mode 100644 index 00000000..9fc2e83c Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_mofadan_01.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_mofadan_02.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_mofadan_02.uasset new file mode 100644 index 00000000..8466195c Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_mofadan_02.uasset differ diff --git a/FX_Preview/Asset/UI/PreviewFX/WB_FX_Main.uasset b/FX_Preview/Asset/UI/PreviewFX/WB_FX_Main.uasset new file mode 100644 index 00000000..c665f23b Binary files /dev/null and b/FX_Preview/Asset/UI/PreviewFX/WB_FX_Main.uasset differ diff --git a/FX_Preview/Asset/UI/PreviewFX/WB_Item_FXType.uasset b/FX_Preview/Asset/UI/PreviewFX/WB_Item_FXType.uasset new file mode 100644 index 00000000..b16ed85e Binary files /dev/null and b/FX_Preview/Asset/UI/PreviewFX/WB_Item_FXType.uasset differ diff --git a/FX_Preview/Asset/UI/PreviewFX/WB_Item_Slide.uasset b/FX_Preview/Asset/UI/PreviewFX/WB_Item_Slide.uasset new file mode 100644 index 00000000..48d5d952 Binary files /dev/null and b/FX_Preview/Asset/UI/PreviewFX/WB_Item_Slide.uasset differ diff --git a/FX_Preview/Asset/UI/PreviewFX/WB_PreviewFX.uasset b/FX_Preview/Asset/UI/PreviewFX/WB_PreviewFX.uasset new file mode 100644 index 00000000..265f00fa Binary files /dev/null and b/FX_Preview/Asset/UI/PreviewFX/WB_PreviewFX.uasset differ diff --git a/FX_Preview/Script/Blueprint/SceneActor/BP_PreViewFXActor.lua b/FX_Preview/Script/Blueprint/SceneActor/BP_PreViewFXActor.lua index 67c4b9a3..d36f110f 100644 --- a/FX_Preview/Script/Blueprint/SceneActor/BP_PreViewFXActor.lua +++ b/FX_Preview/Script/Blueprint/SceneActor/BP_PreViewFXActor.lua @@ -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,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) diff --git a/FX_Preview/Script/Blueprint/UGCGameState.lua b/FX_Preview/Script/Blueprint/UGCGameState.lua index 62e92b62..3105cc2b 100644 --- a/FX_Preview/Script/Blueprint/UGCGameState.lua +++ b/FX_Preview/Script/Blueprint/UGCGameState.lua @@ -27,13 +27,16 @@ end function UGCGameState:SpawnParticleAtPos(Pos) local TempPreViewActor = self:GetPreViewFXActor() if UE.IsValid(TempPreViewActor) 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) + 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, KillParticle, Pos, {Roll = 0, Pitch = 0, Yaw = 0}, FXScale, true) + end end end diff --git a/FX_Preview/Script/Blueprint/UGCPlayerPawn.lua b/FX_Preview/Script/Blueprint/UGCPlayerPawn.lua index 3715706d..2a8cd0c9 100644 --- a/FX_Preview/Script/Blueprint/UGCPlayerPawn.lua +++ b/FX_Preview/Script/Blueprint/UGCPlayerPawn.lua @@ -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 diff --git a/FX_Preview/Script/Common/ue_enum_custom.lua b/FX_Preview/Script/Common/ue_enum_custom.lua index d2f63222..13c423e9 100644 --- a/FX_Preview/Script/Common/ue_enum_custom.lua +++ b/FX_Preview/Script/Common/ue_enum_custom.lua @@ -2,3 +2,13 @@ -- sorted by enum name asc +---@enum EFXType +EFXType = { + Muzzle = 0, + Kill = 1, + Bullet = 2, + MuzzleTailed = 3, + Hit = 4, +}; + + diff --git a/FX_Preview/Script/Common/ue_struct_custom.lua b/FX_Preview/Script/Common/ue_struct_custom.lua new file mode 100644 index 00000000..2b7156b2 --- /dev/null +++ b/FX_Preview/Script/Common/ue_struct_custom.lua @@ -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 + diff --git a/FX_Preview/Script/Global/EventConfig.lua b/FX_Preview/Script/Global/EventConfig.lua index 54d15814..d7fa3178 100644 --- a/FX_Preview/Script/Global/EventConfig.lua +++ b/FX_Preview/Script/Global/EventConfig.lua @@ -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 } \ No newline at end of file diff --git a/FX_Preview/Script/Global/System/UGCSystemLibrary.lua b/FX_Preview/Script/Global/System/UGCSystemLibrary.lua index 079f8213..2e678770 100644 --- a/FX_Preview/Script/Global/System/UGCSystemLibrary.lua +++ b/FX_Preview/Script/Global/System/UGCSystemLibrary.lua @@ -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 diff --git a/FX_Preview/Script/UI/PreviewFX/WB_FX_Main.lua b/FX_Preview/Script/UI/PreviewFX/WB_FX_Main.lua new file mode 100644 index 00000000..c7f0ca0e --- /dev/null +++ b/FX_Preview/Script/UI/PreviewFX/WB_FX_Main.lua @@ -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 \ No newline at end of file diff --git a/FX_Preview/Script/UI/PreviewFX/WB_Item_FXType.lua b/FX_Preview/Script/UI/PreviewFX/WB_Item_FXType.lua new file mode 100644 index 00000000..920458e2 --- /dev/null +++ b/FX_Preview/Script/UI/PreviewFX/WB_Item_FXType.lua @@ -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 \ No newline at end of file diff --git a/FX_Preview/Script/UI/PreviewFX/WB_Item_Slide.lua b/FX_Preview/Script/UI/PreviewFX/WB_Item_Slide.lua new file mode 100644 index 00000000..d470c96c --- /dev/null +++ b/FX_Preview/Script/UI/PreviewFX/WB_Item_Slide.lua @@ -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 \ No newline at end of file diff --git a/FX_Preview/Script/UI/PreviewFX/WB_PreviewFX.lua b/FX_Preview/Script/UI/PreviewFX/WB_PreviewFX.lua new file mode 100644 index 00000000..bc038c75 --- /dev/null +++ b/FX_Preview/Script/UI/PreviewFX/WB_PreviewFX.lua @@ -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 \ No newline at end of file diff --git a/FX_Preview/UGCmap.umap b/FX_Preview/UGCmap.umap index cdcd71d5..06fcae23 100644 Binary files a/FX_Preview/UGCmap.umap and b/FX_Preview/UGCmap.umap differ diff --git a/IWantToHitfour/Asset/Blueprint/PlayerStart/BP_CustomPlayerStart.uasset b/IWantToHitfour/Asset/Blueprint/PlayerStart/BP_CustomPlayerStart.uasset index fd0bb106..70bd0012 100644 Binary files a/IWantToHitfour/Asset/Blueprint/PlayerStart/BP_CustomPlayerStart.uasset and b/IWantToHitfour/Asset/Blueprint/PlayerStart/BP_CustomPlayerStart.uasset differ diff --git a/IWantToHitfour/Asset/Blueprint/PlayerStart/BP_HDPlayerStart.uasset b/IWantToHitfour/Asset/Blueprint/PlayerStart/BP_HDPlayerStart.uasset index b3187c36..0981c5ca 100644 Binary files a/IWantToHitfour/Asset/Blueprint/PlayerStart/BP_HDPlayerStart.uasset and b/IWantToHitfour/Asset/Blueprint/PlayerStart/BP_HDPlayerStart.uasset differ diff --git a/IWantToHitfour/Asset/Level/HD_PS.umap b/IWantToHitfour/Asset/Level/HD_PS.umap index 0c1d9ab1..e8683836 100644 Binary files a/IWantToHitfour/Asset/Level/HD_PS.umap and b/IWantToHitfour/Asset/Level/HD_PS.umap differ diff --git a/IWantToHitfour/Asset/Texture/SpiritFrames/Icon_KnockedDown.uasset b/IWantToHitfour/Asset/Texture/SpiritFrames/Icon_KnockedDown.uasset index 1605574d..be68e3e7 100644 Binary files a/IWantToHitfour/Asset/Texture/SpiritFrames/Icon_KnockedDown.uasset and b/IWantToHitfour/Asset/Texture/SpiritFrames/Icon_KnockedDown.uasset differ diff --git a/IWantToHitfour/Asset/UI/PlayerHead/WB_PlayerHead_48.uasset b/IWantToHitfour/Asset/UI/PlayerHead/WB_PlayerHead_48.uasset index 781c1025..a10c3953 100644 Binary files a/IWantToHitfour/Asset/UI/PlayerHead/WB_PlayerHead_48.uasset and b/IWantToHitfour/Asset/UI/PlayerHead/WB_PlayerHead_48.uasset differ diff --git a/IWantToHitfour/Asset/UI/Settlement/WB_Settlement_2.uasset b/IWantToHitfour/Asset/UI/Settlement/WB_Settlement_2.uasset new file mode 100644 index 00000000..17e95a8b Binary files /dev/null and b/IWantToHitfour/Asset/UI/Settlement/WB_Settlement_2.uasset differ diff --git a/IWantToHitfour/Asset/UI/Settlement/WB_TeamSettlement.uasset b/IWantToHitfour/Asset/UI/Settlement/WB_TeamSettlement.uasset index 4033bf90..b8c77d15 100644 Binary files a/IWantToHitfour/Asset/UI/Settlement/WB_TeamSettlement.uasset and b/IWantToHitfour/Asset/UI/Settlement/WB_TeamSettlement.uasset differ diff --git a/IWantToHitfour/Asset/UI/Settlement/WB_TeamSettlementItem_2.uasset b/IWantToHitfour/Asset/UI/Settlement/WB_TeamSettlementItem_2.uasset new file mode 100644 index 00000000..a6fb0c01 Binary files /dev/null and b/IWantToHitfour/Asset/UI/Settlement/WB_TeamSettlementItem_2.uasset differ diff --git a/IWantToHitfour/Asset/UI/StatusUI/FightPanel/TeamScore/W_TeamScore_RoundMode_2.uasset b/IWantToHitfour/Asset/UI/StatusUI/FightPanel/TeamScore/W_TeamScore_RoundMode_2.uasset index e1003ab7..e173890b 100644 Binary files a/IWantToHitfour/Asset/UI/StatusUI/FightPanel/TeamScore/W_TeamScore_RoundMode_2.uasset and b/IWantToHitfour/Asset/UI/StatusUI/FightPanel/TeamScore/W_TeamScore_RoundMode_2.uasset differ diff --git a/IWantToHitfour/Asset/UI/StatusUI/FightPanel/TeamScore/W_TeamScore_RoundMode_3.uasset b/IWantToHitfour/Asset/UI/StatusUI/FightPanel/TeamScore/W_TeamScore_RoundMode_3.uasset new file mode 100644 index 00000000..599139d2 Binary files /dev/null and b/IWantToHitfour/Asset/UI/StatusUI/FightPanel/TeamScore/W_TeamScore_RoundMode_3.uasset differ diff --git a/IWantToHitfour/Asset/UI/StatusUI/FightPanel/WB_FightPanel.uasset b/IWantToHitfour/Asset/UI/StatusUI/FightPanel/WB_FightPanel.uasset index e6702ecf..faf568cd 100644 Binary files a/IWantToHitfour/Asset/UI/StatusUI/FightPanel/WB_FightPanel.uasset and b/IWantToHitfour/Asset/UI/StatusUI/FightPanel/WB_FightPanel.uasset differ diff --git a/IWantToHitfour/Asset/UI/StatusUI/GamePreparation/W_WaitPlayJoin.uasset b/IWantToHitfour/Asset/UI/StatusUI/GamePreparation/W_WaitPlayJoin.uasset index e214763b..f2f4a97d 100644 Binary files a/IWantToHitfour/Asset/UI/StatusUI/GamePreparation/W_WaitPlayJoin.uasset and b/IWantToHitfour/Asset/UI/StatusUI/GamePreparation/W_WaitPlayJoin.uasset differ diff --git a/IWantToHitfour/IWantToHitfour.ugcproj b/IWantToHitfour/IWantToHitfour.ugcproj index 1e79379a..265ed5d0 100644 --- a/IWantToHitfour/IWantToHitfour.ugcproj +++ b/IWantToHitfour/IWantToHitfour.ugcproj @@ -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; diff --git a/IWantToHitfour/Script/Blueprint/UGCGameState.lua b/IWantToHitfour/Script/Blueprint/UGCGameState.lua index 9dfc4067..088d87cc 100644 --- a/IWantToHitfour/Script/Blueprint/UGCGameState.lua +++ b/IWantToHitfour/Script/Blueprint/UGCGameState.lua @@ -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 + -- 工程设置------------------------------------------------------------------------------------------------------------- diff --git a/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_PlayerExit.lua b/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_PlayerExit.lua index 77785515..236540af 100644 --- a/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_PlayerExit.lua +++ b/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_PlayerExit.lua @@ -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 diff --git a/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_RoundBegin.lua b/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_RoundBegin.lua index 49c45e2e..3fa5c293 100644 --- a/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_RoundBegin.lua +++ b/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_RoundBegin.lua @@ -105,6 +105,8 @@ end -- 根据工程的修改而改变的开始执行逻辑 function EventAction_RoundBegin:ExecuteOtherLogic() + -- 选出下一个挑战者 + UGCGameSystem.GameState:SelectNextChallenge() -- 判断玩家是否死亡,死亡则重生 local AllPC = UGCGameSystem.GetAllPlayerController() diff --git a/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_RoundEnd.lua b/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_RoundEnd.lua index 47677e73..9411d7e1 100644 --- a/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_RoundEnd.lua +++ b/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_RoundEnd.lua @@ -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 diff --git a/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_WaitingPlayer.lua b/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_WaitingPlayer.lua index 8fcb6851..feaf131d 100644 --- a/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_WaitingPlayer.lua +++ b/IWantToHitfour/Script/Global/EventManager/EventAction/EventAction_WaitingPlayer.lua @@ -124,7 +124,7 @@ function EventAction_WaitingPlayer:OtherFinishLogic() UGCEventSystem.SendEvent(EventEnum.UpdatePlayerStartList) -- 选出挑战者 - UGCGameSystem.GameState:ElectChallengePlayer() + -- UGCGameSystem.GameState:ElectChallengePlayer() -- 广播提示XXX成为挑战者 -- 显示武器选择界面 diff --git a/IWantToHitfour/Script/Global/System/UGCSystemLibrary.lua b/IWantToHitfour/Script/Global/System/UGCSystemLibrary.lua index 17d0a327..49767636 100644 --- a/IWantToHitfour/Script/Global/System/UGCSystemLibrary.lua +++ b/IWantToHitfour/Script/Global/System/UGCSystemLibrary.lua @@ -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) diff --git a/IWantToHitfour/Script/Global/WidgetManager/WidgetConfig.lua b/IWantToHitfour/Script/Global/WidgetManager/WidgetConfig.lua index e6b1a527..74c74ca9 100644 --- a/IWantToHitfour/Script/Global/WidgetManager/WidgetConfig.lua +++ b/IWantToHitfour/Script/Global/WidgetManager/WidgetConfig.lua @@ -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, }, diff --git a/IWantToHitfour/Script/UI/PlayerHead/WB_PlayerHead_48.lua b/IWantToHitfour/Script/UI/PlayerHead/WB_PlayerHead_48.lua index 6f8620a9..b06fbe3c 100644 --- a/IWantToHitfour/Script/UI/PlayerHead/WB_PlayerHead_48.lua +++ b/IWantToHitfour/Script/UI/PlayerHead/WB_PlayerHead_48.lua @@ -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 diff --git a/IWantToHitfour/Script/UI/Settlement/WB_Settlement_2.lua b/IWantToHitfour/Script/UI/Settlement/WB_Settlement_2.lua new file mode 100644 index 00000000..75f00ac4 --- /dev/null +++ b/IWantToHitfour/Script/UI/Settlement/WB_Settlement_2.lua @@ -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; diff --git a/IWantToHitfour/Script/UI/Settlement/WB_TeamSettlementItem_2.lua b/IWantToHitfour/Script/UI/Settlement/WB_TeamSettlementItem_2.lua new file mode 100644 index 00000000..cdf80feb --- /dev/null +++ b/IWantToHitfour/Script/UI/Settlement/WB_TeamSettlementItem_2.lua @@ -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; \ No newline at end of file diff --git a/IWantToHitfour/Script/UI/StatusUI/FightPanel/TeamScore/W_TeamScore_RoundMode_3.lua b/IWantToHitfour/Script/UI/StatusUI/FightPanel/TeamScore/W_TeamScore_RoundMode_3.lua new file mode 100644 index 00000000..f1523816 --- /dev/null +++ b/IWantToHitfour/Script/UI/StatusUI/FightPanel/TeamScore/W_TeamScore_RoundMode_3.lua @@ -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; \ No newline at end of file diff --git a/IWantToHitfour/Script/UI/StatusUI/FightPanel/WB_FightPanel.lua b/IWantToHitfour/Script/UI/StatusUI/FightPanel/WB_FightPanel.lua index fb9a0362..39ebfd03 100644 --- a/IWantToHitfour/Script/UI/StatusUI/FightPanel/WB_FightPanel.lua +++ b/IWantToHitfour/Script/UI/StatusUI/FightPanel/WB_FightPanel.lua @@ -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 diff --git a/SoloKing/Asset/Levels/Map_DC.umap b/SoloKing/Asset/Levels/Map_DC.umap index 0c07742e..6e8ca2f1 100644 Binary files a/SoloKing/Asset/Levels/Map_DC.umap and b/SoloKing/Asset/Levels/Map_DC.umap differ diff --git a/SoloKing/Asset/Levels/Map_NewYear.umap b/SoloKing/Asset/Levels/Map_NewYear.umap index 6aba8149..c1f630a6 100644 Binary files a/SoloKing/Asset/Levels/Map_NewYear.umap and b/SoloKing/Asset/Levels/Map_NewYear.umap differ diff --git a/SoloKing/Script/Global/Tool/UGCSystemLibrary.lua b/SoloKing/Script/Global/Tool/UGCSystemLibrary.lua index d07dfe52..19e7686c 100644 --- a/SoloKing/Script/Global/Tool/UGCSystemLibrary.lua +++ b/SoloKing/Script/Global/Tool/UGCSystemLibrary.lua @@ -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) diff --git a/SoloKing/UGCmap.umap b/SoloKing/UGCmap.umap index 2a37f8a9..ee1636ab 100644 Binary files a/SoloKing/UGCmap.umap and b/SoloKing/UGCmap.umap differ diff --git a/TwoOnTwo/Script/Global/System/UGCSystemLibrary.lua b/TwoOnTwo/Script/Global/System/UGCSystemLibrary.lua index e728f0df..c32b4de2 100644 --- a/TwoOnTwo/Script/Global/System/UGCSystemLibrary.lua +++ b/TwoOnTwo/Script/Global/System/UGCSystemLibrary.lua @@ -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