Inventory.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. namespace D21._1
  5. {
  6. public class Inventory : IEnumerable<Item>
  7. {
  8. public Item Item;
  9. public Inventory NextEntry;
  10. public int Count<T>() where T : Item => (NextEntry?.Count<T>() ?? 0) + (Item is T ? 1 : 0);
  11. public override int GetHashCode() => HashCode.Combine(Item, NextEntry);
  12. public bool Contains(Item i)
  13. {
  14. var cur = this;
  15. while (cur != null)
  16. {
  17. if (i.Equals(cur.Item)) return true;
  18. cur = cur.NextEntry;
  19. }
  20. return false;
  21. }
  22. public IEnumerator<Item> GetEnumerator()
  23. {
  24. var cur = this;
  25. while (cur != null)
  26. {
  27. yield return cur.Item;
  28. cur = cur.NextEntry;
  29. }
  30. }
  31. IEnumerator IEnumerable.GetEnumerator() => throw new NotImplementedException();
  32. }
  33. public abstract class Item
  34. {
  35. public string Name { get; set; }
  36. public int Damage { get; set; }
  37. public int Armor { get; set; }
  38. public override bool Equals(object obj) => obj is Item item && Name.Equals(item.Name, StringComparison.OrdinalIgnoreCase);
  39. public override int GetHashCode() => HashCode.Combine(Name);
  40. }
  41. public class Weapon : Item { }
  42. public class Armor : Item { }
  43. public class Ring : Item { }
  44. }