diff --git a/SoloKing/Asset/UI/SelectWeapons/WB_ReselectWeaponBtn.uasset b/SoloKing/Asset/UI/SelectWeapons/WB_ReselectWeaponBtn.uasset index a288e531..f81914ed 100644 Binary files a/SoloKing/Asset/UI/SelectWeapons/WB_ReselectWeaponBtn.uasset and b/SoloKing/Asset/UI/SelectWeapons/WB_ReselectWeaponBtn.uasset differ diff --git a/SoloKing/Asset/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfigPartItem.uasset b/SoloKing/Asset/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfigPartItem.uasset new file mode 100644 index 00000000..80cd6476 Binary files /dev/null and b/SoloKing/Asset/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfigPartItem.uasset differ diff --git a/SoloKing/Asset/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfiguration.uasset b/SoloKing/Asset/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfiguration.uasset new file mode 100644 index 00000000..bd4f051c Binary files /dev/null and b/SoloKing/Asset/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfiguration.uasset differ diff --git a/SoloKing/Script/Blueprint/UGCPlayerController.lua b/SoloKing/Script/Blueprint/UGCPlayerController.lua index b39af52c..d9ff5660 100644 --- a/SoloKing/Script/Blueprint/UGCPlayerController.lua +++ b/SoloKing/Script/Blueprint/UGCPlayerController.lua @@ -104,12 +104,13 @@ function UGCPlayerController:OnRespawnPawn() end end else - if GlobalMiniMode.ModeType ~= GameModeConfig.EGameModeType.DefaultMode then + -- 在这里修改 这里改了,改成全部都显示这个按键 + --if GlobalMiniMode.ModeType ~= GameModeConfig.EGameModeType.DefaultMode then UGCLogSystem.Log("[UGCPlayerController:OnRespawnPawn] 显示按钮") WidgetManager:GetPanel(WidgetConfig.EUIType.Main, function(Widget) table.func(Widget, "ShowCustomSelectWeaponBtn", true); end) - end + --end end end diff --git a/SoloKing/Script/Global/WidgetManager/WidgetConfig.lua b/SoloKing/Script/Global/WidgetManager/WidgetConfig.lua index 330e9528..0e47782a 100644 --- a/SoloKing/Script/Global/WidgetManager/WidgetConfig.lua +++ b/SoloKing/Script/Global/WidgetManager/WidgetConfig.lua @@ -21,6 +21,7 @@ WidgetConfig.EUIType = { TipSlidingTackle = 1002, SelectWeaponNew = 1003, SecondaryConfirmation = 1004, + WeaponConfiguration = 1005, } if not UE_SERVER then @@ -243,6 +244,15 @@ if not UE_SERVER then bShowOnce = false, Layer = WidgetConfig.EUILayerGroup.High, }, + + [WidgetConfig.EUIType.WeaponConfiguration] = { + Path = UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfiguration.WB_WeaponConfiguration_C'), + -- 是否仅显示一次 + bShowOnce = false, + Layer = WidgetConfig.EUILayerGroup.High, + }, + + } end diff --git a/SoloKing/Script/UI/SelectWeapons/WB_ReselectWeaponBtn.lua b/SoloKing/Script/UI/SelectWeapons/WB_ReselectWeaponBtn.lua index 4dea4717..f12cc3b4 100644 --- a/SoloKing/Script/UI/SelectWeapons/WB_ReselectWeaponBtn.lua +++ b/SoloKing/Script/UI/SelectWeapons/WB_ReselectWeaponBtn.lua @@ -1,6 +1,8 @@ ---@class WB_ReselectWeaponBtn_C:UUserWidget ---@field Button_ReselectWeapon UButton ---@field Image_CD UImage +---@field Image_CD_ClassicMode UImage +---@field WidgetSwitcher_ClassicMode UWidgetSwitcher --Edit Below-- ---@type WB_ReselectWeaponBtn_C local WB_ReselectWeaponBtn = { @@ -15,6 +17,10 @@ function WB_ReselectWeaponBtn:LuaInit() self.bInitDoOnce = true; UITool.BindButtonClicked(self.Button_ReselectWeapon, self.ClickBtn, self) + + -- 在这里修改 检查一下这里判断模式的方式是否正确 + UGCEventSystem.AddListener(EventTypes.UpdateModeType, self.SetIsGangUpMode, self); + self:SetIsGangUpMode(GlobalModeType) end function WB_ReselectWeaponBtn:OnTick() @@ -55,12 +61,26 @@ function WB_ReselectWeaponBtn:UpdateCooling() local Material = self.Image_CD:GetDynamicMaterial(); local Percent = 1 - (NowTime - self.StartShowTime) / self.ShowTime Material:SetScalarParameterValue("Mask_Percent", Percent); + + local Material_ClassicMode = self.Image_CD_ClassicMode:GetDynamicMaterial(); + local Percent_ClassicMode = 1 - (NowTime - self.StartShowTime) / self.ShowTime + Material_ClassicMode:SetScalarParameterValue("Mask_Percent", Percent_ClassicMode); -- UGCLogSystem.Log("[WB_ReselectWeaponBtn_UpdateCooling] " 1 - (NowTime - self.StartShowTime) / self.ShowTime) end function WB_ReselectWeaponBtn:ClickBtn() self:CloseBtn() - WidgetManager:ShowPanel(WidgetConfig.EUIType.SelectWeaponNew) + if GlobalModeType == GameModeConfig.EGameModeType.DefaultMode then + WidgetManager:ShowPanel(WidgetConfig.EUIType.WeaponConfiguration) + else + WidgetManager:ShowPanel(WidgetConfig.EUIType.SelectWeaponNew) + end +end + +function WB_ReselectWeaponBtn:SetIsGangUpMode(ModeType) + if GlobalModeType then + self.WidgetSwitcher_ClassicMode:SetActiveWidgetIndex(ModeType == GameModeConfig.EGameModeType.DefaultMode and 1 or 0); + end end return WB_ReselectWeaponBtn; \ No newline at end of file diff --git a/SoloKing/Script/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfigPartItem.lua b/SoloKing/Script/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfigPartItem.lua new file mode 100644 index 00000000..848d2b03 --- /dev/null +++ b/SoloKing/Script/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfigPartItem.lua @@ -0,0 +1,90 @@ +---@class WB_WeaponConfigPartItem_C:UUserWidget +---@field Image_5 UImage +---@field Image_PartIcon UImage +---@field NewButton_ChangePart UNewButton +---@field WidgetSwitcher_IsNilPart UWidgetSwitcher +---@field WidgetSwitcher_IsSelect UWidgetSwitcher +---@field WidgetSwitcher_IsSelect_OLD UWidgetSwitcher +---@field WidgetSwitcher_SelectStyle UWidgetSwitcher +--Edit Below-- +local WB_WeaponConfigPartItem = { + bInitDoOnce = false; +}; + +--[==[ Construct +function WB_WeaponConfigPartItem:Construct() + +end +-- Construct ]==] + +-- function WB_WeaponConfigPartItem:Tick(MyGeometry, InDeltaTime) + +-- end + +-- function WB_WeaponConfigPartItem:Destruct() + +-- end + +function WB_WeaponConfigPartItem:LuaInit() + if self.bInitDoOnce then return end + self.bInitDoOnce = true + WidgetLibrary.BindButtonClicked(self.NewButton_ChangePart, self.ClickCallBack, self) +end + +function WB_WeaponConfigPartItem:ClickCallBack() + if self.SelectCallBackFunc then + if self.SelectCallBackObj then + self.SelectCallBackFunc(self.SelectCallBackObj, self:GetItemID(), self:GetPartType()) + else + self.SelectCallBackFunc(self:GetItemID(), self:GetPartType()) + end + end +end + +function WB_WeaponConfigPartItem:BindSelectCallBack(InFunc, InObj) + self.SelectCallBackFunc = InFunc + self.SelectCallBackObj = InObj +end + + +WB_WeaponConfigPartItem.PartID = -1 +function WB_WeaponConfigPartItem:SetItemID(InPartID) + if self.PartID ~= InPartID then + self.PartID = InPartID + + if self.PartID and self.PartID >= 0 then + self:SetVisibility(ESlateVisibility.Visible) + if self.PartID == 0 then + self.WidgetSwitcher_IsNilPart:SetActiveWidgetIndex(1) + else + self.WidgetSwitcher_IsNilPart:SetActiveWidgetIndex(0) + MyWeaponSystem.AsyncLoadItemSmallIconToBrush(self.PartID, self.Image_PartIcon) + end + else + self:SetVisibility(ESlateVisibility.Collapsed) + end + end +end + +function WB_WeaponConfigPartItem:GetItemID() + return self.PartID +end + +function WB_WeaponConfigPartItem:SetPartType(InType) + self:LuaInit() + self.PartType = InType +end + +function WB_WeaponConfigPartItem:GetPartType() + return self.PartType +end + +function WB_WeaponConfigPartItem:SetIsSelect(InIsSelect) + self.WidgetSwitcher_IsSelect:SetActiveWidgetIndex(InIsSelect and 1 or 0) +end + +function WB_WeaponConfigPartItem:SetSelectStyle(StyleIndex) + self.WidgetSwitcher_SelectStyle:SetActiveWidgetIndex(StyleIndex) +end + +return WB_WeaponConfigPartItem; \ No newline at end of file diff --git a/SoloKing/Script/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfiguration.lua b/SoloKing/Script/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfiguration.lua new file mode 100644 index 00000000..405630be --- /dev/null +++ b/SoloKing/Script/UI/SelectWeapons/WeaponConfiguration/WB_WeaponConfiguration.lua @@ -0,0 +1,219 @@ +---@class WB_WeaponConfiguration_C:UUserWidget +---@field CanvasPanel_WeaponInfo UCanvasPanel +---@field Image_WeaponIcon UImage +---@field NewButton_Close UNewButton +---@field NewButton_Close_Old UNewButton +---@field NewButton_Save UNewButton +---@field PartItem_ButtStock UWB_WeaponConfigPartItem_C +---@field PartItem_Grip UWB_WeaponConfigPartItem_C +---@field PartItem_Magazine UWB_WeaponConfigPartItem_C +---@field PartItem_Muzzle UWB_WeaponConfigPartItem_C +---@field PartItem_SubTelescope UWB_WeaponConfigPartItem_C +---@field PartItem_Telescope UWB_WeaponConfigPartItem_C +---@field ScrollBox_SelectParts UScrollBox +---@field TextBlock_WeaponName UTextBlock +--Edit Below-- +local WB_WeaponConfiguration = { + bInitDoOnce = false; + PartTypeToPartItem = {}; +}; + + +function WB_WeaponConfiguration:Construct() + self:LuaInit() +end + + +-- function WB_WeaponConfiguration:Tick(MyGeometry, InDeltaTime) + +-- end + +-- function WB_WeaponConfiguration:Destruct() + +-- end + +function WB_WeaponConfiguration:OnShowPanel(WeaponID) + UGCLogSystem.Log("[WB_WeaponConfiguration_OnShowPanel]") + if WeaponID then + self:SetWeaponID(WeaponID) + end +end + +function WB_WeaponConfiguration:LuaInit() + if self.bInitDoOnce then + return; + end + self.bInitDoOnce = true; + WidgetLibrary.BindButtonClicked(self.NewButton_Save, self.ClickSave, self) + WidgetLibrary.BindButtonClicked(self.NewButton_Close, self.CloseSelf, self) + + self.PartTypeToPartItem = { + [EWeaponPartType.Telescope] = self.PartItem_Telescope, + [EWeaponPartType.Muzzle] = self.PartItem_Muzzle, + [EWeaponPartType.Magazine] = self.PartItem_Magazine, + [EWeaponPartType.Grip] = self.PartItem_Grip, + [EWeaponPartType.ButtStock] = self.PartItem_ButtStock, + [EWeaponPartType.SubTelescope] = self.PartItem_SubTelescope, + } + + + -- 在这里修改 这里是经典模式,新的回合武器改变后发送的通知 这个绑定的事件有问题需要替换 + UGCEventSystem.AddListener(EventTypes.UpdateCurrWeapon, self.UpdateCurrWeapon, self) + + + + + + + -- 设置配件类型 + for PartType, Item in pairs(self.PartTypeToPartItem) do + Item:LuaInit() + Item:SetPartType(PartType) + Item:BindSelectCallBack(self.ClickPart, self) + end + + for i = 1, self.ScrollBox_SelectParts:GetChildrenCount() do + local Item = self.ScrollBox_SelectParts:GetChildAt(i - 1) + Item:LuaInit() + Item:SetSelectStyle(1) + Item:BindSelectCallBack(self.ClickSelectPart, self) + end + + -- 在这里修改 测试 + self:SetWeaponID(101005) + +end + +function WB_WeaponConfiguration:CloseSelf() + WidgetManager:ClosePanel(WidgetConfig.EUIType.WeaponConfiguration) +end + +function WB_WeaponConfiguration:ClickSave() + local WeaponParts = self:GetAllParts() + local WeaponID = self.WeaponID + -- 在这里修改 发送RPC到DS设置配件 + + -- 关闭该UI + self:CloseSelf() +end + + + + + +function WB_WeaponConfiguration:GetWeaponID() + return self.WeaponID +end + +function WB_WeaponConfiguration:SetWeaponID(WeaponID) + if self.WeaponID ~= WeaponID then + self.WeaponID = WeaponID + local WeaponParts = MyWeaponSystem.GetWeaponBastParts(self.WeaponID) + + -- 在这里修改 获取存档中的武器配件存档 CustomWeaponParts = {[WeaponID] = {PartID, PartID, PartID, ...}, ...} + -- local CustomWeaponParts = ArchiveDataConfig.GetPlayerArchiveDataFromType(UGCSystemLibrary.GetLocalPlayerKey(), ArchiveDataConfig.EArchiveType.CustomWeaponParts) + local CustomWeaponParts = nil + + if CustomWeaponParts and CustomWeaponParts[self.WeaponID] then + WeaponParts = CustomWeaponParts[self.WeaponID] + end + UGCLogSystem.LogTree("[WB_WeaponConfiguration_SetWeaponID]", WeaponParts) + + + + local WeaponPartsMap = MyWeaponSystem.PartListToPartMap(WeaponParts) + local UpdateSelectPartsOnce = false + + for PartType, Item in pairs(self.PartTypeToPartItem) do + local ItemID = WeaponPartsMap[PartType] + Item:SetItemID(ItemID) + --UGCLogSystem.Log("[WB_WeaponConfiguration_SetWeaponID] ItemID:" .. tostring(ItemID)) + -- 设置当前默认选择的Part + if ItemID and not UpdateSelectPartsOnce then + UpdateSelectPartsOnce = true + self:SetSelectPartType(PartType) + end + end + + if not UpdateSelectPartsOnce then + self:SetSelectPartType(nil) + end + + --MyWeaponSystem.AsyncLoadItemBigIconToBrush(self.WeaponID, self.Image_WeaponIcon) + MyWeaponSystem.AsyncLoadItemWhiteIconToBrush(self.WeaponID, self.Image_WeaponIcon) + + self.TextBlock_WeaponName:SetText(MyWeaponSystem.GetItemName(self.WeaponID)) + end +end + + + +function WB_WeaponConfiguration:ClickPart(PartID, PartType) + -- local PartType = MyWeaponSystem.GetPartType(PartID) + self:SetSelectPartType(PartType) + +end + +--- 设置选择修改的类型 +function WB_WeaponConfiguration:SetSelectPartType(InPartType) + UGCLogSystem.Log("[WB_WeaponConfiguration_SetSelectPartType] InPartType:%s", tostring(InPartType)) + self.SelectPartType = InPartType + local ItemID = -1 + if self.PartTypeToPartItem[InPartType] then + ItemID = self.PartTypeToPartItem[InPartType]:GetItemID() + end + local Parts = MyWeaponSystem.GetWeaponCanUsePartFromPartType(self.WeaponID, InPartType) + for i = 1, self.ScrollBox_SelectParts:GetChildrenCount() do + local Item = self.ScrollBox_SelectParts:GetChildAt(i - 1) + if i == 1 then + -- 在这里修改 这里默认取消配件为 0,就是不装这个配件 不能改成负数 + Item:SetItemID(0) + Item:SetIsSelect(ItemID == 0) + else + Item:SetItemID(Parts[i - 1]) + Item:SetIsSelect(ItemID == Parts[i - 1]) + end + + end + + for PartType, Item in pairs(self.PartTypeToPartItem) do + Item:SetIsSelect(InPartType == PartType) + end +end + +--- 修改显示的配件 +function WB_WeaponConfiguration:ClickSelectPart(PartID) + UGCLogSystem.Log("[WB_WeaponConfiguration_ClickSelectPart] PartID:%s, PartType:%s", tostring(PartID), tostring(PartType)) + --local PartType = MyWeaponSystem.GetPartType(PartID) + local PartItem = self.PartTypeToPartItem[self.SelectPartType] + if PartItem then + PartItem:SetItemID(PartID) + -- 设置已选择 + for i = 1, self.ScrollBox_SelectParts:GetChildrenCount() do + local Item = self.ScrollBox_SelectParts:GetChildAt(i - 1) + Item:SetIsSelect(PartID == Item:GetItemID()) + end + end +end + +--- 获取当前修改后的配件信息 +function WB_WeaponConfiguration:GetAllParts() + local Res = {} + for PartType, Item in pairs(self.PartTypeToPartItem) do + local ItemID = Item:GetItemID() + if ItemID and MyWeaponSystem.IsWeaponPartValid(ItemID) then + Res[#Res + 1] = ItemID + end + end + return Res +end + +function WB_WeaponConfiguration:UpdateCurrWeapon(WeaponIDs) + UGCLogSystem.LogTree("[WB_WeaponConfiguration_UpdateCurrWeapon]", WeaponIDs) + -- 在这里修改,刷新武器显示 + if WeaponIDs[1] then + self:SetWeaponID(WeaponIDs[1]) + end +end + +return WB_WeaponConfiguration; \ No newline at end of file