public bool GuessMakesNoise(WiringCollection collection, HashSet <WiringDocument> encountered = null) { if (this.output == null) { return(false); } if (encountered == null) { encountered = new HashSet <WiringDocument>(); } encountered.Add(this); Queue <LLDNBase> toScan = new Queue <LLDNBase>(); toScan.Enqueue(this.output); List <LLDNReference> refs = new List <LLDNReference>(); while (toScan.Count > 0) { LLDNBase check = toScan.Dequeue(); foreach (ParamConnection pc in check.GetParamConnections()) { if (pc.IsConnected() == false) { continue; } LLDNBase gb = pc.Reference; LLDNReference gnr = gb as LLDNReference; if (gnr != null && collection != null) { // Check these after everything else in the current doc. refs.Add(gnr); } else { if (gb.CanMakeNoise() == true) { return(true); } toScan.Enqueue(gb); } } } foreach (LLDNReference gnr in refs) { if (gnr.reference == null) { continue; } WiringDocument wd = collection.GetDocument(gnr.reference.referenceGUID); if (encountered.Contains(wd) == true) { continue; } if (wd.GuessMakesNoise(collection, encountered) == true) { return(true); } } return(false); }