From beb88f82148eaca6c06eac5476fb6527d5a4f7a3 Mon Sep 17 00:00:00 2001 From: Pascal Serrarens Date: Mon, 12 Jan 2026 09:56:49 +0100 Subject: [PATCH] WIP cluster redesign --- Assets/NanoBrain/Cluster.cs | 22 +- Assets/NanoBrain/INucleus.cs | 1 + .../NanoBrain/LinearAlgebra/src/Spherical.cs | 10 + Assets/NanoBrain/Nucleus.cs | 21 +- .../VisualEditor/Editor/ClusterInspector.cs | 23 +- Assets/NanoBrain/VisualEditor/NanoBrain.cs | 89 +-- Assets/Scenes/Boids/New Cluster 1.asset | 20 - Assets/Scenes/Boids/New Cluster 1.asset.meta | 8 - Assets/Scenes/Boids/New Cluster.asset | 7 +- Assets/Scenes/Boids/New Nano Brain.asset | 59 -- Assets/Scenes/Boids/New Nano Brain.asset.meta | 8 - Assets/Scenes/Boids/SwarmingBrain.asset | 523 ++++++++++-------- 12 files changed, 410 insertions(+), 381 deletions(-) delete mode 100644 Assets/Scenes/Boids/New Cluster 1.asset delete mode 100644 Assets/Scenes/Boids/New Cluster 1.asset.meta delete mode 100644 Assets/Scenes/Boids/New Nano Brain.asset delete mode 100644 Assets/Scenes/Boids/New Nano Brain.asset.meta diff --git a/Assets/NanoBrain/Cluster.cs b/Assets/NanoBrain/Cluster.cs index 991c44e..5b349e1 100644 --- a/Assets/NanoBrain/Cluster.cs +++ b/Assets/NanoBrain/Cluster.cs @@ -4,11 +4,11 @@ using UnityEngine; [CreateAssetMenu(menuName = "Passer/Cluster")] public class Cluster : ScriptableObject, INucleus { - private string _name; - public string name { - get { return _name; } - set { _name = value; } - } + // private string _name; + // public new string name { + // get { return _name; } + // set { _name = value; } + // } public Cluster cluster => this; @@ -16,10 +16,14 @@ public class Cluster : ScriptableObject, INucleus { public Nucleus output => this.nuclei[0]; + [SerializeField] private readonly List _synapses = new(); // = inputs, compare receptors in NanoBrain public List synapses => _synapses; - private void OnEnable() { + // Call this function to ensure that there is at least one nucleus + // This is an invariant and should be ensured before the nucleus is used + // because output requires it. + public void EnsureInitialization() { nuclei ??= new List(); if (nuclei.Count == 0) new Neuroid(this, "Output"); // Every cluster should have at least 1 neuroid @@ -36,6 +40,11 @@ public class Cluster : ScriptableObject, INucleus { get => output.receivers; } + public void AddSynapse(INucleus sender) { + Synapse synapse = new (sender, 1.0f); + synapses.Add(synapse); + } + public void GarbageCollection() { HashSet visitedNuclei = new(); MarkNuclei(visitedNuclei, this.output); @@ -79,6 +88,7 @@ public class Cluster : ScriptableObject, INucleus { public void UpdateState() { // Don't know if this is right this.output.UpdateState(); + // it is not, I should take inputs from the synapses and route them to the right internal nuclei } #endregion Dynamics diff --git a/Assets/NanoBrain/INucleus.cs b/Assets/NanoBrain/INucleus.cs index 757f8ef..46d424a 100644 --- a/Assets/NanoBrain/INucleus.cs +++ b/Assets/NanoBrain/INucleus.cs @@ -17,6 +17,7 @@ public interface INucleus { // Senders public List synapses { get; } + public void AddSynapse(INucleus sender); #endregion static struct diff --git a/Assets/NanoBrain/LinearAlgebra/src/Spherical.cs b/Assets/NanoBrain/LinearAlgebra/src/Spherical.cs index aee6a64..318839d 100644 --- a/Assets/NanoBrain/LinearAlgebra/src/Spherical.cs +++ b/Assets/NanoBrain/LinearAlgebra/src/Spherical.cs @@ -148,6 +148,16 @@ namespace LinearAlgebra { return (v1.distance != v2.distance || v1.direction != v2.direction); } + public override readonly bool Equals(object o) { + if (o is Spherical s) + return this == s; + return false; + } + + public override readonly int GetHashCode() { + return HashCode.Combine(this.distance, this.direction); + } + public static float Distance(Spherical v1, Spherical v2) { // Convert degrees to radians float thetaARadians = v1.direction.horizontal.inRadians; diff --git a/Assets/NanoBrain/Nucleus.cs b/Assets/NanoBrain/Nucleus.cs index 79c05cb..601c462 100644 --- a/Assets/NanoBrain/Nucleus.cs +++ b/Assets/NanoBrain/Nucleus.cs @@ -95,9 +95,10 @@ public class Nucleus : INucleus { this.id = this.GetHashCode(); } - public virtual void AddReceiver(INucleus receiver) { - this.receivers.Add(new Receiver(receiver)); - //receiver.SetWeight(this, 1.0f); + public virtual void AddReceiver(INucleus receivingNucleus) { + this.receivers.Add(new Receiver(receivingNucleus)); + //receivingNucleus.SetWeight(this, 1.0f); + receivingNucleus.AddSynapse(this); } public void RemoveReceiver(INucleus receiverNucleus) { @@ -140,6 +141,10 @@ public class Nucleus : INucleus { return false; } + public void AddSynapse(INucleus sendingNucleus) { + Synapse synapse = new(sendingNucleus, 1.0f); + this.synapses.Add(synapse); + } public void SetWeight(Nucleus nucleus, float weight) { foreach (Synapse synapse in synapses) { if (synapse.nucleus == nucleus) { @@ -167,11 +172,11 @@ public class Nucleus : INucleus { } } -[System.Serializable] +[Serializable] public class Synapse { - [System.NonSerialized] + [NonSerialized] public INucleus nucleus; - public NanoBrain cluster; + public Cluster cluster; public int nucleusId; public float weight; @@ -186,9 +191,9 @@ public class Synapse { // public AnimationCurve curve; public float curveMax = 1.0f; - public Synapse(Nucleus nucleus, float weight) { + public Synapse(INucleus nucleus, float weight) { this.nucleus = nucleus; - this.nucleusId = nucleus.id; + //this.nucleusId = nucleus.id; this.weight = weight; } diff --git a/Assets/NanoBrain/VisualEditor/Editor/ClusterInspector.cs b/Assets/NanoBrain/VisualEditor/Editor/ClusterInspector.cs index e078ad1..bd681fa 100644 --- a/Assets/NanoBrain/VisualEditor/Editor/ClusterInspector.cs +++ b/Assets/NanoBrain/VisualEditor/Editor/ClusterInspector.cs @@ -58,8 +58,10 @@ public class ClusterInspector : Editor { UpdateLayout(evt.newRect.width); }); - if (cluster != null) + if (cluster != null) { + cluster.EnsureInitialization(); graph.SetGraph(null, cluster, cluster.output, inspectorContainer); + } else Debug.LogWarning(" No brain!"); @@ -68,7 +70,7 @@ public class ClusterInspector : Editor { } public class GraphView : VisualElement { - Cluster brain; + Cluster cluster; SerializedObject serializedBrain; INucleus currentNucleus; GameObject gameObject; @@ -101,7 +103,7 @@ public class ClusterInspector : Editor { public void SetGraph(GameObject gameObject, Cluster brain, Nucleus nucleus, VisualElement inspectorContainer) { this.gameObject = gameObject; - this.brain = brain; + this.cluster = brain; if (Application.isPlaying == false) this.serializedBrain = new SerializedObject(brain); this.currentNucleus = nucleus; @@ -118,7 +120,7 @@ public class ClusterInspector : Editor { if (currentWrapper != null) DestroyImmediate(currentWrapper); - currentWrapper = CreateInstance().Init(this.currentNucleus, brain); + currentWrapper = CreateInstance().Init(this.currentNucleus, cluster); DrawInspector(inspectorContainer); } @@ -479,7 +481,7 @@ public class ClusterInspector : Editor { EditorGUILayout.Space(); - ConnectNucleus(this.currentNucleus); + ConnectNucleus(cluster, this.currentNucleus); if (GUILayout.Button("Add Input Neuron")) AddInputNeuron(this.currentNucleus); // if (GUILayout.Button("Add Input Perceptoid")) @@ -504,7 +506,7 @@ public class ClusterInspector : Editor { } protected virtual void AddInputNeuron(INucleus nucleus) { - Neuroid newNeuroid = new(this.brain.cluster, "New neuron"); + Neuroid newNeuroid = new(this.cluster.cluster, "New neuron"); newNeuroid.AddReceiver(nucleus); this.currentNucleus = newNeuroid; BuildLayers(); @@ -541,13 +543,14 @@ public class ClusterInspector : Editor { brainInstance.AddReceiver(nucleus); } - protected virtual void ConnectNucleus(INucleus nucleus) { - if (this.currentNucleus.cluster == null) + // Connect to another nucleus in the same cluster + protected virtual void ConnectNucleus(Cluster cluster, INucleus nucleus) { + if (cluster == null) return; IEnumerable synapseNuclei = this.currentNucleus.synapses.Select(synapse => synapse.nucleus.name); //IEnumerable perceptei = this.currentNucleus.brain.perceptei.Select(i => i.name).Except(synapseNuclei); - IEnumerable nuclei = this.currentNucleus.cluster.nuclei.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(); int selectedIndex = -1; @@ -561,7 +564,7 @@ public class ClusterInspector : Editor { // Nucleus n = this.currentNucleus.brain.nuclei[selectedIndex - perceptei.Count()]; // n.AddReceiver(this.currentNucleus); // } - Nucleus n = this.currentNucleus.cluster.nuclei[selectedIndex]; + Nucleus n = cluster.nuclei[selectedIndex]; n.AddReceiver(this.currentNucleus); } } diff --git a/Assets/NanoBrain/VisualEditor/NanoBrain.cs b/Assets/NanoBrain/VisualEditor/NanoBrain.cs index c581ec6..8ac0896 100644 --- a/Assets/NanoBrain/VisualEditor/NanoBrain.cs +++ b/Assets/NanoBrain/VisualEditor/NanoBrain.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using UnityEngine; @@ -7,7 +8,6 @@ public class NanoBrain : ScriptableObject, ISerializationCallbackReceiver { public List perceptei = new(); public List receptors = new(); - public Cluster cluster; // This is probably always the first element in the nuclei list... [System.NonSerialized] @@ -15,9 +15,11 @@ public class NanoBrain : ScriptableObject, ISerializationCallbackReceiver { public int rootId; public NanoBrain() { - this.output = new Neuroid(this.cluster, "Root"); - this.cluster = new(); - } + // this.cluster = new(); + // this.output = new Neuroid(this.cluster, "Root"); + } + + public Cluster cluster; public void AddReceiver(INucleus receiver) { output.AddReceiver(receiver); @@ -30,9 +32,9 @@ public class NanoBrain : ScriptableObject, ISerializationCallbackReceiver { public void UpdateNuclei() { foreach (Nucleus nucleus in nuclei) - nucleus.IncreaseAge(); + nucleus.IncreaseAge(); foreach (Perceptoid perception in perceptei) - perception.IncreaseAge(); + perception.IncreaseAge(); } public void OnBeforeSerialize() { @@ -47,49 +49,50 @@ public class NanoBrain : ScriptableObject, ISerializationCallbackReceiver { } foreach (Perceptoid perceptoid in this.perceptei.ToArray()) - perceptoid.Rebuild(this); + perceptoid.Rebuild(this); } catch (System.Exception) { } - this.cluster.GarbageCollection(); + if (this.cluster != null) + this.cluster.GarbageCollection(); } -/* - public void GarbageCollection() { - HashSet visitedNuclei = new(); - MarkNuclei(visitedNuclei, this.output); - //Debug.Log($"Garbage collection found {visitedNuclei.Count} Nuclei"); - this.nuclei.RemoveAll(nucleus => visitedNuclei.Contains(nucleus) == false); - this.perceptei.RemoveAll(perceptoid => visitedNuclei.Contains(perceptoid) == false); - } - - public void MarkNuclei(HashSet visitedNuclei, INucleus nucleus) { - if (nucleus is null) - return; - - if (nucleus.brain == null) - nucleus.brain = this; - - visitedNuclei.Add(nucleus); - if (nucleus.synapses != null) { - HashSet visitedSynapses = new(); - foreach (Synapse synapse in nucleus.synapses) { - if (synapse != null && synapse.nucleus != null) { - visitedSynapses.Add(synapse); - MarkNuclei(visitedNuclei, synapse.nucleus); - } - } - nucleus.synapses.RemoveAll(synapse => visitedSynapses.Contains(synapse) == false); + /* + public void GarbageCollection() { + HashSet visitedNuclei = new(); + MarkNuclei(visitedNuclei, this.output); + //Debug.Log($"Garbage collection found {visitedNuclei.Count} Nuclei"); + this.nuclei.RemoveAll(nucleus => visitedNuclei.Contains(nucleus) == false); + this.perceptei.RemoveAll(perceptoid => visitedNuclei.Contains(perceptoid) == false); } - if (nucleus.receivers != null) { - HashSet visitedReceivers = new(); - foreach (Receiver receiver in nucleus.receivers) { - if (receiver != null && receiver.nucleus != null) { - visitedReceivers.Add(receiver); - visitedNuclei.Add(receiver.nucleus); + + public void MarkNuclei(HashSet visitedNuclei, INucleus nucleus) { + if (nucleus is null) + return; + + if (nucleus.brain == null) + nucleus.brain = this; + + visitedNuclei.Add(nucleus); + if (nucleus.synapses != null) { + HashSet visitedSynapses = new(); + foreach (Synapse synapse in nucleus.synapses) { + if (synapse != null && synapse.nucleus != null) { + visitedSynapses.Add(synapse); + MarkNuclei(visitedNuclei, synapse.nucleus); + } } + nucleus.synapses.RemoveAll(synapse => visitedSynapses.Contains(synapse) == false); + } + if (nucleus.receivers != null) { + HashSet visitedReceivers = new(); + foreach (Receiver receiver in nucleus.receivers) { + if (receiver != null && receiver.nucleus != null) { + visitedReceivers.Add(receiver); + visitedNuclei.Add(receiver.nucleus); + } + } + nucleus.receivers.RemoveAll(receiver => visitedReceivers.Contains(receiver) == false); } - nucleus.receivers.RemoveAll(receiver => visitedReceivers.Contains(receiver) == false); } - } - */ + */ } \ No newline at end of file diff --git a/Assets/Scenes/Boids/New Cluster 1.asset b/Assets/Scenes/Boids/New Cluster 1.asset deleted file mode 100644 index c46baec..0000000 --- a/Assets/Scenes/Boids/New Cluster 1.asset +++ /dev/null @@ -1,20 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 60a957541c24c57e78018c202ebb1d9b, type: 3} - m_Name: New Cluster 1 - m_EditorClassIdentifier: Assembly-CSharp::Cluster - nuclei: - - id: 949579472 - _name: Output - _synapses: [] - _receivers: [] - nucleusType: diff --git a/Assets/Scenes/Boids/New Cluster 1.asset.meta b/Assets/Scenes/Boids/New Cluster 1.asset.meta deleted file mode 100644 index fcb368b..0000000 --- a/Assets/Scenes/Boids/New Cluster 1.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ad89de17be687dbc18a57252cadda0f3 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scenes/Boids/New Cluster.asset b/Assets/Scenes/Boids/New Cluster.asset index fe0b8a4..4f690b1 100644 --- a/Assets/Scenes/Boids/New Cluster.asset +++ b/Assets/Scenes/Boids/New Cluster.asset @@ -12,4 +12,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 60a957541c24c57e78018c202ebb1d9b, type: 3} m_Name: New Cluster m_EditorClassIdentifier: Assembly-CSharp::Cluster - nuclei: [] + nuclei: + - id: 764290112 + _name: Output + _synapses: [] + _receivers: [] + nucleusType: diff --git a/Assets/Scenes/Boids/New Nano Brain.asset b/Assets/Scenes/Boids/New Nano Brain.asset deleted file mode 100644 index 5251743..0000000 --- a/Assets/Scenes/Boids/New Nano Brain.asset +++ /dev/null @@ -1,59 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 36081359186edfec998d891a1feeb17b, type: 3} - m_Name: New Nano Brain - m_EditorClassIdentifier: Assembly-CSharp::NanoBrain - title: - count: 0 - color: {r: 1, g: 1, b: 1, a: 1} - texture: {fileID: 0} - nuclei: - - id: 2025140912 - _name: Root - synapses: [] - receivers: [] - nucleusType: - isSleeping: 0 - _curvePreset: 0 - curve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: 1 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 1000 - value: 1000 - inSlope: 1 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - curveMax: 1 - average: 0 - inverse: 0 - exponent: 1 - perceptei: [] - rootId: 2025140912 - references: - version: 2 - RefIds: [] diff --git a/Assets/Scenes/Boids/New Nano Brain.asset.meta b/Assets/Scenes/Boids/New Nano Brain.asset.meta deleted file mode 100644 index cc404a1..0000000 --- a/Assets/Scenes/Boids/New Nano Brain.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fab876d6bf7dc9b10a56541a7eeccdd2 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scenes/Boids/SwarmingBrain.asset b/Assets/Scenes/Boids/SwarmingBrain.asset index 92d4f4b..ffe8dd0 100644 --- a/Assets/Scenes/Boids/SwarmingBrain.asset +++ b/Assets/Scenes/Boids/SwarmingBrain.asset @@ -12,29 +12,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 36081359186edfec998d891a1feeb17b, type: 3} m_Name: SwarmingBrain m_EditorClassIdentifier: Assembly-CSharp::NanoBrainObj - title: - count: 0 - color: {r: 1, g: 1, b: 1, a: 1} - texture: {fileID: 0} nuclei: - id: -1707533328 _name: Root - synapses: - - nucleusId: -112538112 - weight: 1 - curveMax: -10 - - nucleusId: 1938577052 - weight: 2.2 - curveMax: 10 - - nucleusId: 1641120128 - weight: -5 - curveMax: 1000 - - nucleusId: -1857835930 - weight: 0.5 - curveMax: 1 - receivers: [] + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -66,14 +49,9 @@ MonoBehaviour: exponent: 1 - id: -112538112 _name: Avoidance - synapses: - - nucleusId: 407735232 - weight: -1 - curveMax: 0 - receivers: - - nucleusId: -1707533328 + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -105,29 +83,9 @@ MonoBehaviour: exponent: 1 - id: 1938577052 _name: Cohesion - synapses: - - nucleusId: -1659429232 - weight: 1 - curveMax: 1 - - nucleusId: 839544896 - weight: 1 - curveMax: 1 - - nucleusId: -348340288 - weight: 1 - curveMax: 1 - - nucleusId: -1095934288 - weight: 1 - curveMax: 1 - - nucleusId: -1413006832 - weight: 1 - curveMax: 1 - - nucleusId: -61245040 - weight: 1 - curveMax: 1 - receivers: - - nucleusId: -1707533328 + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -159,29 +117,9 @@ MonoBehaviour: exponent: 1 - id: 1641120128 _name: Separation - synapses: - - nucleusId: 1710403072 - weight: 1 - curveMax: 1 - - nucleusId: -916054576 - weight: 1 - curveMax: 1 - - nucleusId: -1391520368 - weight: 1 - curveMax: 1 - - nucleusId: 763145504 - weight: 1 - curveMax: 1 - - nucleusId: 1469392160 - weight: 1 - curveMax: 1 - - nucleusId: -1828317248 - weight: 1 - curveMax: 1 - receivers: - - nucleusId: -1707533328 + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -213,29 +151,9 @@ MonoBehaviour: exponent: 1 - id: -1857835930 _name: Alignment - synapses: - - nucleusId: -1659687600 - weight: 1 - curveMax: 1 - - nucleusId: 1322333072 - weight: 1 - curveMax: 1 - - nucleusId: -1563920864 - weight: 1 - curveMax: 1 - - nucleusId: 182328688 - weight: 1 - curveMax: 1 - - nucleusId: -1666561744 - weight: 1 - curveMax: 1 - - nucleusId: -1884196224 - weight: 1 - curveMax: 1 - receivers: - - nucleusId: -1707533328 + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -267,14 +185,9 @@ MonoBehaviour: exponent: 1 - id: 1710403072 _name: Inverse Boid A - synapses: - - nucleusId: -1659429232 - weight: 1 - curveMax: 1 - receivers: - - nucleusId: 1641120128 + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 3 curve: serializedVersion: 2 @@ -1440,14 +1353,9 @@ MonoBehaviour: exponent: 1 - id: -916054576 _name: Inverse Boid B - synapses: - - nucleusId: 839544896 - weight: 1 - curveMax: 1 - receivers: - - nucleusId: 1641120128 + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 3 curve: serializedVersion: 2 @@ -2613,14 +2521,9 @@ MonoBehaviour: exponent: 1 - id: -1391520368 _name: Inverse Boid C - synapses: - - nucleusId: -348340288 - weight: 1 - curveMax: 1 - receivers: - - nucleusId: 1641120128 + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 3 curve: serializedVersion: 2 @@ -3786,14 +3689,9 @@ MonoBehaviour: exponent: 1 - id: 763145504 _name: Inverse Boid D - synapses: - - nucleusId: -1095934288 - weight: 1 - curveMax: 1 - receivers: - - nucleusId: 1641120128 + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 3 curve: serializedVersion: 2 @@ -4959,14 +4857,9 @@ MonoBehaviour: exponent: 1 - id: 1469392160 _name: Inverse Boid E - synapses: - - nucleusId: -1413006832 - weight: 1 - curveMax: 1 - receivers: - - nucleusId: 1641120128 + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 3 curve: serializedVersion: 2 @@ -6132,14 +6025,9 @@ MonoBehaviour: exponent: 1 - id: -1828317248 _name: Inverse Bodi F - synapses: - - nucleusId: -61245040 - weight: 1 - curveMax: 1 - receivers: - - nucleusId: 1641120128 + _synapses: [] + _receivers: [] nucleusType: - isSleeping: 0 _curvePreset: 3 curve: serializedVersion: 2 @@ -7306,11 +7194,9 @@ MonoBehaviour: perceptei: - id: 407735232 _name: Boundary - synapses: [] - receivers: - - nucleusId: -112538112 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7322,17 +7208,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 1 + brain: {fileID: 0} + baseName: Boundary thingId: 0 + array: + rid: -2 + thingType: 1 - id: -1659429232 _name: BoidA - synapses: [] - receivers: - - nucleusId: 1938577052 - - nucleusId: 1710403072 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7344,17 +7230,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 2 + brain: {fileID: 0} + baseName: BoidA thingId: 0 + array: + rid: 2243600969536897085 + thingType: 2 - id: 839544896 _name: BoidB - synapses: [] - receivers: - - nucleusId: 1938577052 - - nucleusId: -916054576 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7366,17 +7252,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 2 + brain: {fileID: 0} + baseName: BoidB thingId: 0 + array: + rid: 2243600969536897086 + thingType: 2 - id: -348340288 _name: BoidC - synapses: [] - receivers: - - nucleusId: 1938577052 - - nucleusId: -1391520368 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7388,17 +7274,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 2 + brain: {fileID: 0} + baseName: BoidC thingId: 0 + array: + rid: 2243600969536897087 + thingType: 2 - id: -1095934288 _name: BoidD - synapses: [] - receivers: - - nucleusId: 1938577052 - - nucleusId: 763145504 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7410,17 +7296,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 2 + brain: {fileID: 0} + baseName: BoidD thingId: 0 + array: + rid: 2243600969536897088 + thingType: 2 - id: -1413006832 _name: BoidE - synapses: [] - receivers: - - nucleusId: 1938577052 - - nucleusId: 1469392160 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7432,17 +7318,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 2 + brain: {fileID: 0} + baseName: BoidE thingId: 0 + array: + rid: 2243600969536897089 + thingType: 2 - id: -61245040 _name: BoidF - synapses: [] - receivers: - - nucleusId: 1938577052 - - nucleusId: -1828317248 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7454,16 +7340,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 2 + brain: {fileID: 0} + baseName: BoidF thingId: 0 + array: + rid: 2243600969536897090 + thingType: 2 - id: -1659687600 _name: BoidA Velocity - synapses: [] - receivers: - - nucleusId: -1857835930 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7475,16 +7362,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 3 + brain: {fileID: 0} + baseName: BoidA Velocity thingId: 0 + array: + rid: -2 + thingType: 3 - id: 1322333072 _name: BoidB Velocity - synapses: [] - receivers: - - nucleusId: -1857835930 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7496,16 +7384,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 3 + brain: {fileID: 0} + baseName: BoidB Velocity thingId: 0 + array: + rid: -2 + thingType: 3 - id: -1563920864 _name: BoidC Velocity - synapses: [] - receivers: - - nucleusId: -1857835930 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7517,16 +7406,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 3 + brain: {fileID: 0} + baseName: BoidC Velocity thingId: 0 + array: + rid: -2 + thingType: 3 - id: 182328688 _name: BoidD Velocity - synapses: [] - receivers: - - nucleusId: -1857835930 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7538,16 +7428,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 3 + brain: {fileID: 0} + baseName: BoidD Velocity thingId: 0 + array: + rid: -2 + thingType: 3 - id: -1666561744 _name: BoidE Velocity - synapses: [] - receivers: - - nucleusId: -1857835930 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7559,16 +7450,17 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 3 + brain: {fileID: 0} + baseName: BoidE Velocity thingId: 0 + array: + rid: -2 + thingType: 3 - id: -1884196224 _name: BoidF Velocity - synapses: [] - receivers: - - nucleusId: -1857835930 + _synapses: [] + _receivers: [] nucleusType: Perceptoid - isSleeping: 0 _curvePreset: 0 curve: serializedVersion: 2 @@ -7580,7 +7472,202 @@ MonoBehaviour: average: 0 inverse: 0 exponent: 1 - baseName: - thingType: 3 + brain: {fileID: 0} + baseName: BoidF Velocity thingId: 0 + array: + rid: -2 + thingType: 3 + cluster: {fileID: 0} rootId: -1707533328 + references: + version: 2 + RefIds: + - rid: -2 + type: {class: , ns: , asm: } + - rid: 2243600969536897085 + type: {class: PercepteiArray, ns: , asm: Assembly-CSharp} + data: + perceptei: + - rid: 2243600969536897091 + name: BoidA + - rid: 2243600969536897086 + type: {class: PercepteiArray, ns: , asm: Assembly-CSharp} + data: + perceptei: + - rid: 2243600969536897092 + name: BoidB + - rid: 2243600969536897087 + type: {class: PercepteiArray, ns: , asm: Assembly-CSharp} + data: + perceptei: + - rid: 2243600969536897093 + name: BoidC + - rid: 2243600969536897088 + type: {class: PercepteiArray, ns: , asm: Assembly-CSharp} + data: + perceptei: + - rid: 2243600969536897094 + name: BoidD + - rid: 2243600969536897089 + type: {class: PercepteiArray, ns: , asm: Assembly-CSharp} + data: + perceptei: + - rid: 2243600969536897095 + name: BoidE + - rid: 2243600969536897090 + type: {class: PercepteiArray, ns: , asm: Assembly-CSharp} + data: + perceptei: + - rid: 2243600969536897096 + name: BoidF + - rid: 2243600969536897091 + type: {class: Perceptoid, ns: , asm: Assembly-CSharp} + data: + id: -1659429232 + _name: BoidA + _synapses: [] + _receivers: [] + nucleusType: Perceptoid + _curvePreset: 0 + curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveMax: 1 + average: 0 + inverse: 0 + exponent: 1 + brain: {fileID: 0} + baseName: BoidA + thingId: 0 + array: + rid: 2243600969536897085 + thingType: 2 + - rid: 2243600969536897092 + type: {class: Perceptoid, ns: , asm: Assembly-CSharp} + data: + id: 839544896 + _name: BoidB + _synapses: [] + _receivers: [] + nucleusType: Perceptoid + _curvePreset: 0 + curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveMax: 1 + average: 0 + inverse: 0 + exponent: 1 + brain: {fileID: 0} + baseName: BoidB + thingId: 0 + array: + rid: 2243600969536897086 + thingType: 2 + - rid: 2243600969536897093 + type: {class: Perceptoid, ns: , asm: Assembly-CSharp} + data: + id: -348340288 + _name: BoidC + _synapses: [] + _receivers: [] + nucleusType: Perceptoid + _curvePreset: 0 + curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveMax: 1 + average: 0 + inverse: 0 + exponent: 1 + brain: {fileID: 0} + baseName: BoidC + thingId: 0 + array: + rid: 2243600969536897087 + thingType: 2 + - rid: 2243600969536897094 + type: {class: Perceptoid, ns: , asm: Assembly-CSharp} + data: + id: -1095934288 + _name: BoidD + _synapses: [] + _receivers: [] + nucleusType: Perceptoid + _curvePreset: 0 + curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveMax: 1 + average: 0 + inverse: 0 + exponent: 1 + brain: {fileID: 0} + baseName: BoidD + thingId: 0 + array: + rid: 2243600969536897088 + thingType: 2 + - rid: 2243600969536897095 + type: {class: Perceptoid, ns: , asm: Assembly-CSharp} + data: + id: -1413006832 + _name: BoidE + _synapses: [] + _receivers: [] + nucleusType: Perceptoid + _curvePreset: 0 + curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveMax: 1 + average: 0 + inverse: 0 + exponent: 1 + brain: {fileID: 0} + baseName: BoidE + thingId: 0 + array: + rid: 2243600969536897089 + thingType: 2 + - rid: 2243600969536897096 + type: {class: Perceptoid, ns: , asm: Assembly-CSharp} + data: + id: -61245040 + _name: BoidF + _synapses: [] + _receivers: [] + nucleusType: Perceptoid + _curvePreset: 0 + curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curveMax: 1 + average: 0 + inverse: 0 + exponent: 1 + brain: {fileID: 0} + baseName: BoidF + thingId: 0 + array: + rid: 2243600969536897090 + thingType: 2