diff --git a/ClusterPrefab.cs b/ClusterPrefab.cs index d8dd30b..ada3553 100644 --- a/ClusterPrefab.cs +++ b/ClusterPrefab.cs @@ -66,14 +66,17 @@ public class ClusterPrefab : ScriptableObject { MarkNuclei(visitedNuclei, output); //MarkNuclei(visitedNuclei, this.output); //Debug.Log($"Garbage collection found {visitedNuclei.Count} Nuclei"); - this.nuclei.RemoveAll(nucleus => nucleus is Nucleus n && visitedNuclei.Contains(n) == false); + this.nuclei.RemoveAll(nucleus => visitedNuclei.Contains(nucleus) == false); } public void MarkNuclei(HashSet visitedNuclei, Nucleus nucleus) { if (nucleus is null) return; - visitedNuclei.Add(nucleus); + if (nucleus.parent != null && nucleus.parent.prefab != this) + visitedNuclei.Add(nucleus.parent); + else + visitedNuclei.Add(nucleus); if (nucleus.synapses != null) { HashSet visitedSynapses = new(); foreach (Synapse synapse in nucleus.synapses) { diff --git a/Neuron.cs b/Neuron.cs index f24eaa3..2f5e0f3 100644 --- a/Neuron.cs +++ b/Neuron.cs @@ -164,11 +164,19 @@ public class Neuron : Nucleus { if (receiver != null && receiver.synapses != null) receiver.synapses.RemoveAll(s => s.nucleus == nucleus); } + } else if (nucleus is Cluster cluster) { + // remove all receivers for this cluster + foreach (Neuron output in cluster.outputs) { + foreach (Nucleus receiver in output.receivers) { + receiver.synapses.RemoveAll(s => s.nucleus == output); + } + } } if (nucleus.clusterPrefab != null) { nucleus.clusterPrefab.nuclei.RemoveAll(n => n == nucleus); + nucleus.clusterPrefab.RefreshOutputs(); nucleus.clusterPrefab.GarbageCollection(); } }