using UnityEngine; public interface IReceptor { public string GetName(); // public NucleusArray array { // get; set; // } public Nucleus[] nucleiArray { get; set; } public void AddReceptorElement(ClusterPrefab prefab); public void RemoveReceptorElement(); public void ProcessStimulus(Vector3 inputValue, int thingId = 0, string thingName = null); } public static class IReceptorHelpers { public static Nucleus[] AddReceptorElement(Nucleus[] nucleiArray, ClusterPrefab prefab) { if (nucleiArray.Length == 0) { Debug.LogError("Empty perceptoid array, cannot add"); return null; } int newLength = nucleiArray.Length + 1; Nucleus[] newArray = new Nucleus[newLength]; for (int i = 0; i < nucleiArray.Length; i++) newArray[i] = nucleiArray[i]; if (nucleiArray[0] is Nucleus nucleus) { newArray[newLength - 1] = nucleus.Clone(prefab); newArray[newLength - 1].name += $": {newLength - 1}"; } return newArray; } public static Nucleus[] RemoveReceptorElement(Nucleus[] nucleiArray) { int newLength = nucleiArray.Length - 1; if (newLength == 0) { Debug.LogWarning("Perceptoid array cannot be empty"); return null; } Nucleus[] newPerceptei = new Nucleus[newLength]; for (int i = 0; i < newLength; i++) newPerceptei[i] = nucleiArray[i]; // Delete the last perception if (nucleiArray[newLength] is Nucleus nucleus) Neuron.Delete(nucleus); //this._nuclei[newLength]); return newPerceptei; } }