namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;
///
/// Bad Dreams is an ability that causes sleeping opposing Pokémon to lose 1/8 of their maximum HP at the end of each turn.
/// This effect only applies to sleeping Pokémon on the opposing side of the field.
///
/// Bulbapedia - Bad Dreams
///
[Script(ScriptCategory.Ability, "bad_dreams")]
public class BadDreams : Script
{
private IPokemon? _owner;
///
public override void OnAddedToParent(IScriptSource source)
{
if (source is not IPokemon pokemon)
throw new InvalidOperationException("Bad Dreams ability can only be added to a Pokemon.");
_owner = pokemon;
}
///
public override void OnEndTurn(IScriptSource owner, IBattle battle)
{
if (_owner is null)
return;
var opponents = battle.Sides.Where(x => x != _owner?.BattleData?.BattleSide).SelectMany(x => x.Pokemon)
.WhereNotNull();
foreach (var opponent in opponents)
{
if (!opponent.HasStatus(ScriptUtils.ResolveName()))
continue;
EventBatchId batchId = new();
battle.EventHook.Invoke(new AbilityTriggerEvent(_owner));
opponent.Damage(opponent.MaxHealth / 8, DamageSource.Misc, batchId);
}
}
}