diff --git a/Assembly-CSharp-Editor.csproj b/Assembly-CSharp-Editor.csproj index 010371d..369d5d7 100644 --- a/Assembly-CSharp-Editor.csproj +++ b/Assembly-CSharp-Editor.csproj @@ -51,7 +51,6 @@ - diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj index 2dfb31c..7e83f6b 100644 --- a/Assembly-CSharp.csproj +++ b/Assembly-CSharp.csproj @@ -58,23 +58,19 @@ - - - - @@ -83,11 +79,9 @@ - - diff --git a/Assets/NanoBrain/Editor/NanoBrain_Editor.cs b/Assets/NanoBrain/Editor/NanoBrain_Editor.cs deleted file mode 100644 index eb59d54..0000000 --- a/Assets/NanoBrain/Editor/NanoBrain_Editor.cs +++ /dev/null @@ -1,272 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; - -[CustomEditor(typeof(NanoBrain))] -public class NanoBrain_Editor : Editor { - private Nucleus currentNucleus; - private List layers = new(); - private Dictionary neuroidPositions = new(); - - protected bool breakOnWake = false; - - #region Start - - private void OnEnable() { - // NanoBrain brain = target as NanoBrain; - // if (brain == null) - // return; - - // if (brain.rootNucleus == null) { - // brain.rootNucleus = CreateInstance(); - // EditorUtility.SetDirty(brain.rootNucleus); - // } - - SelectNeuron(); - } - - private void SelectNeuron() { - // GameObject selectedObject = ((NanoBrain)target).gameObject; - // if (!selectedObject.TryGetComponent(out Boid boid)) - // return; - - // Nucleus neuroid = boid.totalForce; - // this.currentNucleus = neuroid; - - // BuildLayers(); - // Debug.Log($"Layercount = {this.layers.Count}"); - } - - #endregion Start - - #region Update - - public override void OnInspectorGUI() { - if (this.currentNucleus == null) - return; - - breakOnWake = EditorGUILayout.Toggle("Break on wake", breakOnWake); - if (breakOnWake && currentNucleus is Neuroid currentNeuroid) { - if (!currentNeuroid.isSleeping) - Debug.Break(); - } - - DrawGraph(); - - EditorGUILayout.TextField("Name", currentNucleus.name); - EditorGUILayout.Vector3Field("Output Value", currentNucleus.outputValue.ToVector3()); - if (currentNucleus.synapses.Count > 0) { - EditorGUI.indentLevel++; - //foreach ((Nucleus nucleus, float weight) in currentNucleus.synapses) { - foreach (Synapse synapse in currentNucleus.synapses) { - Nucleus nucleus = synapse.nucleus; - float weight = synapse.weight; - - EditorGUI.BeginDisabledGroup(nucleus.isSleeping); - - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.Vector3Field(nucleus.name, nucleus.outputValue.ToVector3()); - EditorGUILayout.FloatField(weight, GUILayout.Width(50)); - EditorGUILayout.EndHorizontal(); - - EditorGUI.EndDisabledGroup(); - - } - EditorGUI.indentLevel--; - } - DrawDefaultInspector(); - } - - private void BuildLayers() { - // A temporary list to track what's been added to layers - this.layers = new(); - int layerIx = 0; - - Nucleus selectedNucleus = this.currentNucleus; - if (selectedNucleus == null) - return; - NeuroidLayer currentLayer = new() { ix = layerIx }; - - //foreach (Neuroid outputNeuroid in selectedNucleus.receivers) { - foreach (Receiver receiver in selectedNucleus.receivers) { - Nucleus outputNeuroid = receiver.nucleus; - if (outputNeuroid != null) { - AddToLayer(currentLayer, outputNeuroid); - // Debug.Log($"layer {layerIx} nucleus {outputNeuroid.name}"); - } - } - if (currentLayer.neuroids.Count > 0) { - this.layers.Add(currentLayer); - layerIx++; - currentLayer = new() { ix = layerIx }; - } - - AddToLayer(currentLayer, selectedNucleus); - this.layers.Add(currentLayer); - // Debug.Log($"layer {layerIx} nucleus {selectedNucleus.name}"); - - layerIx++; - currentLayer = new() { ix = layerIx }; - - //foreach (Nucleus input in selectedNucleus.synapses.Keys) { - foreach (Synapse synapse in selectedNucleus.synapses) { - Nucleus input = synapse.nucleus; - AddToLayer(currentLayer, input); - // Debug.Log($"layer {layerIx} nucleus {input.name}"); - } - if (currentLayer.neuroids.Count > 0) { - this.layers.Add(currentLayer); - } - } - - private void AddToLayer(NeuroidLayer layer, Nucleus nucleus) { - layer.neuroids.Add(nucleus); - nucleus.layerIx = layer.ix; - // Store its position - Vector2Int neuroidPosition = new(layer.ix, layer.neuroids.Count - 1); - neuroidPositions[nucleus] = neuroidPosition; - - } - - private void DrawGraph() { - if (currentNucleus == null) - return; - Rect outer = EditorGUILayout.GetControlRect(false, 420); - GUI.BeginGroup(outer); - foreach (NeuroidLayer layer in layers) - DrawLayer(layer); - GUI.EndGroup(); - } - - private void DrawLayer(NeuroidLayer layer) { - int nodeCount = layer.neuroids.Count; - float maxValue = 0; - foreach (Nucleus nucleus in layer.neuroids) { - if (nucleus is Neuroid neuroid) { - float value = neuroid.outputValue.magnitude; - if (value > maxValue) - maxValue = value; - } - } - float spacing = 400f / nodeCount; - float margin = 10 + spacing / 2; - foreach (Nucleus layerNucleus in layer.neuroids) { - if (layerNucleus is Neuroid layerNeuroid) { - Vector2Int layerNeuroidPos = this.neuroidPositions[layerNeuroid]; - Vector3 parentPos = new(100 + layerNeuroidPos.x * 100, margin + layerNeuroidPos.y * spacing, 0.1f); - - //int i = 0; - float inputSpacing = 400f / layerNeuroid.synapses.Count; - float inputMargin = 10 + inputSpacing / 2; - // int minStale = 10000; - //foreach ((Nucleus nucleus, float weight) in layerNeuroid.synapses) { - foreach (Synapse synapse in layerNeuroid.synapses) { - Nucleus nucleus = synapse.nucleus; - float weight = synapse.weight; - if (this.neuroidPositions.ContainsKey(nucleus)) { - Vector2Int inputNeuroidPos = this.neuroidPositions[nucleus]; - if (inputNeuroidPos.x == layerNeuroidPos.x + 1) { - Vector3 pos = new(100 + inputNeuroidPos.x * 100, inputMargin + inputNeuroidPos.y * inputSpacing, 0.0f); - - float brightness = weight / 10.0f; - Handles.color = new Color(brightness, brightness, brightness); - Handles.DrawLine(parentPos, pos); - } - } - // if (nucleus is Neuroid neuroid && neuroid.stale < minStale) - // minStale = neuroid.stale; - } - - // if (layerNeuroid.synapses.Count > 0 && minStale > 2 && layerNeuroid.stale < 3) - // Debug.LogWarning($"Strange {minStale} is big duing update"); - - - float size = 20; - if (layerNeuroid.isSleeping) - Handles.color = Color.darkRed; - else { - float brightness = layerNeuroid.outputValue.magnitude / maxValue; - Handles.color = new Color(brightness, brightness, brightness); - } - Handles.DrawSolidDisc(parentPos, Vector3.forward, size); - Vector3 labelPos = parentPos - Vector3.down * (size + 0.2f); // below disc along up axis - GUIStyle style = new GUIStyle(EditorStyles.label) { - alignment = TextAnchor.UpperCenter, - normal = { textColor = Color.white }, - fontStyle = FontStyle.Bold - }; - Handles.Label(labelPos, layerNeuroid.name, style); - - Rect neuronRect = new(parentPos.x - size, parentPos.y - size, size * 2, size * 2); - int id = GUIUtility.GetControlID(FocusType.Passive); - Event e = Event.current; - EventType et = e.GetTypeForControl(id); - if (e != null && neuronRect.Contains(e.mousePosition)) { - // Process Hover - HandleMouseHover(layerNeuroid, neuronRect); - // Process click - if (et == EventType.MouseDown && e.button == 0) { - // Consume the event so the scene doesn't also handle it - e.Use(); - HandleDiscClicked(layerNeuroid); - } - } - //i++; - } - } - } - - private void HandleMouseHover(Neuroid neuroid, Rect rect) { - GUIContent tooltip; - if (neuroid is SensoryNeuroid sensoryNeuroid) { - tooltip = new( - $"{sensoryNeuroid.name}" + - $"\nThing {sensoryNeuroid.receptor.thingType}" + - $"\nValue: {neuroid.outputValue}"); - } - else { - tooltip = new( - $"{neuroid.name}" + - $"\nsynapse count {neuroid.synapses.Count}" + - $"\nValue: {neuroid.outputValue}"); - } - - Vector2 mousePosition = Event.current.mousePosition; - - // Display tooltip with some offset - Vector2 tooltipSize = GUI.skin.box.CalcSize(tooltip); - Rect tooltipRect = new Rect(mousePosition.x + 10, mousePosition.y + 10, tooltipSize.x, tooltipSize.y); - - GUI.Box(tooltipRect, tooltip); - } - - private void HandleDiscClicked(Nucleus nucleus) { - this.currentNucleus = nucleus; - BuildLayers(); - } - - protected virtual void OnSceneGUI() { - NanoBrain brain = target as NanoBrain; - if (brain == null) - return; - - Vector3 position = brain.transform.position; - float radius = 1; - - - Handles.DrawWireDisc(position, Vector3.up, radius); // horizontal circle - Handles.DrawWireDisc(position, Vector3.right, radius); // X-plane - Handles.DrawWireDisc(position, Vector3.forward, radius); // Z-plane - - - // Debug.DrawRay(brain.transform.position, Vector3.forward, Color.magenta); - // Handles.color = Color.green; - // Handles.DrawLine(brain.transform.position, brain.transform.position + Vector3.up); - Handles.color = Color.yellow; - Vector3 worldForce = brain.transform.TransformDirection(this.currentNucleus.outputValue.ToVector3()); - //Debug.DrawRay(position, worldForce * 10, Color.yellow); - Handles.DrawLine(position, position + worldForce * 10); - } - - #endregion Update -} diff --git a/Assets/NanoBrain/Editor/NanoBrain_Editor.cs.meta b/Assets/NanoBrain/Editor/NanoBrain_Editor.cs.meta deleted file mode 100644 index ebb08bb..0000000 --- a/Assets/NanoBrain/Editor/NanoBrain_Editor.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 2299b68d073cc5c31915f591deb79ddc \ No newline at end of file diff --git a/Assets/NanoBrain/Editor/NeuroidWindow.cs b/Assets/NanoBrain/Editor/NeuroidWindow.cs index 354dd4e..72494b8 100644 --- a/Assets/NanoBrain/Editor/NeuroidWindow.cs +++ b/Assets/NanoBrain/Editor/NeuroidWindow.cs @@ -241,18 +241,18 @@ public class GraphEditorWindow : EditorWindow { private void HandleMouseHover(Neuroid neuroid, Rect rect) { GUIContent tooltip; - if (neuroid is SensoryNeuroid sensoryNeuroid) { - tooltip = new( - $"{sensoryNeuroid.name}" + - $"\nThing {sensoryNeuroid.receptor.thingType}" + - $"\nValue: {neuroid.outputValue}"); - } - else { + // if (neuroid is SensoryNeuroid sensoryNeuroid) { + // tooltip = new( + // $"{sensoryNeuroid.name}" + + // $"\nThing {sensoryNeuroid.receptor.thingType}" + + // $"\nValue: {neuroid.outputValue}"); + // } + // else { tooltip = new( $"{neuroid.name}" + $"\nsynapse count {neuroid.synapses.Count}" + $"\nValue: {neuroid.outputValue}"); - } + // } Vector2 mousePosition = Event.current.mousePosition; diff --git a/Assets/NanoBrain/NanoBrain.cs b/Assets/NanoBrain/NanoBrain.cs deleted file mode 100644 index 9fca89a..0000000 --- a/Assets/NanoBrain/NanoBrain.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class NanoBrain : MonoBehaviour { - -// public NucleusObj rootNucleus; - - // public List neuroids = new(); - - // public Neuroid AddNeuron(string name) { - // Neuroid neuroid = new(this, name); - // return neuroid; - // } - - // public void UpdateNeurons() { - // foreach (Neuroid neuroid in neuroids) { - // neuroid.stale++; - // if (neuroid.isSleeping) - // neuroid.outputValue = Vector3.zero; - // } - // } -} diff --git a/Assets/NanoBrain/NanoBrain.cs.meta b/Assets/NanoBrain/NanoBrain.cs.meta deleted file mode 100644 index 078dc8f..0000000 --- a/Assets/NanoBrain/NanoBrain.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 74e1478743ac3bc078cbe8501c287e98 \ No newline at end of file diff --git a/Assets/NanoBrain/Neuroid.cs b/Assets/NanoBrain/Neuroid.cs index 287c23b..6e192ec 100644 --- a/Assets/NanoBrain/Neuroid.cs +++ b/Assets/NanoBrain/Neuroid.cs @@ -99,9 +99,7 @@ public class Neuroid : Nucleus { return; } - this.outputValue = result; //Spherical.FromVector3(resultVector); - //this.stale = 0; - //this.Refresh(); + this.outputValue = result; foreach (Receiver receiver in this.receivers) { if (receiver.nucleus is Neuroid neuroid) diff --git a/Assets/NanoBrain/NeuroidBehaviour.cs b/Assets/NanoBrain/NeuroidBehaviour.cs deleted file mode 100644 index 411f2a8..0000000 --- a/Assets/NanoBrain/NeuroidBehaviour.cs +++ /dev/null @@ -1,14 +0,0 @@ -using UnityEngine; - -public class NeuroidBehaviour : MonoBehaviour -{ - public Neuroid neuroid; - public GameObject thing; - - public void Start() { - Debug.Log("Neuroid start"); - } - public void Update() { - Debug.Log("Neuroid update"); - } -} diff --git a/Assets/NanoBrain/NeuroidBehaviour.cs.meta b/Assets/NanoBrain/NeuroidBehaviour.cs.meta deleted file mode 100644 index a6a62af..0000000 --- a/Assets/NanoBrain/NeuroidBehaviour.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: dded3a10fb4fd894383b44483dd47382 \ No newline at end of file diff --git a/Assets/NanoBrain/Perception.cs b/Assets/NanoBrain/Perception.cs deleted file mode 100644 index f98077d..0000000 --- a/Assets/NanoBrain/Perception.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -[System.Serializable] -public class Perception : Nucleus { - public SensoryNeuroid[] sensoryNeuroids = new SensoryNeuroid[7]; - - [System.Serializable] - public class Receiver { - public int thingType = 0; - public Nucleus neuroid; - } - - //public HashSet positionReceivers { get; protected set; } - public List positionReceivers; - //public HashSet velocityReceivers { get; protected set; } - public List velocityReceivers; - - public Perception(NanoBrainObj brain) : base("Perception") { - this.positionReceivers = new(); - this.velocityReceivers = new(); - } - - public Perceptoid GetPerception(int thingType = 0) { - foreach (Nucleus nucleus in this.brain.nuclei) { - if (nucleus is Perceptoid perceptoid && (thingType == 0 || perceptoid.receptor.thingType == thingType)) - return perceptoid; - } - return null; - } - - // public void SendPositions(Nucleus receivingNeuroid, int thingType = 0, float weight = 1.0f) { - // Receiver receiver = new() { - // thingType = thingType, - // neuroid = receivingNeuroid - // }; - // positionReceivers.Add(receiver); - // foreach (SensoryNeuroid neuroid in sensoryNeuroids) { - // if (neuroid != null) { - // neuroid.AddReceiver(receivingNeuroid); - // receivingNeuroid.SetWeight(neuroid, weight); - // } - // } - // } - // public void SendVelocities(Nucleus receivingNeuroid, int thingType = 0, float weight = 1.0f) { - // Receiver receiver = new() { - // thingType = thingType, - // neuroid = receivingNeuroid - // }; - // velocityReceivers.Add(receiver); - // foreach (SensoryNeuroid neuroid in sensoryNeuroids) { - // if (neuroid != null && neuroid.velocityNeuroid != null) { - // neuroid.velocityNeuroid.AddReceiver(receivingNeuroid); - // receivingNeuroid.SetWeight(neuroid, weight); - // } - // } - // } - - public void ProcessStimulus(int thingId, int thingType, Vector3 localPosition, string name = "Sensing") { - int availableIx = -1; - int leastInterestingIx = -1; - for (int i = 0; i < sensoryNeuroids.Length; i++) { - if (sensoryNeuroids[i] == null) - availableIx = i; - else if (sensoryNeuroids[i].receptor.thingType == thingId) { - //sensoryNeuroids[i].receptor.position = localPosition; - sensoryNeuroids[i].receptor.ProcessStimulus(999, localPosition); - return; - } - if (availableIx == -1) { - if (sensoryNeuroids[i].isSleeping) - leastInterestingIx = i; - else if (sensoryNeuroids[i] != null) { - if (leastInterestingIx == -1 || sensoryNeuroids[leastInterestingIx].receptor.localPosition.magnitude > sensoryNeuroids[i].receptor.localPosition.magnitude) - leastInterestingIx = i; - } - } - } - if (availableIx == -1) - availableIx = leastInterestingIx; - - if (availableIx != -1) { - SensoryNeuroid neuroid; - if (sensoryNeuroids[availableIx] != null) { - Debug.Log($"replace receptor for {thingId} at {availableIx}"); - neuroid = sensoryNeuroids[availableIx]; - neuroid.Replace(thingId, name); - } - else { - Debug.Log($"new receptor for {thingId} at {availableIx}"); - neuroid = new(brain, thingId, name); - sensoryNeuroids[availableIx] = neuroid; - } - foreach (Receiver receiver in positionReceivers) { - if (receiver.thingType == 0 || receiver.thingType == thingType) { - Debug.Log("Add position receiver"); - receiver.neuroid.GetInputFrom(neuroid); - } - } - // foreach (Receiver receiver in velocityReceivers) { - // if (receiver.thingType == 0 || receiver.thingType == thingType) - // receiver.neuroid.GetInputFrom(neuroid.velocityNeuroid); - // } - - //neuroid.receptor.position = localPosition; - neuroid.receptor.ProcessStimulus(333, localPosition); - } - } - -} \ No newline at end of file diff --git a/Assets/NanoBrain/Perception.cs.meta b/Assets/NanoBrain/Perception.cs.meta deleted file mode 100644 index adfa3db..0000000 --- a/Assets/NanoBrain/Perception.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 37d94d399d30e6eb996236adabad87ee \ No newline at end of file diff --git a/Assets/NanoBrain/Perceptoid.cs b/Assets/NanoBrain/Perceptoid.cs index 54e9a36..d46f9dc 100644 --- a/Assets/NanoBrain/Perceptoid.cs +++ b/Assets/NanoBrain/Perceptoid.cs @@ -48,19 +48,6 @@ public class Perceptoid : Neuroid { #endregion Serialization - // public Perceptoid(NanoBrainObj brain, string name) : base(name) { - // this.brain = brain; - // if (this.brain != null) { - // this.brain.perceptei.Add(this); - // } - // else - // Debug.LogError("No neuroid network"); - - // this.nucleusType = nameof(Perceptoid); - // this.name = name; - // this.receptor = new Receptor(this); - // } - public Perceptoid(NanoBrainObj brain, int thingType, string name = "sensor") : base(name) { this.brain = brain; if (this.brain != null) { @@ -74,65 +61,22 @@ public class Perceptoid : Neuroid { this.thingType = thingType; this.receptor = Receptor.GetReceptor(brain, thingType); this.receptor.perceptei.Add(this); - // this.velocityNeuroid = new(brain, name + ": velocity"); - // // The velocity neuroid received position data from this - // this.AddReceiver(velocityNeuroid); } public void Replace(int thingType, string name = "sensor") { this.name = name; - //this.thingType = thingType; + this.thingType = thingType; this.receptor.thingType = thingType; this.receptor.localPosition = Spherical.zero; this.outputValue = Spherical.zero; this.receivers = new(); - // this.AddReceiver(velocityNeuroid); - - // this.velocityNeuroid.Replace(name + ": velocity"); - } - - public override void UpdateState() { - Vector3 result = receptor.localPosition.ToVector3(); - foreach (Synapse synapse in this.synapses) { - Nucleus nucleus = synapse.nucleus; - float weight = synapse.weight; - Vector3 direction = nucleus.outputValue.normalized.ToVector3(); - float magnitude = nucleus.outputValue.magnitude; - - magnitude = weight * Mathf.Pow(magnitude, exponent); - if (inverse) - magnitude = 1 / magnitude; - result += direction * magnitude; - } - if (average && this.synapses.Count > 0) - result /= this.synapses.Count + 1; - - this.outputValue = Spherical.FromVector3(result); - foreach (Receiver receiver in this.receivers) - if (receiver.nucleus is Neuroid neuroid) - neuroid.SetInput(this); - //this.stale = 0; - //this.Refresh(); } public void UpdateState(int thingId, Spherical receptorValue) { this.thingId = thingId; Spherical result = receptorValue; - // foreach (Synapse synapse in this.synapses) { - // Nucleus nucleus = synapse.nucleus; - // float weight = synapse.weight; - // Vector3 direction = nucleus.outputValue.normalized; - // float magnitude = nucleus.outputValue.magnitude; - - // magnitude = weight * Mathf.Pow(magnitude, exponent); - // if (inverse) - // magnitude = 1 / magnitude; - // result += direction * magnitude; - // } - // if (average && this.synapses.Count > 0) - // result /= this.synapses.Count + 1; float d = Spherical.Distance(result, this.outputValue); if (d < 0.1f) { @@ -143,8 +87,6 @@ public class Perceptoid : Neuroid { foreach (Receiver receiver in this.receivers) if (receiver.nucleus is Neuroid neuroid) neuroid.SetInput(this); - //this.stale = 0; - //this.Refresh(); } @@ -155,36 +97,4 @@ public class Perceptoid : Neuroid { } return null; } - - 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.receptor.thingType == thingType)) - if (selectedPerceptoid == null) { - selectedPerceptoid = perceptoid; - if (perceptoid.isSleeping) { - break; - } - } - else if (perceptoid.receptor.localPosition.magnitude < selectedPerceptoid.receptor.localPosition.magnitude) - selectedPerceptoid = perceptoid; - } - if (selectedPerceptoid == null) { - Debug.Log("No perceptoid selected, stimulus is ignored"); - return; - } - //selectedPerceptoid.receptor.position = localPosition; - selectedPerceptoid.receptor.ProcessStimulus(888, localPosition); - } - - // public static Receptor GetReceptor(NanoBrainObj brain, int thingType) { - // foreach (Perceptoid perceptoid in brain.perceptei) { - // if (perceptoid.receptor != null) { - // if (thingType == 0 || perceptoid.receptor.thingType == thingType) - // return perceptoid.receptor; - // } - // } - // Receptor receptor = new(thingType); - // return receptor; - // } } diff --git a/Assets/NanoBrain/Receptor.cs b/Assets/NanoBrain/Receptor.cs index 18b8089..45f3697 100644 --- a/Assets/NanoBrain/Receptor.cs +++ b/Assets/NanoBrain/Receptor.cs @@ -8,7 +8,6 @@ public class Receptor { /// public List perceptei = new(); - //public int thingId; private int _thingType = 0; public int thingType { get { return _thingType; } @@ -51,15 +50,16 @@ public class Receptor { selectedPerceptoid = perceptoid; // Do not look any further - // This does not do a lot.... - float deltaDistance = newLocalPosition.distance - previousLocalPosition.distance; - // See if the change is significant - AngleFloat deltaDirection = Direction.UnsignedAngle(newLocalPosition.direction, previousLocalPosition.direction); - if (deltaDistance < this.distanceResolution && deltaDirection.inDegrees < directionResolution) { - // The difference is not significant we don't process this data. - this.localPosition = previousLocalPosition; - return; - } + // // This does not do a lot.... + // float deltaDistance = newLocalPosition.distance - previousLocalPosition.distance; + // // See if the change is significant + // AngleFloat deltaDirection = Direction.UnsignedAngle(newLocalPosition.direction, previousLocalPosition.direction); + // if (deltaDistance < this.distanceResolution && deltaDirection.inDegrees < directionResolution) { + // // The difference is not significant we don't process this data. + // this.localPosition = previousLocalPosition; + // return; + // } + // This is now also handled by the UpdateState Spherical.Distance break; } else if (perceptoid.isSleeping) { diff --git a/Assets/NanoBrain/SensoryNeuroid.cs b/Assets/NanoBrain/SensoryNeuroid.cs deleted file mode 100644 index ffc4e4a..0000000 --- a/Assets/NanoBrain/SensoryNeuroid.cs +++ /dev/null @@ -1,136 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using LinearAlgebra; - -// 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(); - -// } -// } - -public class SensoryNeuroid : Neuroid { - // A neuroid which has no neurons as input - // But receives value from a receptor - public Receptor receptor; - //public VelocityNeuroid velocityNeuroid; - - public SensoryNeuroid(NanoBrainObj brain, int thingId, string name = "sensor") : base(brain, name) { - this.name = name + ": position"; - // this.receptor = new Receptor(this) { - // thingType = thingId - // }; - // this.velocityNeuroid = new(brain, name + ": velocity"); - // // The velocity neuroid received position data from this - // this.AddReceiver(velocityNeuroid); - } - - public void Replace(int thingId, string name = "sensor") { - this.name = name + ": position"; - - this.receptor.thingType = thingId; - this.receptor.localPosition = Spherical.zero; - - this.outputValue = Spherical.zero; - this.receivers = new(); - // this.AddReceiver(velocityNeuroid); - - // // this.velocityNeuroid.name = name + ": velocity"; - // // this.velocityNeuroid.receivers = new(); - // this.velocityNeuroid.Replace(name + ": velocity"); - } - - public override void UpdateState() { - Vector3 result = receptor.localPosition.ToVector3(); - //foreach ((Nucleus nucleus, float weight) in this.synapses) { - foreach (Synapse synapse in this.synapses) { - Nucleus nucleus = synapse.nucleus; - float weight = synapse.weight; - Vector3 outputV3 = nucleus.outputValue.ToVector3(); - Vector3 direction = outputV3.normalized; - float magnitude = outputV3.magnitude; - - magnitude = weight * Mathf.Pow(magnitude, exponent); - if (inverse) - magnitude = 1 / magnitude; - result += direction * magnitude; - } - if (average && this.synapses.Count > 0) - result /= this.synapses.Count + 1; - - this.outputValue = Spherical.FromVector3(result); - //foreach (Neuroid neuroid in this.receivers) - foreach (Receiver receiver in this.receivers) - if (receiver.nucleus is Neuroid neuroid) - neuroid.SetInput(this); - //this.stale = 0; - //this.Refresh(); - } -} - -// public class VelocityNeuroid : Neuroid { -// // Would be best if this was received through a synapse via a loop.... -// private Vector3 lastPosition = Vector3.zero; -// private float lastValueTime = 0; - -// public VelocityNeuroid(NanoBrainObj net, string name = "velocity") : base(net, name) { -// } - -// public void Replace(string name = "velocity") { -// this.name = name; -// this.receivers = new(); -// this.lastPosition = Vector3.zero; -// this.lastValueTime = 0; -// } - -// public override void UpdateState() { -// // Assuming only one synapse for now.... -// //Vector3 currentPosition = this.synapses.First().Key.outputValue; -// Spherical currentPosition = this.synapses.First().nucleus.outputValue; -// Vector3 currentPositionV3 = currentPosition.ToVector3(); -// float currentValueTime = Time.time; - -// if (lastValueTime != 0) { -// float deltaTime = currentValueTime - lastValueTime; -// Vector3 translation = currentPositionV3 - lastPosition; -// Vector3 velocity = translation / deltaTime; - -// // No activation function... -// this.outputValue = Spherical.FromVector3(velocity); -// //this.stale = 0; -// //this.Refresh(); - -// foreach (Receiver receiver in receivers) { -// if (receiver.nucleus is Neuroid neuroid) -// neuroid.SetInput(this); -// } -// } - -// this.lastValueTime = currentValueTime; -// this.lastPosition = currentPositionV3; -// } -// } \ No newline at end of file diff --git a/Assets/NanoBrain/SensoryNeuroid.cs.meta b/Assets/NanoBrain/SensoryNeuroid.cs.meta deleted file mode 100644 index 40e2ec3..0000000 --- a/Assets/NanoBrain/SensoryNeuroid.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 9e34db6b23aa12477a2f98b9eb0cbbe2 \ No newline at end of file diff --git a/Assets/NanoBrain/VisualEditor/Editor/NanoBrainEditor.cs b/Assets/NanoBrain/VisualEditor/Editor/NanoBrainEditor.cs index d534b9e..81ffac3 100644 --- a/Assets/NanoBrain/VisualEditor/Editor/NanoBrainEditor.cs +++ b/Assets/NanoBrain/VisualEditor/Editor/NanoBrainEditor.cs @@ -296,18 +296,18 @@ public class GraphBoardView : VisualElement { private void HandleMouseHover(Nucleus neuroid, Rect rect) { GUIContent tooltip; - if (neuroid is SensoryNeuroid sensoryNeuroid) { - tooltip = new( - $"{sensoryNeuroid.name}" + - $"\nThing {sensoryNeuroid.receptor.thingType}" + - $"\nValue: {neuroid.outputValue}"); - } - else { + // if (neuroid is SensoryNeuroid sensoryNeuroid) { + // tooltip = new( + // $"{sensoryNeuroid.name}" + + // $"\nThing {sensoryNeuroid.receptor.thingType}" + + // $"\nValue: {neuroid.outputValue}"); + // } + // else { tooltip = new( $"{neuroid.name}" + $"\nsynapse count {neuroid.synapses.Count}" + $"\nValue: {neuroid.outputValue}"); - } + // } Vector2 mousePosition = Event.current.mousePosition; diff --git a/Assets/NanoBrain/VisualEditor/Editor/NanoBrainInspector.cs b/Assets/NanoBrain/VisualEditor/Editor/NanoBrainInspector.cs index 5f65741..9ab8a35 100644 --- a/Assets/NanoBrain/VisualEditor/Editor/NanoBrainInspector.cs +++ b/Assets/NanoBrain/VisualEditor/Editor/NanoBrainInspector.cs @@ -337,13 +337,14 @@ public class NanoBrainInspector : Editor { private void HandleMouseHover(Nucleus nucleus, Rect rect) { GUIContent tooltip; - if (nucleus is SensoryNeuroid sensoryNeuroid) { - tooltip = new( - $"{sensoryNeuroid.name}" + - $"\nThing {sensoryNeuroid.receptor.thingType}" + - $"\nValue: {nucleus.outputValue}"); - } - else if (nucleus is Perceptoid perceptoid) { + // if (nucleus is SensoryNeuroid sensoryNeuroid) { + // tooltip = new( + // $"{sensoryNeuroid.name}" + + // $"\nThing {sensoryNeuroid.receptor.thingType}" + + // $"\nValue: {nucleus.outputValue}"); + // } + //else + if (nucleus is Perceptoid perceptoid) { if (perceptoid.receptor != null) { tooltip = new( $"{perceptoid.name}" + @@ -396,7 +397,7 @@ public class NanoBrainInspector : Editor { if (this.currentNucleus == null) return; - + this.currentNucleus.name = EditorGUILayout.TextField(this.currentNucleus.name); if (this.currentNucleus is Perceptoid currentPerceptoid) { currentPerceptoid.receptor.thingType = EditorGUILayout.IntField("Thing Type", currentPerceptoid.receptor.thingType); @@ -572,29 +573,29 @@ public class NanoBrainInspector : Editor { } } - protected virtual void OnSceneGUI() { - NanoBrain brain = target as NanoBrain; - if (brain == null) - return; + // protected virtual void OnSceneGUI() { + // NanoBrain brain = target as NanoBrain; + // if (brain == null) + // return; - Vector3 position = brain.transform.position; - float radius = 1; + // Vector3 position = brain.transform.position; + // float radius = 1; - Handles.DrawWireDisc(position, Vector3.up, radius); // horizontal circle - Handles.DrawWireDisc(position, Vector3.right, radius); // X-plane - Handles.DrawWireDisc(position, Vector3.forward, radius); // Z-plane + // Handles.DrawWireDisc(position, Vector3.up, radius); // horizontal circle + // Handles.DrawWireDisc(position, Vector3.right, radius); // X-plane + // Handles.DrawWireDisc(position, Vector3.forward, radius); // Z-plane - // Debug.DrawRay(brain.transform.position, Vector3.forward, Color.magenta); - // Handles.color = Color.green; - // Handles.DrawLine(brain.transform.position, brain.transform.position + Vector3.up); + // // Debug.DrawRay(brain.transform.position, Vector3.forward, Color.magenta); + // // Handles.color = Color.green; + // // Handles.DrawLine(brain.transform.position, brain.transform.position + Vector3.up); - // Handles.color = Color.yellow; - // Vector3 worldForce = brain.transform.TransformDirection(this.currentNucleus.outputValue); - // //Debug.DrawRay(position, worldForce * 10, Color.yellow); - // Handles.DrawLine(position, position + worldForce * 10); - } + // // Handles.color = Color.yellow; + // // Vector3 worldForce = brain.transform.TransformDirection(this.currentNucleus.outputValue); + // // //Debug.DrawRay(position, worldForce * 10, Color.yellow); + // // Handles.DrawLine(position, position + worldForce * 10); + // } #endregion Update } diff --git a/Assets/NanoBrain/VisualEditor/NeuroidObject.cs b/Assets/NanoBrain/VisualEditor/NeuroidObject.cs deleted file mode 100644 index e69de29..0000000 diff --git a/Assets/NanoBrain/VisualEditor/NeuroidObject.cs.meta b/Assets/NanoBrain/VisualEditor/NeuroidObject.cs.meta deleted file mode 100644 index 8d0614f..0000000 --- a/Assets/NanoBrain/VisualEditor/NeuroidObject.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: d14e756f390f41a1c9923a0015329389 \ No newline at end of file diff --git a/Assets/NanoBrain/VisualEditor/NucleusObject.cs b/Assets/NanoBrain/VisualEditor/NucleusObject.cs deleted file mode 100644 index 989f603..0000000 --- a/Assets/NanoBrain/VisualEditor/NucleusObject.cs +++ /dev/null @@ -1,28 +0,0 @@ -// using System.Collections.Generic; -// using UnityEngine; - -// public class NucleusObj : ScriptableObject { -// public virtual string objName { get; set; } - -// public readonly Dictionary synapses = new(); -// public HashSet receivers = new(); -// public virtual Vector3 outputValue { get; set; } - -// public int stale = 0; - -// public NucleusObj(string name) { -// this.objName = name; -// } - -// public virtual void AddReceiver(NucleusObj receiver) { -// this.receivers.Add(receiver); -// receiver.synapses[this] = 1.0f; -// } - -// public bool isSleeping { -// get { -// return this.stale > 2; -// } -// } - -// } \ No newline at end of file diff --git a/Assets/NanoBrain/VisualEditor/NucleusObject.cs.meta b/Assets/NanoBrain/VisualEditor/NucleusObject.cs.meta deleted file mode 100644 index e867330..0000000 --- a/Assets/NanoBrain/VisualEditor/NucleusObject.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: ca2a41cdae50b5005b5cf10cebb28de6 \ No newline at end of file