diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
index 6b711a6..173cb6d 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -52,6 +52,7 @@
+
diff --git a/Assets/NanoBrain/Perception.cs b/Assets/NanoBrain/Perception.cs
index d6ee5a7..ee77960 100644
--- a/Assets/NanoBrain/Perception.cs
+++ b/Assets/NanoBrain/Perception.cs
@@ -63,7 +63,8 @@ public class Perception : Nucleus {
if (sensoryNeuroids[i] == null)
availableIx = i;
else if (sensoryNeuroids[i].receptor.thingType == thingId) {
- sensoryNeuroids[i].receptor.position = localPosition;
+ //sensoryNeuroids[i].receptor.position = localPosition;
+ sensoryNeuroids[i].receptor.ProcessStimulus(999, localPosition);
return;
}
if (availableIx == -1) {
@@ -101,7 +102,8 @@ public class Perception : Nucleus {
receiver.neuroid.GetInputFrom(neuroid.velocityNeuroid);
}
- neuroid.receptor.position = localPosition;
+ //neuroid.receptor.position = localPosition;
+ neuroid.receptor.ProcessStimulus(333, localPosition);
}
}
diff --git a/Assets/NanoBrain/Perceptoid.cs b/Assets/NanoBrain/Perceptoid.cs
index bea7cce..3808936 100644
--- a/Assets/NanoBrain/Perceptoid.cs
+++ b/Assets/NanoBrain/Perceptoid.cs
@@ -127,7 +127,7 @@ public class Perceptoid : Neuroid {
return null;
}
- public static void ProcessStimulus(NanoBrainObj brain, int thingType, Vector3 lcoalPosition) {
+ public static void ProcessStimulus(NanoBrainObj brain, int thingType, Vector3 localPosition) {
Perceptoid selectedPerceptoid = null;
foreach (Perceptoid nucleus in brain.perceptei) {
if (nucleus is Perceptoid perceptoid && (thingType == 0 || perceptoid.thingType == thingType))
@@ -144,7 +144,8 @@ public class Perceptoid : Neuroid {
Debug.Log("No perceptoid selected, stimulus is ignored");
return;
}
- selectedPerceptoid.receptor.position = lcoalPosition;
+ //selectedPerceptoid.receptor.position = localPosition;
+ selectedPerceptoid.receptor.ProcessStimulus(888, localPosition);
}
public static Receptor GetReceptor(NanoBrainObj brain, int thingType) {
foreach (Perceptoid perceptoid in brain.perceptei) {
diff --git a/Assets/NanoBrain/Receptor.cs b/Assets/NanoBrain/Receptor.cs
new file mode 100644
index 0000000..7c9ccc7
--- /dev/null
+++ b/Assets/NanoBrain/Receptor.cs
@@ -0,0 +1,33 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+public class Receptor {
+
+ public Neuroid neuroid;
+ public List perceptoids;
+
+ public int thingId;
+ public int thingType;
+ public Vector3 localPosition;
+
+ ///
+ /// Local position of the thing
+ ///
+ public virtual Vector3 position {
+ get {
+ return this.localPosition;
+ }
+ // set {
+ // this.localPosition = value;
+ // neuroid.UpdateState();
+ // }
+ }
+
+ public virtual void ProcessStimulus(int thingId, Vector3 localPosition) {
+ this.thingId = thingId;
+ this.localPosition = localPosition;
+ neuroid.UpdateState();
+ //perceptoids[0].UpdateState();
+ }
+}
\ No newline at end of file
diff --git a/Assets/NanoBrain/Receptor.cs.meta b/Assets/NanoBrain/Receptor.cs.meta
new file mode 100644
index 0000000..56793ae
--- /dev/null
+++ b/Assets/NanoBrain/Receptor.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: cfb9734aebc3ab85aacf87d26fb92e55
\ No newline at end of file
diff --git a/Assets/NanoBrain/SensoryNeuroid.cs b/Assets/NanoBrain/SensoryNeuroid.cs
index 1cdeabb..6bfb5df 100644
--- a/Assets/NanoBrain/SensoryNeuroid.cs
+++ b/Assets/NanoBrain/SensoryNeuroid.cs
@@ -1,26 +1,36 @@
+using System.Collections.Generic;
using System.Linq;
using UnityEngine;
-public class Receptor {
+// public class Receptor {
- public Neuroid neuroid;
+// public Neuroid neuroid;
+// public List perceptoids;
- public int thingType;
- public Vector3 localPosition;
+// public int thingId;
+// public int thingType;
+// public Vector3 localPosition;
- ///
- /// Local position of the thing
- ///
- public virtual Vector3 position {
- get {
- return this.localPosition;
- }
- set {
- this.localPosition = value;
- neuroid.UpdateState();
- }
- }
-}
+// ///
+// /// Local position of the thing
+// ///
+// public virtual Vector3 position {
+// get {
+// return this.localPosition;
+// }
+// set {
+// this.localPosition = value;
+// neuroid.UpdateState();
+// }
+// }
+
+// public virtual void ProcessStimulus(int thingId, Vector3 localPosition) {
+// this.thingId = thingId;
+// this.localPosition = localPosition;
+// neuroid.UpdateState();
+
+// }
+// }
public class SensoryNeuroid : Neuroid {
// A neuroid which has no neurons as input
@@ -32,6 +42,7 @@ public class SensoryNeuroid : Neuroid {
this.name = name + ": position";
this.receptor = new Receptor {
neuroid = this,
+ //perceptoids[0] = this,
thingType = thingId
};
this.velocityNeuroid = new(brain, name + ": velocity");
@@ -111,7 +122,7 @@ public class VelocityNeuroid : Neuroid {
this.stale = 0;
//foreach (Neuroid receiver in receivers)
- foreach(Receiver receiver in receivers) {
+ foreach (Receiver receiver in receivers) {
if (receiver.nucleus is Neuroid neuroid)
neuroid.SetInput(this);
}
diff --git a/Assets/NanoBrain/VisualEditor/NanoBrainObj.cs b/Assets/NanoBrain/VisualEditor/NanoBrainObj.cs
index 3d913bb..00fc89e 100644
--- a/Assets/NanoBrain/VisualEditor/NanoBrainObj.cs
+++ b/Assets/NanoBrain/VisualEditor/NanoBrainObj.cs
@@ -35,6 +35,11 @@ public class NanoBrainObj : ScriptableObject, ISerializationCallbackReceiver {
if (nucleus.isSleeping)
nucleus.outputValue = Vector3.zero;
}
+ foreach (Perceptoid perception in perceptei) {
+ perception.stale++;
+ if (perception.isSleeping)
+ perception.outputValue = Vector3.zero;
+ }
}
public void OnBeforeSerialize() {
diff --git a/Assets/Scenes/Boids/Scripts/Boid.cs b/Assets/Scenes/Boids/Scripts/Boid.cs
index 2f557be..fe2deea 100644
--- a/Assets/Scenes/Boids/Scripts/Boid.cs
+++ b/Assets/Scenes/Boids/Scripts/Boid.cs
@@ -41,9 +41,8 @@ public class Boid : MonoBehaviour {
Vector3 localPosition = this.transform.InverseTransformPoint(neighbour.transform.position);
//Debug.DrawRay(this.transform.position, this.transform.TransformDirection(localPosition), Color.magenta);
- //int thingId = neighbour.GetInstanceID();
- // nanoBrain.perception.ProcessStimulus(thingId, BoidType, localPosition, neighbour.gameObject.name);
- boidReceptor.position = localPosition;
+ int thingId = neighbour.GetInstanceID();
+ boidReceptor.ProcessStimulus(thingId, localPosition);
}
}
@@ -52,7 +51,7 @@ public class Boid : MonoBehaviour {
Vector3 pointOnBounds = innerBounds.ClosestPoint(point);
Vector3 desiredWorldSpace = (pointOnBounds - point).normalized * sc.speed;
Vector3 desiredLocalSpace = -this.transform.InverseTransformPoint(desiredWorldSpace);
- boundaryReceptor.position = desiredLocalSpace;
+ boundaryReceptor.ProcessStimulus(777, desiredLocalSpace);
}
Vector3 worldForce = this.transform.TransformDirection(nanoBrain.root.outputValue);