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

279 lines
7.9 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
---@class XCharacterViewModel
local XCharacterViewModel = XClass(nil, "XCharacterViewModel")
2024-09-01 20:49:41 +00:00
---@return XCharacterAgency
local GetCharAgency = function ()
local ag = XMVCA:GetAgency(ModuleId.XCharacter)
return ag
end
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
2024-09-01 20:49:41 +00:00
-- 队长技能等级
self._CaptainSkillLevel = false
-- 初始化来自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
2024-09-01 20:49:41 +00:00
function XCharacterViewModel:UpdateCaptainSkillLevelByList(skillList)
local characterId = self:GetId()
local captainSkillId = XCharacterConfigs.GetCharacterCaptainSkill(characterId)
local captainLevel = 0
for i = 1, #skillList do
local skillData = skillList[i]
local skillId = skillData.Id
if captainSkillId == skillId then
captainLevel = skillData.Level
end
end
self._CaptainSkillLevel = captainLevel
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()
2024-09-01 20:49:41 +00:00
return GetCharAgency():GetCharSmallHeadIcon(self.Config.Id, not self.IsBelongPlayer)
end
function XCharacterViewModel:GetBigHeadIcon()
2024-09-01 20:49:41 +00:00
return GetCharAgency():GetCharBigHeadIcon(self.Config.Id, not self.IsBelongPlayer)
end
2024-09-01 20:49:41 +00:00
function XCharacterViewModel:GetHalfBodyIcon()
--获得角色半身像(剧情用)
return GetCharAgency():GetCharHalfBodyBigImage(self.Config.Id)
end
2024-09-01 20:49:41 +00:00
function XCharacterViewModel:GetHalfBodyCommonIcon()
--获得角色半身像(通用)
return GetCharAgency():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
2024-09-01 20:49:41 +00:00
self.Attribs = GetCharAgency():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
2024-09-01 20:49:41 +00:00
result = GetCharAgency():GetCaptainSkillInfo(self.SourceEntityId)
else
-- 可能存在第三种情况,是角色同时不属于玩家本身,后面有业务需求再扩展
local skillLevel = self._CaptainSkillLevel or 1
result = XCharacterConfigs.GetCaptainSkillInfo(self.SourceEntityId, skillLevel)
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
2024-09-01 20:49:41 +00:00
function XCharacterViewModel:UpdateByFightNpcData(fightNpcData)
self:UpdateWithData(fightNpcData.Character)
self:UpdateAbility(fightNpcData.Character.Ability)
self:UpdateFashionId(fightNpcData.Character.FashionId)
self:UpdateLiberateLv(fightNpcData.Character.LiberateLv)
self:UpdateSourceEntityId(fightNpcData.Character.Id)
local skillList = fightNpcData.Character.SkillList
self:UpdateCaptainSkillLevelByList(skillList)
end
return XCharacterViewModel