UGCProjects/ProjectTemp_T/Script/UI/SelectSoldier/WB_SelectSolider_Item.lua

169 lines
5.4 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
---@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;