From aab6f59934f901affad3162879dd20fc23cbcd5f Mon Sep 17 00:00:00 2001 From: Pascal Serrarens Date: Fri, 30 Jan 2026 15:49:45 +0100 Subject: [PATCH] Resetup swarming --- Neuron.cs | 11 +++++++---- VisualEditor/NanoBrainComponent.cs | 27 +++++++++++++++------------ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Neuron.cs b/Neuron.cs index c622de8..5af285a 100644 --- a/Neuron.cs +++ b/Neuron.cs @@ -343,7 +343,7 @@ public class Neuron : INucleus { sum /= n; // Activation function - Vector3 result; + float3 result = Vector3.zero; switch (this.curvePreset) { case CurvePresets.Linear: result = sum; @@ -354,9 +354,12 @@ public class Neuron : INucleus { case CurvePresets.Power: result = normalize(sum) * System.MathF.Pow(length(sum), 2); break; - case CurvePresets.Reciprocal: - result = normalize(sum) * (1 / length(sum)); - break; + case CurvePresets.Reciprocal: { + float magnitude = length(sum); + if (magnitude > 0) + result = normalize(sum) * (1 / magnitude); + break; + } default: float activatedValue = this.curve.Evaluate(length(sum)); result = normalize(sum) * activatedValue; diff --git a/VisualEditor/NanoBrainComponent.cs b/VisualEditor/NanoBrainComponent.cs index d32c4ce..59314c2 100644 --- a/VisualEditor/NanoBrainComponent.cs +++ b/VisualEditor/NanoBrainComponent.cs @@ -3,22 +3,22 @@ using UnityEngine; public class NanoBrainComponent : MonoBehaviour { public ClusterPrefab defaultBrain; - + [NonSerialized] private Cluster brainInstance; public Cluster brain { get { if (brainInstance == null && defaultBrain != null) { - brainInstance = new Cluster(defaultBrain); //Instantiate(defaultBrain); - brainInstance.name = defaultBrain.name + " (Instance)"; - - SwarmControl sc = FindFirstObjectByType(); - if (sc != null) { - UpdateWeight(brainInstance, "Avoidance", sc.avoidanceForce); - UpdateWeight(brainInstance, "Cohesion", sc.cohesionForce); - UpdateWeight(brainInstance, "Separation", sc.separationForce); - UpdateWeight(brainInstance, "Alignment", sc.alignmentForce); - } + brainInstance = new Cluster(defaultBrain) { + name = defaultBrain.name + " (Instance)" + }; + } + SwarmControl sc = FindFirstObjectByType(); + if (sc != null) { + UpdateWeight(brainInstance, "Containment", sc.containmentForce); + UpdateWeight(brainInstance, "Cohesion", sc.cohesionForce); + UpdateWeight(brainInstance, "Separation", sc.separationForce); + UpdateWeight(brainInstance, "Alignment", sc.alignmentForce); } return brainInstance; } @@ -28,7 +28,10 @@ public class NanoBrainComponent : MonoBehaviour { INucleus root = brain.output; foreach (Synapse synapse in root.synapses) { if (synapse.nucleus.name == name) { - synapse.weight = weight; + if (synapse.weight != weight) { + synapse.weight = weight; + // Debug.Log($"Updated weight for {name}"); + } } } }