Fix brain prefab cloning

This commit is contained in:
Pascal Serrarens 2026-02-06 12:17:42 +01:00
parent 00dea149f3
commit 8eb1cbea1a
3 changed files with 16 additions and 19 deletions

View File

@ -42,13 +42,13 @@ public class Cluster : Nucleus {
// Now clone the connections // Now clone the connections
for (int nucleusIx = 0; nucleusIx < prefabNuclei.Length; nucleusIx++) { for (int nucleusIx = 0; nucleusIx < prefabNuclei.Length; nucleusIx++) {
Nucleus receptor = prefabNuclei[nucleusIx]; Nucleus prefabNucleus = prefabNuclei[nucleusIx];
Nucleus clonedReceptor = clonedNuclei[nucleusIx]; Nucleus clonedReceptor = clonedNuclei[nucleusIx];
if (clonedReceptor == null) if (clonedReceptor == null)
continue; continue;
// Copy the receivers, which will also create the synapses // 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); int ix = GetNucleusIndex(prefabNuclei, receiver);
if (ix < 0) if (ix < 0)
continue; continue;
@ -60,7 +60,7 @@ public class Cluster : Nucleus {
float weight = 1; float weight = 1;
foreach (Synapse synapse in receiver.synapses) { foreach (Synapse synapse in receiver.synapses) {
// Find the weight for this synapse // Find the weight for this synapse
if (synapse.nucleus == receptor) { if (synapse.nucleus == prefabNucleus) {
weight = synapse.weight; weight = synapse.weight;
break; break;
} }

View File

@ -676,23 +676,19 @@ public class ClusterInspector : Editor {
if (cluster == null) if (cluster == null)
return; return;
IEnumerable<string> synapseNuclei = this.currentNucleus.synapses.Select(synapse => synapse.nucleus != null ? synapse.nucleus.name : ""); IEnumerable<Nucleus> synapseNuclei = this.currentNucleus.synapses
//IEnumerable<string> perceptei = this.currentNucleus.brain.perceptei.Select(i => i.name).Except(synapseNuclei); .Where(synapse => synapse.nucleus != null)
IEnumerable<string> nuclei = cluster.nuclei.Select(i => i.name).Except(synapseNuclei); .Select(synapse => synapse.nucleus);
//string[] names = perceptei.Concat(nuclei).ToArray();
string[] names = nuclei.ToArray(); IEnumerable<Nucleus> nuclei = cluster.nuclei
.Except(synapseNuclei);
IEnumerable<string> nucleiNames = nuclei.Select(n => n.name);
string[] names = nucleiNames.ToArray();
int selectedIndex = -1; int selectedIndex = -1;
selectedIndex = EditorGUILayout.Popup("Connect to", selectedIndex, names); selectedIndex = EditorGUILayout.Popup("Connect to", selectedIndex, names);
if (selectedIndex >= 0) { if (selectedIndex >= 0) {
// if (selectedIndex < perceptei.Count()) { Nucleus receptor = nuclei.ElementAt(selectedIndex);
// 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];
receptor.AddReceiver(this.currentNucleus); receptor.AddReceiver(this.currentNucleus);
} }
} }

View File

@ -91,8 +91,9 @@ public abstract class Nucleus {
UpdateStateIsolated(new float3(0, 0, 0)); 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() { public virtual void UpdateNuclei() {
this.stale++; this.stale++;