Files
PkmnLib.NET/PkmnLib.Dynamic/Models/ItemTargetType.cs
Deukhoofd 21ec4b28c7
All checks were successful
Build / Build (push) Successful in 57s
Fixes and reworking of item use
2025-11-08 11:43:07 +01:00

67 lines
1.9 KiB
C#

namespace PkmnLib.Dynamic.Models;
/// <summary>
/// Types of targets an item can have.
/// </summary>
[Flags]
public enum ItemTargetType
{
/// <summary>
/// The item does not require a target.
/// </summary>
None = 0,
/// <summary>
/// The item targets Pokémon that are part of the user's own team.
/// </summary>
OwnPokemon = 1,
/// <summary>
/// The item targets allied Pokémon.
/// </summary>
AllyPokemon = 2,
/// <summary>
/// The item targets opposing Pokémon.
/// </summary>
FoePokemon = 4,
}
/// <summary>
/// Helper methods for ItemTargetType.
/// </summary>
public static class ItemTargetTypeHelpers
{
/// <summary>
/// Determines if the given target is valid based on the ItemTargetType.
/// </summary>
public static bool IsValidTarget(this ItemTargetType targetType, IBattle battle, IPokemon user, IPokemon target)
{
if (targetType == ItemTargetType.None)
return true;
if (targetType.HasFlag(ItemTargetType.OwnPokemon))
{
var userParty = battle.Parties.FirstOrDefault(x => x.Party.Contains(user));
var targetParty = battle.Parties.FirstOrDefault(x => x.Party.Contains(target));
if (userParty is not null && targetParty is not null && userParty == targetParty)
return true;
}
if (targetType.HasFlag(ItemTargetType.AllyPokemon))
{
if (user.BattleData?.BattleSide == target.BattleData?.BattleSide)
return true;
}
if (targetType.HasFlag(ItemTargetType.FoePokemon))
{
var userParty = battle.Parties.FirstOrDefault(x => x.Party.Contains(user));
var targetParty = battle.Parties.FirstOrDefault(x => x.Party.Contains(target));
if (userParty is not null && targetParty is not null && userParty != targetParty)
return true;
}
return false;
}
}