using System.Diagnostics.CodeAnalysis; using PkmnLib.Dynamic.Libraries; namespace PkmnLib.Plugin.Gen7.Libraries.Battling; /// public class Gen7ExperienceGainCalculator : IExperienceGainCalculator { /// [SuppressMessage("ReSharper", "UselessBinaryOperation")] public uint CalculateExperienceGain(IPokemon defeatedPokemon, IPokemon victoriousPokemon) { var b = defeatedPokemon.Form.BaseExperience; var levelFainted = defeatedPokemon.Level; var levelOpponent = victoriousPokemon.Level; // TODO: Experience share, in which case s = 2 for Pokemon that did not participate in battle var s = 1; var v1 = b * levelFainted / 5 * (1 / s); var v2 = (2 * levelFainted + 10) / (levelFainted + levelOpponent + 10); var res = v1 * Math.Pow(v2, 2.5) + 1; // TODO: t = 1.5 if the Pokemon is traded, and 1.7 is traded and has a different language var t = 1; res *= t; // TODO: script modifier, which is e. var e = 1; res *= e; // TODO: v = 1.2 if the Pokemon is at or past the level where it evolves var v = 1; res *= v; return res switch { > uint.MaxValue => uint.MaxValue, < 0 => 0, _ => (uint)res, }; } }