170 lines
6.9 KiB
Lua
170 lines
6.9 KiB
Lua
---@class WB_SelectMiniGame_C:UUserWidget
|
|
---@field Button_SelectMap UButton
|
|
---@field HorizontalBox_PlayerReadys UHorizontalBox
|
|
---@field TextBlock_Desc UTextBlock
|
|
---@field TextBlock_MiniGameName UTextBlock
|
|
---@field TextBlock_SelectTime UTextBlock
|
|
---@field UniformGridPanel_Items UUniformGridPanel
|
|
---@field WidgetSwitcher_IsSelected UWidgetSwitcher
|
|
--Edit Below--
|
|
local WB_SelectMiniGame = {
|
|
bInitDoOnce = false;
|
|
ItemsCol = 5;
|
|
SelectedMaps = {};
|
|
bCanClickSelect = true;
|
|
};
|
|
|
|
|
|
function WB_SelectMiniGame:Construct()
|
|
WidgetLibrary.BindButtonClicked(self.Button_SelectMap, self.ClickSelect, self)
|
|
WidgetLibrary.TextBlockBindingPropertyText(self.TextBlock_SelectTime, self.UpdateSelectTime, self)
|
|
UGCEventSystem.AddListener(EventEnum.SelectMiniGameCallBack, self.SelectMiniGameCallBack, self)
|
|
UGCEventSystem.AddListener(EventEnum.UpdatePlayerScoreData, self.UpdatePlayerHead, self)
|
|
UGCEventSystem.AddListener(ArchiveDataConfig.GetParamNotifyEvent(ArchiveDataConfig.EArchiveType.MapStar), self.UpdateStarCount, self)
|
|
|
|
self:InitMiniGameItem()
|
|
self:UpdatePlayerHead()
|
|
self:ItemSelectMiniGame(math.max(table.unpack(table.getKeys(MiniGameConfig.MiniGameInfo))))
|
|
|
|
-- Test
|
|
-- UGCEventSystem.SetTimerLoop(self, self.UpdateStarCount, 0.5)
|
|
|
|
end
|
|
|
|
function WB_SelectMiniGame:UpdateSelectTime()
|
|
return tostring(UGCGameSystem.GameState.WaitPlayerJoinTime)
|
|
end
|
|
|
|
function WB_SelectMiniGame:GetItemClass()
|
|
if self.ItemClass == nil then
|
|
self.ItemClass = UE.LoadClass(UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/StatusUI/MiniGame/MiniGameSelect/WB_MiniGameItem.WB_MiniGameItem_C'))
|
|
end
|
|
return self.ItemClass
|
|
end
|
|
|
|
function WB_SelectMiniGame:InitMiniGameItem()
|
|
local Index = 0
|
|
|
|
local MiniGameTypes = table.getKeys(MiniGameConfig.MiniGameInfo)
|
|
table.sort(MiniGameTypes, function(a, b) return a > b end)
|
|
|
|
UGCLogSystem.LogTree("[WB_SelectMiniGame_InitMiniGameItem] MiniGameTypes", MiniGameTypes)
|
|
|
|
local PlayerStarCount = ArchiveDataConfig.GetPlayerArchiveDataFromType(UGCSystemLibrary.GetLocalPlayerKey(), ArchiveDataConfig.EArchiveType.MapStar)
|
|
if PlayerStarCount == nil then PlayerStarCount = {} end
|
|
|
|
for _, MiniGameType in pairs(MiniGameTypes) do
|
|
local ItemInst = UserWidget.NewWidgetObjectBP(UGCSystemLibrary.GetLocalPlayerController(), self:GetItemClass())
|
|
self.UniformGridPanel_Items:AddChild(ItemInst)
|
|
local TargetUniformGridSlot = WidgetLayoutLibrary.SlotAsUniformGridSlot(ItemInst)
|
|
-- 居中
|
|
TargetUniformGridSlot:SetVerticalAlignment(EVerticalAlignment.VAlign_Center)
|
|
TargetUniformGridSlot:SetHorizontalAlignment(EHorizontalAlignment.HAlign_Center)
|
|
-- 设置索引
|
|
TargetUniformGridSlot:SetColumn(Index % self.ItemsCol)
|
|
TargetUniformGridSlot:SetRow(math.floor(Index / self.ItemsCol))
|
|
-- 初始化
|
|
ItemInst:Init(MiniGameType, self.ItemSelectMiniGame, self)
|
|
ItemInst:UpdateStarCount(PlayerStarCount[MiniGameType])
|
|
Index = Index + 1
|
|
end
|
|
end
|
|
|
|
function WB_SelectMiniGame:UpdatePlayerHead()
|
|
local OnlinePlayerKeys = UGCGameSystem.GameState:GetPlayerPersonalKeys()
|
|
--table.sort(OnlinePlayerKeys, function(a, b) return a > b end)
|
|
--for i = 1, self.HorizontalBox_PlayerReadys:GetChildrenCount() do
|
|
-- local Item = self.HorizontalBox_PlayerReadys:GetChildAt(i - 1)
|
|
-- Item:InitPlayerReady(OnlinePlayerKeys[i])
|
|
--end
|
|
|
|
if OnlinePlayerKeys then
|
|
local NullPlayerKeyItem = {}
|
|
for i = 1, self.HorizontalBox_PlayerReadys:GetChildrenCount() do
|
|
local Item = self.HorizontalBox_PlayerReadys:GetChildAt(i - 1)
|
|
Item:ResetIsReady()
|
|
local PlayerKey = Item:GetPlayerKey()
|
|
if PlayerKey == nil or not table.hasValue(OnlinePlayerKeys, PlayerKey) then
|
|
NullPlayerKeyItem[#NullPlayerKeyItem + 1] = Item
|
|
Item:InitPlayerReady(nil)
|
|
else
|
|
table.removeValue(OnlinePlayerKeys, PlayerKey)
|
|
end
|
|
end
|
|
for i, v in pairs(OnlinePlayerKeys) do
|
|
if NullPlayerKeyItem[i] then
|
|
NullPlayerKeyItem[i]:InitPlayerReady(v)
|
|
end
|
|
end
|
|
self:UpdateStarCount()
|
|
end
|
|
end
|
|
|
|
function WB_SelectMiniGame:ItemSelectMiniGame(InMiniGameType)
|
|
SoundSystem.PlaySound(SoundSystem.ESound.Click)
|
|
local MiniGameInfo = MiniGameConfig.MiniGameInfo[InMiniGameType]
|
|
if MiniGameInfo then
|
|
self.SelectGameType = InMiniGameType
|
|
self.TextBlock_Desc:SetText(MiniGameInfo.DescText)
|
|
|
|
for i = 1, self.UniformGridPanel_Items:GetChildrenCount() do
|
|
local Item = self.UniformGridPanel_Items:GetChildAt(i - 1)
|
|
Item:SelectType(InMiniGameType)
|
|
end
|
|
end
|
|
end
|
|
|
|
function WB_SelectMiniGame:ClickSelect()
|
|
if self.bCanClickSelect then
|
|
self.bCanClickSelect = false
|
|
UGCEventSystem.SetTimer(self, function() self.bCanClickSelect = true end, 0.5)
|
|
if not self.IsSelected then
|
|
if table.hasValue(self.SelectedMaps, self.SelectGameType) then
|
|
UGCEventSystem.SendEvent(EventEnum.AddTip, TipConfig.TipType.MiniGameIsSelected)
|
|
else
|
|
UGCSendRPCSystem.ActorRPCNotify(nil, UGCGameSystem.GameState, "PlayerSelectMiniGame", self.SelectGameType, UGCSystemLibrary.GetLocalPlayerKey())
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function WB_SelectMiniGame:SelectMiniGameCallBack(IsSucceed, InMiniGameType, InPlayerKey)
|
|
if IsSucceed then
|
|
self.SelectedMaps[#self.SelectedMaps + 1] = InMiniGameType
|
|
if InPlayerKey == UGCSystemLibrary.GetLocalPlayerKey() then
|
|
self.IsSelected = true
|
|
self.WidgetSwitcher_IsSelected:SetActiveWidgetIndex(1)
|
|
UGCEventSystem.SendEvent(EventEnum.AddTip, TipConfig.TipType.SelectedMiniGameSucceed)
|
|
end
|
|
else
|
|
SoundSystem.PlaySound(SoundSystem.ESound.Click)
|
|
UGCEventSystem.SendEvent(EventEnum.AddTip, TipConfig.TipType.MiniGameIsSelected)
|
|
end
|
|
end
|
|
|
|
function WB_SelectMiniGame:UpdateStarCount()
|
|
for i = 1, self.HorizontalBox_PlayerReadys:GetChildrenCount() do
|
|
local Item = self.HorizontalBox_PlayerReadys:GetChildAt(i - 1)
|
|
local PlayerKey = Item:GetPlayerKey()
|
|
Item:UpdateStarCount(UGCGameSystem.GameState:GetPlayerStar(PlayerKey))
|
|
end
|
|
|
|
local PlayerStarCount = ArchiveDataConfig.GetPlayerArchiveDataFromType(UGCSystemLibrary.GetLocalPlayerKey(), ArchiveDataConfig.EArchiveType.MapStar)
|
|
UGCLogSystem.LogTree("[WB_SelectMiniGame_UpdateStarCount] PlayerStarCount:", PlayerStarCount)
|
|
if PlayerStarCount == nil then PlayerStarCount = {} end
|
|
for i = 1, self.UniformGridPanel_Items:GetChildrenCount() do
|
|
local Item = self.UniformGridPanel_Items:GetChildAt(i - 1)
|
|
local MiniGameType = Item:GetMiniGameType()
|
|
Item:UpdateStarCount(PlayerStarCount[MiniGameType])
|
|
end
|
|
end
|
|
|
|
-- function WB_SelectMiniGame:Tick(MyGeometry, InDeltaTime)
|
|
|
|
-- end
|
|
|
|
-- function WB_SelectMiniGame:Destruct()
|
|
|
|
-- end
|
|
|
|
return WB_SelectMiniGame; |