PGRData/Script/matrix/xentity/xcharacter/XCharacterViewModel.lua

241 lines
6.7 KiB
Lua
Raw Normal View History

local XCharacterViewModel = XClass(nil, "XCharacterViewModel")
function XCharacterViewModel:Ctor(characterCid)
self.Config = XCharacterConfigs.GetCharacterTemplate(characterCid)
self.ProfessionType = nil
-- 解放等级
self.LiberateLv = 0
self.FashionId = nil
-- 该角色是否属于玩家
self.IsBelongPlayer = false
-- XCharacter
self.Character = nil
self.UpdatedData = nil
-- 来源实体Id默认读取角色的
self.SourceEntityId = characterCid
-- 初始化来自XCharacter的默认字段,保持一致性
for key, value in pairs(XCharacter.GetDefaultFields()) do
if type(value) == "table" then
self[key] = XTool.Clone(value)
else
self[key] = value
end
end
self.Id = self.Config.Id
end
-- data : 同XCharacter.GetDefaultFields()一致
function XCharacterViewModel:UpdateWithData(data)
self.UpdatedData = data
for key, value in pairs(data) do
self[key] = value
end
end
function XCharacterViewModel:UpdateAbility(value)
self.Ability = value
end
function XCharacterViewModel:UpdateSourceEntityId(value)
self.SourceEntityId = value
end
function XCharacterViewModel:UpdateFashionId(value)
self.FashionId = value
end
function XCharacterViewModel:UpdateLiberateLv(value)
self.LiberateLv = value
end
function XCharacterViewModel:UpdateIsBelongPlayer(value)
self.IsBelongPlayer = value
end
-- value : XCharacter
function XCharacterViewModel:UpdateCharacter(value)
self.Character = value
end
function XCharacterViewModel:GetId()
return self.Id
end
function XCharacterViewModel:GetCharacter()
if self.Character == nil then
self.Character = XCharacter.New(self.UpdatedData)
self.Character:RemoveEventListeners()
end
return self.Character
end
function XCharacterViewModel:GetSourceEntityId()
return self.SourceEntityId
end
function XCharacterViewModel:GetConfigId()
return self.Config.Id
end
function XCharacterViewModel:GetUpdatedData()
return self.UpdatedData
end
function XCharacterViewModel:GetName()
return self.Config.Name
end
function XCharacterViewModel:GetEnName()
return self.Config.EnName
end
function XCharacterViewModel:GetLogName()
return self.Config.LogName
end
function XCharacterViewModel:GetFashionId()
return self.FashionId
end
function XCharacterViewModel:GetLevel()
return self.Level
end
function XCharacterViewModel:GetQuality()
return self.Quality
end
-- 型号名称
function XCharacterViewModel:GetTradeName()
return self.Config.TradeName
end
function XCharacterViewModel:GetFullName()
return XUiHelper.GetText("CharacterFullName", self:GetName(), self:GetTradeName())
end
-- 职业类型
function XCharacterViewModel:GetProfessionType()
if self.ProfessionType == nil then
local npcId = XCharacterConfigs.GetCharNpcId(self.Config.Id, self.Quality)
local npcConfig = XCharacterConfigs.GetNpcTemplate(npcId)
self.ProfessionType = npcConfig and npcConfig.Type or 0
end
return self.ProfessionType
end
-- 职业图标
function XCharacterViewModel:GetProfessionIcon()
return XCharacterConfigs.GetNpcTypeIcon(self:GetProfessionType())
end
-- 品质图标
function XCharacterViewModel:GetQualityIcon()
return XCharacterConfigs.GetCharacterQualityIcon(self.Quality)
end
function XCharacterViewModel:GetSmallHeadIcon()
return XDataCenter.CharacterManager.GetCharSmallHeadIcon(self.Config.Id, not self.IsBelongPlayer)
end
function XCharacterViewModel:GetBigHeadIcon()
return XDataCenter.CharacterManager.GetCharBigHeadIcon(self.Config.Id, not self.IsBelongPlayer)
end
function XCharacterViewModel:GetHalfBodyIcon() --获得角色半身像(剧情用)
return XDataCenter.CharacterManager.GetCharHalfBodyBigImage(self.Config.Id)
end
function XCharacterViewModel:GetHalfBodyCommonIcon() --获得角色半身像(通用)
return XDataCenter.CharacterManager.GetCharHalfBodyImage(self.Config.Id)
end
function XCharacterViewModel:GetGradeLevel()
return self.Grade
end
function XCharacterViewModel:GetGradeIcon()
return XCharacterConfigs.GetCharGradeIcon(self.Config.Id, self.Grade)
end
function XCharacterViewModel:GetAbility()
if self.IsBelongPlayer and self.Character then
return self.Character.Ability
end
return self.Ability
end
function XCharacterViewModel:GetCareer()
return XCharacterConfigs.GetCharDetailTemplate(self.Config.Id).Career
end
-- 获取能量元素(物理,火,暗...
function XCharacterViewModel:GetObtainElements()
return XCharacterConfigs.GetCharDetailTemplate(self.Config.Id).ObtainElementList
end
-- 获取能量元素图标(物理,火,暗...
function XCharacterViewModel:GetObtainElementIcons()
local result = {}
local obtainElements = self:GetObtainElements()
local elementConfig = nil
for _, v in ipairs(obtainElements) do
elementConfig = XCharacterConfigs.GetCharElement(v)
table.insert(result, elementConfig.Icon)
end
return result
end
-- equipViewModels : XEquipViewModel array
function XCharacterViewModel:GetAttributes(equipViewModels)
local character = self:GetCharacter()
-- 如果是属于自身玩家的数据,直接返回原来的写法
if self.IsBelongPlayer then
return character:GetAttributes()
end
local equips = {}
for _, value in ipairs(equipViewModels or {}) do
table.insert(equips, value:GetEquip())
end
self.Attribs = XDataCenter.CharacterManager.GetCharacterAttribsOther(character, equips)
return self.Attribs
end
-- 获取队长技能信息
function XCharacterViewModel:GetCaptainSkillInfo()
local result
if XRobotManager.CheckIsRobotId(self.SourceEntityId) then
result = XRobotManager.GetRobotCaptainSkillInfo(self.SourceEntityId)
elseif self.IsBelongPlayer then
result = XDataCenter.CharacterManager.GetCaptainSkillInfo(self.SourceEntityId)
-- 可能存在第三种情况,是角色同时不属于玩家本身,后面有业务需求再扩展
end
return result
end
-- return : XCharacterConfigs.CharacterType
function XCharacterViewModel:GetCharacterType()
return XCharacterConfigs.GetCharacterType(self.Config.Id)
end
-- 获得当前经验
function XCharacterViewModel:GetCurExp()
local character = self:GetCharacter()
return character.Exp
end
-- 获得升至下一等级的经验
function XCharacterViewModel:GetNextLevelExp()
local character = self:GetCharacter()
local charId = self:GetId()
return XCharacterConfigs.GetNextLevelExp(charId, character.Level)
end
-- 获得满级
function XCharacterViewModel:GetMaxLevel()
local character = self:GetCharacter()
local charId = self:GetId()
return XCharacterConfigs.GetCharMaxLevel(charId)
end
return XCharacterViewModel