c1_lua/lua/app/userdata/hero/hero_entity.lua
2023-05-25 15:26:57 +08:00

272 lines
5.6 KiB
Lua

local HeroEntity = class("HeroEntity", BaseData)
function HeroEntity:ctor(cfgId, lv)
self.id = cfgId
self.cfgId = cfgId
self.data.lv = lv
self.attrDirty = false
self.config = ConfigManager:getConfig("hero")[self.cfgId]
self.beginLv = self.config.begin_lv -- 初始等级
self.baseAttrOriginal = {}
self.allAttr = {}
self:initAttr()
self:updateAttr()
end
function HeroEntity:initAttr()
self.allAttr[GConst.ATTR_TYPE.hp] = 0
self.allAttr[GConst.ATTR_TYPE.atk_red] = 0
self.allAttr[GConst.ATTR_TYPE.atk_yellow] = 0
self.allAttr[GConst.ATTR_TYPE.atk_green] = 0
self.allAttr[GConst.ATTR_TYPE.atk_blue] = 0
self.allAttr[GConst.ATTR_TYPE.atk_purple] = 0
end
function HeroEntity:setLv(lv)
if not lv then
return
end
if self.data.lv == lv then
return
end
self.data.lv = lv
ModuleManager.TaskManager:addTaskProgress(GConst.TaskConst.TASK_TYPE.X_HERO_LV_UP)
self:setDirty()
end
function HeroEntity:getCfgId()
return self.cfgId
end
function HeroEntity:getLv()
return self.data.lv
end
function HeroEntity:getQlt()
return self.config.qlt
end
function HeroEntity:getBeginLv()
return self.beginLv
end
function HeroEntity:getMatchType()
return self.config.position
end
function HeroEntity:setAttrDirty()
self.attrDirty = true
end
function HeroEntity:getAllAttr()
if self.attrDirty == true then
self.attrDirty = false
self:updateAttr()
end
return self.allAttr
end
function HeroEntity:updateAttr()
self:updateBaseAttr()
self:updateAllAttr()
end
function HeroEntity:updateBaseAttr()
self.baseAttrOriginal[GConst.ATTR_TYPE.hp] = self:getCfgHp()
self.baseAttrOriginal[GConst.ATTR_TYPE.atk_red] = 0
self.baseAttrOriginal[GConst.ATTR_TYPE.atk_yellow] = 0
self.baseAttrOriginal[GConst.ATTR_TYPE.atk_green] = 0
self.baseAttrOriginal[GConst.ATTR_TYPE.atk_blue] = 0
self.baseAttrOriginal[GConst.ATTR_TYPE.atk_purple] = 0
self.baseAttrOriginal[GConst.ATTR_TYPE[GConst.MATCH_ATTACK_NAME[self.config.position]]] = self:getCfgAtk()
end
function HeroEntity:getCfgHp(lv)
lv = lv or self.data.lv
if lv > self:getMaxLv() then
lv = self:getMaxLv()
end
if self.config and self.config.hp then
return self.config.hp[lv] or 0
end
return 0
end
function HeroEntity:getCfgAtk(lv)
lv = lv or self.data.lv
if lv > self:getMaxLv() then
lv = self:getMaxLv()
end
if self.config and self.config.atk then
return self.config.atk[lv] or 0
end
return 0
end
function HeroEntity:getUnlcokChapter()
return self.config.unlock_chapter or 0
end
function HeroEntity:updateAllAttr()
for k, v in pairs(self.baseAttrOriginal) do
self.allAttr[k] = v
end
end
function HeroEntity:getAtk()
return self.allAttr[GConst.ATTR_TYPE.atk] or 0
end
function HeroEntity:getHp()
return self.allAttr[GConst.ATTR_TYPE.hp] or 0
end
function HeroEntity:setDirty()
self.attrDirty = true
end
function HeroEntity:isMaxLv()
return self.data.lv >= self:getMaxLv()
end
function HeroEntity:getMaxLv()
if not self.maxLv then
self.maxLv = ConfigManager:getConfigNum("hero_level")
end
return self.maxLv
end
function HeroEntity:canLvUp(showToast)
if self:isMaxLv() then
return false, GConst.HeroConst.CHECK_LV_UP_STATE.MAX_LV
end
local cost = self:getLvUpMaterials()
if not cost then
return false, GConst.HeroConst.CHECK_LV_UP_STATE.NO_COST
end
local fragmentCost = cost[1] or 0
if not GFunc.checkCost(self:getFragmentId(), fragmentCost, showToast) then
return false, GConst.HeroConst.CHECK_LV_UP_STATE.FRAGMENT_NOT_ENOUGH
end
local goldCost = cost[2] or 0
if not GFunc.checkCost(GConst.ItemConst.ITEM_ID_GOLD, goldCost, showToast) then
return false, GConst.HeroConst.CHECK_LV_UP_STATE.COIN_NOT_ENOUGH
end
return true, GConst.HeroConst.CHECK_LV_UP_STATE.SUCCESS
end
function HeroEntity:isUnlock()
if self:isActived() then
return true
end
if self:getUnlcokChapter() <= DataManager.ChapterData:getMaxChapterId() or self:canLvUp() then
return true
end
return false
end
function HeroEntity:isActived()
return self.data.lv >= self:getBeginLv()
end
function HeroEntity:getLvUpMaterials()
local lv = self.data.lv + 1
if lv < self:getBeginLv() then
lv = self:getBeginLv()
end
local nextLvInfo = ConfigManager:getConfig("hero_level")[lv]
if not nextLvInfo then
return
end
local fieldName = "cost_" .. self:getQlt()
return nextLvInfo[fieldName]
end
function HeroEntity:getConfig()
return self.config
end
function HeroEntity:getModelId()
return self.config.model_id
end
function HeroEntity:getBaseSkill()
return self.config.base_skill
end
function HeroEntity:getAssistingSkill()
return self.config.support_skill
end
function HeroEntity:getHurtSkill()
return self.config.hurt_skill
end
function HeroEntity:getFragmentId()
return self.config.item_id
end
function HeroEntity:getIcon()
return self.config.icon
end
function HeroEntity:getHurtNum()
return self.config.hurt_num
end
function HeroEntity:getName()
return ModuleManager.HeroManager:getHeroName(self:getCfgId())
end
function HeroEntity:getActiveRogueCount()
local lvInfo = ConfigManager:getConfig("hero_level")[self.data.lv]
if not lvInfo then
return 0
end
return lvInfo.unlock_skill
end
function HeroEntity:getUnlockRogueId()
return self.config.rouge_skill
end
function HeroEntity:getRogueSkillList()
if not self.rogueSkillList then
self.rogueSkillList = {}
local count = 1
while true do
local id = self.config["rouge_skill_" .. count]
if id then
table.insert(self.rogueSkillList, id)
else
break
end
count = count + 1
end
end
return self.rogueSkillList
end
function HeroEntity:getActiveTogueSkills()
local list = {}
for i = 1, self:getActiveRogueCount() do
local id = self:getRogueSkillList()[i]
if id then
table.insert(list, id)
else
break
end
end
return list
end
return HeroEntity