UGCProjects/SoldierWar/Script/UI/SelectSoldier/WB_SelectSolider_Item.lua
2025-01-04 23:00:19 +08:00

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;