Cluster reimport fixes

This commit is contained in:
Pascal Serrarens 2026-04-21 15:25:18 +02:00
parent befb69d00c
commit 8801fa2ff2
2 changed files with 24 additions and 7 deletions

View File

@ -439,9 +439,24 @@ namespace NanoBrain {
}
private void ReimportCluster(Cluster subCluster) {
Cluster reimportedCluster = new(subCluster.prefab, this.prefab);
subCluster.MoveReceivers(reimportedCluster);
// subcluster should be garbage now...
if (subCluster.siblingClusters == null || subCluster.siblingClusters.Length <= 0) {
Cluster reimportedCluster = new(subCluster.prefab, this.prefab);
subCluster.MoveReceivers(reimportedCluster);
// subcluster should be garbage now...
}
else {
List<Cluster> newSiblingsList = new();
foreach (Cluster sibling in subCluster.siblingClusters) {
Cluster reimportedCluster = new(sibling.prefab, this.prefab) {
name = sibling.name
};
sibling.MoveReceivers(reimportedCluster);
newSiblingsList.Add(reimportedCluster);
}
Cluster[] newSiblings = newSiblingsList.ToArray();
foreach (Cluster sibling in newSiblings)
sibling.siblingClusters = newSiblings;
}
}
int selectedConnectNucleus = -1;

View File

@ -402,6 +402,8 @@ namespace NanoBrain {
}
public bool SameSiblingsAs(Cluster[] otherSiblingClusters) {
if (this.siblingClusters == null)
return false;
for (int ix = 0; ix < this.siblingClusters.Length; ix++) {
if (this.siblingClusters[ix] != otherSiblingClusters[ix])
return false;
@ -592,23 +594,23 @@ namespace NanoBrain {
}
public void MoveReceivers(Cluster newCluster) {
Debug.Log($"Move receivers for {this.name} to {newCluster.name}");
foreach (Nucleus outputNucleus in this.clusterNuclei) {
if (outputNucleus is not Neuron output)
continue;
// Find the existing output in the new cluster
if (newCluster.GetNucleus(output.name) is not Neuron newOutput) {
Debug.LogWarning("Could not find output {output.name} in {newCluster.name}");
Debug.LogWarning($"Could not find output {this.name}.{output.name} in {newCluster.name}");
continue;
}
Debug.Log($"Check {output.name} receivers");
Debug.Log($"Check {this.name}.{output.name} receivers");
Nucleus[] receivers = output.receivers.ToArray();
foreach (Nucleus receiver in receivers) {
Debug.Log(".");
if (receiver.clusterPrefab != this.prefab) {
// Replace synapse with new synapse
// to the new cluster
Debug.Log($"move {receiver.name} from {output.name} to {newOutput.name}");
Debug.Log($"move {receiver.name} from {this.name}.{output.name} to {newCluster.name}.{newOutput.name}");
Synapse synapse = receiver.GetSynapse(output);
newOutput.AddReceiver(receiver, synapse.weight);
output.RemoveReceiver(receiver);