PGRData/Script/matrix/xui/xuimoewar/childitem/XUiGridVoteItem.lua

217 lines
No EOL
10 KiB
Lua

local XUiGridVoteItem = XClass(nil, "XUiGridVoteItem")
local toString = tostring
local toNumber = tonumber
function XUiGridVoteItem:Ctor(ui, currPlayerId, voteId, valueChangeCallback, voteSuccessCallback, rootUi,isFailGroup)
---@type UnityEngine.GameObject
self.GameObject = ui
---@type UnityEngine.Transform
self.Transform = self.GameObject.transform
self.RootUi = rootUi
self.CurrPlayerId = currPlayerId
self.ValueChangeCallback = valueChangeCallback
self.VoteSuccessCallback = voteSuccessCallback
self.VoteId = voteId
self.VoteItem = XDataCenter.MoeWarManager.GetVoteItem(voteId)
self.IsFailGroup = isFailGroup
XTool.InitUiObject(self)
self:InitUiView()
end
function XUiGridVoteItem:InitUiView()
local itemId = self.VoteItem:GetVoteItemId()
local itemTemplate = XDataCenter.ItemManager.GetItemTemplate(itemId)
self.GridComponent = XUiGridCommon.New(self.RootUi, self.GridIcon)
self.TxtName.text = XDataCenter.ItemManager.GetItemName(itemId)
self.GridComponent:Refresh(itemTemplate)
self.GridComponent:SetBtnNotClick(true)--临时屏蔽点击弹窗
self.TxtNumber.text = XDataCenter.ItemManager.GetCount(itemId)
self.TxtEffectNumber = self.Transform:Find("PanelDetails/GridDetails/TxtDetails/TxtNumber"):GetComponent("Text")
self.GridReward.gameObject:SetActiveEx(self.VoteItem:IsLimitVote())
XDataCenter.ItemManager.AddCountUpdateListener(itemId, function()
self.TxtNumber.text = XDataCenter.ItemManager.GetCount(self.VoteItem:GetVoteItemId())
end, self.TxtNumber)
if self.ImgEffectIcon and self.ImgRewardIcon then
self.ImgEffectIcon:SetRawImage(CS.XGame.ClientConfig:GetString("MoeWarScheduleSupportIcon"))
self.ImgRewardIcon:SetRawImage(CS.XGame.ClientConfig:GetString("MoeWarVoteReawrdIcon"))
self.TxtRewardTitle.text = CS.XTextManager.GetText("MoeWarVoteRewardTitle")
self.TxtEffectTitle.text = CS.XTextManager.GetText("MoeWarVoteEffectTitle")
end
if self.RImgGainIcon and self.TxtGainTitle then
local gainItemId = self.VoteItem:GetGainItemId()
self.RImgGainIcon:SetRawImage(XDataCenter.ItemManager.GetItemIcon(gainItemId))
self.TxtGainTitle.text = CS.XTextManager.GetText("MoeWarVoteGainTitle")
end
self.BtnPoll:SetName(CS.XTextManager.GetText("MoeWarVoteButtonName"))
if not self.AddInputHandler then
self.AddInputHandler = self.BtnAdd.gameObject:AddComponent(typeof(CS.XGoInputHandler))
end
if not self.ReduceInputHandler then
self.ReduceInputHandler = self.BtnReduce.gameObject:AddComponent(typeof(CS.XGoInputHandler))
end
self:RegisterButtonEvent()
self:SetVoteNumber(0)
self:UpdateLimitText()
end
function XUiGridVoteItem:UpdateLimitText()
local itemName = XDataCenter.ItemManager.GetItemName(self.VoteItem:GetVoteItemId())
local playerEntity = XDataCenter.MoeWarManager.GetPlayer(self.CurrPlayerId)
if self.VoteItem:IsLimitVote() then
local limitCount = 0
if self.IsFailGroup then
limitCount = self.VoteItem:GetDailyLimitFailGroupCountByMatchId(XDataCenter.MoeWarManager.GetCurMatchId())
else
limitCount = self.VoteItem:GetDailyLimitCountByMatchId(XDataCenter.MoeWarManager.GetCurMatchId())
end
self.TxtLimit.text = CS.XTextManager.GetText("MoeWarDailyLimitVoteTips", itemName, playerEntity:GetDailyVoteByItemId(self.VoteItem:GetVoteItemId()),limitCount )
else
self.TxtLimit.text = CS.XTextManager.GetText("MoeWarNotDailyLimitVoteTips", itemName)
end
end
function XUiGridVoteItem:UpdateButtonState()
local currValue = toNumber(self.TxtVoteNumber.text)
self.BtnPoll:SetDisable(currValue == 0, currValue ~= 0)
end
function XUiGridVoteItem:SetVoteNumber(value)
self.TxtVoteNumber.text = toString(value)
self.TxtEffectNumber.text = toString(value * self.VoteItem:GetVoteFactor())
local rewardValue = value * self.VoteItem:GetCoinFactor()
if self.TxtRewardNumber then
self.TxtRewardNumber.text = toString(rewardValue)
end
if self.TxtGainNumber then
self.TxtGainNumber.text = toString(value * self.VoteItem:GetGainCount())
end
self:UpdateButtonState()
end
function XUiGridVoteItem:OnClickBtnAdd()
if not self:CheckIsCanVote() then return end
local currNumber = toNumber(self.TxtVoteNumber.text)
local multiple = self.VoteItem:GetMultiple()
local newValue = currNumber + multiple
local playerEntity = XDataCenter.MoeWarManager.GetPlayer(self.CurrPlayerId)
local match = XDataCenter.MoeWarManager.GetCurMatch()
local voteFactor = self.VoteItem:GetVoteFactor()
if self.VoteItem:IsLimitVote() then
local limitCount = self.IsFailGroup and self.VoteItem:GetDailyLimitFailGroupCountByMatchId(XDataCenter.MoeWarManager.GetCurMatchId()) or self.VoteItem:GetDailyLimitCountByMatchId(XDataCenter.MoeWarManager.GetCurMatchId())
local max = limitCount - playerEntity:GetDailyVoteByItemId(self.VoteItem:GetVoteItemId())
if max < 0 then
max = 0
end
if newValue > max then newValue = max end
end
local itemCount = XDataCenter.ItemManager.GetCount(self.VoteItem:GetVoteItemId())
if newValue > itemCount then newValue = itemCount end
local dailyLimitCount = match:GetDailyLimitCount()
local currCount = XDataCenter.MoeWarManager.GetDailyVoteCount()
if newValue * voteFactor > (dailyLimitCount - currCount) then
newValue = math.floor((dailyLimitCount - currCount) / (multiple * voteFactor)) * multiple
end
self:SetVoteNumber(newValue)
if self.ValueChangeCallback then
self.ValueChangeCallback(self.VoteId)
end
end
function XUiGridVoteItem:OnClickBtnReduce()
local currNumber = toNumber(self.TxtVoteNumber.text)
local multiple = self.VoteItem:GetMultiple()
local newValue = currNumber - multiple
newValue = XMath.Clamp(newValue, 0, currNumber)
self:SetVoteNumber(newValue)
if self.ValueChangeCallback then
self.ValueChangeCallback(self.VoteId)
end
end
function XUiGridVoteItem:OnClickBtnMax()
if not self:CheckIsCanVote() then return end
local newValue = 0
local multiple = self.VoteItem:GetMultiple()
local voteItemId = self.VoteItem:GetVoteItemId()
local match = XDataCenter.MoeWarManager.GetCurMatch()
local voteFactor = self.VoteItem:GetVoteFactor()
local playerEntity = XDataCenter.MoeWarManager.GetPlayer(self.CurrPlayerId)
if self.VoteItem:IsLimitVote() then
local limitCount = self.IsFailGroup and self.VoteItem:GetDailyLimitFailGroupCountByMatchId(XDataCenter.MoeWarManager.GetCurMatchId()) or self.VoteItem:GetDailyLimitCountByMatchId(XDataCenter.MoeWarManager.GetCurMatchId())
newValue = limitCount - playerEntity:GetDailyVoteByItemId(self.VoteItem:GetVoteItemId())
local itemCount = XDataCenter.ItemManager.GetCount(voteItemId)
newValue = XMath.Clamp(newValue, 0, itemCount)
else
newValue = math.floor(XDataCenter.ItemManager.GetCount(voteItemId) / multiple) * multiple
end
local dailyLimitCount = match:GetDailyLimitCount()
local currCount = XDataCenter.MoeWarManager.GetDailyVoteCount()
if newValue * voteFactor > (dailyLimitCount - currCount) then
newValue = math.floor((dailyLimitCount - currCount) / (multiple * voteFactor)) * multiple
end
self:SetVoteNumber(newValue)
if self.ValueChangeCallback then
self.ValueChangeCallback(self.VoteId)
end
end
function XUiGridVoteItem:OnClickBtnVote()
local count = toNumber(self.TxtVoteNumber.text)
local ownCount = XDataCenter.ItemManager.GetCount(self.VoteItem:GetVoteItemId())
if ownCount < count then
return
end
local playerEntity = XDataCenter.MoeWarManager.GetPlayer(self.CurrPlayerId)
playerEntity:RequestVote(self.VoteId, count, function(count) self.VoteSuccessCallback(tonumber(self.TxtEffectNumber.text), self.CurrPlayerId) end)
end
function XUiGridVoteItem:RegisterButtonEvent()
--self.BtnAdd.CallBack = function() self:OnClickBtnAdd() end
self.BtnMax.CallBack = function() self:OnClickBtnMax() end
--self.BtnReduce.CallBack = function() self:OnClickBtnReduce() end
self.BtnPoll.CallBack = function() self:OnClickBtnVote() end
--增加特殊处理原长按是每帧执行一次,修改为每帧执行十次增加速度
self.AddInputHandler:AddPressListener(function() for i = 1, 10 do self:OnClickBtnAdd() end end)
self.AddInputHandler:AddPointerClickListener(handler(self,self.OnClickBtnAdd))
self.ReduceInputHandler:AddPressListener(function() for i = 1, 10 do self:OnClickBtnReduce() end end)
self.ReduceInputHandler:AddPointerClickListener(handler(self,self.OnClickBtnReduce))
end
function XUiGridVoteItem:CheckIsCanVote()
local voteItemId = self.VoteItem:GetVoteItemId()
local itemCount = XDataCenter.ItemManager.GetCount(voteItemId)
local voteFactor = self.VoteItem:GetVoteFactor()
local multiple = self.VoteItem:GetMultiple()
if itemCount == 0 then
XUiManager.TipMsg(CS.XTextManager.GetText("MoeWarDailyVoteItemNotEnoughTip", XDataCenter.ItemManager.GetItemName(voteItemId)))
return false
end
if self.VoteItem:IsLimitVote() then
local playerEntity = XDataCenter.MoeWarManager.GetPlayer(self.CurrPlayerId)
local limitCount = self.IsFailGroup and self.VoteItem:GetDailyLimitFailGroupCountByMatchId(XDataCenter.MoeWarManager.GetCurMatchId()) or self.VoteItem:GetDailyLimitCountByMatchId(XDataCenter.MoeWarManager.GetCurMatchId())
local canVoteCount = limitCount - playerEntity:GetDailyVoteByItemId(self.VoteItem:GetVoteItemId())
if canVoteCount == 0 then
XUiManager.TipText("MoeWarDailyVoteItemLimitTip")
return false
end
end
local match = XDataCenter.MoeWarManager.GetCurMatch()
local dailyLimitCount = match:GetDailyLimitCount()
local currCount = XDataCenter.MoeWarManager.GetDailyVoteCount()
if currCount >= dailyLimitCount then
XUiManager.TipText("MoeWarDailyVoteLimitTip")
return false
end
if dailyLimitCount - currCount < voteFactor * multiple then
XUiManager.TipText("MoeWarDailyVoteLimitTip2")
return false
end
return true
end
return XUiGridVoteItem