41 lines
1.3 KiB
C#
41 lines
1.3 KiB
C#
using PkmnLib.Dynamic.ScriptHandling;
|
|
using PkmnLib.Static.Utils;
|
|
|
|
namespace PkmnLib.Dynamic.Models;
|
|
|
|
/// <summary>
|
|
/// Random number generator for battles.
|
|
/// </summary>
|
|
public interface IBattleRandom : IRandom
|
|
{
|
|
/// <summary>
|
|
/// Gets whether or not a move triggers its secondary effect. This takes its chance, and
|
|
/// rolls whether it triggers. As a side effect this run scripts to allow modifying this random
|
|
/// chance.
|
|
/// </summary>
|
|
bool EffectChance(float chance, IExecutingMove executingMove, IPokemon target, byte hitNumber);
|
|
}
|
|
|
|
/// <inheritdoc cref="IBattleRandom"/>
|
|
public class BattleRandomImpl : RandomImpl, IBattleRandom
|
|
{
|
|
public BattleRandomImpl()
|
|
{
|
|
}
|
|
|
|
public BattleRandomImpl(int seed) : base(seed)
|
|
{
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public bool EffectChance(float chance, IExecutingMove executingMove, IPokemon target, byte hitNumber)
|
|
{
|
|
executingMove.RunScriptHook(script => script.ChangeEffectChance(executingMove, target, hitNumber, ref chance));
|
|
target.RunScriptHook(script => script.ChangeIncomingEffectChance(executingMove, target, hitNumber, ref chance));
|
|
if (chance > 100.0)
|
|
return true;
|
|
if (chance < 0.0)
|
|
return false;
|
|
return GetFloat() * 100.0 < chance;
|
|
}
|
|
} |