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
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;
}

View File

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

View File

@ -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++;