2025-01-04 23:00:19 +08:00

175 lines
6.6 KiB
Lua

---@class WB_CompetitionResponse_C:UUserWidget
---@field Image_Target UImage
---@field SelectButton1 UWB_CompetitionResponse_Item_C
---@field SelectButton2 UWB_CompetitionResponse_Item_C
---@field SelectButton3 UWB_CompetitionResponse_Item_C
---@field SelectButton4 UWB_CompetitionResponse_Item_C
---@field TextBlock_PleaseSelect UTextBlock
---@field TextBlock_ReadyTime UTextBlock
---@field TextBlock_TextTarget UTextBlock
---@field WB_AllPlayerMiniScore UWB_AllPlayerMiniScore_C
---@field WidgetSwitcher_State UWidgetSwitcher
---@field WidgetSwitcher_Target UWidgetSwitcher
---@field WidgetSwitcher_TipText UWidgetSwitcher
--Edit Below--
local WB_CompetitionResponse = {
bInitDoOnce = false;
ItemList = {};
Textures = {};
TexturesColor = {};
TextList = {};
TextColorList = {};
IsReady = false;
PlayerSelected = true;
LastTime = -1;
};
function WB_CompetitionResponse:OnShowPanel()
--local MainControlPanel = GameBusinessManager.GetWidgetFromName(ingame, "MainControlPanelTochButton_C")
--MainControlPanel:SetVisibility(ESlateVisibility.Collapsed)
MiniGameConfig.ClientSetIsUIGame(true)
end
function WB_CompetitionResponse:OnClosePanel()
--local MainControlPanel = GameBusinessManager.GetWidgetFromName(ingame, "MainControlPanelTochButton_C")
--MainControlPanel:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
MiniGameConfig.ClientSetIsUIGame(false)
WidgetManager:ShowPanel(WidgetConfig.EUIType.UIGameBG, false)
end
function WB_CompetitionResponse:Construct()
self.WB_AllPlayerMiniScore:Init()
UGCEventSystem.AddListener(EventEnum.ResponseGameReadyState, self.ReadyState, self)
UGCEventSystem.AddListener(EventEnum.ResponseGameDifficultyUpgrade, self.DifficultyUpgrade, self)
UGCEventSystem.AddListener(EventEnum.ResponseGameSelectCallBack, self.ResponseGameSelectCallBack, self)
self.WidgetSwitcher_State:SetActiveWidgetIndex(0)
self.ItemList = {self.SelectButton1, self.SelectButton2, self.SelectButton3, self.SelectButton4}
for i, v in pairs(self.ItemList) do
v:InitItem(i)
v:SetSelectCallBack(self.PlayerSelect, self)
end
local TexturesPath = MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.CompetitionResponse].GameParam.TexturesPath
for i, v in pairs(TexturesPath) do
self.Textures[#self.Textures + 1] = UE.LoadObject(v)
end
self.TexturesColor = MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.CompetitionResponse].GameParam.TexturesColor
--local TextParam = MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.CompetitionResponse].GameParam.TextParam
--for i, v in pairs(TextParam) do
-- self.TextList[#self.TextList + 1] = i
-- self.TextColorList[#self.TextColorList + 1] = v
--end
self.TextList = MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.CompetitionResponse].GameParam.TextParam
self.TextColorList = MiniGameConfig.MiniGameInfo[MiniGameConfig.MiniGameType.CompetitionResponse].GameParam.TextColor
end
-- 难度升级
function WB_CompetitionResponse:DifficultyUpgrade()
self.WidgetSwitcher_TipText:SetActiveWidgetIndex(1)
end
---@param InSelectParams table {[ID] = {Index, ColorIndex}}
function WB_CompetitionResponse:ReadyState(InShowServerTime, InIsPic, TargetIndex, TargetColorIndex, InSelectParams)
self.WidgetSwitcher_State:SetActiveWidgetIndex(0)
self.ShowServerTime = InShowServerTime
self.IsReady = true
self.PlayerSelected = true
self.TextBlock_PleaseSelect:SetVisibility(ESlateVisibility.Collapsed)
-- 设置目标图案或者文字 以及对应颜色
self.IsPic = InIsPic
if self.IsPic then
self.Image_Target:SetBrushFromTexture(self.Textures[TargetIndex])
self.Image_Target:SetColorAndOpacity(self.TexturesColor[TargetColorIndex])
self.WidgetSwitcher_Target:SetActiveWidgetIndex(0)
else
self.TextBlock_TextTarget:SetText(self.TextList[TargetIndex])
self.TextBlock_TextTarget:SetColorAndOpacity({SpecifiedColor = self.TextColorList[TargetColorIndex], ColorUseRule=0})
self.WidgetSwitcher_Target:SetActiveWidgetIndex(1)
end
self.SelectParams = InSelectParams
-- 设置按键UI图案或者文字 以及对应颜色
self:SetSelectButtonParam(self.IsPic, self.SelectParams)
end
function WB_CompetitionResponse:Tick(MyGeometry, InDeltaTime)
if self.IsReady then
local NowServerTime = UGCGameSystem.GameState:GetServerGameTime()
if self.ShowServerTime <= NowServerTime then
self:ShowTarget()
else
-- 修改秒数
local ShowTime = math.floor(self.ShowServerTime - NowServerTime)
self.TextBlock_ReadyTime:SetText(tostring(ShowTime))
-- 播放读秒音效
if ShowTime ~= self.LastTime then
self.LastTime = ShowTime
SoundSystem.PlaySound(SoundSystem.ESound.Clock)
end
end
end
end
function WB_CompetitionResponse:ShowTarget()
self.IsReady = false
self.PlayerSelected = false
self.TextBlock_PleaseSelect:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
-- 显示目标图案或文字
self.WidgetSwitcher_State:SetActiveWidgetIndex(1)
-- 播放音效
--SoundSystem.PlaySound(SoundSystem.ESound.)
end
---@param InSelectParams table {[ID] = {Index, ColorIndex}}
function WB_CompetitionResponse:SetSelectButtonParam(InIsPic, InSelectParams)
for i, v in pairs(InSelectParams) do
if self.ItemList[i] then
if InIsPic then
self.ItemList[i]:SetShowImage(self.Textures[v.Index], self.TexturesColor[v.ColorIndex])
else
self.ItemList[i]:SetShowText(self.TextList[v.Index], self.TextColorList[v.ColorIndex])
end
end
end
end
function WB_CompetitionResponse:PlayerSelect(Index)
if self.PlayerSelected == false then
-- 发送RPC
-- 设置按键已选择
self.PlayerSelected = true
for i, v in pairs(self.ItemList) do
v:SetShowSelect(true, Index)
end
UGCSendRPCSystem.RPCEvent(nil, EventEnum.ResponseGamePlayerSelect, UGCSystemLibrary.GetLocalPlayerKey(), Index)
end
end
function WB_CompetitionResponse:ResponseGameSelectCallBack(IsRight, PlayerKey)
if PlayerKey == UGCSystemLibrary.GetLocalPlayerKey() then
if IsRight then
SoundSystem.PlaySound(SoundSystem.ESound.Right)
else
SoundSystem.PlaySound(SoundSystem.ESound.Error)
end
else
SoundSystem.PlaySound(SoundSystem.ESound.IsReady)
end
end
-- function WB_CompetitionResponse:Destruct()
-- end
return WB_CompetitionResponse;