public abstract bool Requires(Requirement requirementsToCheck);
public abstract bool CanBeOpenedWith(Requirement obtainedRequirements);
public override bool Requires(Requirement requirementsToCheck) => Requirements == Requirement.None || ((ulong)Requirements & (ulong)requirementsToCheck) > 0;
public override bool CanBeOpenedWith(Requirement obtainedRequirements) => Requirements == Requirement.None || Requirements.Contains(obtainedRequirements);
public RequirementGate(Requirement requirements) { Requirements = requirements; }
public ItemLocation(ItemKey key, string areaName, string name, ItemInfo defaultItem, Requirement requiredRequirements) : this(key, areaName, name, defaultItem, (Gate)requiredRequirements) { }