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