---@class WB_SelectSolider_Item_C:UUserWidget ---@field Button_Main UButton ---@field CanvasPanel_Lock UCanvasPanel ---@field Image_230 UImage ---@field Image_255 UImage ---@field Image_Gun1 UImage ---@field Image_Gun2 UImage ---@field Image_GunOnce UImage ---@field Image_Icon UImage ---@field Image_None UImage ---@field Image_Select UImage ---@field TextBlock_Desc UTextBlock ---@field TextBlock_Info UTextBlock ---@field TextBlock_Link UTextBlock ---@field TextBlock_Type UTextBlock ---@field WidgetSwitcher_Select UWidgetSwitcher ---@field WidgetSwitcher_WeaponType UWidgetSwitcher --Edit Below-- ---@type WB_SelectSolider_Item_C local WB_SelectSolider_Item = { bInitDoOnce = false; }; WB_SelectSolider_Item.SoldierType = nil; WB_SelectSolider_Item.ParentWidget = nil; WB_SelectSolider_Item.ClickCb = nil; WB_SelectSolider_Item.IsSubmitSelect = false; WB_SelectSolider_Item.NoSelectColor = { R = 0.354167, G = 0.354167, B = 0.354167, A = 1}; WB_SelectSolider_Item.SelectColor = { R = 1, G = 1, B = 1, A = 1 }; function WB_SelectSolider_Item:Construct() UGCEventSystem.AddListener(EventTypes.UpdatePlayerArchive, self.OnUpdatePlayerArchive, self) self.Button_Main:SetTouchMethod(EButtonTouchMethod.PreciseTap); UITool.BindButtonClicked(self.Button_Main, self.OnClickMain, self); self:SetSelect(false) end function WB_SelectSolider_Item:OnClickMain() -- 显示 self.ParentWidget:SetClickItemType(self, self.SoldierType); SoundSystem.PlaySound(SoundSystem.ESound.Click); end -- function WB_SelectSolider_Item:Tick(MyGeometry, InDeltaTime) -- end -- function WB_SelectSolider_Item:Destruct() -- end ---@param InWidget WB_SelectSoldier_C 其父类 ---@param InFunc fun(InWidget:WB_SelectSolider_Item_C) function WB_SelectSolider_Item:SetParentWidget(InWidget, InFunc) self.ParentWidget = InWidget; self.ClickCb = InFunc; end ---@param IsSelect bool function WB_SelectSolider_Item:SetSelect(IsSelect) if IsSelect then self.Image_Select:SetColorAndOpacity({SpecifiedColor = self.SelectColor, ColorUseRule = 0}) else self.Image_Select:SetColorAndOpacity({SpecifiedColor = self.NoSelectColor, ColorUseRule = 0}) end end function WB_SelectSolider_Item:SetSoldierType(InType) self.SoldierType = InType; -- 加载对应东西 self.TextBlock_Type:SetText(SoldierConfig.Chinese[InType]); self.TextBlock_Desc:SetText(SoldierConfig.Descs[InType]); UE.AsyncLoadObject(SoldierConfig.SoldierIcon[InType], function(TargetObject) self.Image_Icon:SetBrushFromTexture(TargetObject); end); if #SoldierConfig.WeaponLimits[InType] == 1 then self.WidgetSwitcher_WeaponType:SetActiveWidgetIndex(0); local WeaponTypeIcon = UGCSystemLibrary.LoadAsset(WeaponTypeInfo[SoldierConfig.WeaponLimits[InType][1]].Icon, true); if WeaponTypeIcon then local TempBrush = table.DeepCopy(self.Image_GunOnce.Brush); TempBrush.ResourceObject = WeaponTypeIcon; self.Image_GunOnce:SetBrush(TempBrush); end elseif #SoldierConfig.WeaponLimits[InType] > 1 then self.WidgetSwitcher_WeaponType:SetActiveWidgetIndex(1); local WeaponTypeIcon1 = UGCSystemLibrary.LoadAsset(WeaponTypeInfo[SoldierConfig.WeaponLimits[InType][1]].Icon, true); local WeaponTypeIcon2 = UGCSystemLibrary.LoadAsset(WeaponTypeInfo[SoldierConfig.WeaponLimits[InType][2]].Icon, true); if WeaponTypeIcon1 then local TempBrush = table.DeepCopy(self.Image_Gun1.Brush); TempBrush.ResourceObject = WeaponTypeIcon1; self.Image_Gun1:SetBrush(TempBrush); end if WeaponTypeIcon2 then local TempBrush = table.DeepCopy(self.Image_Gun2.Brush); TempBrush.ResourceObject = WeaponTypeIcon2; self.Image_Gun2:SetBrush(TempBrush); end end -- 设置 是什么类型 if SoldierConfig.WeaponCount[InType] == 2 then self.TextBlock_Link:SetText('and') else self.TextBlock_Link:SetText('or') end -- 设置描述 local SoldierDesc = SoldierConfig.SoldierDesc[InType]; self.TextBlock_Info:SetText(SoldierDesc); end --- 显示出来玩家是否解锁了当前选择兵种 Item ---@param InArchiveData ArchiveData function WB_SelectSolider_Item:OnUpdatePlayerArchive(InArchiveData) UGCLogSystem.LogTree("[WB_SelectSolider_Item:OnUpdatePlayerArchive] InArchiveData = ", InArchiveData); if table.isEmpty(InArchiveData) then return; end local UnLockTypes = InArchiveData.UnlockTypes if table.isEmpty(UnLockTypes) then self:SetShowLock(true); return; end UGCLogSystem.Log("[WB_SelectSolider_Item:OnUpdatePlayerArchive] SoldierType = %s", tostring(self.SoldierType)) if UnLockTypes[self.SoldierType] then self:SetShowLock(false); return; end self:SetShowLock(true); end function WB_SelectSolider_Item:SetClickSelect(InSoldierType) if not self.IsSubmitSelect then if InSoldierType == self.SoldierType then self.WidgetSwitcher_Select:SetActiveWidgetIndex(1); else self.WidgetSwitcher_Select:SetActiveWidgetIndex(0); end end end WB_SelectSolider_Item.bCanSelect = false; function WB_SelectSolider_Item:SetShowLock(bShow) self.bCanSelect = not bShow --if bShow then -- self.CanvasPanel_Lock:SetVisibility(ESlateVisibility.SelfHitTestInvisible); --else -- self.CanvasPanel_Lock:SetVisibility(ESlateVisibility.Collapsed); --end end function WB_SelectSolider_Item:SetSubmitSelect(InSoldierType) if InSoldierType == self.SoldierType then self.IsSubmitSelect = true; self.WidgetSwitcher_Select:SetActiveWidgetIndex(2); else self.WidgetSwitcher_Select:SetActiveWidgetIndex(0); end end function WB_SelectSolider_Item:SetButtonEnable(IsSet) self.Button_Main:SetIsEnabled(IsSet); end return WB_SelectSolider_Item;