Initial commit
This commit is contained in:
155
PkmnLib.Static/Item.cs
Normal file
155
PkmnLib.Static/Item.cs
Normal file
@@ -0,0 +1,155 @@
|
||||
using System.Collections.Immutable;
|
||||
using PkmnLib.Static.Utils;
|
||||
|
||||
namespace PkmnLib.Static;
|
||||
|
||||
/// <summary>
|
||||
/// An item category defines which bag slot items are stored in.
|
||||
/// </summary>
|
||||
public enum ItemCategory
|
||||
{
|
||||
/// <summary>
|
||||
/// This is where most items should go.
|
||||
/// </summary>
|
||||
MiscItem,
|
||||
|
||||
/// <summary>
|
||||
/// Pokeballs are used for capturing Pokemons.
|
||||
/// </summary>
|
||||
Pokeball,
|
||||
|
||||
/// <summary>
|
||||
/// Medicine is used for healing HP, PP, and status effects.
|
||||
/// </summary>
|
||||
Medicine,
|
||||
|
||||
/// <summary>
|
||||
/// Berry is used for all berries.
|
||||
/// </summary>
|
||||
Berry,
|
||||
|
||||
/// <summary>
|
||||
/// TMHM is used for Technical and Hidden Machines.
|
||||
/// </summary>
|
||||
TmHm,
|
||||
|
||||
/// <summary>
|
||||
/// Form Changer is used for items that change forms, such as mega stones.
|
||||
/// </summary>
|
||||
FormChanger,
|
||||
|
||||
/// <summary>
|
||||
/// Key Items are single stored items, generally used for story progression.
|
||||
/// </summary>
|
||||
KeyItem,
|
||||
|
||||
/// <summary>
|
||||
/// Mail is used for mail items.
|
||||
/// </summary>
|
||||
Mail,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A battle item category defines how the item is categorized when in battle.
|
||||
/// </summary>
|
||||
public enum BattleItemCategory
|
||||
{
|
||||
/// <summary>
|
||||
/// This item can't be used in battle.
|
||||
/// </summary>
|
||||
None,
|
||||
|
||||
/// <summary>
|
||||
/// This item is used for healing Pokemon.
|
||||
/// </summary>
|
||||
Healing,
|
||||
|
||||
/// <summary>
|
||||
/// This item is used for healing Pokemon from a status.
|
||||
/// </summary>
|
||||
StatusHealing,
|
||||
|
||||
/// <summary>
|
||||
/// This item is used for capturing Pokemon.
|
||||
/// </summary>
|
||||
Pokeball,
|
||||
|
||||
/// <summary>
|
||||
/// This item does not belong in above categories, but is still a battle item.
|
||||
/// </summary>
|
||||
MiscBattleItem,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An item is an object which the player can pick up, keep in their Bag, and use in some manner.
|
||||
/// </summary>
|
||||
public interface IItem
|
||||
{
|
||||
/// <summary>
|
||||
/// The name of the item.
|
||||
/// </summary>
|
||||
StringKey Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Which bag slot items are stored in.
|
||||
/// </summary>
|
||||
ItemCategory Category { get; }
|
||||
|
||||
/// <summary>
|
||||
/// How the item is categorized when in battle.
|
||||
/// </summary>
|
||||
BattleItemCategory BattleCategory { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The buying value of the item.
|
||||
/// </summary>
|
||||
int Price { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A set of arbitrary flags that can be set on the item.
|
||||
/// </summary>
|
||||
ImmutableHashSet<StringKey> Flags { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Checks whether the item has a specific flag.
|
||||
/// </summary>
|
||||
/// <param name="key">The flag to check for.</param>
|
||||
/// <returns>True if the item has the flag, false otherwise.</returns>
|
||||
bool HasFlag(string key);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public class ItemImpl : IItem
|
||||
{
|
||||
/// <inheritdoc cref="ItemImpl"/>
|
||||
public ItemImpl(StringKey name, ItemCategory category, BattleItemCategory battleCategory, int price,
|
||||
IEnumerable<StringKey> flags)
|
||||
{
|
||||
Name = name;
|
||||
Category = category;
|
||||
BattleCategory = battleCategory;
|
||||
Price = price;
|
||||
Flags = [..flags];
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public StringKey Name { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ItemCategory Category { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public BattleItemCategory BattleCategory { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public int Price { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public ImmutableHashSet<StringKey> Flags { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool HasFlag(string key)
|
||||
{
|
||||
return Flags.Contains(key);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user