86 lines
2.5 KiB
C#
86 lines
2.5 KiB
C#
using PkmnLib.Static.Utils;
|
|
|
|
namespace PkmnLib.Static;
|
|
|
|
/// <summary>
|
|
/// A nature is an attribute on a Pokémon that modifies the effective base stats on a Pokémon. They
|
|
/// can have an increased statistic and a decreased statistic, or be neutral.
|
|
/// </summary>
|
|
public interface INature : INamedValue
|
|
{
|
|
/// <summary>
|
|
/// The stat that should receive the increased modifier.
|
|
/// </summary>
|
|
Statistic IncreasedStat { get; }
|
|
|
|
/// <summary>
|
|
/// The stat that should receive the decreased modifier.
|
|
/// </summary>
|
|
Statistic DecreasedStat { get; }
|
|
|
|
/// <summary>
|
|
/// The amount that the increased stat gets modified by.
|
|
/// </summary>
|
|
float IncreasedModifier { get; }
|
|
|
|
/// <summary>
|
|
/// The amount that the decreased stat gets modified by.
|
|
/// </summary>
|
|
float DecreasedModifier { get; }
|
|
|
|
/// <summary>
|
|
/// Calculates the modifier for a given stat. If it's the increased stat, returns the increased
|
|
/// modifier, if it's the decreased stat, returns the decreased modifier. Otherwise returns 1.0.
|
|
/// </summary>
|
|
/// <param name="stat">The stat to calculate the modifier for.</param>
|
|
/// <returns>The calculated modifier.</returns>
|
|
float GetStatModifier(Statistic stat);
|
|
|
|
/// <summary>
|
|
/// Checks if two natures are equal.
|
|
/// </summary>
|
|
/// <param name="other">The other nature to compare to.</param>
|
|
/// <returns>True if the natures are equal, false otherwise.</returns>
|
|
bool Equals(INature other);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public class Nature(
|
|
StringKey name,
|
|
Statistic increaseStat,
|
|
Statistic decreaseStat,
|
|
float increaseModifier,
|
|
float decreaseModifier)
|
|
: INature
|
|
{
|
|
/// <inheritdoc />
|
|
public StringKey Name { get; } = name;
|
|
|
|
/// <inheritdoc />
|
|
public Statistic IncreasedStat { get; } = increaseStat;
|
|
|
|
/// <inheritdoc />
|
|
public Statistic DecreasedStat { get; } = decreaseStat;
|
|
|
|
/// <inheritdoc />
|
|
public float IncreasedModifier { get; } = increaseModifier;
|
|
|
|
/// <inheritdoc />
|
|
public float DecreasedModifier { get; } = decreaseModifier;
|
|
|
|
/// <inheritdoc />
|
|
public float GetStatModifier(Statistic stat)
|
|
{
|
|
if (stat == IncreasedStat && stat != DecreasedStat)
|
|
return IncreasedModifier;
|
|
if (stat == DecreasedStat && stat != IncreasedStat)
|
|
return DecreasedModifier;
|
|
return 1.0f;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public bool Equals(INature? other)
|
|
{
|
|
return other is not null && StringComparer.InvariantCultureIgnoreCase.Equals(Name, other.Name);
|
|
}
|
|
} |