Fix array decrease for clusters
This commit is contained in:
parent
e262447174
commit
b644d0fd5b
@ -66,14 +66,17 @@ public class ClusterPrefab : ScriptableObject {
|
|||||||
MarkNuclei(visitedNuclei, output);
|
MarkNuclei(visitedNuclei, output);
|
||||||
//MarkNuclei(visitedNuclei, this.output);
|
//MarkNuclei(visitedNuclei, this.output);
|
||||||
//Debug.Log($"Garbage collection found {visitedNuclei.Count} Nuclei");
|
//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<Nucleus> visitedNuclei, Nucleus nucleus) {
|
public void MarkNuclei(HashSet<Nucleus> visitedNuclei, Nucleus nucleus) {
|
||||||
if (nucleus is null)
|
if (nucleus is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
visitedNuclei.Add(nucleus);
|
if (nucleus.parent != null && nucleus.parent.prefab != this)
|
||||||
|
visitedNuclei.Add(nucleus.parent);
|
||||||
|
else
|
||||||
|
visitedNuclei.Add(nucleus);
|
||||||
if (nucleus.synapses != null) {
|
if (nucleus.synapses != null) {
|
||||||
HashSet<Synapse> visitedSynapses = new();
|
HashSet<Synapse> visitedSynapses = new();
|
||||||
foreach (Synapse synapse in nucleus.synapses) {
|
foreach (Synapse synapse in nucleus.synapses) {
|
||||||
|
|||||||
@ -164,11 +164,19 @@ public class Neuron : Nucleus {
|
|||||||
if (receiver != null && receiver.synapses != null)
|
if (receiver != null && receiver.synapses != null)
|
||||||
receiver.synapses.RemoveAll(s => s.nucleus == nucleus);
|
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) {
|
if (nucleus.clusterPrefab != null) {
|
||||||
nucleus.clusterPrefab.nuclei.RemoveAll(n => n == nucleus);
|
nucleus.clusterPrefab.nuclei.RemoveAll(n => n == nucleus);
|
||||||
|
nucleus.clusterPrefab.RefreshOutputs();
|
||||||
nucleus.clusterPrefab.GarbageCollection();
|
nucleus.clusterPrefab.GarbageCollection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user