WIP cluster redesign

This commit is contained in:
Pascal Serrarens 2026-01-12 09:56:49 +01:00
parent c64ccb246c
commit beb88f8214
12 changed files with 410 additions and 381 deletions

View File

@ -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<Synapse> _synapses = new(); // = inputs, compare receptors in NanoBrain
public List<Synapse> 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<Nucleus>();
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<INucleus> 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

View File

@ -17,6 +17,7 @@ public interface INucleus {
// Senders
public List<Synapse> synapses { get; }
public void AddSynapse(INucleus sender);
#endregion static struct

View File

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

View File

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

View File

@ -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<ClusterWrapper>().Init(this.currentNucleus, brain);
currentWrapper = CreateInstance<ClusterWrapper>().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<string> synapseNuclei = this.currentNucleus.synapses.Select(synapse => synapse.nucleus.name);
//IEnumerable<string> perceptei = this.currentNucleus.brain.perceptei.Select(i => i.name).Except(synapseNuclei);
IEnumerable<string> nuclei = this.currentNucleus.cluster.nuclei.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();
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);
}
}

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using UnityEngine;
@ -7,7 +8,6 @@ public class NanoBrain : ScriptableObject, ISerializationCallbackReceiver {
public List<Perceptoid> perceptei = new();
public List<Receptor> 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<INucleus> 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<INucleus> visitedNuclei, INucleus nucleus) {
if (nucleus is null)
return;
if (nucleus.brain == null)
nucleus.brain = this;
visitedNuclei.Add(nucleus);
if (nucleus.synapses != null) {
HashSet<Synapse> 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<INucleus> 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<Receiver> 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<INucleus> visitedNuclei, INucleus nucleus) {
if (nucleus is null)
return;
if (nucleus.brain == null)
nucleus.brain = this;
visitedNuclei.Add(nucleus);
if (nucleus.synapses != null) {
HashSet<Synapse> 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<Receiver> 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);
}
}
*/
*/
}

View File

@ -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:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: ad89de17be687dbc18a57252cadda0f3
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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:

View File

@ -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: []

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: fab876d6bf7dc9b10a56541a7eeccdd2
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

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