NanoBrain-unitypackage/ReceptorArray.cs

87 lines
3.9 KiB
C#

/*
using System.Collections.Generic;
using UnityEngine;
public class ReceptorArray {
public string name;
public Cluster parent { get; set; }
public NucleusArray nuclei;
public int size => nuclei.nuclei.Length;
public Dictionary<int, INucleus> thingReceivers = new();
public ReceptorArray(Cluster parent, NucleusArray nuclei) {
this.parent = parent;
this.nuclei = nuclei;
}
public virtual void ProcessStimulus(int thingId, Vector3 newLocalPositionVector, string thingName = null) {
if (!thingReceivers.TryGetValue(thingId, out INucleus selectedReceiver)) {
foreach (IReceptor receptor in this.nuclei.nuclei) {
if (receptor is not INucleus receiver)
continue;
if (thingReceivers.ContainsValue(receiver))
continue;
// receiver is not used yet
thingReceivers.Add(thingId, receiver);
selectedReceiver = receiver;
}
}
//selectedReceiver.outputValue = newLocalPositionVector;
// int receiverIx = 0;
// INucleus selectedReceiver = null;
// int selectedReceiverIx = 0;
// foreach (INucleus receiver in this.receivers) {
// if (thingIds[receiverIx] == thingId) {
// // We found an existing receiver for this thing
// selectedReceiver = receiver;
// selectedReceiverIx = receiverIx;
// // Do not look any further
// break;
// }
// else if (receiver.isSleeping) {
// // A sleeping receiver is not active and can therefore always be used
// selectedReceiver = receiver;
// selectedReceiverIx = receiverIx;
// // Look further because we may find an existing receiver for this thing
// }
// else if (selectedReceiver == null) {
// // If we haven't found a receiver yet, just start by taking the first
// selectedReceiver = receiver;
// selectedReceiverIx = receiverIx;
// }
// else if (selectedReceiver.isSleeping == false) {
// // If no existing or sleeping receiver is found, we look for
// // the receiver with the furthest/least interesting stimulus
// if (length(receiver.outputValue) < length(selectedReceiver.outputValue)) {
// // Debug.Log($"{selectedReceiver.name}[{selectedReceiverIx}] {length(selectedReceiver.outputValue)}" +
// // $" {receiver.name}[{receiverIx}] {length(receiver.outputValue)} ");
// selectedReceiver = receiver;
// selectedReceiverIx = receiverIx;
// }
// }
// receiverIx++;
// }
// if (selectedReceiverIx >= thingIds.Length)
// return;
// thingIds[selectedReceiverIx] = thingId;
// if (thingName != null) {
// string baseName = selectedReceiver.name;
// int colonPos = selectedReceiver.name.IndexOf(":");
// if (colonPos > 0)
// baseName = selectedReceiver.name.Substring(0, colonPos);
// selectedReceiver.name = baseName + ": " + thingName;
// }
// Debug.Log($"Receiver {selectedReceiver.name}[{selectedReceiverIx}] for thing {thingId}");
// selectedReceiver.parent.UpdateStateIsolated();
}
}
*/