72 lines
1.7 KiB
C#
72 lines
1.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
[Serializable]
|
|
public abstract class Nucleus {
|
|
public string name;
|
|
|
|
[SerializeReference]
|
|
public ClusterPrefab clusterPrefab;
|
|
[SerializeReference]
|
|
public Cluster parent;
|
|
|
|
public bool trace = false;
|
|
|
|
public abstract Nucleus ShallowCloneTo(Cluster parent);
|
|
public abstract Nucleus Clone(ClusterPrefab prefab);
|
|
|
|
public enum Type {
|
|
None,
|
|
Neuron,
|
|
MemoryCell,
|
|
Cluster,
|
|
Receptor,
|
|
ClusterReceptor,
|
|
}
|
|
|
|
#region Synapses
|
|
|
|
public Vector3 bias = Vector3.zero;
|
|
|
|
[SerializeField]
|
|
private List<Synapse> _synapses = new();
|
|
public List<Synapse> synapses => _synapses;
|
|
|
|
public Synapse AddSynapse(Neuron sendingNucleus, float weight = 1.0f) {
|
|
Synapse synapse = new(sendingNucleus, weight);
|
|
this.synapses.Add(synapse);
|
|
return synapse;
|
|
}
|
|
|
|
public Synapse GetSynapse(Nucleus sender) {
|
|
foreach (Synapse synapse in this.synapses)
|
|
if (synapse.neuron == sender)
|
|
return synapse;
|
|
return null;
|
|
}
|
|
|
|
public void RemoveSynapse(Nucleus sendingNucleus) {
|
|
this.synapses.RemoveAll(synapse => synapse.neuron == sendingNucleus);
|
|
}
|
|
|
|
#endregion Synapses
|
|
|
|
#region Update
|
|
|
|
public abstract void UpdateStateIsolated();
|
|
|
|
public virtual void UpdateNuclei() {
|
|
}
|
|
|
|
public virtual void SetBias(Vector3 inputValue) {
|
|
this.bias = inputValue;
|
|
this.parent.UpdateFromNucleus(this);
|
|
}
|
|
|
|
public virtual void ProcessStimulus(Vector3 inputValue, int thingId = 0, string thingName = "") {
|
|
}
|
|
|
|
#endregion Update
|
|
|
|
} |