PGRData/Script/matrix/xentity/xmoewar/XMoeWarPlayer.lua

235 lines
6.3 KiB
Lua
Raw Normal View History

---@class XMoeWarPlayer
local XMoeWarPlayer = XClass(nil, "XMoeWarPlayer")
local tableInsert = table.insert
local tableSort = table.sort
local stringFormat = string.format
local pairs = pairs
local ipairs = ipairs
local Default = {
-- 选手基本信息
TodaySupport = 0,
SupportTotal = 0,
MyVote = 0,
IsEliminate = false
}
local DEFAULT_ANIM_INDEX = 1 --动画默认下标
function XMoeWarPlayer:Ctor(Id)
for key in pairs(Default) do
self[key] = Default[key]
end
self.Data = {}
self.MatchInfoDic = {}
self.DailyVoteDic = {}
self:LoadPlayerCfg(Id)
self.AnimRandomIndex = {}
end
function XMoeWarPlayer:LoadPlayerCfg(Id)
self.Id = Id
self.Cfg = XMoeWarConfig.GetPlayerCfg(Id)
self.Group = XMoeWarConfig.GetPlayerGroup(Id)
end
--function XMoeWarPlayer:GetGroup()
-- return self.Group
--end
function XMoeWarPlayer:GetGroupName()
return XDataCenter.MoeWarManager.GetActivityInfo().GroupName[self.Group]
end
function XMoeWarPlayer:GetName()
return self.Cfg.Name
end
function XMoeWarPlayer:GetDesc()
return self.Cfg.Description
end
function XMoeWarPlayer:GetModel()
return self.Cfg.ModelName
end
function XMoeWarPlayer:GetJob()
return self.Cfg.CareerName
end
function XMoeWarPlayer:GetCareerIcon()
return self.Cfg.CareerIcon
end
function XMoeWarPlayer:GetCamp()
return self.Cfg.CampName
end
function XMoeWarPlayer:GetAnim(actionType)
math.randomseed(os.time())
if actionType == XMoeWarConfig.ActionType.Intro then
--左闭右闭
local index = math.random(1, #self.Cfg.IntroAnim)
self.AnimRandomIndex[XMoeWarConfig.ActionType.Intro] = index
return self.Cfg.IntroAnim[index]
elseif actionType == XMoeWarConfig.ActionType.Thank then
--左闭右闭
local index = math.random(1, #self.Cfg.ThankAnim)
self.AnimRandomIndex[XMoeWarConfig.ActionType.Thank] = index
return self.Cfg.ThankAnim[index]
end
end
function XMoeWarPlayer:GetCv(actionType)
if actionType == XMoeWarConfig.ActionType.Intro then
return self.Cfg.IntroCv
elseif actionType == XMoeWarConfig.ActionType.Thank then
return self.Cfg.ThankCv
end
end
function XMoeWarPlayer:GetLength(actionType)
if actionType == XMoeWarConfig.ActionType.Intro then
local index = self.AnimRandomIndex[XMoeWarConfig.ActionType.Intro] or DEFAULT_ANIM_INDEX
return self.Cfg.IntroLength[index]
elseif actionType == XMoeWarConfig.ActionType.Thank then
local index = self.AnimRandomIndex[XMoeWarConfig.ActionType.Thank] or DEFAULT_ANIM_INDEX
return self.Cfg.ThankLength[index]
end
end
function XMoeWarPlayer:GetAnimRandomIndex(actionType)
if not XTool.IsNumberValid(actionType) then
return DEFAULT_ANIM_INDEX
end
return self.AnimRandomIndex[actionType] or DEFAULT_ANIM_INDEX
end
function XMoeWarPlayer:GetActionBg()
return self.Cfg.ActionBg
end
function XMoeWarPlayer:GetSquareHead()
return self.Cfg.SquareHead
end
function XMoeWarPlayer:GetCircleHead()
return self.Cfg.CircleHead
end
function XMoeWarPlayer:GetBigCharacterImage()
return self.Cfg.BigCharacterImage
end
function XMoeWarPlayer:GetSupportCount(matchId)
if matchId then
local matchInfo = self.MatchInfoDic[matchId]
if matchInfo then
return matchInfo.VoteCount
else
return 0
end
else
return self.SupportTotal
end
end
function XMoeWarPlayer:GetMySupportCount(sId)
local match = XDataCenter.MoeWarManager.GetVoteMatch(sId)
if match then
local matchInfo = self.MatchInfoDic[match.Id]
if matchInfo and matchInfo.MyVote then
return matchInfo.MyVote
else
return 0
end
else
return self.MyVote
end
end
function XMoeWarPlayer:GetIsEliminate()
return self.IsEliminate
end
function XMoeWarPlayer:GetShareImage()
return self.Cfg.ShareImg
end
function XMoeWarPlayer:GetWinAnimGroupId(sessionId)
return self.Cfg.WinAnimGroupId[sessionId]
end
function XMoeWarPlayer:GetLoseAnimGroupId(sessionId)
return self.Cfg.LoseAnimGroupId[sessionId]
end
local SECOND_SESSIONID = 5--仅决赛时出现第二名三人比赛固定配置列5
function XMoeWarPlayer:GetSecondAnimGroupId()
return self.Cfg.LoseAnimGroupId[SECOND_SESSIONID]
end
function XMoeWarPlayer:UpdateDailyVote(itemId, voteCount)
self.DailyVoteDic[itemId] = voteCount
end
function XMoeWarPlayer:GetDailyVoteByItemId(itemId)
return self.DailyVoteDic[itemId] or 0
end
function XMoeWarPlayer:UpdateMatchVote(match, voteCount, pairInfo)
local info = self.MatchInfoDic[match.Id] or {}
info.IsWin = pairInfo.WinnerId == self.Id
info.IsSecond = pairInfo.SecondId == self.Id
info.MyVote = info.MyVote or 0
info.VoteCount = voteCount
self.SupportTotal = self.SupportTotal + voteCount
info.MatchEntity = match
-- 已结束
if pairInfo.WinnerId ~= 0 then
info.IsOver = true
if not info.IsWin then
self.IsEliminate = true
end
end
self.MatchInfoDic[match.Id] = info
end
function XMoeWarPlayer:UpdateMatchMyVote(data)
local matchInfo = self.MatchInfoDic[data.MatchId]
matchInfo.MyVote = data.MyVote or 0
self.MyVote = self.MyVote + matchInfo.MyVote
-- if matchInfo.IsOver then
-- self.MatchInfoDic[data.MatchId] = XReadOnlyTable.Create(matchInfo)
-- end
end
--萌战投票请求
function XMoeWarPlayer:RequestVote(itemNo, count, cb)
local req = { PlayerId = self.Id,
ItemId = XMoeWarConfig.GetVoteItemById(itemNo).ItemId,
Count = count }
XNetwork.Call("MoeWarVoteRequest", req, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
if self.DailyVoteDic[req.ItemId] then
self.DailyVoteDic[req.ItemId] = self.DailyVoteDic[req.ItemId] + count
else
self.DailyVoteDic[req.ItemId] = count
end
XDataCenter.MoeWarManager.UpdateDailyVoteCount(res.Vote)
local matchInfo = self.MatchInfoDic[XDataCenter.MoeWarManager.GetCurMatchId()]
matchInfo.MyVote = matchInfo.MyVote + res.Vote
self.MyVote = self.MyVote + res.Vote
if cb then
cb(count)
end
XEventManager.DispatchEvent(XEventId.EVENT_MOE_WAR_VOTE_SUCC)
end)
end
return XMoeWarPlayer