diff --git a/FX_Preview/Asset/Blueprint/UGCPlayerController.uasset b/FX_Preview/Asset/Blueprint/UGCPlayerController.uasset index da1667a6..ff732f66 100644 Binary files a/FX_Preview/Asset/Blueprint/UGCPlayerController.uasset and b/FX_Preview/Asset/Blueprint/UGCPlayerController.uasset differ diff --git a/FX_Preview/Asset/FX/A_Table/FFXData.uasset b/FX_Preview/Asset/FX/A_Table/FFXData.uasset index 35451827..b21c2fbd 100644 Binary files a/FX_Preview/Asset/FX/A_Table/FFXData.uasset 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 index b02d0d05..13023691 100644 Binary files a/FX_Preview/Asset/FX/A_Table/Table_FXData.uasset and b/FX_Preview/Asset/FX/A_Table/Table_FXData.uasset differ diff --git a/FX_Preview/Asset/FX/BulletFX/Bullet1/P_Bullet_1_P.uasset b/FX_Preview/Asset/FX/BulletFX/Bullet1/P_Bullet_1_P.uasset new file mode 100644 index 00000000..1929dd0a Binary files /dev/null and b/FX_Preview/Asset/FX/BulletFX/Bullet1/P_Bullet_1_P.uasset differ diff --git a/FX_Preview/Asset/FX/BulletFX/TailType3/P_TailType3_2.uasset b/FX_Preview/Asset/FX/BulletFX/TailType3/P_TailType3_P.uasset similarity index 89% rename from FX_Preview/Asset/FX/BulletFX/TailType3/P_TailType3_2.uasset rename to FX_Preview/Asset/FX/BulletFX/TailType3/P_TailType3_P.uasset index ebbed3ec..ed91131b 100644 Binary files a/FX_Preview/Asset/FX/BulletFX/TailType3/P_TailType3_2.uasset and b/FX_Preview/Asset/FX/BulletFX/TailType3/P_TailType3_P.uasset differ diff --git a/FX_Preview/Asset/FX/KillFX/ElectricBall/P_Kill_Boom_P.uasset b/FX_Preview/Asset/FX/KillFX/ElectricBall/P_Kill_Boom_P.uasset new file mode 100644 index 00000000..8f9d994a Binary files /dev/null and b/FX_Preview/Asset/FX/KillFX/ElectricBall/P_Kill_Boom_P.uasset differ diff --git a/FX_Preview/Asset/FX/KillFX/Lightning/P_Kill_Lightning.uasset b/FX_Preview/Asset/FX/KillFX/Lightning/P_Kill_Lightning.uasset index 6c1db709..5e10ed3c 100644 Binary files a/FX_Preview/Asset/FX/KillFX/Lightning/P_Kill_Lightning.uasset and b/FX_Preview/Asset/FX/KillFX/Lightning/P_Kill_Lightning.uasset differ diff --git a/FX_Preview/Asset/FX/KillFX/Vulnerability/P_Kill_Vulnerability.uasset b/FX_Preview/Asset/FX/KillFX/Vulnerability/P_Kill_Vulnerability.uasset index 00d65ea2..f3607e2b 100644 Binary files a/FX_Preview/Asset/FX/KillFX/Vulnerability/P_Kill_Vulnerability.uasset and b/FX_Preview/Asset/FX/KillFX/Vulnerability/P_Kill_Vulnerability.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 5a02313d..bc7cb414 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/Type2/P_TailedMuzzle_2_P.uasset b/FX_Preview/Asset/FX/TailedMuzzle/Type2/P_TailedMuzzle_2_P.uasset new file mode 100644 index 00000000..c0c64d1e Binary files /dev/null and b/FX_Preview/Asset/FX/TailedMuzzle/Type2/P_TailedMuzzle_2_P.uasset differ diff --git a/FX_Preview/Asset/FX/TailedMuzzle/Type2/P_TailedMuzzle_Base2_2.uasset b/FX_Preview/Asset/FX/TailedMuzzle/Type2/P_TailedMuzzle_Base2_2.uasset deleted file mode 100644 index 07d79db3..00000000 Binary files a/FX_Preview/Asset/FX/TailedMuzzle/Type2/P_TailedMuzzle_Base2_2.uasset and /dev/null 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 index e2485a67..0f787ff1 100644 Binary files a/FX_Preview/Asset/FX/TailedMuzzle/Type3/P_TailedMuzzle_Star_P.uasset and b/FX_Preview/Asset/FX/TailedMuzzle/Type3/P_TailedMuzzle_Star_P.uasset differ diff --git a/FX_Preview/Asset/FX/TailedMuzzle/Type4/P_TailedMuzzle_Smoke.uasset b/FX_Preview/Asset/FX/TailedMuzzle/Type4/P_TailedMuzzle_Smoke.uasset index 63c33500..6f6cb07d 100644 Binary files a/FX_Preview/Asset/FX/TailedMuzzle/Type4/P_TailedMuzzle_Smoke.uasset and b/FX_Preview/Asset/FX/TailedMuzzle/Type4/P_TailedMuzzle_Smoke.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 6bfba248..d5e518a4 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_P.uasset b/FX_Preview/Asset/FX/TailedMuzzle/Type7/P_TailedMuzzle_7_P.uasset new file mode 100644 index 00000000..d6f1d66c Binary files /dev/null and b/FX_Preview/Asset/FX/TailedMuzzle/Type7/P_TailedMuzzle_7_P.uasset differ diff --git a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_JGT_B_01.uasset b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_JGT_B_01.uasset new file mode 100644 index 00000000..44b1bb07 Binary files /dev/null and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_JGT_B_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 index 191ec496..0c93c5af 100644 Binary files a/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SDT_B_01.uasset and b/FX_Preview/Asset/FX/Z_ReferenceAssets/P_Turret_SDT_B_01.uasset differ diff --git a/FX_Preview/Asset/UI/PreviewFX/WB_FX_Main.uasset b/FX_Preview/Asset/UI/PreviewFX/WB_FX_Main.uasset index c665f23b..ea139b11 100644 Binary files a/FX_Preview/Asset/UI/PreviewFX/WB_FX_Main.uasset and b/FX_Preview/Asset/UI/PreviewFX/WB_FX_Main.uasset differ diff --git a/FX_Preview/Asset/UI/PreviewFX/WB_Item_Slide.uasset b/FX_Preview/Asset/UI/PreviewFX/WB_Item_Slide.uasset index 48d5d952..4b6d8096 100644 Binary files a/FX_Preview/Asset/UI/PreviewFX/WB_Item_Slide.uasset 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 index 265f00fa..f734a44d 100644 Binary files a/FX_Preview/Asset/UI/PreviewFX/WB_PreviewFX.uasset 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 d36f110f..d8da04f9 100644 --- a/FX_Preview/Script/Blueprint/SceneActor/BP_PreViewFXActor.lua +++ b/FX_Preview/Script/Blueprint/SceneActor/BP_PreViewFXActor.lua @@ -56,17 +56,6 @@ function BP_PreViewFXActor:InitFXTable() 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 @@ -80,6 +69,27 @@ function BP_PreViewFXActor:GetParticleDefaultColor(FXType) return nil end +function BP_PreViewFXActor:GetColorValue(FXType) + local FXIndex = self:GetNowFXIndex(FXType) + local FXID = self.FXIDList[FXType][FXIndex] + if FXID then + return self.FXTable[FXID].ColorValue + end + return {} +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, self.OverrideColor[FXType]) +end + + + function BP_PreViewFXActor:GetNowFXIndex(FXType) return self.NowFXIndex[FXType] end @@ -102,6 +112,22 @@ function BP_PreViewFXActor:SetNextFX(FXType) end end +function BP_PreViewFXActor:SetParticleCompColor(ParticleComp, FXType) + if UE.IsValid(ParticleComp) then + local ColorValue = self:GetColorValue(FXType) + local Color = self:GetParticleColor(FXType) + if Color == nil then + Color = self:GetParticleDefaultColor(FXType) + end + for i, v in pairs(ColorValue) do + local TempColor = table.DeepCopy(UE.ToTable(Color)) + local ColorVector = KismetMathLibrary.Conv_LinearColorToVector(TempColor) + ColorVector = VectorHelper.MulNumber(ColorVector, v) + ParticleComp:SetVectorParameter("Color" .. i, ColorVector) + end + end +end + --[[ function BP_PreViewFXActor:ReceiveTick(DeltaTime) BP_PreViewFXActor.SuperClass.ReceiveTick(self, DeltaTime) diff --git a/FX_Preview/Script/Blueprint/UGCGameState.lua b/FX_Preview/Script/Blueprint/UGCGameState.lua index 3105cc2b..4e7b592b 100644 --- a/FX_Preview/Script/Blueprint/UGCGameState.lua +++ b/FX_Preview/Script/Blueprint/UGCGameState.lua @@ -35,7 +35,10 @@ function UGCGameState:SpawnParticleAtPos(Pos) 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) + local KillParticleComp = GameplayStatics.SpawnEmitterAtLocation(self, KillParticle, Pos, {Roll = 0, Pitch = 0, Yaw = 0}, FXScale, true) + + -- 设置颜色 + TempPreViewActor:SetParticleCompColor(KillParticleComp, EFXType.Kill) end end end diff --git a/FX_Preview/Script/Blueprint/UGCPlayerController.lua b/FX_Preview/Script/Blueprint/UGCPlayerController.lua new file mode 100644 index 00000000..74ef77a9 --- /dev/null +++ b/FX_Preview/Script/Blueprint/UGCPlayerController.lua @@ -0,0 +1,40 @@ +---@class UGCPlayerController_C:BP_UGCPlayerController_C +--Edit Below-- +local UGCPlayerController = {} + + +function UGCPlayerController:ReceiveBeginPlay() + UGCPlayerController.SuperClass.ReceiveBeginPlay(self) + if UGCGameSystem.IsServer() then + else + local PreviewFxWidget = UserWidget.NewWidgetObjectBP(self, UE.LoadClass(UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/PreviewFX/WB_FX_Main.WB_FX_Main_C'))); + PreviewFxWidget:AddToViewport(20000) + end +end + + +--[[ +function UGCPlayerController:ReceiveTick(DeltaTime) + UGCPlayerController.SuperClass.ReceiveTick(self, DeltaTime) +end +--]] + +--[[ +function UGCPlayerController:ReceiveEndPlay() + UGCPlayerController.SuperClass.ReceiveEndPlay(self) +end +--]] + +--[[ +function UGCPlayerController:GetReplicatedProperties() + return +end +--]] + +--[[ +function UGCPlayerController:GetAvailableServerRPCs() + return +end +--]] + +return UGCPlayerController \ No newline at end of file diff --git a/FX_Preview/Script/Blueprint/UGCPlayerPawn.lua b/FX_Preview/Script/Blueprint/UGCPlayerPawn.lua index 2a8cd0c9..8f0733ba 100644 --- a/FX_Preview/Script/Blueprint/UGCPlayerPawn.lua +++ b/FX_Preview/Script/Blueprint/UGCPlayerPawn.lua @@ -31,10 +31,15 @@ function UGCPlayerPawn:ReceiveBeginPlay() if not UGCGameSystem.IsServer() and self.CheckFXHandle == nil then -- 这里防止未设置成功做的校验 self.CheckFXHandle = UGCEventSystem.SetTimerLoop(self, self.UpdateFX, 2) + -- 绑定粒子颜色改变的函数 + UGCEventSystem.AddListener(EventEnum.OverrideFXColor, self.OverrideFXColor, self) + -- 绑定粒子改变 + UGCEventSystem.AddListener(EventEnum.ChangeFX, self.ChangeFX, self) + end local TempRescueOtherComp = self:GetCharacterRescueOtherComponent() - local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() + if UE.IsValid(TempRescueOtherComp) and UE.IsValid(TempPreViewActor) then -- 配置倒地粒子 没有用这个方法 @@ -89,8 +94,33 @@ function UGCPlayerPawn:OnPostGetWeapon(Weapon) self:WeaponAttachEffect(Weapon) end +-- 覆盖拖尾特效的颜色 +function UGCPlayerPawn:OverrideFXColor(FXType) + --UGCLogSystem.Log("[UGCPlayerPawn_OverrideFXColor] FXType:%s", tostring(FXType)) + if FXType ~= EFXType.MuzzleTailed then return end + if not UE.IsValid(self.MuzzleTailedParticleComp) then return end + local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() + if UE.IsValid(TempPreViewActor) then + TempPreViewActor:SetParticleCompColor(self.MuzzleTailedParticleComp, EFXType.MuzzleTailed) + end +end + +-- 替换FX +function UGCPlayerPawn:ChangeFX(FXType) + UGCLogSystem.Log("[UGCPlayerPawn_ChangeFX] FXType:%s", tostring(FXType)) + if FXType ~= EFXType.MuzzleTailed then return end + if not UE.IsValid(self.MuzzleTailedParticleComp) then return end + local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() + if UE.IsValid(TempPreViewActor) then + local Particle = TempPreViewActor:GetNowFXFromFXType(FXType) + self.MuzzleTailedParticleComp:SetTemplate(Particle) + self:OverrideFXColor(EFXType.MuzzleTailed) + UGCLogSystem.Log("[UGCPlayerPawn_ChangeFX] Succeed") + end +end + UGCPlayerPawn.BoundOnceEffectWeapons = {} function UGCPlayerPawn:UpdateFX() UGCLogSystem.Log("[UGCPlayerPawn_UpdateFX] PawnName:%s", KismetSystemLibrary.GetObjectName(self)) @@ -104,6 +134,7 @@ function UGCPlayerPawn:UpdateFX() end function UGCPlayerPawn:WeaponAttachEffect(Weapon) + if UGCGameSystem.IsServer() then return end local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() if UE.IsValid(TempPreViewActor) then if UE.IsValid(Weapon) then @@ -142,7 +173,8 @@ function UGCPlayerPawn:WeaponAttachEffect(Weapon) UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] 22222222222222222222222222222") UGCLogSystem.Log("[UGCPlayerPawn_WeaponAttachEffect] Bind TailedMuzzle") self.BoundOnceEffectWeapons[#self.BoundOnceEffectWeapons + 1] = Weapon - 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) + self.MuzzleTailedParticleComp = 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) + self:OverrideFXColor(EFXType.MuzzleTailed) end end -- 子弹拖尾特效 diff --git a/FX_Preview/Script/FX/BulletFX/BP_BulletTailFX.lua b/FX_Preview/Script/FX/BulletFX/BP_BulletTailFX.lua index 54c2eb8a..8d0db41d 100644 --- a/FX_Preview/Script/FX/BulletFX/BP_BulletTailFX.lua +++ b/FX_Preview/Script/FX/BulletFX/BP_BulletTailFX.lua @@ -56,6 +56,11 @@ function BP_BulletTailFX:ActiveFly(Rot, Pos, Velocity, ParticleSystemTemplate) end self.BulletFXComp:SetActive(true, true) + local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() + if UE.IsValid(TempPreViewActor) then + TempPreViewActor:SetParticleCompColor(self.BulletFXComp, EFXType.Bullet) + end + self.ProjectileMovement.Velocity = Velocity self.BulletFXComp:SetHiddenInGame(false, true); diff --git a/FX_Preview/Script/Global/System/A_IncludeSystem.lua b/FX_Preview/Script/Global/System/A_IncludeSystem.lua index 307a38b8..121e3956 100644 --- a/FX_Preview/Script/Global/System/A_IncludeSystem.lua +++ b/FX_Preview/Script/Global/System/A_IncludeSystem.lua @@ -14,3 +14,4 @@ require(Prefix .. 'UGCSendRPCSystem') require(Prefix .. 'PlayerScoreSystem') require(Prefix .. 'MyVehicleSystem') require(Prefix .. 'MyWeaponSystem') +require(Prefix .. 'WidgetLibrary') \ No newline at end of file diff --git a/FX_Preview/Script/Global/System/WidgetLibrary.lua b/FX_Preview/Script/Global/System/WidgetLibrary.lua new file mode 100644 index 00000000..f46f43bd --- /dev/null +++ b/FX_Preview/Script/Global/System/WidgetLibrary.lua @@ -0,0 +1,52 @@ +WidgetLibrary = WidgetLibrary or {} + + +--- 设置 +---@param widget UUserWidget +---@param offset float +function WidgetLibrary.SetWidgetToRightBorder(widget, offset) + if not widget then return end + local slot = WidgetLayoutLibrary.SlotAsCanvasSlot(widget) + slot:SetAnchors({ Minimum = { X = 1, Y = 0 }, Maximum = { X = 1, Y = 0 } }) + slot:SetAlignment({ X = 1, Y = 0 }) + local offsets = slot:GetOffsets() + slot:SetOffsets({ Left = offset, Right = offsets.Right, Bottom = offsets.Bottom, Top = offsets.Top }) +end + +--- 为防止被清除做出的全局处理 +function WidgetLibrary.BindButtonClicked(TargetButton, Func, Obj) + TargetButton.OnClicked:Add(Func, Obj) +end + +--- 为防止被清除做出的全局处理 +function WidgetLibrary.BindButtonPressed(TargetButton, Func, Obj) + TargetButton.OnPressed:Add(Func, Obj) +end + +--- 为防止被清除做出的全局处理 +function WidgetLibrary.BindButtonReleased(TargetButton, Func, Obj) + TargetButton.OnReleased:Add(Func, Obj) +end + +--- 绑定UI文本 +function WidgetLibrary.TextBlockBindingPropertyText(TargetTextBlock, Func, Obj) + TargetTextBlock:BindingProperty("Text", Func, Obj) +end + +--- 直接绑定按键点击打开WidgetManager的页面 +function WidgetLibrary.ButtonOnClickShowPanel(TargetButton, UIType, IsClose) + TargetButton.OnClicked:Add( + function() + if IsClose then + WidgetManager:ClosePanel(UIType) + else + WidgetManager:ShowPanel(UIType, false) + end + end + ) +end + +function WidgetLibrary.SliderOnValueChanged(Slider, Func, Obj) + Slider.OnValueChanged:Add(Func, Obj) +end + diff --git a/FX_Preview/Script/UI/PreviewFX/WB_FX_Main.lua b/FX_Preview/Script/UI/PreviewFX/WB_FX_Main.lua index c7f0ca0e..b81f89e1 100644 --- a/FX_Preview/Script/UI/PreviewFX/WB_FX_Main.lua +++ b/FX_Preview/Script/UI/PreviewFX/WB_FX_Main.lua @@ -1,13 +1,19 @@ ---@class WB_FX_Main_C:UUserWidget ---@field NewButton_ShowPanel UNewButton +---@field REINST_WB_PreviewFX_C_0 UWB_PreviewFX_C +---@field WB_PreviewFX UWB_PreviewFX_C --Edit Below-- local WB_FX_Main = { bInitDoOnce = false } ---[==[ Construct + function WB_FX_Main:Construct() - + self.WB_PreviewFX:LuaInit() + WidgetLibrary.BindButtonClicked(self.NewButton_ShowPanel, self.ShowPreviewFXPanel, self) +end + +function WB_FX_Main:ShowPreviewFXPanel() + self.WB_PreviewFX:SetVisibility(ESlateVisibility.SelfHitTestInvisible) end --- Construct ]==] -- function WB_FX_Main:Tick(MyGeometry, InDeltaTime) diff --git a/FX_Preview/Script/UI/PreviewFX/WB_Item_FXType.lua b/FX_Preview/Script/UI/PreviewFX/WB_Item_FXType.lua index 920458e2..72021fff 100644 --- a/FX_Preview/Script/UI/PreviewFX/WB_Item_FXType.lua +++ b/FX_Preview/Script/UI/PreviewFX/WB_Item_FXType.lua @@ -6,20 +6,97 @@ ---@field WidgetSwitcher_BindColor UWidgetSwitcher ---@field Setting_PickUp_BP USetting_Pickup_UIBP_C --Edit Below-- -local WB_Item_Slide = { bInitDoOnce = false } +local WB_Item_FXType = { + bInitDoOnce = false; + IsBind = false +} --[==[ Construct -function WB_Item_Slide:Construct() +function WB_Item_FXType:Construct() end -- Construct ]==] --- function WB_Item_Slide:Tick(MyGeometry, InDeltaTime) +-- function WB_Item_FXType:Tick(MyGeometry, InDeltaTime) -- end --- function WB_Item_Slide:Destruct() +-- function WB_Item_FXType:Destruct() -- end -return WB_Item_Slide \ No newline at end of file +function WB_Item_FXType:LuaInit() + if self.bInitDoOnce then return end self.bInitDoOnce = true + + WidgetLibrary.BindButtonClicked(self.NewButton_ResetColor, self.ResetColor, self) + WidgetLibrary.BindButtonClicked(self.NewButton_Change, self.NextFx, self) + WidgetLibrary.BindButtonClicked(self.NewButton_BindColor, self.ChangeBindColor, self) + +end + +FXTypeName = { + [EFXType.Muzzle] = "枪口火焰", + [EFXType.MuzzleTailed] = "枪口拖尾", + [EFXType.Kill] = "击杀效果", + [EFXType.Bullet] = "弹道", + [EFXType.Hit] = "命中效果", +} +function WB_Item_FXType:SetType(InType) + self:LuaInit() + self.FXType = InType + if FXTypeName[self.FXType] then + self.TextBlock_TypeName:SetText(FXTypeName[self.FXType]) + end +end + +function WB_Item_FXType:GetFXType() + return self.FXType +end + +function WB_Item_FXType:ResetColor() + local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() + if UE.IsValid(TempPreViewActor) then + TempPreViewActor:SetOverrideColor(self.FXType, nil) + self:SetBindColor(false) + end +end + +function WB_Item_FXType:NextFx() + local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() + if UE.IsValid(TempPreViewActor) then + TempPreViewActor:SetNextFX(self.FXType) + end +end + +function WB_Item_FXType:ChangeBindColor() + self:SetBindColor(not self.IsBind) +end + +function WB_Item_FXType:SetBindColor(InIsBind) + if self.IsBind ~= InIsBind then + self.IsBind = InIsBind + self.WidgetSwitcher_BindColor:SetActiveWidgetIndex(self.IsBind and 1 or 0) + self:BindChangeCallBackNotify() + end +end + +function WB_Item_FXType:GetIsBindColor() + return self.IsBind +end + +function WB_Item_FXType:BindChangeCallBackNotify() + if self.CallBackFunc then + if self.CallBackObj then + self.CallBackFunc(self.CallBackObj, self.FXType, self.IsBind) + else + self.CallBackFunc(self.FXType, self.IsBind) + end + end +end + +function WB_Item_FXType:BindLockCallBack(InFunc, InObj) + self.CallBackFunc = InFunc + self.CallBackObj = InObj +end + +return WB_Item_FXType \ 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 index d470c96c..13724dfe 100644 --- a/FX_Preview/Script/UI/PreviewFX/WB_Item_Slide.lua +++ b/FX_Preview/Script/UI/PreviewFX/WB_Item_Slide.lua @@ -5,16 +5,87 @@ ---@field ProgressBar_SlideMode UProgressBar ---@field SlideMode_Value UTextBlock ---@field Slider_SlideMode USlider ----@field TextBlock_Range UTextBlock +---@field TextBlock_Name UTextBlock ---@field Setting_PickUp_BP USetting_Pickup_UIBP_C --Edit Below-- -local WB_Item_Slide = { bInitDoOnce = false } +local WB_Item_Slide = { + bInitDoOnce = false; + Interval = 256.; + MinVal = 0; + MaxVal = 255 +} ---[==[ Construct function WB_Item_Slide:Construct() - + self:LuaInit() +end + + +function WB_Item_Slide:LuaInit() + if self.bInitDoOnce then return ; end self.bInitDoOnce = true + WidgetLibrary.SliderOnValueChanged(self.Slider_SlideMode, self.UpdateVal, self) + WidgetLibrary.BindButtonClicked(self.Button_SlideMode_add, self.AddVal, self) + WidgetLibrary.BindButtonClicked(self.Button_SlideMode_minus, self.SubVal, self) + self.Slider_SlideMode:SetStepSize(1./self.Interval) + self:UpdateVal() +end + +function WB_Item_Slide:SetID(InID) + self.ID = InID + local NameList = {"R", "G", "B"} + local RGBColor = { + {R = 1, G = 0, B = 0, A = 1 }, + {R = 0, G = 1, B = 0, A = 1 }, + {R = 0, G = 0, B = 1, A = 1 }, + } + if NameList[InID] then + self.TextBlock_Name:SetText(NameList[InID]) + self.ProgressBar_SlideMode:SetFillColorAndOpacity(RGBColor[InID]) + end +end + + +function WB_Item_Slide:GetVal() + return math.floor(math.clamp(KismetMathLibrary.Round(self.Slider_SlideMode:GetValue() * self.Interval + self.MinVal), self.MinVal, self.MaxVal) + 0.5) +end + +function WB_Item_Slide:GetSlideVal() + return self.Slider_SlideMode:GetValue() +end + +function WB_Item_Slide:AddVal() + local TargetVal = math.clamp(self.Slider_SlideMode:GetValue() + 1./self.Interval, 0, 1) + self.Slider_SlideMode:SetValue(TargetVal) + self:UpdateVal() +end + +function WB_Item_Slide:SubVal() + local TargetVal = math.clamp(self.Slider_SlideMode:GetValue() - 1./self.Interval, 0, 1) + self.Slider_SlideMode:SetValue(TargetVal) + self:UpdateVal() +end + +function WB_Item_Slide:UpdateVal() + local Val = self:GetVal() + local SlideVal = self:GetSlideVal() + self.SlideMode_Value:SetText(Val) + self.ProgressBar_SlideMode:SetPercent(SlideVal) + self:CallBackNotify() +end + +function WB_Item_Slide:CallBackNotify() + if self.CallBackFunc then + if self.CallBackObj then + self.CallBackFunc(self.CallBackObj, self.ID, self:GetSlideVal()) + else + self.CallBackFunc(self.ID, self:GetSlideVal()) + end + end +end + +function WB_Item_Slide:BindValueCallBack(InFunc, InObj) + self.CallBackFunc = InFunc + self.CallBackObj = InObj end --- Construct ]==] -- function WB_Item_Slide:Tick(MyGeometry, InDeltaTime) diff --git a/FX_Preview/Script/UI/PreviewFX/WB_PreviewFX.lua b/FX_Preview/Script/UI/PreviewFX/WB_PreviewFX.lua index bc038c75..218cb816 100644 --- a/FX_Preview/Script/UI/PreviewFX/WB_PreviewFX.lua +++ b/FX_Preview/Script/UI/PreviewFX/WB_PreviewFX.lua @@ -1,24 +1,88 @@ ---@class WB_PreviewFX_C:UUserWidget ---@field Image_Color UImage ---@field NewButton_Close UNewButton +---@field VerticalBox_FXItemPanel UVerticalBox ---@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 } +local WB_PreviewFX = { + bInitDoOnce = false; + NowColor = {R = 1., G = 1., B = 1., A = 1.} +} + ---[==[ Construct function WB_PreviewFX:Construct() - + self:LuaInit() end --- Construct ]==] --- function WB_PreviewFX:Tick(MyGeometry, InDeltaTime) +function WB_PreviewFX:LuaInit() + if self.bInitDoOnce then return ; end --- end + WidgetLibrary.BindButtonClicked(self.NewButton_Close, self.CloseSelf, self) + + local RGBSlide = { + self.WB_Item_Slide_R, + self.WB_Item_Slide_G, + self.WB_Item_Slide_B, + } + for i, v in pairs(RGBSlide) do + v:LuaInit() + v:SetID(i) + v:BindValueCallBack(self.UpdateColor, self) + end + + + + for i = 1, self.VerticalBox_FXItemPanel:GetChildrenCount() do + local Item = self.VerticalBox_FXItemPanel:GetChildAt(i - 1) + if i <= table.getCount(EFXType) then + Item:SetType(i) + Item:BindLockCallBack(self.LockChange, self) + end + end + +end + +function WB_PreviewFX:CloseSelf() + self:SetVisibility(ESlateVisibility.Collapsed) +end + +function WB_PreviewFX:UpdateColor(ColorID, Val) + UGCLogSystem.Log("[WB_PreviewFX_UpdateColor] ColorID:%s, Val:%s", tostring(ColorID), tostring(Val)) + if ColorID == 1 then + self.NowColor.R = Val + elseif ColorID == 2 then + self.NowColor.G = Val + elseif ColorID == 3 then + self.NowColor.B = Val + end + + self.Image_Color:SetColorAndOpacity(self.NowColor) + + local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() + if UE.IsValid(TempPreViewActor) then + for i = 1, self.VerticalBox_FXItemPanel:GetChildrenCount() do + local Item = self.VerticalBox_FXItemPanel:GetChildAt(i - 1) + if i <= table.getCount(EFXType) then + if Item:GetIsBindColor() then + UGCLogSystem.Log("[WB_PreviewFX_UpdateColor] i:%s", tostring(i)) + TempPreViewActor:SetOverrideColor(i, self.NowColor) + end + end + end + end +end + +function WB_PreviewFX:LockChange(FXType, IsBind) + if IsBind then + local TempPreViewActor = UGCGameSystem.GameState:GetPreViewFXActor() + if UE.IsValid(TempPreViewActor) then + TempPreViewActor:SetOverrideColor(FXType, self.NowColor) + end + end +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 06fcae23..4dc37e2c 100644 Binary files a/FX_Preview/UGCmap.umap and b/FX_Preview/UGCmap.umap differ