163 lines
5.1 KiB
Lua
163 lines
5.1 KiB
Lua
|
---@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;
|