/* 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 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(); } } */