It runs without errors (not working functionaltiy yet)
This commit is contained in:
parent
e7dd1e50cb
commit
5aedb30d36
16
Cluster.cs
16
Cluster.cs
@ -7,7 +7,8 @@ using static Unity.Mathematics.math;
|
||||
[System.Serializable]
|
||||
public class Cluster : INucleus {
|
||||
// The ScriptableObject asset from which the runtime object has been created
|
||||
public readonly ClusterPrefab prefab;
|
||||
[SerializeField]
|
||||
public ClusterPrefab prefab;
|
||||
|
||||
public ClusterPrefab cluster { get; set; }
|
||||
|
||||
@ -18,9 +19,18 @@ public class Cluster : INucleus {
|
||||
set => _name = value;
|
||||
}
|
||||
|
||||
public Cluster(ClusterPrefab prefab) {
|
||||
this.prefab = UnityEngine.Object.Instantiate(prefab);
|
||||
this.name = prefab.name;
|
||||
this.cluster = null;
|
||||
if (this.cluster != null)
|
||||
this.cluster.nuclei.Add(this);
|
||||
}
|
||||
|
||||
// Hmm, a cluster instance can never be part of a scriptable object...(Cluster)
|
||||
public Cluster(ClusterPrefab parent, ClusterPrefab prefab) {
|
||||
this.prefab = prefab;
|
||||
this.prefab = prefab.Clone(); //UnityEngine.Object.Instantiate(prefab);
|
||||
this.name = prefab.name;
|
||||
this.cluster = parent;
|
||||
if (this.cluster != null)
|
||||
this.cluster.nuclei.Add(this);
|
||||
@ -46,6 +56,8 @@ public class Cluster : INucleus {
|
||||
return clone;
|
||||
}
|
||||
|
||||
public INucleus output => prefab.output;
|
||||
|
||||
// Not sure if this belongs here...
|
||||
[SerializeReference]
|
||||
private NucleusArray _array;
|
||||
|
||||
@ -33,6 +33,12 @@ public class ClusterPrefab : ScriptableObject {
|
||||
}
|
||||
}
|
||||
|
||||
public virtual ClusterPrefab Clone() {
|
||||
ClusterPrefab clone = Instantiate(this);
|
||||
return clone;
|
||||
}
|
||||
|
||||
|
||||
// Call this function to ensure that there is at least one nucleus
|
||||
// This is an invariant and should be ensured before the nucleus is used
|
||||
// because output requires it.
|
||||
|
||||
16
Receptor.cs
16
Receptor.cs
@ -5,7 +5,7 @@ using static Unity.Mathematics.math;
|
||||
|
||||
public class Receptor : IReceptor {
|
||||
|
||||
private ClusterPrefab cluster;
|
||||
private Cluster cluster;
|
||||
|
||||
[SerializeField]
|
||||
protected string _name;
|
||||
@ -14,25 +14,25 @@ public class Receptor : IReceptor {
|
||||
set => _name = value;
|
||||
}
|
||||
|
||||
public Receptor(ClusterPrefab cluster) {
|
||||
public Receptor(Cluster cluster) {
|
||||
this.cluster = cluster;
|
||||
if (cluster != null)
|
||||
cluster.nuclei.Add(this);
|
||||
cluster.prefab.nuclei.Add(this);
|
||||
}
|
||||
|
||||
public Receptor(ClusterPrefab cluster, INucleus nucleus) {
|
||||
public Receptor(Cluster cluster, INucleus nucleus) {
|
||||
this.cluster = cluster;
|
||||
if (cluster != null)
|
||||
cluster.nuclei.Add(this);
|
||||
cluster.prefab.nuclei.Add(this);
|
||||
this.AddReceiver(nucleus);
|
||||
}
|
||||
|
||||
public static Receptor CreateReceptor(ClusterPrefab cluster, string nucleusName) {
|
||||
public static Receptor CreateReceptor(Cluster cluster, string nucleusName) {
|
||||
if (cluster == null)
|
||||
return null;
|
||||
|
||||
Receptor receptor = new(cluster);
|
||||
foreach (INucleus nucleus in cluster.inputs) {
|
||||
foreach (INucleus nucleus in cluster.prefab.inputs) {
|
||||
if (nucleus != null && nucleus.name == nucleusName) {
|
||||
// Receptor receptor = new(cluster, nucleus);
|
||||
// return receptor;
|
||||
@ -45,7 +45,7 @@ public class Receptor : IReceptor {
|
||||
return receptor;
|
||||
}
|
||||
|
||||
public virtual IReceptor CloneTo(ClusterPrefab parent) {
|
||||
public virtual IReceptor CloneTo(Cluster parent) {
|
||||
Receptor clone = new(parent);
|
||||
|
||||
foreach (INucleus receiver in this.receivers) {
|
||||
|
||||
@ -11,26 +11,20 @@ MonoBehaviour:
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 60a957541c24c57e78018c202ebb1d9b, type: 3}
|
||||
m_Name: Velocity
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Cluster
|
||||
m_EditorClassIdentifier: Assembly-CSharp::ClusterPrefab
|
||||
nuclei:
|
||||
- rid: 2243601403683012671
|
||||
- rid: 2243601403683012676
|
||||
- rid: 2243601420268863545
|
||||
references:
|
||||
version: 2
|
||||
RefIds:
|
||||
- rid: -2
|
||||
type: {class: , ns: , asm: }
|
||||
- rid: 2243601403683012671
|
||||
- rid: 2243601420268863545
|
||||
type: {class: Neuron, ns: , asm: Assembly-CSharp}
|
||||
data:
|
||||
_name: Output
|
||||
_synapses:
|
||||
- nucleus:
|
||||
rid: -2
|
||||
weight: 1
|
||||
_synapses: []
|
||||
_receivers: []
|
||||
_array:
|
||||
rid: 2243601403683012672
|
||||
rid: 2243601420268863546
|
||||
_curvePreset: 0
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
@ -58,51 +52,9 @@ MonoBehaviour:
|
||||
m_RotationOrder: 4
|
||||
curveMax: 1
|
||||
average: 0
|
||||
- rid: 2243601403683012672
|
||||
- rid: 2243601420268863546
|
||||
type: {class: NucleusArray, ns: , asm: Assembly-CSharp}
|
||||
data:
|
||||
_nuclei:
|
||||
- rid: 2243601403683012671
|
||||
- rid: 2243601420268863545
|
||||
name: Output
|
||||
- rid: 2243601403683012676
|
||||
type: {class: Neuron, ns: , asm: Assembly-CSharp}
|
||||
data:
|
||||
_name: Position
|
||||
_synapses: []
|
||||
_receivers:
|
||||
- rid: 2243601403683012671
|
||||
_array:
|
||||
rid: 2243601403683012677
|
||||
_curvePreset: 0
|
||||
curve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 1
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1000
|
||||
value: 1000
|
||||
inSlope: 1
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
curveMax: 1
|
||||
average: 0
|
||||
- rid: 2243601403683012677
|
||||
type: {class: NucleusArray, ns: , asm: Assembly-CSharp}
|
||||
data:
|
||||
_nuclei:
|
||||
- rid: 2243601403683012676
|
||||
name: New neuron
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dd622ac7ed09e70ea8edac595047ac82
|
||||
guid: c61aecac62c26de4aaefb2612bcc9a5d
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
|
||||
@ -3,14 +3,14 @@ using UnityEngine;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
public class BrainPickerWindow : EditorWindow {
|
||||
public class ClusterPickerWindow : EditorWindow {
|
||||
private Vector2 scroll;
|
||||
private ClusterPrefab[] items = new ClusterPrefab[0];
|
||||
private Action<ClusterPrefab> onPicked;
|
||||
private string search = "";
|
||||
|
||||
public static void ShowPicker(Action<ClusterPrefab> onPicked, string title = "Select Cluster") {
|
||||
var w = CreateInstance<BrainPickerWindow>();
|
||||
var w = CreateInstance<ClusterPickerWindow>();
|
||||
w.titleContent = new GUIContent(title);
|
||||
w.minSize = new Vector2(360, 320);
|
||||
w.onPicked = onPicked;
|
||||
@ -21,7 +21,7 @@ public class BrainPickerWindow : EditorWindow {
|
||||
private void OnEnable() => RefreshList();
|
||||
|
||||
private void RefreshList() {
|
||||
var guids = AssetDatabase.FindAssets("t:Cluster");
|
||||
var guids = AssetDatabase.FindAssets("t:ClusterPrefab");
|
||||
items = guids
|
||||
.Select(g => AssetDatabase.LoadAssetAtPath<ClusterPrefab>(AssetDatabase.GUIDToAssetPath(g)))
|
||||
.Where(b => b != null)
|
||||
|
||||
@ -617,7 +617,7 @@ public class ClusterInspector : Editor {
|
||||
}
|
||||
|
||||
protected virtual void AddCluster(INucleus nucleus) {
|
||||
BrainPickerWindow.ShowPicker(brain => OnClusterPicked(nucleus, brain), "Select Cluster");
|
||||
ClusterPickerWindow.ShowPicker(brain => OnClusterPicked(nucleus, brain), "Select Cluster");
|
||||
}
|
||||
|
||||
private void OnClusterPicked(INucleus nucleus, ClusterPrefab subCluster) {
|
||||
|
||||
@ -23,7 +23,7 @@ public class NanoBrainComponent_Editor : Editor {
|
||||
|
||||
public override VisualElement CreateInspectorGUI() {
|
||||
//NanoBrainComponent component = target as NanoBrainComponent;
|
||||
ClusterPrefab brain = Application.isPlaying ? component.brain : component.defaultBrain;
|
||||
ClusterPrefab brain = Application.isPlaying ? component.brain.prefab : component.defaultBrain;
|
||||
|
||||
if (Application.isPlaying == false)
|
||||
serializedObject.Update();
|
||||
|
||||
@ -2,13 +2,13 @@ using UnityEngine;
|
||||
|
||||
public class NanoBrainComponent : MonoBehaviour {
|
||||
public ClusterPrefab defaultBrain;
|
||||
private ClusterPrefab brainInstance;
|
||||
private Cluster brainInstance;
|
||||
|
||||
public INucleus root => brainInstance.output;
|
||||
public ClusterPrefab brain {
|
||||
//public INucleus root => brainInstance.output;
|
||||
public Cluster brain {
|
||||
get {
|
||||
if (brainInstance == null && defaultBrain != null) {
|
||||
brainInstance = Instantiate(defaultBrain);
|
||||
brainInstance = new Cluster(defaultBrain); //Instantiate(defaultBrain);
|
||||
brainInstance.name = defaultBrain.name + " (Instance)";
|
||||
|
||||
SwarmControl sc = FindFirstObjectByType<SwarmControl>();
|
||||
@ -23,7 +23,7 @@ public class NanoBrainComponent : MonoBehaviour {
|
||||
}
|
||||
}
|
||||
|
||||
public static void UpdateWeight(ClusterPrefab brain, string name, float weight) {
|
||||
public static void UpdateWeight(Cluster brain, string name, float weight) {
|
||||
INucleus root = brain.output;
|
||||
foreach (Synapse synapse in root.synapses) {
|
||||
if (synapse.nucleus.name == name) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user