private bool RemoveCollidingBond(uint instanceId, BondAttachment attachment, List <Bond> previousBonds, BondType newBondType) { bool result = true; if (!attachment.IsGuide() && bonds.ContainsKey(instanceId)) { Bond cb = null; foreach (Bond b in bonds[instanceId]) { cb = b.GetCollidingBond(attachment); if (cb != null) { break; } } if (cb != null) { bool oldIsFlow = cb.ChainType != ChainType.None; bool newIsLock = newBondType == BondType.Lock; // locks can't break flow bonds if (oldIsFlow && newIsLock) { result = false; } else { RemoveBond(cb); previousBonds.Add(cb); } } } return(result); }