c1_lua/lua/app/userdata/collection/collection_hero_entity.lua
2023-07-14 17:35:55 +08:00

236 lines
6.4 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local CollectBaseEntity = require "app/userdata/collection/collection_base_entity"
local CollectionHeroEntity = class("CollectionHeroEntity", CollectBaseEntity)
-- 英雄图鉴数据
-- 初始化服务器数据
function CollectionHeroEntity:init(data)
self.curlevel = data.level
self.curPoint = data.point
end
-- 是否有红点
function CollectionHeroEntity:hasRedPoint()
-- 可领点数
for idx, data in pairs(self:getCollectList()) do
if self:getCanCollectPoint(data.id) > 0 then
return true
end
end
-- 可领奖励
for id, data in pairs(self:getRewardList()) do
if self:isMeetTargetPoint(id) and not self:isRewardReceived(id) then
return true
end
end
return false
end
-- 获取当前收集值
function CollectionHeroEntity:getCurCollectPoint()
return self.curPoint
end
-- 获取当前已领取奖励图鉴等级
function CollectionHeroEntity:getCurCollectLevel()
return self.curlevel
end
-- 获取总收集值
function CollectionHeroEntity:getTotalCollectPoint()
return self:getRewardList()[#self:getRewardList()].point
end
-- 获取收集目标列表
function CollectionHeroEntity:getCollectList()
if self.heroList == nil then
self.heroList = {}
for id, data in pairs(ConfigManager:getConfig("hero")) do
data.id = id
table.insert(self.heroList, data)
end
table.sort(self.heroList, function(a, b)
if a.qlt ~= b.qlt then
return a.qlt > b.qlt
end
return a.id > b.id
end)
-- Logger.printTable(self.heroList)
end
return self.heroList
end
-- 获取收集奖励列表
function CollectionHeroEntity:getRewardList()
if self.cfgRewards == nil then
self.cfgRewards = ConfigManager:getConfig("collection")
end
return self.cfgRewards
end
-- 获取当前收集点数所在档位id
function CollectionHeroEntity:getCurTargetId()
for id, data in pairs(self:getRewardList()) do
local prog = self:getRewardTargetProgress(id)
if prog >= 0 and prog < 1 then
-- 在进度条范围内
return id
end
end
end
-- 获取奖励档位收集进度
function CollectionHeroEntity:getRewardTargetProgress(id)
local cur = self:getCurCollectPoint()
local rangeMin = self:getTargetMinPoint(id)
local rangeMax = self:getTargetMaxPoint(id)
-- Logger.logHighlight(id.."档位范围:"..rangeMin.."->"..rangeMax)
if cur >= rangeMax then
-- 超过进度条
return 1
elseif cur < rangeMin then
--低于进度条
return -1
elseif cur == rangeMin then
-- 进度最低值
return 0
else
-- 在进度条范围内
return (cur - rangeMin) / (rangeMax - rangeMin)
end
end
-- 获取当前可领奖or正在进行中的目标
function CollectionHeroEntity:getCanGetOrCollectingTargetId()
for id, data in pairs(self:getRewardList()) do
if not self:isMeetTargetPoint(id) then
return id
end
if not self:isRewardReceived(id) then
return id
end
end
return nil
end
-- 获取收集目标点数
function CollectionHeroEntity:getTargetPoint(id)
local targetPoint = self:getRewardList()[id].point
local lastTarget = self:getLastTarget(id)
if lastTarget then
return targetPoint - lastTarget.point
end
return targetPoint
end
-- 获取基于目标收集点数的当前收集值
function CollectionHeroEntity:getTargetOwnedPoint(id)
local curPoint = self:getCurCollectPoint()
local lastTarget = self:getLastTarget(id)
if lastTarget then
return curPoint - lastTarget.point
end
return curPoint
end
-- 获取可领取收集值
function CollectionHeroEntity:getCanCollectPoint(id)
-- 基础奖励值 * 升级可领取次数
-- 小于等于0为无点数反之有可领取点数
local result = 0
local heroEntity = DataManager.HeroData:getHeroById(id)
if heroEntity then
local curLevel = heroEntity:getLv()
local collectedLevel = heroEntity:getCollectionLevel()
result = (curLevel - collectedLevel) * heroEntity:getCollectionPoint()
end
return result
end
-- 获取一级可领取收集值
function CollectionHeroEntity:getOneLevelCanCollectPoint(id)
local heroEntity = DataManager.HeroData:getHeroById(id)
if heroEntity then
return heroEntity:getCollectionPoint()
end
end
-- 奖励是否已领取
function CollectionHeroEntity:isRewardReceived(id)
return self.curlevel >= id
end
-- 是否满足奖励领取条件
function CollectionHeroEntity:isMeetTargetPoint(id)
return self.curPoint >= self:getRewardList()[id].point
end
-- 领取收集点数成功
function CollectionHeroEntity:onGetedPointSuccess(id, point)
DataManager.HeroData:getHeroById(id):updateCollectionLevel()
self.curPoint = point
end
-- 领取图鉴奖励成功
function CollectionHeroEntity:onGetedPointRewardSuccess()
self.curlevel = self.curlevel + 1
end
-- 独有逻辑 -----------------------------------------------------------------------------------------------
-- 获取档位范围最低值
function CollectionHeroEntity:getTargetMinPoint(id)
local rangeMin = 0
local curPoint = self:getRewardList()[id].point
local lastTarget = self:getLastTarget(id)
if lastTarget then
rangeMin = curPoint - math.floor((curPoint - lastTarget.point) / 2)
end
return rangeMin
end
-- 获取档位范围最高值
function CollectionHeroEntity:getTargetMaxPoint(id)
local rangeMax = 0
local curPoint = self:getRewardList()[id].point
local nextTarget = self:getNextTarget(id)
if nextTarget then
rangeMax = curPoint + math.floor((nextTarget.point - curPoint) / 2)
else
rangeMax = curPoint
end
return rangeMax
end
-- 获取上一个低档位
function CollectionHeroEntity:getLastTarget(targetId)
local result = nil
for id, data in pairs(self:getRewardList()) do
if id == targetId then
return result
end
result = data
end
end
-- 获取下一个高档位
function CollectionHeroEntity:getNextTarget(targetId)
local finded = false
for id, data in pairs(self:getRewardList()) do
if finded then
return data
end
if id == targetId then
finded = true
end
end
end
return CollectionHeroEntity