public bool TreeAppearsValid(WiringCollection wc, WiringDocument owner) { if (this.conInput.IsConnected() == false) { return(false); } Queue <LLDNBase> toScan = new Queue <LLDNBase>(); toScan.Enqueue(this.conInput.Reference); while (toScan.Count > 0) { LLDNBase f = toScan.Dequeue(); if (f.CanMakeNoise() == true) { return(true); } if (f.nodeType == NodeType.Reference && wc != null) { LLDNReference refr = f as LLDNReference; if (refr != null && string.IsNullOrEmpty(refr.reference.referenceGUID) == false && owner != null) { WiringDocument refWD = wc.GetDocument(refr.reference.referenceGUID); if (refWD != null) { if (refWD == owner) { return(false); } if (refWD.Output != null) { toScan.Enqueue(refWD.Output); } } } } foreach (ParamConnection pc in f.GetParamConnections()) { if (pc.IsConnected() == false) { continue; } if (f.VerifyConnectionUsed(pc) == false) { continue; } toScan.Enqueue(pc.Reference); } } return(false); }
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); }