public void Should_Be_required(ulong gateRequirements, ulong requirementsToCheck) { var gate = new Gate.RequirementGate(gateRequirements); Assert.That(gate.Requires(requirementsToCheck), Is.True, $"Gate of {(Requirement)gateRequirements} should require {(Requirement)requirementsToCheck}"); }
bool GateCanBeOpenedWithoutSuppliedRequirements(Gate.RequirementGate gate, Requirement requirementToAvoid) { if (gate.Requirements == Requirement.None) { return(true); } var gateRequirements = (ulong)gate.Requirements & (ulong)unlockableRequirements; var canBeOpened = (gateRequirements & (~requirementToAvoid | (ulong)availableRequirements)) > 0; return(canBeOpened); }
void CalculatePathChainForRequirementGate(Gate.RequirementGate requirementGate, Requirement requirementChain) { if (requirementGate.Requirements == Requirement.None) { return; } var singleRequirement = SelectSingleUnlockableRequirement(requirementGate.Requirements, requirementChain); var item = GetRandomItemThatUnlocksRequirement(singleRequirement); if (placedItems.ContainsKey(item)) { return; } CalculatePathChain(item, singleRequirement | requirementChain); }