This commit is contained in:
67
PkmnLib.Dynamic/Models/ItemTargetType.cs
Normal file
67
PkmnLib.Dynamic/Models/ItemTargetType.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user