/// <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); }
/// <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); }
/// <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); }
/// <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)); }
//计算探索速度 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); }
//计算声望获取倍数 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); }
//计算金币获取倍数 public float CalculateGoldMultiple(HeroData heroData, FieldData fieldData) { return(1f); }