---@class WB_SelectSolider_Item_C:UUserWidget ---@field Image_Gun1 UImage ---@field Image_Gun2 UImage ---@field Image_GunOnce UImage ---@field Image_Select UImage ---@field NewButton_Main UNewButton ---@field TextBlock_Desc UTextBlock ---@field TextBlock_Info UTextBlock ---@field TextBlock_Limit 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; function WB_SelectSolider_Item:Construct() self:LuaInit(); end function WB_SelectSolider_Item:LuaInit() if self.bInitDoOnce then return ; end UITool.EnableButtonScroll(self.NewButton_Main); UITool.BindButtonClicked(self.NewButton_Main, self.OnClickMainItem, self); self:SetSelect(false); self:SetShowLimitCount(false); self.bInitDoOnce = true; end WB_SelectSolider_Item.Func = nil; WB_SelectSolider_Item.Owner = nil; function WB_SelectSolider_Item:OnClickMainItem() -- 显示 if self.CanClick then if self.Func and self.Owner then UGCLogSystem.Log("[WB_SelectSolider_Item:OnClickMainItem] 成功点击") self.Func(self.Owner, self); end else UITool.ShowTips1(3, ELogColor.Red, "当前兵种已到达上限,请选择其他兵种"); end 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:SetParent(InWidget, InFunc) self.Owner = InWidget; self.Func = InFunc; end ---@param IsSelect bool function WB_SelectSolider_Item:SetSelect(IsSelect) self.WidgetSwitcher_Select:SetActiveWidgetIndex(IsSelect and 1 or 0); end function WB_SelectSolider_Item:SetSoldierType(InType) self.SoldierType = InType; -- 加载对应东西 local ConfigItem = SoldierConfig[InType]; self.TextBlock_Type:SetText(ConfigItem.Info.Name); self.TextBlock_Info:SetText(ConfigItem.Info.Desc); self.TextBlock_Desc:SetText(ConfigItem.Info.ShortDesc); -- 判断数量 local Count = ConfigItem.Weapons.Count local MainWeapons = ConfigItem.Weapons.Main if Count ~= nil and Count > 1 then assert(table.getCount(MainWeapons) > 1); self.WidgetSwitcher_WeaponType:SetActiveWidgetIndex(1); self.TextBlock_Link:SetText("and"); UE.AsyncLoadObject_Cached(GetWeaponTypeIconPath(MainWeapons[1]), function(TargetObject) self.Image_Gun1:SetBrushFromTexture(TargetObject); end); UE.AsyncLoadObject_Cached(GetWeaponTypeIconPath(MainWeapons[2]), function(TargetObject) self.Image_Gun2:SetBrushFromTexture(TargetObject); end); else -- 判断武器类型 if table.getCount(MainWeapons) == 2 then -- 说明当前是两个武器中选择一个 self.WidgetSwitcher_WeaponType:SetActiveWidgetIndex(1); -- 分别设置进去 UE.AsyncLoadObject_Cached(GetWeaponTypeIconPath(MainWeapons[1]), function(TargetObject) self.Image_Gun1:SetBrushFromTexture(TargetObject); end); UE.AsyncLoadObject_Cached(GetWeaponTypeIconPath(MainWeapons[2]), function(TargetObject) self.Image_Gun2:SetBrushFromTexture(TargetObject); end); else self.WidgetSwitcher_WeaponType:SetActiveWidgetIndex(0); UE.AsyncLoadObject_Cached(GetWeaponTypeIconPath(MainWeapons[1]), function(TargetObject) self.Image_GunOnce:SetBrushFromTexture(TargetObject); end); end self.TextBlock_Link:SetText("or"); end UGCLogSystem.Log("[WB_SelectSolider_Item:SetSoldierType] 111") local Config = SoldierConfig[self.SoldierType] if Config then local Limit = Config.LimitCount UGCLogSystem.Log("[WB_SelectSolider_Item:SetSoldierType] 显示剩余选择数量") if Limit and Limit > 0 then self:SetSelectedCount(0, Limit); self:SetShowLimitCount(true); else self:SetShowLimitCount(false); end end end function WB_SelectSolider_Item:SetButtonEnable(IsSet) self.NewButton_Main:SetIsEnabled(IsSet); end function WB_SelectSolider_Item:GetSoldierType() return self.SoldierType; end WB_SelectSolider_Item.Colors = { [1] = { 0, 1, 0, }, [2] = { 1, 0, 0, }, }; WB_SelectSolider_Item.CanClick = true; WB_SelectSolider_Item.LimitCount = nil; function WB_SelectSolider_Item:SetSelectedCount(InTarget, InLimit) if InLimit == nil then InLimit = self.LimitCount end if InLimit == nil then return; end if self.LimitCount == nil then self.LimitCount = InLimit end self.TextBlock_Limit:SetText(string.format('%d/%d', InTarget, InLimit)); UGCLogSystem.Log("[WB_SelectSolider_Item:SetSelectedCount] Limit = %d/%d", InTarget, InLimit); if InTarget >= InLimit then self.CanClick = false; self.TextBlock_Limit:SetColorAndOpacity(UITool.MakeSlateColor(self.Colors[2])); else self.CanClick = true; self.TextBlock_Limit:SetColorAndOpacity(UITool.MakeSlateColor(self.Colors[1])); end end function WB_SelectSolider_Item:SetShowLimitCount(IsShow) if IsShow then self.TextBlock_Limit:SetVisibility(ESlateVisibility.SelfHitTestInvisible); else self.TextBlock_Limit:SetVisibility(ESlateVisibility.Hidden); end end return WB_SelectSolider_Item;