예제 #1
0
        /// <summary>
        /// 根据探索量计算探索时间
        /// </summary>
        /// <param name="heroData">英雄信息</param>
        /// <param name="fieldData">野外信息</param>
        /// <param name="explored">探索量</param>
        /// <returns>探索时间</returns>
        public float CalculateExploreTime(HeroData heroData, FieldData fieldData, float volume)
        {
            if (volume <= 0f)
            {
                return(0f);
            }

            float timeMultiple = CalculateExploreTimeMultiple(heroData, fieldData);

            return(volume * timeMultiple);
        }
예제 #2
0
        /// <summary>
        /// 根据探索量计算声望获取
        /// </summary>
        /// <param name="heroData">英雄信息</param>
        /// <param name="fieldData">野外信息</param>
        /// <param name="explored">英雄对野外的总探索量</param>
        /// <returns>声望</returns>
        public float CalculateFame(HeroData heroData, FieldData fieldData, float explored)
        {
            if (explored <= 0f)
            {
                return(0f);
            }

            float multiple = CalculateFameMultiple(heroData, fieldData);

            return(explored * multiple * fieldData.fameRate * 0.01f * heroData.fameFavour * 0.01f);
        }
예제 #3
0
        /// <summary>
        /// 根据探索量计算经验获取
        /// </summary>
        /// <param name="heroData">英雄信息</param>
        /// <param name="fieldData">野外信息</param>
        /// <param name="explored">英雄对野外的总探索量</param>
        /// <returns>经验</returns>
        public float CalculateExp(HeroData heroData, FieldData fieldData, float explored)
        {
            if (explored <= 0f)
            {
                return(0f);
            }

            float multiple = CalculateExpMultiple(heroData, fieldData);

            return(explored * multiple * fieldData.expRate * 0.01f);
        }
예제 #4
0
        /// <summary>
        /// //计算英雄探索某一野外的收益
        /// </summary>
        /// <param name="heroData">英雄数据</param>
        /// <param name="heroPos">英雄位置</param>
        /// <param name="fieldData">野外数据</param>
        /// <param name="fieldPos">野外位置</param>
        /// <returns></returns>
        public float Calculate(HeroData heroData, Vector3 heroPos, FieldData fieldData, Vector3 fieldPos)
        {
            //收益
            //经验 + 金钱 + 声望
            float exp  = CalculateExp(heroData, fieldData, fieldData.resRemain);
            float gold = CalculateGold(heroData, fieldData, fieldData.resRemain);
            float fame = CalculateFame(heroData, fieldData, fieldData.resRemain);

            //时间
            float time = CalculateExploreTime(heroData, fieldData, fieldData.resRemain);
            //路途时间
            float travelTime = EUtilityHelperL.CalcDistanceIn2D(heroPos, fieldPos) / heroData.moveSpeed;

            return((exp + gold + fame) / (time + travelTime + Mathf.Epsilon));
        }
예제 #5
0
        //计算探索速度
        public float CalculateExploreTimeMultiple(HeroData heroData, FieldData fieldData)
        {
            float strNeed = Mathf.Infinity;

            if (fieldDiff.ContainsKey(fieldData.difficulty))
            {
                strNeed = fieldDiff[fieldData.difficulty].value;
            }
            else
            {
                EUtilityHelperL.LogError("错误的野外难度等级");
            }
            //计算力量差距
            int gap = Mathf.FloorToInt((heroData.strength - strNeed) / strNeed * 100f);

            for (int i = 0; i < ladderTime.Length; ++i)
            {
                if (gap <= ladderTime[i].key)
                {
                    return(ladderTime[i].value);
                }
            }
            return(ladderTime[ladderTime.Length - 1].value);
        }
예제 #6
0
        //计算声望获取倍数
        public float CalculateFameMultiple(HeroData heroData, FieldData fieldData)
        {
            int needLevel = 1;

            if (!fieldDiff.ContainsKey(fieldData.difficulty))
            {
                EUtilityHelperL.LogWarning("错误的野外难度!");
            }
            else
            {
                needLevel = Mathf.FloorToInt(fieldDiff[fieldData.difficulty].key);
            }
            //等级差距
            float lvGap = heroData.level - needLevel;

            for (int i = 0; i < ladderFame.Length; ++i)
            {
                if (lvGap <= ladderFame[i].key)
                {
                    return(ladderFame[i].value);
                }
            }
            return(ladderFame[ladderFame.Length - 1].value);
        }
예제 #7
0
 //计算金币获取倍数
 public float CalculateGoldMultiple(HeroData heroData, FieldData fieldData)
 {
     return(1f);
 }