public DungeonGenerator(IMapDescription <TNode> mapDescription, DungeonGeneratorConfiguration <TNode> configuration = null)
 {
     this.mapDescriptionOriginal = mapDescription;
     this.mapDescription         = new MapDescriptionMapping <TNode>(mapDescription);
     this.configuration          = configuration ?? new DungeonGeneratorConfiguration <TNode>();
     SetupGenerator();
 }
 protected bool Equals(DungeonGeneratorConfiguration <TNode> other)
 {
     return(RoomsCanTouch == other.RoomsCanTouch &&
            EarlyStopIfIterationsExceeded == other.EarlyStopIfIterationsExceeded &&
            Nullable.Equals(EarlyStopIfTimeExceeded, other.EarlyStopIfTimeExceeded) &&
            RepeatModeOverride == other.RepeatModeOverride &&
            ThrowIfRepeatModeNotSatisfied == other.ThrowIfRepeatModeNotSatisfied &&
            Equals(ChainDecompositionConfiguration, other.ChainDecompositionConfiguration) &&
            Chains.SequenceEqual(other.Chains) &&
            Equals(SimulatedAnnealingConfiguration, other.SimulatedAnnealingConfiguration) &&
            SimulatedAnnealingMaxBranching == other.SimulatedAnnealingMaxBranching);
 }