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