From 8eb1cbea1ac243904e093088bdf8b02d486bbf5e Mon Sep 17 00:00:00 2001 From: Pascal Serrarens Date: Fri, 6 Feb 2026 12:17:42 +0100 Subject: [PATCH] Fix brain prefab cloning --- Cluster.cs | 6 +++--- Editor/ClusterInspector.cs | 24 ++++++++++-------------- Nucleus.cs | 5 +++-- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/Cluster.cs b/Cluster.cs index 9d29581..e2a9fae 100644 --- a/Cluster.cs +++ b/Cluster.cs @@ -42,13 +42,13 @@ public class Cluster : Nucleus { // Now clone the connections for (int nucleusIx = 0; nucleusIx < prefabNuclei.Length; nucleusIx++) { - Nucleus receptor = prefabNuclei[nucleusIx]; + Nucleus prefabNucleus = prefabNuclei[nucleusIx]; Nucleus clonedReceptor = clonedNuclei[nucleusIx]; if (clonedReceptor == null) continue; // Copy the receivers, which will also create the synapses - foreach (Nucleus receiver in receptor.receivers) { + foreach (Nucleus receiver in prefabNucleus.receivers) { int ix = GetNucleusIndex(prefabNuclei, receiver); if (ix < 0) continue; @@ -60,7 +60,7 @@ public class Cluster : Nucleus { float weight = 1; foreach (Synapse synapse in receiver.synapses) { // Find the weight for this synapse - if (synapse.nucleus == receptor) { + if (synapse.nucleus == prefabNucleus) { weight = synapse.weight; break; } diff --git a/Editor/ClusterInspector.cs b/Editor/ClusterInspector.cs index 45950e1..541134f 100644 --- a/Editor/ClusterInspector.cs +++ b/Editor/ClusterInspector.cs @@ -676,23 +676,19 @@ public class ClusterInspector : Editor { if (cluster == null) return; - IEnumerable synapseNuclei = this.currentNucleus.synapses.Select(synapse => synapse.nucleus != null ? synapse.nucleus.name : ""); - //IEnumerable perceptei = this.currentNucleus.brain.perceptei.Select(i => i.name).Except(synapseNuclei); - IEnumerable nuclei = cluster.nuclei.Select(i => i.name).Except(synapseNuclei); - //string[] names = perceptei.Concat(nuclei).ToArray(); - string[] names = nuclei.ToArray(); + IEnumerable synapseNuclei = this.currentNucleus.synapses + .Where(synapse => synapse.nucleus != null) + .Select(synapse => synapse.nucleus); + + IEnumerable nuclei = cluster.nuclei + .Except(synapseNuclei); + IEnumerable nucleiNames = nuclei.Select(n => n.name); + + string[] names = nucleiNames.ToArray(); int selectedIndex = -1; selectedIndex = EditorGUILayout.Popup("Connect to", selectedIndex, names); if (selectedIndex >= 0) { - // if (selectedIndex < perceptei.Count()) { - // Nucleus n = this.currentNucleus.brain.perceptei[selectedIndex]; - // n.AddReceiver(this.currentNucleus); - // } - // else { - // Nucleus n = this.currentNucleus.brain.nuclei[selectedIndex - perceptei.Count()]; - // n.AddReceiver(this.currentNucleus); - // } - Nucleus receptor = cluster.nuclei[selectedIndex]; + Nucleus receptor = nuclei.ElementAt(selectedIndex); receptor.AddReceiver(this.currentNucleus); } } diff --git a/Nucleus.cs b/Nucleus.cs index 9847a68..8652637 100644 --- a/Nucleus.cs +++ b/Nucleus.cs @@ -91,8 +91,9 @@ public abstract class Nucleus { UpdateStateIsolated(new float3(0, 0, 0)); } - public virtual void UpdateStateIsolated(float3 bias) { - } + public abstract void UpdateStateIsolated(float3 bias); + // public virtual void UpdateStateIsolated(float3 bias) { + // } public virtual void UpdateNuclei() { this.stale++;