diff --git a/.gitea/workflows/copy_documentation.yml b/.gitea/workflows/copy_documentation.yml new file mode 100644 index 0000000..74f14f6 --- /dev/null +++ b/.gitea/workflows/copy_documentation.yml @@ -0,0 +1,34 @@ +name: Copy Documentation to webserver + +on: + push: + branches: + - '**' + pull_request: + branches: + - '**' + +jobs: + copy-documentation: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install Dependencies + run: | + apt-get update + apt-get install -y rsync # Install required packages + + - name: Ensure destination exists + run: | + mkdir -p /web/nanobrain + chown -R $USER:$USER /web/nanobrain + + - name: Copy html folder + run: | + rsync -av --delete Documentation/html/ /web/nanobrain 2>&1 + echo $HOSTNAME + ps aux | head + find / -path '*/web/nanobrain/*' diff --git a/doxygen.meta b/Documentation.meta similarity index 100% rename from doxygen.meta rename to Documentation.meta diff --git a/Documentation/DoxyWarnLogfile.txt b/Documentation/DoxyWarnLogfile.txt new file mode 100644 index 0000000..e0dc472 --- /dev/null +++ b/Documentation/DoxyWarnLogfile.txt @@ -0,0 +1,106 @@ +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ScriptableObjects/ClusterPrefab.cs:84: warning: Member EnsureInitialization() (function) of class NanoBrain.ClusterPrefab is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ScriptableObjects/ClusterPrefab.cs:96: warning: Member GarbageCollection() (function) of class NanoBrain.ClusterPrefab is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ScriptableObjects/ClusterPrefab.cs:12: warning: Member cluster (variable) of class NanoBrain.ClusterPrefab is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/MemoryCell.cs:16: warning: Member MemoryCell(Cluster parent, string name) (function) of class NanoBrain.MemoryCell is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/MemoryCell.cs:28: warning: Member ShallowCloneTo(Cluster newParent) (function) of class NanoBrain.MemoryCell is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/MemoryCell.cs:45: warning: Member UpdateStateIsolated() (function) of class NanoBrain.MemoryCell is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:151: warning: Member GenerateCurve() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:282: warning: Member SleepCheck() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:398: warning: Member CombinatorSum() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:425: warning: Member CombinatorSum() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:407: warning: Member CombinatorProduct() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:432: warning: Member CombinatorProduct() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:441: warning: Member CombinatorMax() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:588: warning: Member AddReceiver(Nucleus receiverToAdd, float weight=1) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:597: warning: Member RemoveReceiver(Nucleus receiverToRemove) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:333: warning: Member Delete(Nucleus nucleus) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/MemoryCell.cs:18: warning: Member staticMemory (variable) of class NanoBrain.MemoryCell is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:140: warning: Member _curvePreset (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:148: warning: Member curve (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:149: warning: Member curveMax (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:278: warning: Member WhenFiring (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:280: warning: Member persistOutput (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:299: warning: Member timeToSleep (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:324: warning: Member CloneFields(Neuron clone) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:383: warning: Member CheckSleepingSynapses() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:489: warning: Member ActivatorLinear(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:546: warning: Member ActivatorLinear(Vector3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:493: warning: Member ActivatorSqrt(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:550: warning: Member ActivatorSqrt(Vector3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:498: warning: Member ActivatorPower(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:555: warning: Member ActivatorPower(Vector3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:503: warning: Member ActivatorReciprocal(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:560: warning: Member ActivatorReciprocal(Vector3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:512: warning: Member ActivatorTanh(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:517: warning: Member ActivatorBinary(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:523: warning: Member ActivatorNormalized(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:530: warning: Member ActivatorCustom(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:569: warning: Member ActivatorCustom(Vector3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:250: warning: Member _outputValue (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:264: warning: Member _outputValue (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/MemoryCell.cs:19: warning: Member isSleeping (property) of class NanoBrain.MemoryCell is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:141: warning: Member curvePreset (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:251: warning: Member outputValue (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:265: warning: Member outputValue (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:259: warning: Member outputMagnitude (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:260: warning: Member outputSqrMagnitude (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:277: warning: Member isFiring (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:392: warning: Member Combinator (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:418: warning: Member Combinator (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:478: warning: Member Activator (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:538: warning: Member Activator (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:583: warning: Member receivers (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:616: warning: argument 'thingId' of command @param is not found in the argument list of NanoBrain.Neuron::ProcessStimulus(Vector3 inputValue) +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:616: warning: argument 'thingName' of command @param is not found in the argument list of NanoBrain.Neuron::ProcessStimulus(Vector3 inputValue) +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:151: warning: Member GenerateCurve() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:282: warning: Member SleepCheck() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:377: warning: Member UpdateStateIsolated() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:398: warning: Member CombinatorSum() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:407: warning: Member CombinatorProduct() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:425: warning: Member CombinatorSum() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:432: warning: Member CombinatorProduct() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:441: warning: Member CombinatorMax() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:588: warning: Member AddReceiver(Nucleus receiverToAdd, float weight=1) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:597: warning: Member RemoveReceiver(Nucleus receiverToRemove) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:333: warning: Member Delete(Nucleus nucleus) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:140: warning: Member _curvePreset (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:148: warning: Member curve (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:149: warning: Member curveMax (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:278: warning: Member WhenFiring (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:280: warning: Member persistOutput (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:299: warning: Member timeToSleep (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:324: warning: Member CloneFields(Neuron clone) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:383: warning: Member CheckSleepingSynapses() (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:489: warning: Member ActivatorLinear(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:493: warning: Member ActivatorSqrt(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:498: warning: Member ActivatorPower(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:503: warning: Member ActivatorReciprocal(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:512: warning: Member ActivatorTanh(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:517: warning: Member ActivatorBinary(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:523: warning: Member ActivatorNormalized(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:530: warning: Member ActivatorCustom(float3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:546: warning: Member ActivatorLinear(Vector3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:550: warning: Member ActivatorSqrt(Vector3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:555: warning: Member ActivatorPower(Vector3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:560: warning: Member ActivatorReciprocal(Vector3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:569: warning: Member ActivatorCustom(Vector3 input) (function) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:250: warning: Member _outputValue (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:264: warning: Member _outputValue (variable) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:141: warning: Member curvePreset (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:251: warning: Member outputValue (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:259: warning: Member outputMagnitude (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:260: warning: Member outputSqrMagnitude (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:265: warning: Member outputValue (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:277: warning: Member isFiring (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:281: warning: Member isSleeping (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:392: warning: Member Combinator (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:418: warning: Member Combinator (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:478: warning: Member Activator (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:538: warning: Member Activator (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:583: warning: Member receivers (property) of class NanoBrain.Neuron is not documented. +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:302: warning: argument 'parent' of command @param is not found in the argument list of NanoBrain.Neuron::ShallowCloneTo(Cluster newParent) +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:302: warning: The following parameter of NanoBrain.Neuron.ShallowCloneTo(Cluster newParent) is not documented: + parameter 'newParent' +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:616: warning: argument 'thingId' of command @param is not found in the argument list of NanoBrain.Neuron::ProcessStimulus(Vector3 inputValue) +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs:616: warning: argument 'thingName' of command @param is not found in the argument list of NanoBrain.Neuron::ProcessStimulus(Vector3 inputValue) +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Synapse.cs:32: warning: Member isSleeping (property) of class NanoBrain.Synapse is not documented. diff --git a/doxygen/DoxyWarnLogfile.txt.meta b/Documentation/DoxyWarnLogfile.txt.meta similarity index 100% rename from doxygen/DoxyWarnLogfile.txt.meta rename to Documentation/DoxyWarnLogfile.txt.meta diff --git a/doxygen/Doxyfile b/Documentation/Doxyfile similarity index 100% rename from doxygen/Doxyfile rename to Documentation/Doxyfile diff --git a/doxygen/Doxyfile.meta b/Documentation/Doxyfile.meta similarity index 100% rename from doxygen/Doxyfile.meta rename to Documentation/Doxyfile.meta diff --git a/doxygen/DoxygenLayout.xml b/Documentation/DoxygenLayout.xml similarity index 100% rename from doxygen/DoxygenLayout.xml rename to Documentation/DoxygenLayout.xml diff --git a/doxygen/DoxygenLayout.xml.meta b/Documentation/DoxygenLayout.xml.meta similarity index 100% rename from doxygen/DoxygenLayout.xml.meta rename to Documentation/DoxygenLayout.xml.meta diff --git a/Documentation/Installation.md b/Documentation/Installation.md new file mode 100644 index 0000000..c89f3d1 --- /dev/null +++ b/Documentation/Installation.md @@ -0,0 +1,14 @@ +Package Installation +==================== + +You can import the NanoBrain Ant package in Unity directly with the Package Manager git package importer. + +See Unity: [Installing from a Git URL](https://docs.unity3d.com/Manual/upm-ui-giturl.html) + +Use the link from 'Clone with HTTP' (for example: https://git.passer.life/CreatureControl/Ant.git) In this way you can always retrieve the latest version by pressing the Update button in the Package Manager. + +Optionally, you can use a tag to retrieve a specific version. For example: https://git.passer.life/CreatureControl/Ant.git#0.1.0. This will give you a stable version which does not change. Updating can be done by retrieving the package with a link to a new release. + +Samples Installation +-------------------- +In the Unity Package manager, select the NanoBrain Ant package and look for the `Samples` tab in the details pane on the right. There you can import the `Models`. \ No newline at end of file diff --git a/Documentation/Installation.md.meta b/Documentation/Installation.md.meta new file mode 100644 index 0000000..2e15366 --- /dev/null +++ b/Documentation/Installation.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e27e748d8b619ce38b068b30c1117989 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/ToC.md b/Documentation/ToC.md new file mode 100644 index 0000000..527bac5 --- /dev/null +++ b/Documentation/ToC.md @@ -0,0 +1,5 @@ +\mainpage + +Table of Contents +----------------- +- [Installation](Installation.md) diff --git a/Documentation/ToC.md.meta b/Documentation/ToC.md.meta new file mode 100644 index 0000000..878ff22 --- /dev/null +++ b/Documentation/ToC.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e08bd11eb9f534ac18df9a9c3c93d151 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/doxygen/custom_doxygen.css b/Documentation/custom_doxygen.css similarity index 100% rename from doxygen/custom_doxygen.css rename to Documentation/custom_doxygen.css diff --git a/doxygen/custom_doxygen.css.meta b/Documentation/custom_doxygen.css.meta similarity index 100% rename from doxygen/custom_doxygen.css.meta rename to Documentation/custom_doxygen.css.meta diff --git a/LinearAlgebra.meta b/Documentation/html.meta similarity index 73% rename from LinearAlgebra.meta rename to Documentation/html.meta index ef6ca97..9972d5d 100644 --- a/LinearAlgebra.meta +++ b/Documentation/html.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a4c7dfe43bdf504e29c5c97919d7a1c0 +guid: c38c04e6e8570a9bdb3f50169d7a2691 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/doxygen/images/PasserLifeLogoRight1_300.png b/Documentation/html/PasserLifeLogoRight1_300.png similarity index 100% rename from doxygen/images/PasserLifeLogoRight1_300.png rename to Documentation/html/PasserLifeLogoRight1_300.png diff --git a/Documentation/html/PasserLifeLogoRight1_300.png.meta b/Documentation/html/PasserLifeLogoRight1_300.png.meta new file mode 100644 index 0000000..44b1805 --- /dev/null +++ b/Documentation/html/PasserLifeLogoRight1_300.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 02ece4d43b8f3df958ad4f1703bbb927 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/annotated.html b/Documentation/html/annotated.html new file mode 100644 index 0000000..a7d0e0e --- /dev/null +++ b/Documentation/html/annotated.html @@ -0,0 +1,95 @@ + + + + + + + +Nano Brain for Unity: Class List + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + +
 NNanoBrainThe Nanobrain namespace
 CBrainThe NanoBrain Unity Componnent
 CClusterA Cluster combines a collection of Nuclei to implement reusable behaviour
 CClusterPrefabThe Unity ScriptableObject to implement re-usable Cluster Prefabs
 CMemoryCellA MemoryCell stored its value for one update
 CNeuronA neuron is a basic Nucleus
 CNucleusA Nucleus is a basic element in a brain cluster
 CSynapseA Synapse connects the ouput of a Neuron to another Neuron
+
+
+ + + + diff --git a/Documentation/html/annotated.html.meta b/Documentation/html/annotated.html.meta new file mode 100644 index 0000000..8b2df70 --- /dev/null +++ b/Documentation/html/annotated.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1ed8b017b4a8dbbca941f6581073f398 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/bc_s.png b/Documentation/html/bc_s.png new file mode 100644 index 0000000..927cda7 Binary files /dev/null and b/Documentation/html/bc_s.png differ diff --git a/Documentation/html/bc_s.png.meta b/Documentation/html/bc_s.png.meta new file mode 100644 index 0000000..1c994ac --- /dev/null +++ b/Documentation/html/bc_s.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 247c674a55eeeb38cb5fc8e73124b7e0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/bc_sd.png b/Documentation/html/bc_sd.png new file mode 100644 index 0000000..b278e21 Binary files /dev/null and b/Documentation/html/bc_sd.png differ diff --git a/Documentation/html/bc_sd.png.meta b/Documentation/html/bc_sd.png.meta new file mode 100644 index 0000000..da109d4 --- /dev/null +++ b/Documentation/html/bc_sd.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 948d52c1ed15d9864aa67a179d5d815a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_brain-members.html b/Documentation/html/class_nano_brain_1_1_brain-members.html new file mode 100644 index 0000000..37f4bd4 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_brain-members.html @@ -0,0 +1,93 @@ + + + + + + + +Nano Brain for Unity: Member List + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
NanoBrain.Brain Member List
+
+
+ +

This is the complete list of members for NanoBrain.Brain, including all inherited members.

+ + + + +
brainNanoBrain.Brain
brainPrefabNanoBrain.Brain
UpdateWeight(Cluster brain, string name, float weight)NanoBrain.Brainstatic
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_brain-members.html.meta b/Documentation/html/class_nano_brain_1_1_brain-members.html.meta new file mode 100644 index 0000000..d38ca95 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_brain-members.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8071cad6602a92ea19518fd77d9740d8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_brain.html b/Documentation/html/class_nano_brain_1_1_brain.html new file mode 100644 index 0000000..0e343da --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_brain.html @@ -0,0 +1,175 @@ + + + + + + + +Nano Brain for Unity: NanoBrain.Brain Class Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Static Public Member Functions | +Public Attributes | +Properties | +List of all members
+
NanoBrain.Brain Class Reference
+
+
+

Description

+

The NanoBrain Unity Componnent.

+

This implements the top-level NanoBrain Cluster
+

+
+

Inherits MonoBehaviour.

+ + + + + +

+Static Public Member Functions

static void UpdateWeight (Cluster brain, string name, float weight)
 Update the weight for all Synapses coming from the Neuron with the given name.
 
+ + + + +

+Public Attributes

+ClusterPrefab brainPrefab
 The Cluster prefab from which the cluster is created.
 
+ + + + +

+Properties

+Cluster brain [get]
 The cluster isntance.
 
+

Member Function Documentation

+ +

◆ UpdateWeight()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static void NanoBrain.Brain.UpdateWeight (Cluster brain,
string name,
float weight 
)
+
+static
+
+ +

Update the weight for all Synapses coming from the Neuron with the given name.

+
Parameters
+ + + + +
brainThe cluster in which the synapses are updated
nameThe name of the Neuron for which the weights are updated
weightThe new Synapse weight
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_brain.html.meta b/Documentation/html/class_nano_brain_1_1_brain.html.meta new file mode 100644 index 0000000..0d9d3db --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_brain.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 82b2d108fb097c36b83582ed8d34c407 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_cluster-members.html b/Documentation/html/class_nano_brain_1_1_cluster-members.html new file mode 100644 index 0000000..f5b4d74 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_cluster-members.html @@ -0,0 +1,124 @@ + + + + + + + +Nano Brain for Unity: Member List + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
NanoBrain.Cluster Member List
+
+
+ +

This is the complete list of members for NanoBrain.Cluster, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_outputsNanoBrain.Clusterprotected
AddInstance()NanoBrain.Cluster
AddInstance(ClusterPrefab prefab)NanoBrain.Cluster
baseNameNanoBrain.Cluster
Cluster(ClusterPrefab prefab, Cluster parent)NanoBrain.Cluster
Cluster(ClusterPrefab prefab, ClusterPrefab parent=null)NanoBrain.Cluster
CollectReceivers(bool removeDuplicates=false)NanoBrain.Clustervirtual
CollectSynapsesTo(Cluster otherCluster)NanoBrain.Cluster
computeOrdersNanoBrain.Cluster
defaultOutputNanoBrain.Cluster
DeleteNucleus(Nucleus nucleus)NanoBrain.Cluster
GetNeuron(string neuronName)NanoBrain.Cluster
GetNeuron(int thingId, string neuronName, string thingName=null)NanoBrain.Cluster
GetNucleus(string nucleusName)NanoBrain.Cluster
GetNucleusIndex(List< Nucleus > nuclei, Nucleus nucleus)NanoBrain.Clusterstatic
GetNucleusIndex(List< Nucleus > nuclei, string nucleusName)NanoBrain.Clusterstatic
instanceCountNanoBrain.Cluster
instancesNanoBrain.Cluster
nameNanoBrain.Nucleus
nucleiNanoBrain.Cluster
outputsNanoBrain.Cluster
parentNanoBrain.Nucleus
prefabNanoBrain.Cluster
Refresh()NanoBrain.Cluster
RefreshComputeOrders()NanoBrain.Cluster
RefreshOutputs()NanoBrain.Cluster
RemoveInstance()NanoBrain.Cluster
ShallowCloneTo(Cluster parent)NanoBrain.Cluster
thingClustersNanoBrain.Cluster
TryGetNucleus(string nucleusName, out Nucleus foundNucleus)NanoBrain.Cluster
Type enum nameNanoBrain.Nucleus
UpdateFromNucleus(Nucleus startNucleus)NanoBrain.Cluster
UpdateNuclei()NanoBrain.Nucleusvirtual
UpdateStateIsolated()NanoBrain.Cluster
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_cluster-members.html.meta b/Documentation/html/class_nano_brain_1_1_cluster-members.html.meta new file mode 100644 index 0000000..39a0cfa --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_cluster-members.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c7c7546d58e3a816b99fba6c9d216a58 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_cluster.html b/Documentation/html/class_nano_brain_1_1_cluster.html new file mode 100644 index 0000000..f2503ab --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_cluster.html @@ -0,0 +1,987 @@ + + + + + + + +Nano Brain for Unity: NanoBrain.Cluster Class Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Types | +Public Member Functions | +Static Public Member Functions | +Public Attributes | +Protected Attributes | +Properties | +List of all members
+
NanoBrain.Cluster Class Reference
+
+
+

Description

+

A Cluster combines a collection of Nuclei to implement reusable behaviour.

+

A Cluster is an instantiation of a ClusterPrefab. Clusters can be nested inside other clusters.

+
+Inheritance diagram for NanoBrain.Cluster:
+
+
+ + +NanoBrain.Nucleus + +
+ + + + + +

+Public Types

enum  Type { None +, Neuron +, MemoryCell +, Cluster + }
 Function to clone a nucleus to a Cluster prefab. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Cluster (ClusterPrefab prefab, Cluster parent)
 Instantiate a new copy of a ClusterPrefab in the given parent.
 
 Cluster (ClusterPrefab prefab, ClusterPrefab parent=null)
 Add a new cluster to a ClusterPrefab.
 
override Nucleus ShallowCloneTo (Cluster parent)
 Toggle for printing debugging trace data.
 
void AddInstance ()
 Increase the number of instances in an multi-cluster.
 
void AddInstance (ClusterPrefab prefab)
 Create an new instance in a multi-cluster.
 
+void RemoveInstance ()
 Decrease the number of instance in a multi-cluster.
 
+void RefreshComputeOrders ()
 Refresh the order in which neurons should be computed.
 
+void RefreshOutputs ()
 Reset the list of outputs such that they will be re-determined.
 
bool TryGetNucleus (string nucleusName, out Nucleus foundNucleus)
 Try to find a nucleus in this cluster.
 
Nucleus GetNucleus (string nucleusName)
 Get a nucleus in this cluster.
 
Neuron GetNeuron (string neuronName)
 Get a neuron in this cluster.
 
Neuron GetNeuron (int thingId, string neuronName, string thingName=null)
 Get a neuron in an instance of a multi-cluster.
 
bool DeleteNucleus (Nucleus nucleus)
 Delete a nucleus from this clsuter.
 
virtual List< NucleusCollectReceivers (bool removeDuplicates=false)
 Collect all receiving nuclei of signals from this cluster.
 
List< SynapseCollectSynapsesTo (Cluster otherCluster)
 Collect all connections to receivers of signals from this cluster.
 
void UpdateFromNucleus (Nucleus startNucleus)
 Update the state of the nucleus and all nuclei receiving from it.
 
override void UpdateStateIsolated ()
 Update the state without updating other Nuclei.
 
void Refresh ()
 Recalculate derived properties.
 
virtual void UpdateNuclei ()
 Update the state and recursively all Nuclei receiving data from this Nucleus.
 
+ + + + + + + +

+Static Public Member Functions

static int GetNucleusIndex (List< Nucleus > nuclei, Nucleus nucleus)
 Get the index of a nucleus in a list of nuclei.
 
static int GetNucleusIndex (List< Nucleus > nuclei, string nucleusName)
 Get the index of a nucleus with the given name in a list of nuclei.
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

ClusterPrefab prefab
 The prefab used to create this cluster.
 
Cluster[] instances
 All cluster instance of a multi-cluster.
 
int instanceCount = 1
 The number of cluster instances in a multi-cluster.
 
Dictionary< int, ClusterthingClusters = new()
 The mapping from things to cluster instances.
 
+List< Nucleusnuclei = new()
 All nuclei in this cluster.
 
+string name
 The name of the Nucleus.
 
Cluster parent
 The cluster prefab in which the nucleus is located.
 
+ + + + +

+Protected Attributes

List< Neuron_outputs = null
 The neurons without outgoing connections.
 
+ + + + + + + + + + + + + +

+Properties

+string baseName [get]
 The base name of the cluster. I don't think this is actively used at this moment.
 
+Dictionary< Nucleus, List< Nucleus > > computeOrders [get]
 This gives the order in which nuclei should be computed when a nucleus is updated.
 
+virtual Neuron defaultOutput [get]
 The first nucleus in a cluster is the default output.
 
List< Neuronoutputs [get]
 The neurons without outgoing connections.
 
+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + + +
+ + + + +
enum NanoBrain.Nucleus.Type
+
+inherited
+
+ +

Function to clone a nucleus to a Cluster prefab.

+
Parameters
+ + +
prefab
+
+
+
Returns
+

The types of Nucleus

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ Cluster() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
NanoBrain.Cluster.Cluster (ClusterPrefab prefab,
Cluster parent 
)
+
+ +

Instantiate a new copy of a ClusterPrefab in the given parent.

+
Parameters
+ + + +
prefabThe prefab to use
parentThe cluster in which this new cluster will be placed
+
+
+ +
+
+ +

◆ Cluster() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
NanoBrain.Cluster.Cluster (ClusterPrefab prefab,
ClusterPrefab parent = null 
)
+
+ +

Add a new cluster to a ClusterPrefab.

+
Parameters
+ + + +
prefabThe prefab to copy
parentThe prefab in which the new copy is placed
+
+
+ +
+
+

Member Function Documentation

+ +

◆ ShallowCloneTo()

+ +
+
+ + + + + + + + +
override Nucleus NanoBrain.Cluster.ShallowCloneTo (Cluster parent)
+
+ +

Toggle for printing debugging trace data.

+

Function to make a partial clone of this nucleus

+
Parameters
+ + +
parentThe cluster in which the cloned nucleus should be placed
+
+
+
Returns
+ +
+
+ +

◆ GetNucleusIndex() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static int NanoBrain.Cluster.GetNucleusIndex (List< Nucleusnuclei,
Nucleus nucleus 
)
+
+static
+
+ +

Get the index of a nucleus in a list of nuclei.

+
Parameters
+ + + +
nucleiThe list of nuclei to search
nucleusThe nucleus to find
+
+
+
Returns
The index of the nucleus in the list or -1 when it has not been found
+ +
+
+ +

◆ GetNucleusIndex() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static int NanoBrain.Cluster.GetNucleusIndex (List< Nucleusnuclei,
string nucleusName 
)
+
+static
+
+ +

Get the index of a nucleus with the given name in a list of nuclei.

+
Parameters
+ + + +
nucleiThe list of nuclei to search
nucleusNameThe name of the nucleus to find
+
+
+
Returns
The index of the nucleus in the list or -1 when it has not been found
+ +
+
+ +

◆ AddInstance() [1/2]

+ +
+
+ + + + + + + +
void NanoBrain.Cluster.AddInstance ()
+
+ +

Increase the number of instances in an multi-cluster.

+

/remark Note this does not create the instances. This is only intended to be used for prefabs.

+ +
+
+ +

◆ AddInstance() [2/2]

+ +
+
+ + + + + + + + +
void NanoBrain.Cluster.AddInstance (ClusterPrefab prefab)
+
+ +

Create an new instance in a multi-cluster.

+
Parameters
+ + +
prefabThe prefab to use to create the new instance
+
+
+

/remark This does not change the instanceCount. It should only be used at runtime.

+ +
+
+ +

◆ TryGetNucleus()

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool NanoBrain.Cluster.TryGetNucleus (string nucleusName,
out Nucleus foundNucleus 
)
+
+ +

Try to find a nucleus in this cluster.

+
Parameters
+ + + +
nucleusNameThe name of the nucleus to find
foundNucleusThe found nucleus or null if it is not found
+
+
+
Returns
True when the nucleus is found, false otherwise
+ +
+
+ +

◆ GetNucleus()

+ +
+
+ + + + + + + + +
Nucleus NanoBrain.Cluster.GetNucleus (string nucleusName)
+
+ +

Get a nucleus in this cluster.

+
Parameters
+ + +
nucleusNameThe name of the nucleus to find
+
+
+
Returns
The found nucleus or null when it is not found
+ +
+
+ +

◆ GetNeuron() [1/2]

+ +
+
+ + + + + + + + +
Neuron NanoBrain.Cluster.GetNeuron (string neuronName)
+
+ +

Get a neuron in this cluster.

+
Parameters
+ + +
neuronNameThe name of the neuron to find
+
+
+
Returns
The found neuron or null when it is not found
+ +
+
+ +

◆ GetNeuron() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Neuron NanoBrain.Cluster.GetNeuron (int thingId,
string neuronName,
string thingName = null 
)
+
+ +

Get a neuron in an instance of a multi-cluster.

+
Parameters
+ + + + +
thingIdThe id of the thing mapped to the cluster instance
neuronNameThe name of the neuron to find
thingNameThe name of the thing mapped to the cluster instance
+
+
+
Returns
The found neuron or null when it is not found
+

The cluster instance mapped to the thing will be neuron.parent if a neuron is found.

+ +
+
+ +

◆ DeleteNucleus()

+ +
+
+ + + + + + + + +
bool NanoBrain.Cluster.DeleteNucleus (Nucleus nucleus)
+
+ +

Delete a nucleus from this clsuter.

+
Parameters
+ + +
nucleusThe nucleus to delete
+
+
+
Returns
True if a nucleus was deleted, false if the nucleus could not be found
+ +
+
+ +

◆ CollectReceivers()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual List< Nucleus > NanoBrain.Cluster.CollectReceivers (bool removeDuplicates = false)
+
+virtual
+
+ +

Collect all receiving nuclei of signals from this cluster.

+
Parameters
+ + +
removeDuplicatesEnsure that a receiver is only listed once in the result
+
+
+
Returns
The list of receivers
+ +
+
+ +

◆ CollectSynapsesTo()

+ +
+
+ + + + + + + + +
List< Synapse > NanoBrain.Cluster.CollectSynapsesTo (Cluster otherCluster)
+
+ +

Collect all connections to receivers of signals from this cluster.

+
Returns
A list of pairs of the sending neuron in this cluster and the matching receiving nucleus
+

Collect all synapses of senders in another cluster of signals to this cluster

+
Parameters
+ + +
otherClusterThe other cluster with sending neurons
+
+
+
Returns
A list of synapses to the neurons in the other clusters
+ +
+
+ +

◆ UpdateFromNucleus()

+ +
+
+ + + + + + + + +
void NanoBrain.Cluster.UpdateFromNucleus (Nucleus startNucleus)
+
+ +

Update the state of the nucleus and all nuclei receiving from it.

+
Parameters
+ + +
startNucleusThe nucleus to start updating
+
+
+ +
+
+ +

◆ UpdateStateIsolated()

+ +
+
+ + + + + + + +
override void NanoBrain.Cluster.UpdateStateIsolated ()
+
+ +

Update the state without updating other Nuclei.

+ +
+
+ +

◆ Refresh()

+ +
+
+ + + + + + + +
void NanoBrain.Cluster.Refresh ()
+
+ +

Recalculate derived properties.

+

This can be used to recalculate derived properties after the set of nuclei has been changed

+ +
+
+ +

◆ UpdateNuclei()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void NanoBrain.Nucleus.UpdateNuclei ()
+
+virtualinherited
+
+ +

Update the state and recursively all Nuclei receiving data from this Nucleus.

+ +

Reimplemented in NanoBrain.MemoryCell.

+ +
+
+

Member Data Documentation

+ +

◆ prefab

+ +
+
+ + + + +
ClusterPrefab NanoBrain.Cluster.prefab
+
+ +

The prefab used to create this cluster.

+

Cluster should always be created from prefabs

+ +
+
+ +

◆ instances

+ +
+
+ + + + +
Cluster [] NanoBrain.Cluster.instances
+
+ +

All cluster instance of a multi-cluster.

+

A cluster is a multi-cluster when there is more than one instance. The actual instances are only created at runtime. The value instanceCount determines how many instances will be present at runtime.

+ +
+
+ +

◆ instanceCount

+ +
+
+ + + + +
int NanoBrain.Cluster.instanceCount = 1
+
+ +

The number of cluster instances in a multi-cluster.

+

A cluster is a multi-clsuter when there is more than one instance.

+ +
+
+ +

◆ thingClusters

+ +
+
+ + + + +
Dictionary<int, Cluster> NanoBrain.Cluster.thingClusters = new()
+
+ +

The mapping from things to cluster instances.

+

In a multi-cluster each instance can be used for a thing. Cluster instance may also not (yet) be mapped to a thing.

+ +
+
+ +

◆ _outputs

+ +
+
+ + + + + +
+ + + + +
List<Neuron> NanoBrain.Cluster._outputs = null
+
+protected
+
+ +

The neurons without outgoing connections.

+

These neurons can potentially be connected to neurons in other clusters

+ +
+
+ +

◆ parent

+ +
+
+ + + + + +
+ + + + +
Cluster NanoBrain.Nucleus.parent
+
+inherited
+
+ +

The cluster prefab in which the nucleus is located.

+

The cluster instance in which the nucleus is located

+ +
+
+

Property Documentation

+ +

◆ outputs

+ +
+
+ + + + + +
+ + + + +
List<Neuron> NanoBrain.Cluster.outputs
+
+get
+
+ +

The neurons without outgoing connections.

+

These neurons can potentially be connected to neurons in other clusters

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_cluster.html.meta b/Documentation/html/class_nano_brain_1_1_cluster.html.meta new file mode 100644 index 0000000..e84b307 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_cluster.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d883df8710f53b84da21f41d7c2eac46 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_cluster.png b/Documentation/html/class_nano_brain_1_1_cluster.png new file mode 100644 index 0000000..b808c35 Binary files /dev/null and b/Documentation/html/class_nano_brain_1_1_cluster.png differ diff --git a/Documentation/html/class_nano_brain_1_1_cluster.png.meta b/Documentation/html/class_nano_brain_1_1_cluster.png.meta new file mode 100644 index 0000000..632f19f --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_cluster.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 3878265f9758bf721932a8e8dd4356db +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_cluster_prefab-members.html b/Documentation/html/class_nano_brain_1_1_cluster_prefab-members.html new file mode 100644 index 0000000..6346ec2 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_cluster_prefab-members.html @@ -0,0 +1,94 @@ + + + + + + + +Nano Brain for Unity: Member List + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
NanoBrain.ClusterPrefab Member List
+
+
+ +

This is the complete list of members for NanoBrain.ClusterPrefab, including all inherited members.

+ + + + + +
cluster (defined in NanoBrain.ClusterPrefab)NanoBrain.ClusterPrefab
EnsureInitialization() (defined in NanoBrain.ClusterPrefab)NanoBrain.ClusterPrefab
GarbageCollection() (defined in NanoBrain.ClusterPrefab)NanoBrain.ClusterPrefab
GetNucleus(string nucleusName)NanoBrain.ClusterPrefab
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_cluster_prefab-members.html.meta b/Documentation/html/class_nano_brain_1_1_cluster_prefab-members.html.meta new file mode 100644 index 0000000..22eca56 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_cluster_prefab-members.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d62eadc52c471f7a6895cb870994bece +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_cluster_prefab.html b/Documentation/html/class_nano_brain_1_1_cluster_prefab.html new file mode 100644 index 0000000..a532610 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_cluster_prefab.html @@ -0,0 +1,145 @@ + + + + + + + +Nano Brain for Unity: NanoBrain.ClusterPrefab Class Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +List of all members
+
NanoBrain.ClusterPrefab Class Reference
+
+
+

Description

+

The Unity ScriptableObject to implement re-usable Cluster Prefabs.

+
+

Inherits ScriptableObject.

+ + + + + + + + + +

+Public Member Functions

Nucleus GetNucleus (string nucleusName)
 Retrieve a nucleus in this cluster.
 
+void EnsureInitialization ()
 
+void GarbageCollection ()
 
+ + + +

+Public Attributes

+Cluster cluster
 
+

Member Function Documentation

+ +

◆ GetNucleus()

+ +
+
+ + + + + + + + +
Nucleus NanoBrain.ClusterPrefab.GetNucleus (string nucleusName)
+
+ +

Retrieve a nucleus in this cluster.

+
Parameters
+ + +
nucleusNameThe name of the nucleus
+
+
+
Returns
The Nucleus with the given name or null if no such Nucleus could be found
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_cluster_prefab.html.meta b/Documentation/html/class_nano_brain_1_1_cluster_prefab.html.meta new file mode 100644 index 0000000..5e321e4 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_cluster_prefab.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ae719a769b822db4ca83831d25c49276 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_memory_cell-members.html b/Documentation/html/class_nano_brain_1_1_memory_cell-members.html new file mode 100644 index 0000000..b030598 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_memory_cell-members.html @@ -0,0 +1,155 @@ + + + + + + + +Nano Brain for Unity: Member List + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
NanoBrain.MemoryCell Member List
+
+
+ +

This is the complete list of members for NanoBrain.MemoryCell, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_curvePreset (defined in NanoBrain.Neuron)NanoBrain.Neuron
_outputValue (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
_outputValue (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivationType enum nameNanoBrain.Neuron
Activator (defined in NanoBrain.Neuron)NanoBrain.Neuron
Activator (defined in NanoBrain.Neuron)NanoBrain.Neuron
ActivatorBinary(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorCustom(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorCustom(Vector3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorLinear(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorLinear(Vector3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorNormalized(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorPower(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorPower(Vector3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorReciprocal(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorReciprocal(Vector3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorSqrt(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorSqrt(Vector3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorTanh(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
AddReceiver(Nucleus receiverToAdd, float weight=1) (defined in NanoBrain.Neuron)NanoBrain.Neuronvirtual
AddSynapse(Neuron sendingNucleus, float weight=1)NanoBrain.Neuron
biasNanoBrain.Neuron
CheckSleepingSynapses() (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
CloneFields(Neuron clone) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotectedvirtual
combinatorNanoBrain.Neuron
Combinator (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
Combinator (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
CombinatorMax() (defined in NanoBrain.Neuron)NanoBrain.Neuron
CombinatorProduct() (defined in NanoBrain.Neuron)NanoBrain.Neuron
CombinatorProduct() (defined in NanoBrain.Neuron)NanoBrain.Neuron
CombinatorSum() (defined in NanoBrain.Neuron)NanoBrain.Neuron
CombinatorSum() (defined in NanoBrain.Neuron)NanoBrain.Neuron
CombinatorType enum nameNanoBrain.Neuron
curve (defined in NanoBrain.Neuron)NanoBrain.Neuron
curveMax (defined in NanoBrain.Neuron)NanoBrain.Neuron
curvePreset (defined in NanoBrain.Neuron)NanoBrain.Neuron
Delete(Nucleus nucleus) (defined in NanoBrain.Neuron)NanoBrain.Neuronstatic
GenerateCurve() (defined in NanoBrain.Neuron)NanoBrain.Neuron
GetSynapse(Nucleus sender)NanoBrain.Neuron
isFiring (defined in NanoBrain.Neuron)NanoBrain.Neuron
isSleeping (defined in NanoBrain.MemoryCell)NanoBrain.MemoryCell
lastUpdateNanoBrain.Neuron
MemoryCell(Cluster parent, string name) (defined in NanoBrain.MemoryCell)NanoBrain.MemoryCell
nameNanoBrain.Nucleus
Neuron(Cluster parent, string name)NanoBrain.Neuron
outputMagnitude (defined in NanoBrain.Neuron)NanoBrain.Neuron
outputSqrMagnitude (defined in NanoBrain.Neuron)NanoBrain.Neuron
outputValue (defined in NanoBrain.Neuron)NanoBrain.Neuron
outputValue (defined in NanoBrain.Neuron)NanoBrain.Neuron
parentNanoBrain.Nucleus
persistOutput (defined in NanoBrain.Neuron)NanoBrain.Neuron
ProcessStimulus(Vector3 inputValue)NanoBrain.Neuronvirtual
receivers (defined in NanoBrain.Neuron)NanoBrain.Neuron
RemoveReceiver(Nucleus receiverToRemove) (defined in NanoBrain.Neuron)NanoBrain.Neuronvirtual
RemoveSynapse(Nucleus sendingNucleus)NanoBrain.Neuron
SetBias(Vector3 inputValue)NanoBrain.Neuronvirtual
ShallowCloneTo(Cluster newParent) (defined in NanoBrain.MemoryCell)NanoBrain.MemoryCell
SleepCheck() (defined in NanoBrain.Neuron)NanoBrain.Neuron
staticMemory (defined in NanoBrain.MemoryCell)NanoBrain.MemoryCell
synapsesNanoBrain.Neuron
timeToSleep (defined in NanoBrain.Neuron)NanoBrain.Neuron
Type enum nameNanoBrain.Nucleus
UpdateNuclei()NanoBrain.MemoryCellvirtual
UpdateStateIsolated() (defined in NanoBrain.MemoryCell)NanoBrain.MemoryCell
WhenFiring (defined in NanoBrain.Neuron)NanoBrain.Neuron
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_memory_cell-members.html.meta b/Documentation/html/class_nano_brain_1_1_memory_cell-members.html.meta new file mode 100644 index 0000000..3e7465c --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_memory_cell-members.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d9a689a3c38bd27d28e94b7fe1865ffd +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_memory_cell.html b/Documentation/html/class_nano_brain_1_1_memory_cell.html new file mode 100644 index 0000000..41baf4a --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_memory_cell.html @@ -0,0 +1,687 @@ + + + + + + + +Nano Brain for Unity: NanoBrain.MemoryCell Class Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Types | +Public Member Functions | +Static Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +Properties | +List of all members
+
NanoBrain.MemoryCell Class Reference
+
+
+

Description

+

A MemoryCell stored its value for one update.

+

When the input for a Memory Cell changes, it will output the previous value
+

+
+Inheritance diagram for NanoBrain.MemoryCell:
+
+
+ + +NanoBrain.Neuron +NanoBrain.Nucleus + +
+ + + + + + + + + + + +

+Public Types

enum  CombinatorType { Sum +, Product + }
 The type of combinators. More...
 
enum  ActivationType {
+  Linear +, Power +, Sqrt +, Reciprocal +,
+  Tanh +, Binary +, Normalized +, Custom +
+ }
 The type of.
 
enum  Type { None +, Neuron +, MemoryCell +, Cluster + }
 Function to clone a nucleus to a Cluster prefab. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MemoryCell (Cluster parent, string name)
 
+override Nucleus ShallowCloneTo (Cluster newParent)
 
+override void UpdateStateIsolated ()
 
override void UpdateNuclei ()
 Update the state and recursively all Nuclei receiving data from this Nucleus.
 
Synapse AddSynapse (Neuron sendingNucleus, float weight=1)
 Add a new synapse to this nuclues.
 
Synapse GetSynapse (Nucleus sender)
 Find a synapse.
 
void RemoveSynapse (Nucleus sendingNucleus)
 Remove a synapse from a Nucleus.
 
virtual void SetBias (Vector3 inputValue)
 Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus.
 
+AnimationCurve GenerateCurve ()
 
+void SleepCheck ()
 
+float3 CombinatorSum ()
 
+Vector3 CombinatorSum ()
 
+float3 CombinatorProduct ()
 
+Vector3 CombinatorProduct ()
 
+Vector3 CombinatorMax ()
 
+virtual void AddReceiver (Nucleus receiverToAdd, float weight=1)
 
+virtual void RemoveReceiver (Nucleus receiverToRemove)
 
virtual void ProcessStimulus (Vector3 inputValue)
 Process an external stimulus.
 
+ + + +

+Static Public Member Functions

+static void Delete (Nucleus nucleus)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+bool staticMemory = false
 
Vector3 bias = Vector3.zero
 Create a new Neuron in a Cluster Prefab.
 
+CombinatorType combinator = CombinatorType.Sum
 The type of combinator used for this Neuron.
 
+ActivationType _curvePreset
 
+AnimationCurve curve
 
+float curveMax = 1.0f
 
+Action WhenFiring
 
+bool persistOutput = false
 
+float lastUpdate = 0
 Toggle for printing debugging trace data.
 
+readonly float timeToSleep = 1f
 
+string name
 The name of the Nucleus.
 
Cluster parent
 The cluster prefab in which the nucleus is located.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+virtual void CloneFields (Neuron clone)
 
+void CheckSleepingSynapses ()
 
+float3 ActivatorLinear (float3 input)
 
+Vector3 ActivatorLinear (Vector3 input)
 
+float3 ActivatorSqrt (float3 input)
 
+Vector3 ActivatorSqrt (Vector3 input)
 
+float3 ActivatorPower (float3 input)
 
+Vector3 ActivatorPower (Vector3 input)
 
+float3 ActivatorReciprocal (float3 input)
 
+Vector3 ActivatorReciprocal (Vector3 input)
 
+float3 ActivatorTanh (float3 input)
 
+float3 ActivatorBinary (float3 input)
 
+float3 ActivatorNormalized (float3 input)
 
+float3 ActivatorCustom (float3 input)
 
+Vector3 ActivatorCustom (Vector3 input)
 
+ + + + + +

+Protected Attributes

+float3 _outputValue
 
+Vector3 _outputValue
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Properties

+override bool isSleeping [get]
 
+List< Synapsesynapses [get]
 The synapses of the nucleus.
 
+ActivationType curvePreset [get, set]
 
+virtual float3 outputValue [get, set]
 
+virtual Vector3 outputValue [get, set]
 
+float outputMagnitude [get]
 
+float outputSqrMagnitude [get]
 
+bool isFiring [get]
 
+Func< float3 > Combinator [get]
 
+Func< Vector3 > Combinator [get]
 
+Func< float3, float3 > Activator [get]
 
+Func< Vector3, Vector3 > Activator [get]
 
+virtual List< Nucleusreceivers [get, set]
 
+

Member Enumeration Documentation

+ +

◆ CombinatorType

+ +
+
+ + + + + +
+ + + + +
enum NanoBrain.Neuron.CombinatorType
+
+inherited
+
+ +

The type of combinators.

+

A combinator combines the weighted values of the synapses to a single value

+ + + +
Enumerator
Sum 

Add the weighted values together.

+
Product 

Multiply the weighted values.

+
+ +
+
+ +

◆ Type

+ +
+
+ + + + + +
+ + + + +
enum NanoBrain.Nucleus.Type
+
+inherited
+
+ +

Function to clone a nucleus to a Cluster prefab.

+
Parameters
+ + +
prefab
+
+
+
Returns
+

The types of Nucleus

+ +
+
+

Member Function Documentation

+ +

◆ UpdateNuclei()

+ +
+
+ + + + + +
+ + + + + + + +
override void NanoBrain.MemoryCell.UpdateNuclei ()
+
+virtual
+
+ +

Update the state and recursively all Nuclei receiving data from this Nucleus.

+ +

Reimplemented from NanoBrain.Nucleus.

+ +
+
+ +

◆ AddSynapse()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Synapse NanoBrain.Neuron.AddSynapse (Neuron sendingNucleus,
float weight = 1 
)
+
+inherited
+
+ +

Add a new synapse to this nuclues.

+
Parameters
+ + + +
sendingNucleusThe nucleus from which the signals may originate
weightThe weight applied to the input. Default value = 1
+
+
+
Returns
The created Synapse
+

This will add a new input to this nucleus with the given weight.

+ +
+
+ +

◆ GetSynapse()

+ +
+
+ + + + + +
+ + + + + + + + +
Synapse NanoBrain.Neuron.GetSynapse (Nucleus sender)
+
+inherited
+
+ +

Find a synapse.

+
Parameters
+ + +
senderThe sender of the input to the Synapse
+
+
+
Returns
The found Synapse or null when the sender has no synapse to this nucleus.
+ +
+
+ +

◆ RemoveSynapse()

+ +
+
+ + + + + +
+ + + + + + + + +
void NanoBrain.Neuron.RemoveSynapse (Nucleus sendingNucleus)
+
+inherited
+
+ +

Remove a synapse from a Nucleus.

+
Parameters
+ + +
sendingNucleusRemote the synapse connecting to this Nucleus
+
+
+ +
+
+ +

◆ SetBias()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void NanoBrain.Neuron.SetBias (Vector3 inputValue)
+
+virtualinherited
+
+ +

Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus.

+
Parameters
+ + +
inputValue
+
+
+ +
+
+ +

◆ ProcessStimulus()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void NanoBrain.Neuron.ProcessStimulus (Vector3 inputValue)
+
+virtualinherited
+
+ +

Process an external stimulus.

+
Parameters
+ + + + +
inputValueThe value of the stimulus
thingIdThe id of the thing causing the stimulus
thingNameThe name of the thing causing the stimulus
+
+
+ +
+
+

Member Data Documentation

+ +

◆ bias

+ +
+
+ + + + + +
+ + + + +
Vector3 NanoBrain.Neuron.bias = Vector3.zero
+
+inherited
+
+ +

Create a new Neuron in a Cluster Prefab.

+
Parameters
+ + + +
prefabThe Cluster Preafb in which the new Neuron should be created
nameThe name of the new Neuron
+
+
+

The bias

+

The bias which a value which is always added to the combined value of the neuron It does not have a synapse and therefore no weight of source nucleus

+ +
+
+ +

◆ parent

+ +
+
+ + + + + +
+ + + + +
Cluster NanoBrain.Nucleus.parent
+
+inherited
+
+ +

The cluster prefab in which the nucleus is located.

+

The cluster instance in which the nucleus is located

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_memory_cell.html.meta b/Documentation/html/class_nano_brain_1_1_memory_cell.html.meta new file mode 100644 index 0000000..2f17bed --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_memory_cell.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ffd30c6234d869c9d94518fcb20604bb +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_memory_cell.png b/Documentation/html/class_nano_brain_1_1_memory_cell.png new file mode 100644 index 0000000..9fc1c66 Binary files /dev/null and b/Documentation/html/class_nano_brain_1_1_memory_cell.png differ diff --git a/Documentation/html/class_nano_brain_1_1_memory_cell.png.meta b/Documentation/html/class_nano_brain_1_1_memory_cell.png.meta new file mode 100644 index 0000000..bd2b2f8 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_memory_cell.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 97d984c9627ec94b49e6a7178691389c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_neuron-members.html b/Documentation/html/class_nano_brain_1_1_neuron-members.html new file mode 100644 index 0000000..e07f2b8 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_neuron-members.html @@ -0,0 +1,153 @@ + + + + + + + +Nano Brain for Unity: Member List + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
NanoBrain.Neuron Member List
+
+
+ +

This is the complete list of members for NanoBrain.Neuron, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_curvePreset (defined in NanoBrain.Neuron)NanoBrain.Neuron
_outputValue (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
_outputValue (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivationType enum nameNanoBrain.Neuron
Activator (defined in NanoBrain.Neuron)NanoBrain.Neuron
Activator (defined in NanoBrain.Neuron)NanoBrain.Neuron
ActivatorBinary(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorCustom(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorCustom(Vector3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorLinear(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorLinear(Vector3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorNormalized(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorPower(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorPower(Vector3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorReciprocal(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorReciprocal(Vector3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorSqrt(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorSqrt(Vector3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
ActivatorTanh(float3 input) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
AddReceiver(Nucleus receiverToAdd, float weight=1) (defined in NanoBrain.Neuron)NanoBrain.Neuronvirtual
AddSynapse(Neuron sendingNucleus, float weight=1)NanoBrain.Neuron
biasNanoBrain.Neuron
CheckSleepingSynapses() (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
CloneFields(Neuron clone) (defined in NanoBrain.Neuron)NanoBrain.Neuronprotectedvirtual
Combinator (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
Combinator (defined in NanoBrain.Neuron)NanoBrain.Neuronprotected
combinatorNanoBrain.Neuron
CombinatorMax() (defined in NanoBrain.Neuron)NanoBrain.Neuron
CombinatorProduct() (defined in NanoBrain.Neuron)NanoBrain.Neuron
CombinatorProduct() (defined in NanoBrain.Neuron)NanoBrain.Neuron
CombinatorSum() (defined in NanoBrain.Neuron)NanoBrain.Neuron
CombinatorSum() (defined in NanoBrain.Neuron)NanoBrain.Neuron
CombinatorType enum nameNanoBrain.Neuron
curve (defined in NanoBrain.Neuron)NanoBrain.Neuron
curveMax (defined in NanoBrain.Neuron)NanoBrain.Neuron
curvePreset (defined in NanoBrain.Neuron)NanoBrain.Neuron
Delete(Nucleus nucleus) (defined in NanoBrain.Neuron)NanoBrain.Neuronstatic
GenerateCurve() (defined in NanoBrain.Neuron)NanoBrain.Neuron
GetSynapse(Nucleus sender)NanoBrain.Neuron
isFiring (defined in NanoBrain.Neuron)NanoBrain.Neuron
isSleeping (defined in NanoBrain.Neuron)NanoBrain.Neuron
lastUpdateNanoBrain.Neuron
nameNanoBrain.Nucleus
Neuron(Cluster parent, string name)NanoBrain.Neuron
outputMagnitude (defined in NanoBrain.Neuron)NanoBrain.Neuron
outputSqrMagnitude (defined in NanoBrain.Neuron)NanoBrain.Neuron
outputValue (defined in NanoBrain.Neuron)NanoBrain.Neuron
outputValue (defined in NanoBrain.Neuron)NanoBrain.Neuron
parentNanoBrain.Nucleus
persistOutput (defined in NanoBrain.Neuron)NanoBrain.Neuron
ProcessStimulus(Vector3 inputValue)NanoBrain.Neuronvirtual
receivers (defined in NanoBrain.Neuron)NanoBrain.Neuron
RemoveReceiver(Nucleus receiverToRemove) (defined in NanoBrain.Neuron)NanoBrain.Neuronvirtual
RemoveSynapse(Nucleus sendingNucleus)NanoBrain.Neuron
SetBias(Vector3 inputValue)NanoBrain.Neuronvirtual
ShallowCloneTo(Cluster newParent)NanoBrain.Neuron
SleepCheck() (defined in NanoBrain.Neuron)NanoBrain.Neuron
synapsesNanoBrain.Neuron
timeToSleep (defined in NanoBrain.Neuron)NanoBrain.Neuron
Type enum nameNanoBrain.Nucleus
UpdateNuclei()NanoBrain.Nucleusvirtual
UpdateStateIsolated() (defined in NanoBrain.Neuron)NanoBrain.Neuron
WhenFiring (defined in NanoBrain.Neuron)NanoBrain.Neuron
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_neuron-members.html.meta b/Documentation/html/class_nano_brain_1_1_neuron-members.html.meta new file mode 100644 index 0000000..49e8daa --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_neuron-members.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a111018414f6d529ebcd4b286ab52dfa +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_neuron.html b/Documentation/html/class_nano_brain_1_1_neuron.html new file mode 100644 index 0000000..90365be --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_neuron.html @@ -0,0 +1,708 @@ + + + + + + + +Nano Brain for Unity: NanoBrain.Neuron Class Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Types | +Public Member Functions | +Static Public Member Functions | +Public Attributes | +Protected Member Functions | +Protected Attributes | +Properties | +List of all members
+
NanoBrain.Neuron Class Reference
+
+
+

Description

+

A neuron is a basic Nucleus.

+
+Inheritance diagram for NanoBrain.Neuron:
+
+
+ + +NanoBrain.Nucleus +NanoBrain.MemoryCell + +
+ + + + + + + + + + + +

+Public Types

enum  CombinatorType { Sum +, Product + }
 The type of combinators. More...
 
enum  ActivationType {
+  Linear +, Power +, Sqrt +, Reciprocal +,
+  Tanh +, Binary +, Normalized +, Custom +
+ }
 The type of.
 
enum  Type { None +, Neuron +, MemoryCell +, Cluster + }
 Function to clone a nucleus to a Cluster prefab. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Neuron (Cluster parent, string name)
 Create a new Neuron in a Cluster instance.
 
Synapse AddSynapse (Neuron sendingNucleus, float weight=1)
 Add a new synapse to this nuclues.
 
Synapse GetSynapse (Nucleus sender)
 Find a synapse.
 
void RemoveSynapse (Nucleus sendingNucleus)
 Remove a synapse from a Nucleus.
 
virtual void SetBias (Vector3 inputValue)
 Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus.
 
+AnimationCurve GenerateCurve ()
 
+void SleepCheck ()
 
override Nucleus ShallowCloneTo (Cluster newParent)
 Toggle for printing debugging trace data.
 
+override void UpdateStateIsolated ()
 
+float3 CombinatorSum ()
 
+float3 CombinatorProduct ()
 
+Vector3 CombinatorSum ()
 
+Vector3 CombinatorProduct ()
 
+Vector3 CombinatorMax ()
 
+virtual void AddReceiver (Nucleus receiverToAdd, float weight=1)
 
+virtual void RemoveReceiver (Nucleus receiverToRemove)
 
virtual void ProcessStimulus (Vector3 inputValue)
 Process an external stimulus.
 
virtual void UpdateNuclei ()
 Update the state and recursively all Nuclei receiving data from this Nucleus.
 
+ + + +

+Static Public Member Functions

+static void Delete (Nucleus nucleus)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

Vector3 bias = Vector3.zero
 Create a new Neuron in a Cluster Prefab.
 
+CombinatorType combinator = CombinatorType.Sum
 The type of combinator used for this Neuron.
 
+ActivationType _curvePreset
 
+AnimationCurve curve
 
+float curveMax = 1.0f
 
+Action WhenFiring
 
+bool persistOutput = false
 
+float lastUpdate = 0
 Toggle for printing debugging trace data.
 
+readonly float timeToSleep = 1f
 
+string name
 The name of the Nucleus.
 
Cluster parent
 The cluster prefab in which the nucleus is located.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

+virtual void CloneFields (Neuron clone)
 
+void CheckSleepingSynapses ()
 
+float3 ActivatorLinear (float3 input)
 
+float3 ActivatorSqrt (float3 input)
 
+float3 ActivatorPower (float3 input)
 
+float3 ActivatorReciprocal (float3 input)
 
+float3 ActivatorTanh (float3 input)
 
+float3 ActivatorBinary (float3 input)
 
+float3 ActivatorNormalized (float3 input)
 
+float3 ActivatorCustom (float3 input)
 
+Vector3 ActivatorLinear (Vector3 input)
 
+Vector3 ActivatorSqrt (Vector3 input)
 
+Vector3 ActivatorPower (Vector3 input)
 
+Vector3 ActivatorReciprocal (Vector3 input)
 
+Vector3 ActivatorCustom (Vector3 input)
 
+ + + + + +

+Protected Attributes

+float3 _outputValue
 
+Vector3 _outputValue
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Properties

+List< Synapsesynapses [get]
 The synapses of the nucleus.
 
+ActivationType curvePreset [get, set]
 
+virtual float3 outputValue [get, set]
 
+float outputMagnitude [get]
 
+float outputSqrMagnitude [get]
 
+virtual Vector3 outputValue [get, set]
 
+bool isFiring [get]
 
+virtual bool isSleeping [get]
 
+Func< float3 > Combinator [get]
 
+Func< Vector3 > Combinator [get]
 
+Func< float3, float3 > Activator [get]
 
+Func< Vector3, Vector3 > Activator [get]
 
+virtual List< Nucleusreceivers [get, set]
 
+

Member Enumeration Documentation

+ +

◆ CombinatorType

+ +
+
+ +

The type of combinators.

+

A combinator combines the weighted values of the synapses to a single value

+ + + +
Enumerator
Sum 

Add the weighted values together.

+
Product 

Multiply the weighted values.

+
+ +
+
+ +

◆ Type

+ +
+
+ + + + + +
+ + + + +
enum NanoBrain.Nucleus.Type
+
+inherited
+
+ +

Function to clone a nucleus to a Cluster prefab.

+
Parameters
+ + +
prefab
+
+
+
Returns
+

The types of Nucleus

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ Neuron()

+ +
+
+ + + + + + + + + + + + + + + + + + +
NanoBrain.Neuron.Neuron (Cluster parent,
string name 
)
+
+ +

Create a new Neuron in a Cluster instance.

+
Parameters
+ + + +
parentThe parent cluster in which the new Neuron should be created
nameThe name of the new Neuron
+
+
+ +
+
+

Member Function Documentation

+ +

◆ AddSynapse()

+ +
+
+ + + + + + + + + + + + + + + + + + +
Synapse NanoBrain.Neuron.AddSynapse (Neuron sendingNucleus,
float weight = 1 
)
+
+ +

Add a new synapse to this nuclues.

+
Parameters
+ + + +
sendingNucleusThe nucleus from which the signals may originate
weightThe weight applied to the input. Default value = 1
+
+
+
Returns
The created Synapse
+

This will add a new input to this nucleus with the given weight.

+ +
+
+ +

◆ GetSynapse()

+ +
+
+ + + + + + + + +
Synapse NanoBrain.Neuron.GetSynapse (Nucleus sender)
+
+ +

Find a synapse.

+
Parameters
+ + +
senderThe sender of the input to the Synapse
+
+
+
Returns
The found Synapse or null when the sender has no synapse to this nucleus.
+ +
+
+ +

◆ RemoveSynapse()

+ +
+
+ + + + + + + + +
void NanoBrain.Neuron.RemoveSynapse (Nucleus sendingNucleus)
+
+ +

Remove a synapse from a Nucleus.

+
Parameters
+ + +
sendingNucleusRemote the synapse connecting to this Nucleus
+
+
+ +
+
+ +

◆ SetBias()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void NanoBrain.Neuron.SetBias (Vector3 inputValue)
+
+virtual
+
+ +

Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus.

+
Parameters
+ + +
inputValue
+
+
+ +
+
+ +

◆ ShallowCloneTo()

+ +
+
+ + + + + + + + +
override Nucleus NanoBrain.Neuron.ShallowCloneTo (Cluster newParent)
+
+ +

Toggle for printing debugging trace data.

+

Function to make a partial clone of this nucleus

+
Parameters
+ + +
parentThe cluster in which the cloned nucleus should be placed
+
+
+
Returns
+ +
+
+ +

◆ ProcessStimulus()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void NanoBrain.Neuron.ProcessStimulus (Vector3 inputValue)
+
+virtual
+
+ +

Process an external stimulus.

+
Parameters
+ + + + +
inputValueThe value of the stimulus
thingIdThe id of the thing causing the stimulus
thingNameThe name of the thing causing the stimulus
+
+
+ +
+
+ +

◆ UpdateNuclei()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void NanoBrain.Nucleus.UpdateNuclei ()
+
+virtualinherited
+
+ +

Update the state and recursively all Nuclei receiving data from this Nucleus.

+ +

Reimplemented in NanoBrain.MemoryCell.

+ +
+
+

Member Data Documentation

+ +

◆ bias

+ +
+
+ + + + +
Vector3 NanoBrain.Neuron.bias = Vector3.zero
+
+ +

Create a new Neuron in a Cluster Prefab.

+
Parameters
+ + + +
prefabThe Cluster Preafb in which the new Neuron should be created
nameThe name of the new Neuron
+
+
+

The bias

+

The bias which a value which is always added to the combined value of the neuron It does not have a synapse and therefore no weight of source nucleus

+ +
+
+ +

◆ parent

+ +
+
+ + + + + +
+ + + + +
Cluster NanoBrain.Nucleus.parent
+
+inherited
+
+ +

The cluster prefab in which the nucleus is located.

+

The cluster instance in which the nucleus is located

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_neuron.html.meta b/Documentation/html/class_nano_brain_1_1_neuron.html.meta new file mode 100644 index 0000000..7b0bc5a --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_neuron.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7871287615b5cde18932faa30404d970 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_neuron.png b/Documentation/html/class_nano_brain_1_1_neuron.png new file mode 100644 index 0000000..49d8eae Binary files /dev/null and b/Documentation/html/class_nano_brain_1_1_neuron.png differ diff --git a/Documentation/html/class_nano_brain_1_1_neuron.png.meta b/Documentation/html/class_nano_brain_1_1_neuron.png.meta new file mode 100644 index 0000000..f98c5d4 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_neuron.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: b1154d0738a8e2c8db9ccdfc6cf0ea22 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_nucleus-members.html b/Documentation/html/class_nano_brain_1_1_nucleus-members.html new file mode 100644 index 0000000..5a6ac49 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_nucleus-members.html @@ -0,0 +1,96 @@ + + + + + + + +Nano Brain for Unity: Member List + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
NanoBrain.Nucleus Member List
+
+
+ +

This is the complete list of members for NanoBrain.Nucleus, including all inherited members.

+ + + + + + + +
nameNanoBrain.Nucleus
parentNanoBrain.Nucleus
ShallowCloneTo(Cluster parent)NanoBrain.Nucleus
Type enum nameNanoBrain.Nucleus
UpdateNuclei()NanoBrain.Nucleusvirtual
UpdateStateIsolated()NanoBrain.Nucleus
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_nucleus-members.html.meta b/Documentation/html/class_nano_brain_1_1_nucleus-members.html.meta new file mode 100644 index 0000000..be2fda4 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_nucleus-members.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 10ed020f41822a80c9d9e1126c67c937 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_nucleus.html b/Documentation/html/class_nano_brain_1_1_nucleus.html new file mode 100644 index 0000000..f289aeb --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_nucleus.html @@ -0,0 +1,251 @@ + + + + + + + +Nano Brain for Unity: NanoBrain.Nucleus Class Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Types | +Public Member Functions | +Public Attributes | +List of all members
+
NanoBrain.Nucleus Class Referenceabstract
+
+
+

Description

+

A Nucleus is a basic element in a brain cluster.

+
+Inheritance diagram for NanoBrain.Nucleus:
+
+
+ + +NanoBrain.Cluster +NanoBrain.Neuron +NanoBrain.MemoryCell + +
+ + + + + +

+Public Types

enum  Type { None +, Neuron +, MemoryCell +, Cluster + }
 Function to clone a nucleus to a Cluster prefab. More...
 
+ + + + + + + + + + +

+Public Member Functions

Nucleus ShallowCloneTo (Cluster parent)
 Toggle for printing debugging trace data.
 
+void UpdateStateIsolated ()
 Update the state without updating other Nuclei.
 
virtual void UpdateNuclei ()
 Update the state and recursively all Nuclei receiving data from this Nucleus.
 
+ + + + + + + +

+Public Attributes

+string name
 The name of the Nucleus.
 
Cluster parent
 The cluster prefab in which the nucleus is located.
 
+

Member Enumeration Documentation

+ +

◆ Type

+ +
+
+ + + + +
enum NanoBrain.Nucleus.Type
+
+ +

Function to clone a nucleus to a Cluster prefab.

+
Parameters
+ + +
prefab
+
+
+
Returns
+

The types of Nucleus

+ +
+
+

Member Function Documentation

+ +

◆ ShallowCloneTo()

+ +
+
+ + + + + +
+ + + + + + + + +
Nucleus NanoBrain.Nucleus.ShallowCloneTo (Cluster parent)
+
+abstract
+
+ +

Toggle for printing debugging trace data.

+

Function to make a partial clone of this nucleus

+
Parameters
+ + +
parentThe cluster in which the cloned nucleus should be placed
+
+
+
Returns
+ +
+
+ +

◆ UpdateNuclei()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void NanoBrain.Nucleus.UpdateNuclei ()
+
+virtual
+
+ +

Update the state and recursively all Nuclei receiving data from this Nucleus.

+ +

Reimplemented in NanoBrain.MemoryCell.

+ +
+
+

Member Data Documentation

+ +

◆ parent

+ +
+
+ + + + +
Cluster NanoBrain.Nucleus.parent
+
+ +

The cluster prefab in which the nucleus is located.

+

The cluster instance in which the nucleus is located

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_nucleus.html.meta b/Documentation/html/class_nano_brain_1_1_nucleus.html.meta new file mode 100644 index 0000000..27af6b5 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_nucleus.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 26e7ab58944014c90ac92694c09f8d9d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_nucleus.png b/Documentation/html/class_nano_brain_1_1_nucleus.png new file mode 100644 index 0000000..1433a13 Binary files /dev/null and b/Documentation/html/class_nano_brain_1_1_nucleus.png differ diff --git a/Documentation/html/class_nano_brain_1_1_nucleus.png.meta b/Documentation/html/class_nano_brain_1_1_nucleus.png.meta new file mode 100644 index 0000000..e4bb6c0 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_nucleus.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: b35c7cf86cbf03b1c93eae644d264e85 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_synapse-members.html b/Documentation/html/class_nano_brain_1_1_synapse-members.html new file mode 100644 index 0000000..7e49574 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_synapse-members.html @@ -0,0 +1,94 @@ + + + + + + + +Nano Brain for Unity: Member List + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
NanoBrain.Synapse Member List
+
+
+ +

This is the complete list of members for NanoBrain.Synapse, including all inherited members.

+ + + + + +
isSleeping (defined in NanoBrain.Synapse)NanoBrain.Synapse
neuronNanoBrain.Synapse
Synapse(Neuron nucleus, float weight=1.0f)NanoBrain.Synapse
weightNanoBrain.Synapse
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_synapse-members.html.meta b/Documentation/html/class_nano_brain_1_1_synapse-members.html.meta new file mode 100644 index 0000000..4c3ebae --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_synapse-members.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1a5ad1f0608e9cbf7a7fea9e76378a74 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/class_nano_brain_1_1_synapse.html b/Documentation/html/class_nano_brain_1_1_synapse.html new file mode 100644 index 0000000..c093760 --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_synapse.html @@ -0,0 +1,159 @@ + + + + + + + +Nano Brain for Unity: NanoBrain.Synapse Class Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Properties | +List of all members
+
NanoBrain.Synapse Class Reference
+
+
+

Description

+

A Synapse connects the ouput of a Neuron to another Neuron.

+
+ + + + +

+Public Member Functions

 Synapse (Neuron nucleus, float weight=1.0f)
 Create a new Synapse.
 
+ + + + + + + +

+Public Attributes

+Neuron neuron
 The neuron from which input is received.
 
+float weight
 The weight value to apply to the Neuron input.
 
+ + + +

+Properties

+bool isSleeping [get]
 
+

Constructor & Destructor Documentation

+ +

◆ Synapse()

+ +
+
+ + + + + + + + + + + + + + + + + + +
NanoBrain.Synapse.Synapse (Neuron nucleus,
float weight = 1::0f 
)
+
+ +

Create a new Synapse.

+
Parameters
+ + + +
nucleusThe neuron from which input is received
weightThe weight value to apply to the Neuron input
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/Documentation/html/class_nano_brain_1_1_synapse.html.meta b/Documentation/html/class_nano_brain_1_1_synapse.html.meta new file mode 100644 index 0000000..e5a15fc --- /dev/null +++ b/Documentation/html/class_nano_brain_1_1_synapse.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e96ea75afe3a7411fa97ecf8af019fb8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/classes.html b/Documentation/html/classes.html new file mode 100644 index 0000000..7a712c5 --- /dev/null +++ b/Documentation/html/classes.html @@ -0,0 +1,101 @@ + + + + + + + +Nano Brain for Unity: Class Index + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
B | C | M | N | S
+
+
+
B
+
Brain (NanoBrain)
+
+
C
+
Cluster (NanoBrain)
ClusterPrefab (NanoBrain)
+
+
M
+
MemoryCell (NanoBrain)
+
+
N
+
Neuron (NanoBrain)
Nucleus (NanoBrain)
+
+
S
+
Synapse (NanoBrain)
+
+
+ + + + diff --git a/Documentation/html/classes.html.meta b/Documentation/html/classes.html.meta new file mode 100644 index 0000000..0f269a7 --- /dev/null +++ b/Documentation/html/classes.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d0955c9f105c1b5d999da492a82677a6 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/closed.png b/Documentation/html/closed.png new file mode 100644 index 0000000..7d8dac4 Binary files /dev/null and b/Documentation/html/closed.png differ diff --git a/Documentation/html/closed.png.meta b/Documentation/html/closed.png.meta new file mode 100644 index 0000000..af7f54c --- /dev/null +++ b/Documentation/html/closed.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 8f359a9b1001b62e48b929d9ec9d02c4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/custom_doxygen.css b/Documentation/html/custom_doxygen.css new file mode 100644 index 0000000..b921a4d --- /dev/null +++ b/Documentation/html/custom_doxygen.css @@ -0,0 +1,12 @@ +/* Custom PasserVR CSS for DoxyGen */ + +a { + color: #e77505; +} +.contents a:visited { + color: #e77505; +} + +a:hover { + color: #10659C; +} \ No newline at end of file diff --git a/Runtime/LinearAlgebra.meta b/Documentation/html/custom_doxygen.css.meta similarity index 67% rename from Runtime/LinearAlgebra.meta rename to Documentation/html/custom_doxygen.css.meta index c54c1af..5b9c005 100644 --- a/Runtime/LinearAlgebra.meta +++ b/Documentation/html/custom_doxygen.css.meta @@ -1,6 +1,5 @@ fileFormatVersion: 2 -guid: d98555a675e8e5e879de17db950b55fe -folderAsset: yes +guid: 12575efb4c194b50d8661fc04f025564 DefaultImporter: externalObjects: {} userData: diff --git a/Documentation/html/dir_14eca4e58e6d71e3a9859288c1bd2735.html b/Documentation/html/dir_14eca4e58e6d71e3a9859288c1bd2735.html new file mode 100644 index 0000000..e81d864 --- /dev/null +++ b/Documentation/html/dir_14eca4e58e6d71e3a9859288c1bd2735.html @@ -0,0 +1,87 @@ + + + + + + + +Nano Brain for Unity: /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Editor Directory Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Editor Directory Reference
+
+
+
+ + + + diff --git a/Documentation/html/dir_14eca4e58e6d71e3a9859288c1bd2735.html.meta b/Documentation/html/dir_14eca4e58e6d71e3a9859288c1bd2735.html.meta new file mode 100644 index 0000000..6697847 --- /dev/null +++ b/Documentation/html/dir_14eca4e58e6d71e3a9859288c1bd2735.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2691d82d648861377a94054f9d58deb1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/dir_4f6666a8f2ab10bc970eb7559668f031.html b/Documentation/html/dir_4f6666a8f2ab10bc970eb7559668f031.html new file mode 100644 index 0000000..ee9e8da --- /dev/null +++ b/Documentation/html/dir_4f6666a8f2ab10bc970eb7559668f031.html @@ -0,0 +1,93 @@ + + + + + + + +Nano Brain for Unity: /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime Directory Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Runtime Directory Reference
+
+
+ + + + +

+Directories

 Scripts
 
+
+ + + + diff --git a/Documentation/html/dir_4f6666a8f2ab10bc970eb7559668f031.html.meta b/Documentation/html/dir_4f6666a8f2ab10bc970eb7559668f031.html.meta new file mode 100644 index 0000000..cdcc5ac --- /dev/null +++ b/Documentation/html/dir_4f6666a8f2ab10bc970eb7559668f031.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 98b39284631945f34ba2f654c3a875ce +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/dir_961f031cbd4067daa41f3038afdffb61.html b/Documentation/html/dir_961f031cbd4067daa41f3038afdffb61.html new file mode 100644 index 0000000..2f32784 --- /dev/null +++ b/Documentation/html/dir_961f031cbd4067daa41f3038afdffb61.html @@ -0,0 +1,87 @@ + + + + + + + +Nano Brain for Unity: /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ScriptableObjects Directory Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ScriptableObjects Directory Reference
+
+
+
+ + + + diff --git a/Documentation/html/dir_961f031cbd4067daa41f3038afdffb61.html.meta b/Documentation/html/dir_961f031cbd4067daa41f3038afdffb61.html.meta new file mode 100644 index 0000000..8e7a5a3 --- /dev/null +++ b/Documentation/html/dir_961f031cbd4067daa41f3038afdffb61.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2926169196b4c7646a8f05ad7b23018c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/dir_d52cd4d528148a4237c9bd37fdf6f7e8.html b/Documentation/html/dir_d52cd4d528148a4237c9bd37fdf6f7e8.html new file mode 100644 index 0000000..2b53de7 --- /dev/null +++ b/Documentation/html/dir_d52cd4d528148a4237c9bd37fdf6f7e8.html @@ -0,0 +1,95 @@ + + + + + + + +Nano Brain for Unity: /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts Directory Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Scripts Directory Reference
+
+
+ + + + + + +

+Directories

 Core
 
 ScriptableObjects
 
+
+ + + + diff --git a/Documentation/html/dir_d52cd4d528148a4237c9bd37fdf6f7e8.html.meta b/Documentation/html/dir_d52cd4d528148a4237c9bd37fdf6f7e8.html.meta new file mode 100644 index 0000000..df076b2 --- /dev/null +++ b/Documentation/html/dir_d52cd4d528148a4237c9bd37fdf6f7e8.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4063181f562fec3d785401cba8562c79 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/dir_ff8b04b97203665bfd386b445c7d0b7c.html b/Documentation/html/dir_ff8b04b97203665bfd386b445c7d0b7c.html new file mode 100644 index 0000000..90a09b4 --- /dev/null +++ b/Documentation/html/dir_ff8b04b97203665bfd386b445c7d0b7c.html @@ -0,0 +1,87 @@ + + + + + + + +Nano Brain for Unity: /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core Directory Reference + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
Core Directory Reference
+
+
+
+ + + + diff --git a/Documentation/html/dir_ff8b04b97203665bfd386b445c7d0b7c.html.meta b/Documentation/html/dir_ff8b04b97203665bfd386b445c7d0b7c.html.meta new file mode 100644 index 0000000..3b6154a --- /dev/null +++ b/Documentation/html/dir_ff8b04b97203665bfd386b445c7d0b7c.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5dca77ad1f394fe7181cc332b1ac0fa6 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/doc.svg b/Documentation/html/doc.svg new file mode 100644 index 0000000..f2b6a64 --- /dev/null +++ b/Documentation/html/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/Documentation/html/doc.svg.meta b/Documentation/html/doc.svg.meta new file mode 100644 index 0000000..87da073 --- /dev/null +++ b/Documentation/html/doc.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 0605b0f6e3ad2fbcab684f5fb334e917 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/docd.svg b/Documentation/html/docd.svg new file mode 100644 index 0000000..a467461 --- /dev/null +++ b/Documentation/html/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/Documentation/html/docd.svg.meta b/Documentation/html/docd.svg.meta new file mode 100644 index 0000000..0e047fa --- /dev/null +++ b/Documentation/html/docd.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 835932448a49d591fa409c846511dcbc +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/doxygen.css b/Documentation/html/doxygen.css new file mode 100644 index 0000000..7964918 --- /dev/null +++ b/Documentation/html/doxygen.css @@ -0,0 +1,1685 @@ +/* The standard CSS for doxygen 1.9.8*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #969696; + color: #414141; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F8F8F8; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #4D4D4D; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #5D5D5D; +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #5D5D5D; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #5D5D5D; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #CACACA; + background-color: #FBFBFB; + color: black; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: black; + background-color: #FBFBFB; + border: 1px solid #CACACA; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #5D5D5D; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #5D5D5D; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 104px; +} + +.compoundTemplParams { + color: #5D5D5D; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.xmlcdata { + color: black; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #F7F7F7; + border-left: 2px solid #A7A7A7; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #343434; +} + +th.dirtab { + background-color: #444444; + color: #FFFFFF; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #636363; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9F9F9; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #E1E1E1; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #5D5D5D; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #B2B2B2; + border-left: 1px solid #B2B2B2; + border-right: 1px solid #B2B2B2; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E5E5E5; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #5D5D5D; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #B2B2B2; + border-left: 1px solid #B2B2B2; + border-right: 1px solid #B2B2B2; + padding: 6px 0px 6px 0px; + color: #282828; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #E2E2E2; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #B2B2B2; + border-left: 1px solid #B2B2B2; + border-right: 1px solid #B2B2B2; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #858585; + border-top:1px solid #6D6D6D; + border-left:1px solid #6D6D6D; + border-right:1px solid #CACACA; + border-bottom:1px solid #CACACA; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A7A7A7; + border-bottom: 1px solid #A7A7A7; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F8F8F8; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #4D4D4D; +} + +.arrow { + color: #A7A7A7; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #858585; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #303030; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #343434; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #444444; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #B2B2B2; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #B2B2B2; + border-bottom: 1px solid #B2B2B2; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #B2B2B2; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E5E5E5; + font-size: 90%; + color: #282828; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #B2B2B2; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#2D2D2D; + border:solid 1px #C8C8C8; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #424242; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #2D2D2D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #303030; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9F9F9; + margin: 0px; + border-bottom: 1px solid #CACACA; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #6D6D6D; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#3D3D3D; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F5F5F5; + border: 1px solid #DCDCDC; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #5D5D5D; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: black; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #5D5D5D; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #343434; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #444444; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/Documentation/html/doxygen.css.meta b/Documentation/html/doxygen.css.meta new file mode 100644 index 0000000..7795306 --- /dev/null +++ b/Documentation/html/doxygen.css.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 247df139d59e2166c877cf6642d9815c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/doxygen.svg b/Documentation/html/doxygen.svg new file mode 100644 index 0000000..61d44aa --- /dev/null +++ b/Documentation/html/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Documentation/html/doxygen.svg.meta b/Documentation/html/doxygen.svg.meta new file mode 100644 index 0000000..d759875 --- /dev/null +++ b/Documentation/html/doxygen.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 207e0d8a44ba97950b3f8bcde74a84dd +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/dynsections.js b/Documentation/html/dynsections.js new file mode 100644 index 0000000..ee3f142 --- /dev/null +++ b/Documentation/html/dynsections.js @@ -0,0 +1,192 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ diff --git a/Documentation/html/dynsections.js.meta b/Documentation/html/dynsections.js.meta new file mode 100644 index 0000000..669884d --- /dev/null +++ b/Documentation/html/dynsections.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 220af82fcb6183668ba400d72fa73f5e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/folderclosed.svg b/Documentation/html/folderclosed.svg new file mode 100644 index 0000000..f2a498c --- /dev/null +++ b/Documentation/html/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/Documentation/html/folderclosed.svg.meta b/Documentation/html/folderclosed.svg.meta new file mode 100644 index 0000000..cccef68 --- /dev/null +++ b/Documentation/html/folderclosed.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: ed852fa6ace29dcc3aee5f3b5c63fadc +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/folderclosedd.svg b/Documentation/html/folderclosedd.svg new file mode 100644 index 0000000..0bd469b --- /dev/null +++ b/Documentation/html/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/Documentation/html/folderclosedd.svg.meta b/Documentation/html/folderclosedd.svg.meta new file mode 100644 index 0000000..223ac14 --- /dev/null +++ b/Documentation/html/folderclosedd.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 603b3653e1469c03294155c230618f89 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/folderopen.svg b/Documentation/html/folderopen.svg new file mode 100644 index 0000000..3552d18 --- /dev/null +++ b/Documentation/html/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/Documentation/html/folderopen.svg.meta b/Documentation/html/folderopen.svg.meta new file mode 100644 index 0000000..70999eb --- /dev/null +++ b/Documentation/html/folderopen.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 99d7b20b61619bbc7bc7acf43433ad71 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/folderopend.svg b/Documentation/html/folderopend.svg new file mode 100644 index 0000000..7f59273 --- /dev/null +++ b/Documentation/html/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/Documentation/html/folderopend.svg.meta b/Documentation/html/folderopend.svg.meta new file mode 100644 index 0000000..4519174 --- /dev/null +++ b/Documentation/html/folderopend.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 49346fcfab3fcfff6b70fc3e72079452 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/functions.html b/Documentation/html/functions.html new file mode 100644 index 0000000..286e8fd --- /dev/null +++ b/Documentation/html/functions.html @@ -0,0 +1,192 @@ + + + + + + + +Nano Brain for Unity: Class Members + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- _ -

+ + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+
+ + + + diff --git a/Documentation/html/functions.html.meta b/Documentation/html/functions.html.meta new file mode 100644 index 0000000..cc77049 --- /dev/null +++ b/Documentation/html/functions.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9fd7deb6d1234937ead79f8ee90ef568 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/functions_enum.html b/Documentation/html/functions_enum.html new file mode 100644 index 0000000..103f15e --- /dev/null +++ b/Documentation/html/functions_enum.html @@ -0,0 +1,85 @@ + + + + + + + +Nano Brain for Unity: Class Members - Enumerations + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enums with links to the class documentation for each member:
+
+ + + + diff --git a/Documentation/html/functions_enum.html.meta b/Documentation/html/functions_enum.html.meta new file mode 100644 index 0000000..087b18b --- /dev/null +++ b/Documentation/html/functions_enum.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9174d5685198b8457a89eb77e1ddc9e0 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/functions_func.html b/Documentation/html/functions_func.html new file mode 100644 index 0000000..cc97471 --- /dev/null +++ b/Documentation/html/functions_func.html @@ -0,0 +1,145 @@ + + + + + + + +Nano Brain for Unity: Class Members - Functions + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+
+ + + + diff --git a/Documentation/html/functions_func.html.meta b/Documentation/html/functions_func.html.meta new file mode 100644 index 0000000..3fc61e9 --- /dev/null +++ b/Documentation/html/functions_func.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b5635926d38de5a61b800a9e6bc4c310 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/functions_prop.html b/Documentation/html/functions_prop.html new file mode 100644 index 0000000..6007cfa --- /dev/null +++ b/Documentation/html/functions_prop.html @@ -0,0 +1,88 @@ + + + + + + + +Nano Brain for Unity: Class Members - Properties + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented properties with links to the class documentation for each member:
+
+ + + + diff --git a/Documentation/html/functions_prop.html.meta b/Documentation/html/functions_prop.html.meta new file mode 100644 index 0000000..4cfade3 --- /dev/null +++ b/Documentation/html/functions_prop.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 42580dac37333d6589c5fdfb92ee56c5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/functions_vars.html b/Documentation/html/functions_vars.html new file mode 100644 index 0000000..00d4803 --- /dev/null +++ b/Documentation/html/functions_vars.html @@ -0,0 +1,96 @@ + + + + + + + +Nano Brain for Unity: Class Members - Variables + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the class documentation for each member:
+
+ + + + diff --git a/Documentation/html/functions_vars.html.meta b/Documentation/html/functions_vars.html.meta new file mode 100644 index 0000000..addd230 --- /dev/null +++ b/Documentation/html/functions_vars.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 429b2d216a8555dd884eb2892854c4be +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/hierarchy.html b/Documentation/html/hierarchy.html new file mode 100644 index 0000000..c450a54 --- /dev/null +++ b/Documentation/html/hierarchy.html @@ -0,0 +1,94 @@ + + + + + + + +Nano Brain for Unity: Class Hierarchy + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + +
 CNanoBrain.BrainThe NanoBrain Unity Componnent
 CNanoBrain.ClusterPrefabThe Unity ScriptableObject to implement re-usable Cluster Prefabs
 CNanoBrain.NucleusA Nucleus is a basic element in a brain cluster
 CNanoBrain.ClusterA Cluster combines a collection of Nuclei to implement reusable behaviour
 CNanoBrain.NeuronA neuron is a basic Nucleus
 CNanoBrain.MemoryCellA MemoryCell stored its value for one update
 CNanoBrain.SynapseA Synapse connects the ouput of a Neuron to another Neuron
+
+
+ + + + diff --git a/Documentation/html/hierarchy.html.meta b/Documentation/html/hierarchy.html.meta new file mode 100644 index 0000000..d72a89d --- /dev/null +++ b/Documentation/html/hierarchy.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 65ad0dc620f273b18838bfcd08da2155 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/index.html b/Documentation/html/index.html new file mode 100644 index 0000000..36f8aae --- /dev/null +++ b/Documentation/html/index.html @@ -0,0 +1,89 @@ + + + + + + + +Nano Brain for Unity: Nano Brain for Unity + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Nano Brain for Unity
+
+
+

+Table of Contents

+ +
+
+ + + + diff --git a/Documentation/html/index.html.meta b/Documentation/html/index.html.meta new file mode 100644 index 0000000..1ea5663 --- /dev/null +++ b/Documentation/html/index.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e1fcaffbcd8a71d15bd82fd16ed5c4dd +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/jquery.js b/Documentation/html/jquery.js new file mode 100644 index 0000000..1dffb65 --- /dev/null +++ b/Documentation/html/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/Documentation/html/jquery.js.meta b/Documentation/html/jquery.js.meta new file mode 100644 index 0000000..6713e5e --- /dev/null +++ b/Documentation/html/jquery.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3cf478a6753c2c79aa8479224333fdae +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/md__2home_2pascal_2_development_2_projects_2_passer_2_nano_brain_2_nano_brain_2_assets_2_nano_brain-unitypackage_2_r_e_a_d_m_e.html b/Documentation/html/md__2home_2pascal_2_development_2_projects_2_passer_2_nano_brain_2_nano_brain_2_assets_2_nano_brain-unitypackage_2_r_e_a_d_m_e.html new file mode 100644 index 0000000..ae3ab5f --- /dev/null +++ b/Documentation/html/md__2home_2pascal_2_development_2_projects_2_passer_2_nano_brain_2_nano_brain_2_assets_2_nano_brain-unitypackage_2_r_e_a_d_m_e.html @@ -0,0 +1,85 @@ + + + + + + + +Nano Brain for Unity: NanoBrain + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
NanoBrain
+
+
+

Documentation is found in the Documentation folder

+
+
+ + + + diff --git a/Documentation/html/md__2home_2pascal_2_development_2_projects_2_passer_2_nano_brain_2_nano_brain_2_assets_2_nano_brain-unitypackage_2_r_e_a_d_m_e.html.meta b/Documentation/html/md__2home_2pascal_2_development_2_projects_2_passer_2_nano_brain_2_nano_brain_2_assets_2_nano_brain-unitypackage_2_r_e_a_d_m_e.html.meta new file mode 100644 index 0000000..f619db0 --- /dev/null +++ b/Documentation/html/md__2home_2pascal_2_development_2_projects_2_passer_2_nano_brain_2_nano_brain_2_assets_2_nano_brain-unitypackage_2_r_e_a_d_m_e.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c4ad8bc30919b3fb1aabdf1b8cc7ccd7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/md__installation.html b/Documentation/html/md__installation.html new file mode 100644 index 0000000..59fa488 --- /dev/null +++ b/Documentation/html/md__installation.html @@ -0,0 +1,91 @@ + + + + + + + +Nano Brain for Unity: Package Installation + + + + + + + + + + +
+
+ + + + + + + +
+
Nano Brain for Unity v0.1 +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
Package Installation
+
+
+

You can import the NanoBrain Ant package in Unity directly with the Package Manager git package importer.

+

See Unity: Installing from a Git URL

+

Use the link from 'Clone with HTTP' (for example: https://git.passer.life/CreatureControl/Ant.git) In this way you can always retrieve the latest version by pressing the Update button in the Package Manager.

+

Optionally, you can use a tag to retrieve a specific version. For example: https://git.passer.life/CreatureControl/Ant.git#0.1.0. This will give you a stable version which does not change. Updating can be done by retrieving the package with a link to a new release.

+

+Samples Installation

+

In the Unity Package manager, select the NanoBrain Ant package and look for the Samples tab in the details pane on the right. There you can import the Models.

+
+
+ + + + diff --git a/Documentation/html/md__installation.html.meta b/Documentation/html/md__installation.html.meta new file mode 100644 index 0000000..28c8bfd --- /dev/null +++ b/Documentation/html/md__installation.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 96db3f6a19212db6ab7a2028cdbba6af +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/menu.js b/Documentation/html/menu.js new file mode 100644 index 0000000..b0b2693 --- /dev/null +++ b/Documentation/html/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/Documentation/html/menu.js.meta b/Documentation/html/menu.js.meta new file mode 100644 index 0000000..1514579 --- /dev/null +++ b/Documentation/html/menu.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bf0867ab9943f2b3e8ff363a54e3630b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/menudata.js b/Documentation/html/menudata.js new file mode 100644 index 0000000..18b2c82 --- /dev/null +++ b/Documentation/html/menudata.js @@ -0,0 +1,63 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"_",url:"functions.html#index__5F"}, +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions.html#index_b"}, +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"g",url:"functions.html#index_g"}, +{text:"i",url:"functions.html#index_i"}, +{text:"l",url:"functions.html#index_l"}, +{text:"n",url:"functions.html#index_n"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"w",url:"functions.html#index_w"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"n",url:"functions_func.html#index_n"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}]}, +{text:"Variables",url:"functions_vars.html"}, +{text:"Enumerations",url:"functions_enum.html"}, +{text:"Properties",url:"functions_prop.html"}]}]}]} diff --git a/Documentation/html/menudata.js.meta b/Documentation/html/menudata.js.meta new file mode 100644 index 0000000..546f19c --- /dev/null +++ b/Documentation/html/menudata.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e1094ebc41608cfd9e63a04a94b6614 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/minus.svg b/Documentation/html/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/Documentation/html/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Documentation/html/minus.svg.meta b/Documentation/html/minus.svg.meta new file mode 100644 index 0000000..cf6b7d8 --- /dev/null +++ b/Documentation/html/minus.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 75bf6d7b0e663a84fac3d2314389b976 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/minusd.svg b/Documentation/html/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/Documentation/html/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Documentation/html/minusd.svg.meta b/Documentation/html/minusd.svg.meta new file mode 100644 index 0000000..96e3406 --- /dev/null +++ b/Documentation/html/minusd.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 3dbd79767a52054368fa2ee4614c305f +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/namespace_nano_brain.html b/Documentation/html/namespace_nano_brain.html new file mode 100644 index 0000000..306984e --- /dev/null +++ b/Documentation/html/namespace_nano_brain.html @@ -0,0 +1,115 @@ + + + + + + + +Nano Brain for Unity: NanoBrain Namespace Reference + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Nano Brain for Unity v0.1 +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    + +
    NanoBrain Namespace Reference
    +
    +
    + +

    The Nanobrain namespace. +More...

    + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  Brain
     The NanoBrain Unity Componnent. More...
     
    class  Cluster
     A Cluster combines a collection of Nuclei to implement reusable behaviour. More...
     
    class  ClusterPrefab
     The Unity ScriptableObject to implement re-usable Cluster Prefabs. More...
     
    class  MemoryCell
     A MemoryCell stored its value for one update. More...
     
    class  Neuron
     A neuron is a basic Nucleus. More...
     
    class  Nucleus
     A Nucleus is a basic element in a brain cluster. More...
     
    class  Synapse
     A Synapse connects the ouput of a Neuron to another Neuron. More...
     
    +

    Detailed Description

    +

    The Nanobrain namespace.

    +
    + + + + diff --git a/Documentation/html/namespace_nano_brain.html.meta b/Documentation/html/namespace_nano_brain.html.meta new file mode 100644 index 0000000..9bad344 --- /dev/null +++ b/Documentation/html/namespace_nano_brain.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f68497d4c4a5c3b879fe70ded6330a14 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/nav_f.png b/Documentation/html/nav_f.png new file mode 100644 index 0000000..4154a8d Binary files /dev/null and b/Documentation/html/nav_f.png differ diff --git a/Documentation/html/nav_f.png.meta b/Documentation/html/nav_f.png.meta new file mode 100644 index 0000000..3c3f483 --- /dev/null +++ b/Documentation/html/nav_f.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 6013d16c3bdfa9fa080c73d709fac4d3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/nav_fd.png b/Documentation/html/nav_fd.png new file mode 100644 index 0000000..93a398f Binary files /dev/null and b/Documentation/html/nav_fd.png differ diff --git a/Documentation/html/nav_fd.png.meta b/Documentation/html/nav_fd.png.meta new file mode 100644 index 0000000..7fa3ffa --- /dev/null +++ b/Documentation/html/nav_fd.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: e3c36f216bc29fa69a6dd09a7bcd561f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/nav_g.png b/Documentation/html/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/Documentation/html/nav_g.png differ diff --git a/Documentation/html/nav_g.png.meta b/Documentation/html/nav_g.png.meta new file mode 100644 index 0000000..96fa1d8 --- /dev/null +++ b/Documentation/html/nav_g.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 96911d259131ee1f39f2596329dcac9e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/nav_h.png b/Documentation/html/nav_h.png new file mode 100644 index 0000000..f4b427f Binary files /dev/null and b/Documentation/html/nav_h.png differ diff --git a/Documentation/html/nav_h.png.meta b/Documentation/html/nav_h.png.meta new file mode 100644 index 0000000..f7e08a4 --- /dev/null +++ b/Documentation/html/nav_h.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 39b9a0330303df2bb887b8d253682929 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/nav_hd.png b/Documentation/html/nav_hd.png new file mode 100644 index 0000000..946eff2 Binary files /dev/null and b/Documentation/html/nav_hd.png differ diff --git a/Documentation/html/nav_hd.png.meta b/Documentation/html/nav_hd.png.meta new file mode 100644 index 0000000..6dbc82c --- /dev/null +++ b/Documentation/html/nav_hd.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 7f14325f3d3940ea8bfeb38d4697e9ed +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/open.png b/Documentation/html/open.png new file mode 100644 index 0000000..8ab49ad Binary files /dev/null and b/Documentation/html/open.png differ diff --git a/Documentation/html/open.png.meta b/Documentation/html/open.png.meta new file mode 100644 index 0000000..be4a11e --- /dev/null +++ b/Documentation/html/open.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 9b7bd513a402d4bb4b85a0cb8c342719 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/pages.html b/Documentation/html/pages.html new file mode 100644 index 0000000..affa86d --- /dev/null +++ b/Documentation/html/pages.html @@ -0,0 +1,89 @@ + + + + + + + +Nano Brain for Unity: Related Pages + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Nano Brain for Unity v0.1 +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    + + + + diff --git a/Documentation/html/pages.html.meta b/Documentation/html/pages.html.meta new file mode 100644 index 0000000..21c9815 --- /dev/null +++ b/Documentation/html/pages.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 47c19c987956ac714b828cc714830776 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/plus.svg b/Documentation/html/plus.svg new file mode 100644 index 0000000..0752016 --- /dev/null +++ b/Documentation/html/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Documentation/html/plus.svg.meta b/Documentation/html/plus.svg.meta new file mode 100644 index 0000000..22ee471 --- /dev/null +++ b/Documentation/html/plus.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: d844f994d6b39894ba2ec7e9fa881913 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/plusd.svg b/Documentation/html/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/Documentation/html/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Documentation/html/plusd.svg.meta b/Documentation/html/plusd.svg.meta new file mode 100644 index 0000000..2b5b68f --- /dev/null +++ b/Documentation/html/plusd.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: c39199281580bc2899dcddbfdf6f4b64 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/LinearAlgebra/src.meta b/Documentation/html/rtf.meta similarity index 73% rename from LinearAlgebra/src.meta rename to Documentation/html/rtf.meta index 18eab15..c382b76 100644 --- a/LinearAlgebra/src.meta +++ b/Documentation/html/rtf.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6a602cec2c4009925b1d19ed36a98c6a +guid: ee75eac0aaf5df6d9a3fb53c126f9b22 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Documentation/html/rtf/PasserLifeLogoRight1_300.png b/Documentation/html/rtf/PasserLifeLogoRight1_300.png new file mode 100644 index 0000000..7480553 Binary files /dev/null and b/Documentation/html/rtf/PasserLifeLogoRight1_300.png differ diff --git a/Documentation/html/rtf/PasserLifeLogoRight1_300.png.meta b/Documentation/html/rtf/PasserLifeLogoRight1_300.png.meta new file mode 100644 index 0000000..c781544 --- /dev/null +++ b/Documentation/html/rtf/PasserLifeLogoRight1_300.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 281d3313137887d66b781aa9219f6768 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/rtf/class_nano_brain_1_1_cluster.png b/Documentation/html/rtf/class_nano_brain_1_1_cluster.png new file mode 100644 index 0000000..b808c35 Binary files /dev/null and b/Documentation/html/rtf/class_nano_brain_1_1_cluster.png differ diff --git a/Documentation/html/rtf/class_nano_brain_1_1_cluster.png.meta b/Documentation/html/rtf/class_nano_brain_1_1_cluster.png.meta new file mode 100644 index 0000000..1f80df8 --- /dev/null +++ b/Documentation/html/rtf/class_nano_brain_1_1_cluster.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: fb4c6dc5080cae06f81b03c76d845d19 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/rtf/class_nano_brain_1_1_memory_cell.png b/Documentation/html/rtf/class_nano_brain_1_1_memory_cell.png new file mode 100644 index 0000000..9fc1c66 Binary files /dev/null and b/Documentation/html/rtf/class_nano_brain_1_1_memory_cell.png differ diff --git a/Documentation/html/rtf/class_nano_brain_1_1_memory_cell.png.meta b/Documentation/html/rtf/class_nano_brain_1_1_memory_cell.png.meta new file mode 100644 index 0000000..3b014f4 --- /dev/null +++ b/Documentation/html/rtf/class_nano_brain_1_1_memory_cell.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 20ff3fd220acc95968831d2cb4e7a6d2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/rtf/class_nano_brain_1_1_neuron.png b/Documentation/html/rtf/class_nano_brain_1_1_neuron.png new file mode 100644 index 0000000..49d8eae Binary files /dev/null and b/Documentation/html/rtf/class_nano_brain_1_1_neuron.png differ diff --git a/Documentation/html/rtf/class_nano_brain_1_1_neuron.png.meta b/Documentation/html/rtf/class_nano_brain_1_1_neuron.png.meta new file mode 100644 index 0000000..623b8ce --- /dev/null +++ b/Documentation/html/rtf/class_nano_brain_1_1_neuron.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: f659ccb7654b41d42b8c154b615b9ff8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/rtf/class_nano_brain_1_1_nucleus.png b/Documentation/html/rtf/class_nano_brain_1_1_nucleus.png new file mode 100644 index 0000000..1433a13 Binary files /dev/null and b/Documentation/html/rtf/class_nano_brain_1_1_nucleus.png differ diff --git a/Documentation/html/rtf/class_nano_brain_1_1_nucleus.png.meta b/Documentation/html/rtf/class_nano_brain_1_1_nucleus.png.meta new file mode 100644 index 0000000..49f5b96 --- /dev/null +++ b/Documentation/html/rtf/class_nano_brain_1_1_nucleus.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: b6e2180992e8fd8789dc1f2459192e00 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/rtf/refman.rtf b/Documentation/html/rtf/refman.rtf new file mode 100644 index 0000000..874a030 --- /dev/null +++ b/Documentation/html/rtf/refman.rtf @@ -0,0 +1,3631 @@ +{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033 +{\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;} +} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green128\blue0;\red96\green64\blue32;\rede0\green128\blue0;\red128\green0\blue0;\red128\green96\blue32;\red0\green32\blue128;\red0\green128\blue128;\red255\green0\blue255;\red0\green0\blue0;\red112\green0\blue112;\red255\green0\blue0;} +{\stylesheet +{\widctlpar\adjustright \fs20\cgrid \snext0 Normal;} +{\paperw11900\paperh16840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect} +{\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;} +{\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;} +{\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;} +{\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;} +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;} +{\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;} +{\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;} +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;} +{\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;} +{\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;} +{\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;} +{\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;} +{\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;} +{\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;} +{\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;} +{\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;} +{\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;} +{\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;} +{\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;} +{\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;} +{\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;} +{\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext50 Code Example 9;} +{\s50\li3600\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext51 Code Example 10;} +{\s51\li3960\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext52 Code Example 11;} +{\s52\li4320\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 12;} +{\s53\li4680\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext53 Code Example 13;} +{\s60\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext61 List Continue 0;} +{\s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext62 List Continue 1;} +{\s62\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext63 List Continue 2;} +{\s63\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext64 List Continue 3;} +{\s64\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext65 List Continue 4;} +{\s65\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext66 List Continue 5;} +{\s66\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext67 List Continue 6;} +{\s67\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext68 List Continue 7;} +{\s68\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext69 List Continue 8;} +{\s69\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext70 List Continue 9;} +{\s70\li3600\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext71 List Continue 10;} +{\s71\li3960\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext72 List Continue 11;} +{\s72\li4320\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 12;} +{\s73\li4680\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext73 List Continue 13;} +{\s80\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext81 DescContinue 0;} +{\s81\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext82 DescContinue 1;} +{\s82\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext83 DescContinue 2;} +{\s83\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext84 DescContinue 3;} +{\s84\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext85 DescContinue 4;} +{\s85\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext86 DescContinue 5;} +{\s86\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext87 DescContinue 6;} +{\s87\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext88 DescContinue 7;} +{\s88\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext89 DescContinue 8;} +{\s89\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext90 DescContinue 9;} +{\s90\li3600\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext91 DescContinue 10;} +{\s91\li3960\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext92 DescContinue 11;} +{\s92\li4320\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 12;} +{\s93\li4680\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext93 DescContinue 13;} +{\s100\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext101 LatexTOC 0;} +{\s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext102 LatexTOC 1;} +{\s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext103 LatexTOC 2;} +{\s103\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext104 LatexTOC 3;} +{\s104\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext105 LatexTOC 4;} +{\s105\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext106 LatexTOC 5;} +{\s106\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext107 LatexTOC 6;} +{\s107\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext108 LatexTOC 7;} +{\s108\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext109 LatexTOC 8;} +{\s109\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext110 LatexTOC 9;} +{\s110\li3600\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext111 LatexTOC 10;} +{\s111\li3960\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext112 LatexTOC 11;} +{\s112\li4320\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 12;} +{\s113\li4680\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext113 LatexTOC 13;} +{\s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext121 \sautoupd List Bullet 0;} +{\s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext122 \sautoupd List Bullet 1;} +{\s122\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext123 \sautoupd List Bullet 2;} +{\s123\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext124 \sautoupd List Bullet 3;} +{\s124\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext125 \sautoupd List Bullet 4;} +{\s125\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext126 \sautoupd List Bullet 5;} +{\s126\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext127 \sautoupd List Bullet 6;} +{\s127\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext128 \sautoupd List Bullet 7;} +{\s128\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext129 \sautoupd List Bullet 8;} +{\s129\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext130 \sautoupd List Bullet 9;} +{\s130\fi-360\li3960\widctlpar\jclisttab\tx3960{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext131 \sautoupd List Bullet 10;} +{\s131\fi-360\li4320\widctlpar\jclisttab\tx4320{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext132 \sautoupd List Bullet 11;} +{\s132\fi-360\li4680\widctlpar\jclisttab\tx4680{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 12;} +{\s133\fi-360\li5040\widctlpar\jclisttab\tx5040{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext133 \sautoupd List Bullet 13;} +{\s140\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext141 \sautoupd List Enum 0;} +{\s141\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext142 \sautoupd List Enum 1;} +{\s142\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext143 \sautoupd List Enum 2;} +{\s143\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext144 \sautoupd List Enum 3;} +{\s144\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext145 \sautoupd List Enum 4;} +{\s145\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext146 \sautoupd List Enum 5;} +{\s146\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext147 \sautoupd List Enum 6;} +{\s147\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext148 \sautoupd List Enum 7;} +{\s148\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext149 \sautoupd List Enum 8;} +{\s149\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext150 \sautoupd List Enum 9;} +{\s150\fi-360\li3960\widctlpar\fs20\cgrid \sbasedon0 \snext151 \sautoupd List Enum 10;} +{\s151\fi-360\li4320\widctlpar\fs20\cgrid \sbasedon0 \snext152 \sautoupd List Enum 11;} +{\s152\fi-360\li4680\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 12;} +{\s153\fi-360\li5040\widctlpar\fs20\cgrid \sbasedon0 \snext153 \sautoupd List Enum 13;} +} +{\info +{\title {\comment Nano Brain for Unity {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +v0.1 \par +}}Nano Brain for Unity} +{\comment Generated by doxygen 1.9.8.} +}\pard\plain +\sectd\pgnlcrm +{\footer \s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid {\chpgn}} +\pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid +\vertalc\qc\par\par\par\par\par\par\par +\pard\plain \s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid +{\field\fldedit {\*\fldinst TITLE \\*MERGEFORMAT}{\fldrslt Nano Brain for Unity}}\par +\pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid +\par +\par\par\par\par\par\par\par\par\par\par\par\par +\pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid +{\field\fldedit {\*\fldinst AUTHOR \\*MERGEFORMAT}{\fldrslt AUTHOR}}\par +Version v0.1\par\page\page\vertalt +\pard\plain +\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Table of Contents\par +\pard\plain \par +{\field\fldedit {\*\fldinst TOC \\f \\*MERGEFORMAT}{\fldrslt Table of contents}}\par +\pard\plain +\sect \sbkpage \pgndec \pgnrestart +\sect \sectd \sbknone +{\footer \s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid {\chpgn}} + +\pard\plain \sect\sbkpage +\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid +\par \pard\plain +\pard\plain \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid +Nano Brain for Unity\par \pard\plain +{\tc\tcl1 \v Nano Brain for Unity} +{\xe \v Nano Brain for Unity} +{\bkmkstart AAAAAAAAEW} +{\bkmkend AAAAAAAAEW} +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +\par +{\bkmkstart AAAAAAAAEX} +{\bkmkend AAAAAAAAEX} +{{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Table of Contents +\par} +{\tc\tcl3 \v Table of Contents} +{ +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAA" }{}}{\fldrslt {\cs37\ul\cf2 Installation}}} \par} +\par +\par} +}} +\par \pard\plain +\par \pard\plain +\pard\plain \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid +Package Installation\par \pard\plain +{\tc\tcl1 \v Package Installation} +{\xe \v Package Installation} +{\bkmkstart AAAAAAAAAA} +{\bkmkend AAAAAAAAAA} +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +You can import the {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAB" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain}}} Ant package in Unity directly with the Package Manager git package importer.\par +See Unity: {\field {\*\fldinst { HYPERLINK "https://docs.unity3d.com/Manual/upm-ui-giturl.html" }{}}{\fldrslt {\cs37\ul\cf2 Installing from a Git URL}}}\par +Use the link from 'Clone with HTTP' (for example: {\field {\*\fldinst { HYPERLINK "https://git.passer.life/CreatureControl/Ant.git" }{}}{\fldrslt {\cs37\ul\cf2 https://git.passer.life/CreatureControl/Ant.git}}} +) In this way you can always retrieve the latest version by pressing the Update button in the Package Manager.\par +Optionally, you can use a tag to retrieve a specific version. For example: {\field {\*\fldinst { HYPERLINK "https://git.passer.life/CreatureControl/Ant.git#0.1.0" }{}}{\fldrslt {\cs37\ul\cf2 https://git.passer.life/CreatureControl/Ant.git#0.1.0}}} +. This will give you a stable version which does not change. Updating can be done by retrieving the package with a link to a new release.\par +{\bkmkstart AAAAAAAAAC} +{\bkmkend AAAAAAAAAC} +{{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +Samples Installation +\par} +{\tc\tcl2 \v Samples Installation} +In the Unity Package manager, select the {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAB" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain}}} Ant package and look for the {\f2 Samples} tab in the details pane on the right. There you can import the {\f2 Models} . \par} +}} +\par \pard\plain +\pard\plain \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid +NanoBrain\par \pard\plain +{\tc\tcl1 \v %NanoBrain} +{\xe \v %NanoBrain} +{\bkmkstart AAAAAAAAAD} +{\bkmkend AAAAAAAAAD} +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\bkmkstart AAAAAAAAAE} +{\bkmkend AAAAAAAAAE} + Documentation is found in the {\field {\*\fldinst { HYPERLINK "Documentation/html/index.html" }{}}{\fldrslt {\cs37\ul\cf2 Documentation folder}}} \par +}} + +\pard\plain \sect\sbkpage +\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid +Hierarchical Index\par \pard\plain +{\tc \v Hierarchical Index} +\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +Class Hierarchy\par \pard\plain +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid This inheritance list is sorted roughly, but not completely, alphabetically:} +{ +\par +\pard\plain \s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid +NanoBrain.Brain\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAF \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +NanoBrain.ClusterPrefab\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAH \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +NanoBrain.Nucleus\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAK \\*MERGEFORMAT}{\fldrslt pagenum}} +{ +\par +\pard\plain \s102\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid +NanoBrain.Cluster\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAG \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +NanoBrain.Neuron\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAJ \\*MERGEFORMAT}{\fldrslt pagenum}} +{ +\par +\pard\plain \s103\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid +NanoBrain.MemoryCell\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAI \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +}\par +}\par +NanoBrain.Synapse\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAL \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +} +\pard\plain \sect\sbkpage +\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid +Class Index\par \pard\plain +{\tc \v Class Index} +\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +Class List\par \pard\plain +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here are the classes, structs, unions and interfaces with brief descriptions:} +{ +\par +\pard\plain \s101\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid +{\b {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAF" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Brain}}} + ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAB" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain}}} Unity Componnent })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAF \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +{\b {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Cluster}}} + ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A Cluster combines a collection of Nuclei to implement reusable behaviour })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAG \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +{\b {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.ClusterPrefab}}} + ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The Unity ScriptableObject to implement re-usable Cluster Prefabs })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAH \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +{\b {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAI" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.MemoryCell}}} + ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A MemoryCell stored its value for one update })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAI \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +{\b {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Neuron}}} + ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A neuron is a basic Nucleus })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAJ \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +{\b {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Nucleus}}} + ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A Nucleus is a basic element in a brain cluster })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAK \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +{\b {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Synapse}}} + ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A Synapse connects the ouput of a Neuron to another Neuron })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAL \\*MERGEFORMAT}{\fldrslt pagenum}} +\par +\par} +\pard\plain \sect\sbkpage +\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid +Namespace Documentation\par \pard\plain +\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +NanoBrain Namespace Reference\par \pard\plain +{\tc\tcl2 \v NanoBrain} +{\xe \v NanoBrain} +{\bkmkstart AAAAAAAAAB} +{\bkmkend AAAAAAAAAB} +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The Nanobrain namespace. }}\par +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Classes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +class {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAF" }{}}{\fldrslt {\cs37\ul\cf2 Brain}}} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAB" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain}}} Unity Componnent. }}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +class {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A Cluster combines a collection of Nuclei to implement reusable behaviour. }}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +class {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The Unity ScriptableObject to implement re-usable Cluster Prefabs. }}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +class {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAI" }{}}{\fldrslt {\cs37\ul\cf2 MemoryCell}}} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A MemoryCell stored its value for one update. }}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +class {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A neuron is a basic Nucleus. }}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +class {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A Nucleus is a basic element in a brain cluster. }}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +class {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A Synapse connects the ouput of a Neuron to another Neuron. }}\par} +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Detailed Description\par +\pard\plain +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The Nanobrain namespace. \par +}} + +\pard\plain \sect\sbkpage +\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid +Class Documentation{\tc \v Class Documentation} +\par \pard\plain +\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +NanoBrain.Brain Class Reference\par \pard\plain +{\tc\tcl2 \v NanoBrain.Brain} +{\xe \v NanoBrain.Brain} +{\bkmkstart AAAAAAAAAF} +{\bkmkend AAAAAAAAAF} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Description\par +\pard\plain +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAB" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain}}} Unity Componnent. \par +} + +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +This implements the top-level {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAB" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain}}} Cluster \par + \par +}} +\par +{ +Inherits MonoBehaviour.}\par +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Static Public Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +static void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAM" }{}}{\fldrslt {\cs37\ul\cf2 UpdateWeight}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAN" }{}}{\fldrslt {\cs37\ul\cf2 brain}}} +, string name, float weight)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the weight for all Synapses coming from the Neuron with the given name. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Attributes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + {\b brainPrefab}{\bkmkstart AAAAAAAAAO} +{\bkmkend AAAAAAAAAO} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The Cluster prefab from which the cluster is created. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Properties\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\b brain}{\f2 [get]}{\bkmkstart AAAAAAAAAN} +{\bkmkend AAAAAAAAAN} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster isntance. }{ +}\par +}\par} +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Function Documentation\par +\pard\plain +{\xe \v UpdateWeight\:NanoBrain.Brain} +{\xe \v NanoBrain.Brain\:UpdateWeight} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +static void NanoBrain.Brain.UpdateWeight ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\i brain}, string {\i name}, float {\i weight}){\f2 [static]}}} +\par +{\bkmkstart AAAAAAAAAM} +{\bkmkend AAAAAAAAAM} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the weight for all Synapses coming from the Neuron with the given name. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i brain} \cell }{The cluster in which the synapses are updated\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i name} \cell }{The name of the Neuron for which the weights are updated\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i weight} \cell }{The new Synapse weight\cell } +{\row } +} +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +The documentation for this class was generated from the following file:{\par +\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Brain.cs\par +}\par \pard\plain + +\pard\plain \sect\sbkpage +\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +NanoBrain.Cluster Class Reference\par \pard\plain +{\tc\tcl2 \v NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster} +{\bkmkstart AAAAAAAAAG} +{\bkmkend AAAAAAAAAG} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Description\par +\pard\plain +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A Cluster combines a collection of Nuclei to implement reusable behaviour. \par +} + +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A Cluster is an instantiation of a ClusterPrefab. Clusters can be nested inside other clusters. \par +}} +Inheritance diagram for NanoBrain.Cluster:{ +\pard\plain +\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "class_nano_brain_1_1_cluster.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Types\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAP" }{}}{\fldrslt {\cs37\ul\cf2 Type}}} + \{ {\b None} +, {\b Neuron} +, {\b MemoryCell} +, {\b Cluster} + \}\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to clone a nucleus to a Cluster prefab. }}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAQ" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAR" }{}}{\fldrslt {\cs37\ul\cf2 prefab}}} +, {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAS" }{}}{\fldrslt {\cs37\ul\cf2 parent}}} +)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Instantiate a new copy of a ClusterPrefab in the given parent. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAT" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAR" }{}}{\fldrslt {\cs37\ul\cf2 prefab}}} +, {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAS" }{}}{\fldrslt {\cs37\ul\cf2 parent}}} +=null)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Add a new cluster to a ClusterPrefab. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +override {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAU" }{}}{\fldrslt {\cs37\ul\cf2 ShallowCloneTo}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAS" }{}}{\fldrslt {\cs37\ul\cf2 parent}}} +)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Toggle for printing debugging trace data. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAV" }{}}{\fldrslt {\cs37\ul\cf2 AddInstance}}} + ()\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Increase the number of instances in an multi-cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAW" }{}}{\fldrslt {\cs37\ul\cf2 AddInstance}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAR" }{}}{\fldrslt {\cs37\ul\cf2 prefab}}} +)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Create an new instance in a multi-cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +void {\b RemoveInstance} (){\bkmkstart AAAAAAAAAX} +{\bkmkend AAAAAAAAAX} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Decrease the number of instance in a multi-cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +void {\b RefreshComputeOrders} (){\bkmkstart AAAAAAAAAY} +{\bkmkend AAAAAAAAAY} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Refresh the order in which neurons should be computed. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +void {\b RefreshOutputs} (){\bkmkstart AAAAAAAAAZ} +{\bkmkend AAAAAAAAAZ} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Reset the list of outputs such that they will be re-determined. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +bool {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABA" }{}}{\fldrslt {\cs37\ul\cf2 TryGetNucleus}}} + (string nucleusName, out {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + foundNucleus)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Try to find a nucleus in this cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABB" }{}}{\fldrslt {\cs37\ul\cf2 GetNucleus}}} + (string nucleusName)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Get a nucleus in this cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABC" }{}}{\fldrslt {\cs37\ul\cf2 GetNeuron}}} + (string neuronName)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Get a neuron in this cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABD" }{}}{\fldrslt {\cs37\ul\cf2 GetNeuron}}} + (int thingId, string neuronName, string thingName=null)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Get a neuron in an instance of a multi-cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +bool {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABE" }{}}{\fldrslt {\cs37\ul\cf2 DeleteNucleus}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + nucleus)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Delete a nucleus from this clsuter. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +virtual List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + > {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABF" }{}}{\fldrslt {\cs37\ul\cf2 CollectReceivers}}} + (bool removeDuplicates=false)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Collect all receiving nuclei of signals from this cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + > {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABG" }{}}{\fldrslt {\cs37\ul\cf2 CollectSynapsesTo}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + otherCluster)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Collect all connections to receivers of signals from this cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABH" }{}}{\fldrslt {\cs37\ul\cf2 UpdateFromNucleus}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + startNucleus)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state of the nucleus and all nuclei receiving from it. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +override void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABI" }{}}{\fldrslt {\cs37\ul\cf2 UpdateStateIsolated}}} + ()\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state without updating other Nuclei. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABJ" }{}}{\fldrslt {\cs37\ul\cf2 Refresh}}} + ()\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Recalculate derived properties. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +virtual void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABK" }{}}{\fldrslt {\cs37\ul\cf2 UpdateNuclei}}} + ()\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state and recursively all Nuclei receiving data from this Nucleus. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Static Public Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +static int {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABL" }{}}{\fldrslt {\cs37\ul\cf2 GetNucleusIndex}}} + (List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + > {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABM" }{}}{\fldrslt {\cs37\ul\cf2 nuclei}}} +, {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + nucleus)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Get the index of a nucleus in a list of nuclei. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +static int {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABN" }{}}{\fldrslt {\cs37\ul\cf2 GetNucleusIndex}}} + (List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + > {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABM" }{}}{\fldrslt {\cs37\ul\cf2 nuclei}}} +, string nucleusName)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Get the index of a nucleus with the given name in a list of nuclei. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Attributes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAR" }{}}{\fldrslt {\cs37\ul\cf2 prefab}}} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The prefab used to create this cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} +[] {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABO" }{}}{\fldrslt {\cs37\ul\cf2 instances}}} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +All cluster instance of a multi-cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +int {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABP" }{}}{\fldrslt {\cs37\ul\cf2 instanceCount}}} + = 1\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The number of cluster instances in a multi-cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +Dictionary< int, {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + > {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABQ" }{}}{\fldrslt {\cs37\ul\cf2 thingClusters}}} + = new()\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The mapping from things to cluster instances. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + > {\b nuclei} = new(){\bkmkstart AAAAAAAABM} +{\bkmkend AAAAAAAABM} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +All nuclei in this cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +string {\b name}{\bkmkstart AAAAAAAABR} +{\bkmkend AAAAAAAABR} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The name of the Nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAS" }{}}{\fldrslt {\cs37\ul\cf2 parent}}} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster prefab in which the nucleus is located. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Protected Attributes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + > {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABS" }{}}{\fldrslt {\cs37\ul\cf2 _outputs}}} + = null\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The neurons without outgoing connections. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Properties\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +string {\b baseName}{\f2 [get]}{\bkmkstart AAAAAAAABT} +{\bkmkend AAAAAAAABT} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The base name of the cluster. I don't think this is actively used at this moment. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Dictionary< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} +, List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + > > {\b computeOrders}{\f2 [get]}{\bkmkstart AAAAAAAABU} +{\bkmkend AAAAAAAABU} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +This gives the order in which nuclei should be computed when a nucleus is updated. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + {\b defaultOutput}{\f2 [get]}{\bkmkstart AAAAAAAABV} +{\bkmkend AAAAAAAABV} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The first nucleus in a cluster is the default output. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + > {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABW" }{}}{\fldrslt {\cs37\ul\cf2 outputs}}} +{\f2 [get]}\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The neurons without outgoing connections. }{ +}\par +}\par} +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Enumeration Documentation\par +\pard\plain +{\xe \v Type\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:Type} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAP" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Nucleus.Type}}} +{\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAAAP} +{\bkmkend AAAAAAAAAP} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to clone a nucleus to a Cluster prefab. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i prefab} \cell }{\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +\par +}}The types of Nucleus \par +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Constructor & Destructor Documentation\par +\pard\plain +{\xe \v Cluster\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:Cluster} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +NanoBrain.Cluster.Cluster ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + {\i prefab}, {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\i parent})}} +\par +{\bkmkstart AAAAAAAAAQ} +{\bkmkend AAAAAAAAAQ} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Instantiate a new copy of a ClusterPrefab in the given parent. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i prefab} \cell }{The prefab to use\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i parent} \cell }{The cluster in which this new cluster will be placed\cell } +{\row } +} +}} +{\xe \v Cluster\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:Cluster} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +NanoBrain.Cluster.Cluster ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + {\i prefab}, {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + {\i parent} = {\f2 null})}} +\par +{\bkmkstart AAAAAAAAAT} +{\bkmkend AAAAAAAAAT} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Add a new cluster to a ClusterPrefab. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i prefab} \cell }{The prefab to copy\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i parent} \cell }{The prefab in which the new copy is placed\cell } +{\row } +} +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Function Documentation\par +\pard\plain +{\xe \v ShallowCloneTo\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:ShallowCloneTo} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +override {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + NanoBrain.Cluster.ShallowCloneTo ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\i parent})}} +\par +{\bkmkstart AAAAAAAAAU} +{\bkmkend AAAAAAAAAU} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Toggle for printing debugging trace data. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to make a partial clone of this nucleus\par +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i parent} \cell }{The cluster in which the cloned nucleus should be placed\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +\par +}}}} +{\xe \v GetNucleusIndex\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:GetNucleusIndex} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +static int NanoBrain.Cluster.GetNucleusIndex (List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + > {\i nuclei}, {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\i nucleus}){\f2 [static]}}} +\par +{\bkmkstart AAAAAAAABL} +{\bkmkend AAAAAAAABL} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Get the index of a nucleus in a list of nuclei. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i nuclei} \cell }{The list of nuclei to search\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i nucleus} \cell }{The nucleus to find\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The index of the nucleus in the list or -1 when it has not been found\par +}}}} +{\xe \v GetNucleusIndex\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:GetNucleusIndex} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +static int NanoBrain.Cluster.GetNucleusIndex (List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + > {\i nuclei}, string {\i nucleusName}){\f2 [static]}}} +\par +{\bkmkstart AAAAAAAABN} +{\bkmkend AAAAAAAABN} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Get the index of a nucleus with the given name in a list of nuclei. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i nuclei} \cell }{The list of nuclei to search\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i nucleusName} \cell }{The name of the nucleus to find\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The index of the nucleus in the list or -1 when it has not been found\par +}}}} +{\xe \v AddInstance\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:AddInstance} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +void NanoBrain.Cluster.AddInstance ()}} +\par +{\bkmkstart AAAAAAAAAV} +{\bkmkend AAAAAAAAAV} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Increase the number of instances in an multi-cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +/remark Note this does not create the instances. This is only intended to be used for prefabs. \par +}} +{\xe \v AddInstance\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:AddInstance} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +void NanoBrain.Cluster.AddInstance ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + {\i prefab})}} +\par +{\bkmkstart AAAAAAAAAW} +{\bkmkend AAAAAAAAAW} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Create an new instance in a multi-cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i prefab} \cell }{The prefab to use to create the new instance\cell } +{\row } +} +/remark This does not change the instanceCount. It should only be used at runtime. \par +}} +{\xe \v TryGetNucleus\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:TryGetNucleus} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +bool NanoBrain.Cluster.TryGetNucleus (string {\i nucleusName}, out {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\i foundNucleus})}} +\par +{\bkmkstart AAAAAAAABA} +{\bkmkend AAAAAAAABA} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Try to find a nucleus in this cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i nucleusName} \cell }{The name of the nucleus to find\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i foundNucleus} \cell }{The found nucleus or null if it is not found\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +True when the nucleus is found, false otherwise\par +}}}} +{\xe \v GetNucleus\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:GetNucleus} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + NanoBrain.Cluster.GetNucleus (string {\i nucleusName})}} +\par +{\bkmkstart AAAAAAAABB} +{\bkmkend AAAAAAAABB} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Get a nucleus in this cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i nucleusName} \cell }{The name of the nucleus to find\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The found nucleus or null when it is not found\par +}}}} +{\xe \v GetNeuron\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:GetNeuron} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + NanoBrain.Cluster.GetNeuron (string {\i neuronName})}} +\par +{\bkmkstart AAAAAAAABC} +{\bkmkend AAAAAAAABC} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Get a neuron in this cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i neuronName} \cell }{The name of the neuron to find\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The found neuron or null when it is not found\par +}}}} +{\xe \v GetNeuron\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:GetNeuron} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + NanoBrain.Cluster.GetNeuron (int {\i thingId}, string {\i neuronName}, string {\i thingName} = {\f2 null})}} +\par +{\bkmkstart AAAAAAAABD} +{\bkmkend AAAAAAAABD} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Get a neuron in an instance of a multi-cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i thingId} \cell }{The id of the thing mapped to the cluster instance\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i neuronName} \cell }{The name of the neuron to find\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i thingName} \cell }{The name of the thing mapped to the cluster instance\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The found neuron or null when it is not found\par +}}The cluster instance mapped to the thing will be neuron.parent if a neuron is found. \par +}} +{\xe \v DeleteNucleus\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:DeleteNucleus} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +bool NanoBrain.Cluster.DeleteNucleus ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\i nucleus})}} +\par +{\bkmkstart AAAAAAAABE} +{\bkmkend AAAAAAAABE} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Delete a nucleus from this clsuter. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i nucleus} \cell }{The nucleus to delete\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +True if a nucleus was deleted, false if the nucleus could not be found\par +}}}} +{\xe \v CollectReceivers\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:CollectReceivers} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +virtual List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + > NanoBrain.Cluster.CollectReceivers (bool {\i removeDuplicates} = {\f2 false}){\f2 [virtual]}}} +\par +{\bkmkstart AAAAAAAABF} +{\bkmkend AAAAAAAABF} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Collect all receiving nuclei of signals from this cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i removeDuplicates} \cell }{Ensure that a receiver is only listed once in the result\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The list of receivers\par +}}}} +{\xe \v CollectSynapsesTo\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:CollectSynapsesTo} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + > NanoBrain.Cluster.CollectSynapsesTo ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\i otherCluster})}} +\par +{\bkmkstart AAAAAAAABG} +{\bkmkend AAAAAAAABG} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Collect all connections to receivers of signals from this cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +\par +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +A list of pairs of the sending neuron in this cluster and the matching receiving nucleus\par +}}Collect all synapses of senders in another cluster of signals to this cluster\par +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i otherCluster} \cell }{The other cluster with sending neurons\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +A list of synapses to the neurons in the other clusters\par +}}}} +{\xe \v UpdateFromNucleus\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:UpdateFromNucleus} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +void NanoBrain.Cluster.UpdateFromNucleus ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\i startNucleus})}} +\par +{\bkmkstart AAAAAAAABH} +{\bkmkend AAAAAAAABH} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state of the nucleus and all nuclei receiving from it. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i startNucleus} \cell }{The nucleus to start updating\cell } +{\row } +} +}} +{\xe \v UpdateStateIsolated\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:UpdateStateIsolated} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +override void NanoBrain.Cluster.UpdateStateIsolated ()}} +\par +{\bkmkstart AAAAAAAABI} +{\bkmkend AAAAAAAABI} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state without updating other Nuclei. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +\par +}} +{\xe \v Refresh\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:Refresh} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +void NanoBrain.Cluster.Refresh ()}} +\par +{\bkmkstart AAAAAAAABJ} +{\bkmkend AAAAAAAABJ} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Recalculate derived properties. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +This can be used to recalculate derived properties after the set of nuclei has been changed \par +}} +{\xe \v UpdateNuclei\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:UpdateNuclei} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +virtual void NanoBrain.Nucleus.UpdateNuclei (){\f2 [virtual]}, {\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAABK} +{\bkmkend AAAAAAAABK} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state and recursively all Nuclei receiving data from this Nucleus. }}\par +{ +Reimplemented in {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABX" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.MemoryCell}}} +.}\par +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Data Documentation\par +\pard\plain +{\xe \v prefab\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:prefab} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAH" }{}}{\fldrslt {\cs37\ul\cf2 ClusterPrefab}}} + NanoBrain.Cluster.prefab}} +\par +{\bkmkstart AAAAAAAAAR} +{\bkmkend AAAAAAAAAR} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The prefab used to create this cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Cluster should always be created from prefabs \par +}} +{\xe \v instances\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:instances} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + [] NanoBrain.Cluster.instances}} +\par +{\bkmkstart AAAAAAAABO} +{\bkmkend AAAAAAAABO} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +All cluster instance of a multi-cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A cluster is a multi-cluster when there is more than one instance. The actual instances are only created at runtime. The value instanceCount determines how many instances will be present at runtime. \par +}} +{\xe \v instanceCount\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:instanceCount} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +int NanoBrain.Cluster.instanceCount = 1}} +\par +{\bkmkstart AAAAAAAABP} +{\bkmkend AAAAAAAABP} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The number of cluster instances in a multi-cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A cluster is a multi-clsuter when there is more than one instance. \par +}} +{\xe \v thingClusters\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:thingClusters} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +Dictionary NanoBrain.Cluster.thingClusters = new()}} +\par +{\bkmkstart AAAAAAAABQ} +{\bkmkend AAAAAAAABQ} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The mapping from things to cluster instances. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +In a multi-cluster each instance can be used for a thing. Cluster instance may also not (yet) be mapped to a thing. \par +}} +{\xe \v _outputs\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:_outputs} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +List<{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} +> NanoBrain.Cluster._outputs = null{\f2 [protected]}}} +\par +{\bkmkstart AAAAAAAABS} +{\bkmkend AAAAAAAABS} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The neurons without outgoing connections. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +These neurons can potentially be connected to neurons in other clusters \par +}} +{\xe \v parent\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:parent} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + NanoBrain.Nucleus.parent{\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAAAS} +{\bkmkend AAAAAAAAAS} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster prefab in which the nucleus is located. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster instance in which the nucleus is located \par +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Property Documentation\par +\pard\plain +{\xe \v outputs\:NanoBrain.Cluster} +{\xe \v NanoBrain.Cluster\:outputs} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +List<{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} +> NanoBrain.Cluster.outputs{\f2 [get]}}} +\par +{\bkmkstart AAAAAAAABW} +{\bkmkend AAAAAAAABW} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The neurons without outgoing connections. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +These neurons can potentially be connected to neurons in other clusters \par +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +The documentation for this class was generated from the following file:{\par +\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Cluster.cs\par +}\par \pard\plain + +\pard\plain \sect\sbkpage +\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +NanoBrain.ClusterPrefab Class Reference\par \pard\plain +{\tc\tcl2 \v NanoBrain.ClusterPrefab} +{\xe \v NanoBrain.ClusterPrefab} +{\bkmkstart AAAAAAAAAH} +{\bkmkend AAAAAAAAAH} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Description\par +\pard\plain +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The Unity ScriptableObject to implement re-usable Cluster Prefabs. \par +}} +\par +{ +Inherits ScriptableObject.}\par +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABY" }{}}{\fldrslt {\cs37\ul\cf2 GetNucleus}}} + (string nucleusName)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Retrieve a nucleus in this cluster. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +void {\b EnsureInitialization} (){\bkmkstart AAAAAAAABZ} +{\bkmkend AAAAAAAABZ} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +void {\b GarbageCollection} (){\bkmkstart AAAAAAAACA} +{\bkmkend AAAAAAAACA} +\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Attributes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\b cluster}{\bkmkstart AAAAAAAACB} +{\bkmkend AAAAAAAACB} +\par +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Function Documentation\par +\pard\plain +{\xe \v GetNucleus\:NanoBrain.ClusterPrefab} +{\xe \v NanoBrain.ClusterPrefab\:GetNucleus} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + NanoBrain.ClusterPrefab.GetNucleus (string {\i nucleusName})}} +\par +{\bkmkstart AAAAAAAABY} +{\bkmkend AAAAAAAABY} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Retrieve a nucleus in this cluster. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i nucleusName} \cell }{The name of the nucleus\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The Nucleus with the given name or null if no such Nucleus could be found\par +}}}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +The documentation for this class was generated from the following file:{\par +\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ScriptableObjects/ClusterPrefab.cs\par +}\par \pard\plain + +\pard\plain \sect\sbkpage +\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +NanoBrain.MemoryCell Class Reference\par \pard\plain +{\tc\tcl2 \v NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell} +{\bkmkstart AAAAAAAAAI} +{\bkmkend AAAAAAAAAI} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Description\par +\pard\plain +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A MemoryCell stored its value for one update. \par +} + +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +When the input for a Memory Cell changes, it will output the previous value \par + \par +}} +Inheritance diagram for NanoBrain.MemoryCell:{ +\pard\plain +\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "class_nano_brain_1_1_memory_cell.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Types\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACC" }{}}{\fldrslt {\cs37\ul\cf2 CombinatorType}}} + \{ {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACD" }{}}{\fldrslt {\cs37\ul\cf2 Sum}}} + +, {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACE" }{}}{\fldrslt {\cs37\ul\cf2 Product}}} + + \}\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The type of combinators. }}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACF" }{}}{\fldrslt {\cs37\ul\cf2 ActivationType}}} + \{ {\b Linear} +, {\b Power} +, {\b Sqrt} +, {\b Reciprocal} +, {\b Tanh} +, {\b Binary} +, {\b Normalized} +, {\b Custom} + \}{\bkmkstart AAAAAAAACF} +{\bkmkend AAAAAAAACF} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The type of. }}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAP" }{}}{\fldrslt {\cs37\ul\cf2 Type}}} + \{ {\b None} +, {\b Neuron} +, {\b MemoryCell} +, {\b Cluster} + \}\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to clone a nucleus to a Cluster prefab. }}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\b MemoryCell} ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAS" }{}}{\fldrslt {\cs37\ul\cf2 parent}}} +, string {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABR" }{}}{\fldrslt {\cs37\ul\cf2 name}}} +){\bkmkstart AAAAAAAACG} +{\bkmkend AAAAAAAACG} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +override {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\b ShallowCloneTo} ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + newParent){\bkmkstart AAAAAAAACH} +{\bkmkend AAAAAAAACH} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +override void {\b UpdateStateIsolated} (){\bkmkstart AAAAAAAACI} +{\bkmkend AAAAAAAACI} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +override void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABX" }{}}{\fldrslt {\cs37\ul\cf2 UpdateNuclei}}} + ()\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state and recursively all Nuclei receiving data from this Nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACJ" }{}}{\fldrslt {\cs37\ul\cf2 AddSynapse}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + sendingNucleus, float weight=1)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Add a new synapse to this nuclues. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACK" }{}}{\fldrslt {\cs37\ul\cf2 GetSynapse}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + sender)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Find a synapse. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACL" }{}}{\fldrslt {\cs37\ul\cf2 RemoveSynapse}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + sendingNucleus)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Remove a synapse from a Nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +virtual void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACM" }{}}{\fldrslt {\cs37\ul\cf2 SetBias}}} + (Vector3 inputValue)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +AnimationCurve {\b GenerateCurve} (){\bkmkstart AAAAAAAACN} +{\bkmkend AAAAAAAACN} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +void {\b SleepCheck} (){\bkmkstart AAAAAAAACO} +{\bkmkend AAAAAAAACO} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b CombinatorSum} (){\bkmkstart AAAAAAAACP} +{\bkmkend AAAAAAAACP} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b CombinatorSum} (){\bkmkstart AAAAAAAACQ} +{\bkmkend AAAAAAAACQ} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b CombinatorProduct} (){\bkmkstart AAAAAAAACR} +{\bkmkend AAAAAAAACR} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b CombinatorProduct} (){\bkmkstart AAAAAAAACS} +{\bkmkend AAAAAAAACS} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b CombinatorMax} (){\bkmkstart AAAAAAAACT} +{\bkmkend AAAAAAAACT} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual void {\b AddReceiver} ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + receiverToAdd, float weight=1){\bkmkstart AAAAAAAACU} +{\bkmkend AAAAAAAACU} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual void {\b RemoveReceiver} ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + receiverToRemove){\bkmkstart AAAAAAAACV} +{\bkmkend AAAAAAAACV} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +virtual void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACW" }{}}{\fldrslt {\cs37\ul\cf2 ProcessStimulus}}} + (Vector3 inputValue)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Process an external stimulus. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Static Public Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +static void {\b Delete} ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + nucleus){\bkmkstart AAAAAAAACX} +{\bkmkend AAAAAAAACX} +\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Attributes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +bool {\b staticMemory} = false{\bkmkstart AAAAAAAACY} +{\bkmkend AAAAAAAACY} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +Vector3 {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACZ" }{}}{\fldrslt {\cs37\ul\cf2 bias}}} + = Vector3.zero\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Create a new Neuron in a Cluster Prefab. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACC" }{}}{\fldrslt {\cs37\ul\cf2 CombinatorType}}} + {\b combinator} = {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACD" }{}}{\fldrslt {\cs37\ul\cf2 CombinatorType.Sum}}} +{\bkmkstart AAAAAAAADA} +{\bkmkend AAAAAAAADA} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The type of combinator used for this Neuron. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACF" }{}}{\fldrslt {\cs37\ul\cf2 ActivationType}}} + {\b _curvePreset}{\bkmkstart AAAAAAAADB} +{\bkmkend AAAAAAAADB} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +AnimationCurve {\b curve}{\bkmkstart AAAAAAAADC} +{\bkmkend AAAAAAAADC} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float {\b curveMax} = 1.0f{\bkmkstart AAAAAAAADD} +{\bkmkend AAAAAAAADD} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Action {\b WhenFiring}{\bkmkstart AAAAAAAADE} +{\bkmkend AAAAAAAADE} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +bool {\b persistOutput} = false{\bkmkstart AAAAAAAADF} +{\bkmkend AAAAAAAADF} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float {\b lastUpdate} = 0{\bkmkstart AAAAAAAADG} +{\bkmkend AAAAAAAADG} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Toggle for printing debugging trace data. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +readonly float {\b timeToSleep} = 1f{\bkmkstart AAAAAAAADH} +{\bkmkend AAAAAAAADH} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +string {\b name}{\bkmkstart AAAAAAAABR} +{\bkmkend AAAAAAAABR} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The name of the Nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAS" }{}}{\fldrslt {\cs37\ul\cf2 parent}}} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster prefab in which the nucleus is located. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Protected Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual void {\b CloneFields} ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + clone){\bkmkstart AAAAAAAADI} +{\bkmkend AAAAAAAADI} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +void {\b CheckSleepingSynapses} (){\bkmkstart AAAAAAAADJ} +{\bkmkend AAAAAAAADJ} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorLinear} (float3 input){\bkmkstart AAAAAAAADK} +{\bkmkend AAAAAAAADK} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b ActivatorLinear} (Vector3 input){\bkmkstart AAAAAAAADL} +{\bkmkend AAAAAAAADL} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorSqrt} (float3 input){\bkmkstart AAAAAAAADM} +{\bkmkend AAAAAAAADM} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b ActivatorSqrt} (Vector3 input){\bkmkstart AAAAAAAADN} +{\bkmkend AAAAAAAADN} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorPower} (float3 input){\bkmkstart AAAAAAAADO} +{\bkmkend AAAAAAAADO} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b ActivatorPower} (Vector3 input){\bkmkstart AAAAAAAADP} +{\bkmkend AAAAAAAADP} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorReciprocal} (float3 input){\bkmkstart AAAAAAAADQ} +{\bkmkend AAAAAAAADQ} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b ActivatorReciprocal} (Vector3 input){\bkmkstart AAAAAAAADR} +{\bkmkend AAAAAAAADR} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorTanh} (float3 input){\bkmkstart AAAAAAAADS} +{\bkmkend AAAAAAAADS} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorBinary} (float3 input){\bkmkstart AAAAAAAADT} +{\bkmkend AAAAAAAADT} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorNormalized} (float3 input){\bkmkstart AAAAAAAADU} +{\bkmkend AAAAAAAADU} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorCustom} (float3 input){\bkmkstart AAAAAAAADV} +{\bkmkend AAAAAAAADV} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b ActivatorCustom} (Vector3 input){\bkmkstart AAAAAAAADW} +{\bkmkend AAAAAAAADW} +\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Protected Attributes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b _outputValue}{\bkmkstart AAAAAAAADX} +{\bkmkend AAAAAAAADX} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b _outputValue}{\bkmkstart AAAAAAAADY} +{\bkmkend AAAAAAAADY} +\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Properties\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +override bool {\b isSleeping}{\f2 [get]}{\bkmkstart AAAAAAAADZ} +{\bkmkend AAAAAAAADZ} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + > {\b synapses}{\f2 [get]}{\bkmkstart AAAAAAAAEA} +{\bkmkend AAAAAAAAEA} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The synapses of the nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACF" }{}}{\fldrslt {\cs37\ul\cf2 ActivationType}}} + {\b curvePreset}{\f2 [get, set]}{\bkmkstart AAAAAAAAEB} +{\bkmkend AAAAAAAAEB} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual float3 {\b outputValue}{\f2 [get, set]}{\bkmkstart AAAAAAAAEC} +{\bkmkend AAAAAAAAEC} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual Vector3 {\b outputValue}{\f2 [get, set]}{\bkmkstart AAAAAAAAED} +{\bkmkend AAAAAAAAED} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float {\b outputMagnitude}{\f2 [get]}{\bkmkstart AAAAAAAAEE} +{\bkmkend AAAAAAAAEE} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float {\b outputSqrMagnitude}{\f2 [get]}{\bkmkstart AAAAAAAAEF} +{\bkmkend AAAAAAAAEF} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +bool {\b isFiring}{\f2 [get]}{\bkmkstart AAAAAAAAEG} +{\bkmkend AAAAAAAAEG} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Func< float3 > {\b Combinator}{\f2 [get]}{\bkmkstart AAAAAAAAEH} +{\bkmkend AAAAAAAAEH} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Func< Vector3 > {\b Combinator}{\f2 [get]}{\bkmkstart AAAAAAAAEI} +{\bkmkend AAAAAAAAEI} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Func< float3, float3 > {\b Activator}{\f2 [get]}{\bkmkstart AAAAAAAAEJ} +{\bkmkend AAAAAAAAEJ} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Func< Vector3, Vector3 > {\b Activator}{\f2 [get]}{\bkmkstart AAAAAAAAEK} +{\bkmkend AAAAAAAAEK} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + > {\b receivers}{\f2 [get, set]}{\bkmkstart AAAAAAAAEL} +{\bkmkend AAAAAAAAEL} +\par +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Enumeration Documentation\par +\pard\plain +{\xe \v CombinatorType\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:CombinatorType} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACC" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Neuron.CombinatorType}}} +{\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAACC} +{\bkmkend AAAAAAAACC} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The type of combinators. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A combinator combines the weighted values of the synapses to a single value \par +}{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Enumerator:\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{\xe \v Sum\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:Sum} +{\qr Sum{\bkmkstart AAAAAAAACD} +{\bkmkend AAAAAAAACD} +\cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Add the weighted values together. \par +}\cell }{\row } +{\xe \v Product\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:Product} +{\qr Product{\bkmkstart AAAAAAAACE} +{\bkmkend AAAAAAAACE} +\cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Multiply the weighted values. \par +}\cell }{\row } +} +} +{\xe \v Type\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:Type} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAP" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Nucleus.Type}}} +{\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAAAP} +{\bkmkend AAAAAAAAAP} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to clone a nucleus to a Cluster prefab. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i prefab} \cell }{\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +\par +}}The types of Nucleus \par +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Function Documentation\par +\pard\plain +{\xe \v UpdateNuclei\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:UpdateNuclei} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +override void NanoBrain.MemoryCell.UpdateNuclei (){\f2 [virtual]}}} +\par +{\bkmkstart AAAAAAAABX} +{\bkmkend AAAAAAAABX} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state and recursively all Nuclei receiving data from this Nucleus. }}\par +{ +Reimplemented from {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABK" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Nucleus}}} +.}\par +} +{\xe \v AddSynapse\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:AddSynapse} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + NanoBrain.Neuron.AddSynapse ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + {\i sendingNucleus}, float {\i weight} = {\f2 1}){\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAACJ} +{\bkmkend AAAAAAAACJ} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Add a new synapse to this nuclues. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i sendingNucleus} \cell }{The nucleus from which the signals may originate\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i weight} \cell }{The weight applied to the input. Default value = 1\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The created Synapse\par +}}This will add a new input to this nucleus with the given weight. \par +}} +{\xe \v GetSynapse\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:GetSynapse} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + NanoBrain.Neuron.GetSynapse ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\i sender}){\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAACK} +{\bkmkend AAAAAAAACK} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Find a synapse. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i sender} \cell }{The sender of the input to the Synapse\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The found Synapse or null when the sender has no synapse to this nucleus.\par +}}}} +{\xe \v RemoveSynapse\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:RemoveSynapse} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +void NanoBrain.Neuron.RemoveSynapse ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\i sendingNucleus}){\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAACL} +{\bkmkend AAAAAAAACL} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Remove a synapse from a Nucleus. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i sendingNucleus} \cell }{Remote the synapse connecting to this Nucleus\cell } +{\row } +} +}} +{\xe \v SetBias\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:SetBias} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +virtual void NanoBrain.Neuron.SetBias (Vector3 {\i inputValue}){\f2 [virtual]}, {\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAACM} +{\bkmkend AAAAAAAACM} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i inputValue} \cell }{\cell } +{\row } +} +}} +{\xe \v ProcessStimulus\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:ProcessStimulus} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +virtual void NanoBrain.Neuron.ProcessStimulus (Vector3 {\i inputValue}){\f2 [virtual]}, {\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAACW} +{\bkmkend AAAAAAAACW} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Process an external stimulus. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i inputValue} \cell }{The value of the stimulus\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i thingId} \cell }{The id of the thing causing the stimulus\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i thingName} \cell }{The name of the thing causing the stimulus\cell } +{\row } +} +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Data Documentation\par +\pard\plain +{\xe \v bias\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:bias} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +Vector3 NanoBrain.Neuron.bias = Vector3.zero{\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAACZ} +{\bkmkend AAAAAAAACZ} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Create a new Neuron in a Cluster Prefab. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i prefab} \cell }{The Cluster Preafb in which the new Neuron should be created\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i name} \cell }{The name of the new Neuron\cell } +{\row } +} +The bias\par +The bias which a value which is always added to the combined value of the neuron It does not have a synapse and therefore no weight of source nucleus \par +}} +{\xe \v parent\:NanoBrain.MemoryCell} +{\xe \v NanoBrain.MemoryCell\:parent} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + NanoBrain.Nucleus.parent{\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAAAS} +{\bkmkend AAAAAAAAAS} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster prefab in which the nucleus is located. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster instance in which the nucleus is located \par +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +The documentation for this class was generated from the following file:{\par +\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/MemoryCell.cs\par +}\par \pard\plain + +\pard\plain \sect\sbkpage +\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +NanoBrain.Neuron Class Reference\par \pard\plain +{\tc\tcl2 \v NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron} +{\bkmkstart AAAAAAAAAJ} +{\bkmkend AAAAAAAAAJ} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Description\par +\pard\plain +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A neuron is a basic Nucleus. \par +}} +Inheritance diagram for NanoBrain.Neuron:{ +\pard\plain +\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "class_nano_brain_1_1_neuron.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Types\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACC" }{}}{\fldrslt {\cs37\ul\cf2 CombinatorType}}} + \{ {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACD" }{}}{\fldrslt {\cs37\ul\cf2 Sum}}} + +, {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACE" }{}}{\fldrslt {\cs37\ul\cf2 Product}}} + + \}\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The type of combinators. }}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACF" }{}}{\fldrslt {\cs37\ul\cf2 ActivationType}}} + \{ {\b Linear} +, {\b Power} +, {\b Sqrt} +, {\b Reciprocal} +, {\b Tanh} +, {\b Binary} +, {\b Normalized} +, {\b Custom} + \}{\bkmkstart AAAAAAAACF} +{\bkmkend AAAAAAAACF} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The type of. }}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAP" }{}}{\fldrslt {\cs37\ul\cf2 Type}}} + \{ {\b None} +, {\b Neuron} +, {\b MemoryCell} +, {\b Cluster} + \}\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to clone a nucleus to a Cluster prefab. }}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAEM" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAS" }{}}{\fldrslt {\cs37\ul\cf2 parent}}} +, string {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABR" }{}}{\fldrslt {\cs37\ul\cf2 name}}} +)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Create a new Neuron in a Cluster instance. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACJ" }{}}{\fldrslt {\cs37\ul\cf2 AddSynapse}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + sendingNucleus, float weight=1)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Add a new synapse to this nuclues. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACK" }{}}{\fldrslt {\cs37\ul\cf2 GetSynapse}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + sender)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Find a synapse. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACL" }{}}{\fldrslt {\cs37\ul\cf2 RemoveSynapse}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + sendingNucleus)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Remove a synapse from a Nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +virtual void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACM" }{}}{\fldrslt {\cs37\ul\cf2 SetBias}}} + (Vector3 inputValue)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +AnimationCurve {\b GenerateCurve} (){\bkmkstart AAAAAAAACN} +{\bkmkend AAAAAAAACN} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +void {\b SleepCheck} (){\bkmkstart AAAAAAAACO} +{\bkmkend AAAAAAAACO} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +override {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAEN" }{}}{\fldrslt {\cs37\ul\cf2 ShallowCloneTo}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + newParent)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Toggle for printing debugging trace data. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +override void {\b UpdateStateIsolated} (){\bkmkstart AAAAAAAAEO} +{\bkmkend AAAAAAAAEO} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b CombinatorSum} (){\bkmkstart AAAAAAAACP} +{\bkmkend AAAAAAAACP} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b CombinatorProduct} (){\bkmkstart AAAAAAAACR} +{\bkmkend AAAAAAAACR} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b CombinatorSum} (){\bkmkstart AAAAAAAACQ} +{\bkmkend AAAAAAAACQ} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b CombinatorProduct} (){\bkmkstart AAAAAAAACS} +{\bkmkend AAAAAAAACS} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b CombinatorMax} (){\bkmkstart AAAAAAAACT} +{\bkmkend AAAAAAAACT} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual void {\b AddReceiver} ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + receiverToAdd, float weight=1){\bkmkstart AAAAAAAACU} +{\bkmkend AAAAAAAACU} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual void {\b RemoveReceiver} ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + receiverToRemove){\bkmkstart AAAAAAAACV} +{\bkmkend AAAAAAAACV} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +virtual void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACW" }{}}{\fldrslt {\cs37\ul\cf2 ProcessStimulus}}} + (Vector3 inputValue)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Process an external stimulus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +virtual void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABK" }{}}{\fldrslt {\cs37\ul\cf2 UpdateNuclei}}} + ()\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state and recursively all Nuclei receiving data from this Nucleus. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Static Public Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +static void {\b Delete} ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + nucleus){\bkmkstart AAAAAAAACX} +{\bkmkend AAAAAAAACX} +\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Attributes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +Vector3 {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACZ" }{}}{\fldrslt {\cs37\ul\cf2 bias}}} + = Vector3.zero\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Create a new Neuron in a Cluster Prefab. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACC" }{}}{\fldrslt {\cs37\ul\cf2 CombinatorType}}} + {\b combinator} = {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACD" }{}}{\fldrslt {\cs37\ul\cf2 CombinatorType.Sum}}} +{\bkmkstart AAAAAAAADA} +{\bkmkend AAAAAAAADA} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The type of combinator used for this Neuron. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACF" }{}}{\fldrslt {\cs37\ul\cf2 ActivationType}}} + {\b _curvePreset}{\bkmkstart AAAAAAAADB} +{\bkmkend AAAAAAAADB} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +AnimationCurve {\b curve}{\bkmkstart AAAAAAAADC} +{\bkmkend AAAAAAAADC} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float {\b curveMax} = 1.0f{\bkmkstart AAAAAAAADD} +{\bkmkend AAAAAAAADD} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Action {\b WhenFiring}{\bkmkstart AAAAAAAADE} +{\bkmkend AAAAAAAADE} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +bool {\b persistOutput} = false{\bkmkstart AAAAAAAADF} +{\bkmkend AAAAAAAADF} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float {\b lastUpdate} = 0{\bkmkstart AAAAAAAADG} +{\bkmkend AAAAAAAADG} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Toggle for printing debugging trace data. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +readonly float {\b timeToSleep} = 1f{\bkmkstart AAAAAAAADH} +{\bkmkend AAAAAAAADH} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +string {\b name}{\bkmkstart AAAAAAAABR} +{\bkmkend AAAAAAAABR} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The name of the Nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAS" }{}}{\fldrslt {\cs37\ul\cf2 parent}}} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster prefab in which the nucleus is located. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Protected Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual void {\b CloneFields} ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + clone){\bkmkstart AAAAAAAADI} +{\bkmkend AAAAAAAADI} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +void {\b CheckSleepingSynapses} (){\bkmkstart AAAAAAAADJ} +{\bkmkend AAAAAAAADJ} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorLinear} (float3 input){\bkmkstart AAAAAAAADK} +{\bkmkend AAAAAAAADK} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorSqrt} (float3 input){\bkmkstart AAAAAAAADM} +{\bkmkend AAAAAAAADM} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorPower} (float3 input){\bkmkstart AAAAAAAADO} +{\bkmkend AAAAAAAADO} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorReciprocal} (float3 input){\bkmkstart AAAAAAAADQ} +{\bkmkend AAAAAAAADQ} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorTanh} (float3 input){\bkmkstart AAAAAAAADS} +{\bkmkend AAAAAAAADS} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorBinary} (float3 input){\bkmkstart AAAAAAAADT} +{\bkmkend AAAAAAAADT} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorNormalized} (float3 input){\bkmkstart AAAAAAAADU} +{\bkmkend AAAAAAAADU} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b ActivatorCustom} (float3 input){\bkmkstart AAAAAAAADV} +{\bkmkend AAAAAAAADV} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b ActivatorLinear} (Vector3 input){\bkmkstart AAAAAAAADL} +{\bkmkend AAAAAAAADL} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b ActivatorSqrt} (Vector3 input){\bkmkstart AAAAAAAADN} +{\bkmkend AAAAAAAADN} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b ActivatorPower} (Vector3 input){\bkmkstart AAAAAAAADP} +{\bkmkend AAAAAAAADP} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b ActivatorReciprocal} (Vector3 input){\bkmkstart AAAAAAAADR} +{\bkmkend AAAAAAAADR} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b ActivatorCustom} (Vector3 input){\bkmkstart AAAAAAAADW} +{\bkmkend AAAAAAAADW} +\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Protected Attributes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float3 {\b _outputValue}{\bkmkstart AAAAAAAADX} +{\bkmkend AAAAAAAADX} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Vector3 {\b _outputValue}{\bkmkstart AAAAAAAADY} +{\bkmkend AAAAAAAADY} +\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Properties\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + > {\b synapses}{\f2 [get]}{\bkmkstart AAAAAAAAEA} +{\bkmkend AAAAAAAAEA} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The synapses of the nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACF" }{}}{\fldrslt {\cs37\ul\cf2 ActivationType}}} + {\b curvePreset}{\f2 [get, set]}{\bkmkstart AAAAAAAAEB} +{\bkmkend AAAAAAAAEB} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual float3 {\b outputValue}{\f2 [get, set]}{\bkmkstart AAAAAAAAEC} +{\bkmkend AAAAAAAAEC} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float {\b outputMagnitude}{\f2 [get]}{\bkmkstart AAAAAAAAEE} +{\bkmkend AAAAAAAAEE} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float {\b outputSqrMagnitude}{\f2 [get]}{\bkmkstart AAAAAAAAEF} +{\bkmkend AAAAAAAAEF} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual Vector3 {\b outputValue}{\f2 [get, set]}{\bkmkstart AAAAAAAAED} +{\bkmkend AAAAAAAAED} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +bool {\b isFiring}{\f2 [get]}{\bkmkstart AAAAAAAAEG} +{\bkmkend AAAAAAAAEG} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual bool {\b isSleeping}{\f2 [get]}{\bkmkstart AAAAAAAAEP} +{\bkmkend AAAAAAAAEP} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Func< float3 > {\b Combinator}{\f2 [get]}{\bkmkstart AAAAAAAAEH} +{\bkmkend AAAAAAAAEH} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Func< Vector3 > {\b Combinator}{\f2 [get]}{\bkmkstart AAAAAAAAEI} +{\bkmkend AAAAAAAAEI} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Func< float3, float3 > {\b Activator}{\f2 [get]}{\bkmkstart AAAAAAAAEJ} +{\bkmkend AAAAAAAAEJ} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +Func< Vector3, Vector3 > {\b Activator}{\f2 [get]}{\bkmkstart AAAAAAAAEK} +{\bkmkend AAAAAAAAEK} +\par +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +virtual List< {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + > {\b receivers}{\f2 [get, set]}{\bkmkstart AAAAAAAAEL} +{\bkmkend AAAAAAAAEL} +\par +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Enumeration Documentation\par +\pard\plain +{\xe \v CombinatorType\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:CombinatorType} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAACC" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Neuron.CombinatorType}}} +}} +\par +{\bkmkstart AAAAAAAACC} +{\bkmkend AAAAAAAACC} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The type of combinators. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A combinator combines the weighted values of the synapses to a single value \par +}{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Enumerator:\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{\xe \v Sum\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:Sum} +{\qr Sum{\bkmkstart AAAAAAAACD} +{\bkmkend AAAAAAAACD} +\cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Add the weighted values together. \par +}\cell }{\row } +{\xe \v Product\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:Product} +{\qr Product{\bkmkstart AAAAAAAACE} +{\bkmkend AAAAAAAACE} +\cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Multiply the weighted values. \par +}\cell }{\row } +} +} +{\xe \v Type\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:Type} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAP" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Nucleus.Type}}} +{\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAAAP} +{\bkmkend AAAAAAAAAP} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to clone a nucleus to a Cluster prefab. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i prefab} \cell }{\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +\par +}}The types of Nucleus \par +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Constructor & Destructor Documentation\par +\pard\plain +{\xe \v Neuron\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:Neuron} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +NanoBrain.Neuron.Neuron ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\i parent}, string {\i name})}} +\par +{\bkmkstart AAAAAAAAEM} +{\bkmkend AAAAAAAAEM} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Create a new Neuron in a Cluster instance. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i parent} \cell }{The parent cluster in which the new Neuron should be created\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i name} \cell }{The name of the new Neuron\cell } +{\row } +} +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Function Documentation\par +\pard\plain +{\xe \v AddSynapse\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:AddSynapse} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + NanoBrain.Neuron.AddSynapse ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + {\i sendingNucleus}, float {\i weight} = {\f2 1})}} +\par +{\bkmkstart AAAAAAAACJ} +{\bkmkend AAAAAAAACJ} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Add a new synapse to this nuclues. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i sendingNucleus} \cell }{The nucleus from which the signals may originate\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i weight} \cell }{The weight applied to the input. Default value = 1\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The created Synapse\par +}}This will add a new input to this nucleus with the given weight. \par +}} +{\xe \v GetSynapse\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:GetSynapse} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAL" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + NanoBrain.Neuron.GetSynapse ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\i sender})}} +\par +{\bkmkstart AAAAAAAACK} +{\bkmkend AAAAAAAACK} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Find a synapse. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i sender} \cell }{The sender of the input to the Synapse\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +The found Synapse or null when the sender has no synapse to this nucleus.\par +}}}} +{\xe \v RemoveSynapse\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:RemoveSynapse} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +void NanoBrain.Neuron.RemoveSynapse ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\i sendingNucleus})}} +\par +{\bkmkstart AAAAAAAACL} +{\bkmkend AAAAAAAACL} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Remove a synapse from a Nucleus. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i sendingNucleus} \cell }{Remote the synapse connecting to this Nucleus\cell } +{\row } +} +}} +{\xe \v SetBias\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:SetBias} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +virtual void NanoBrain.Neuron.SetBias (Vector3 {\i inputValue}){\f2 [virtual]}}} +\par +{\bkmkstart AAAAAAAACM} +{\bkmkend AAAAAAAACM} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i inputValue} \cell }{\cell } +{\row } +} +}} +{\xe \v ShallowCloneTo\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:ShallowCloneTo} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +override {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + NanoBrain.Neuron.ShallowCloneTo ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\i newParent})}} +\par +{\bkmkstart AAAAAAAAEN} +{\bkmkend AAAAAAAAEN} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Toggle for printing debugging trace data. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to make a partial clone of this nucleus\par +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i parent} \cell }{The cluster in which the cloned nucleus should be placed\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +\par +}}}} +{\xe \v ProcessStimulus\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:ProcessStimulus} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +virtual void NanoBrain.Neuron.ProcessStimulus (Vector3 {\i inputValue}){\f2 [virtual]}}} +\par +{\bkmkstart AAAAAAAACW} +{\bkmkend AAAAAAAACW} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Process an external stimulus. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i inputValue} \cell }{The value of the stimulus\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i thingId} \cell }{The id of the thing causing the stimulus\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i thingName} \cell }{The name of the thing causing the stimulus\cell } +{\row } +} +}} +{\xe \v UpdateNuclei\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:UpdateNuclei} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +virtual void NanoBrain.Nucleus.UpdateNuclei (){\f2 [virtual]}, {\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAABK} +{\bkmkend AAAAAAAABK} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state and recursively all Nuclei receiving data from this Nucleus. }}\par +{ +Reimplemented in {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABX" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.MemoryCell}}} +.}\par +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Data Documentation\par +\pard\plain +{\xe \v bias\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:bias} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +Vector3 NanoBrain.Neuron.bias = Vector3.zero}} +\par +{\bkmkstart AAAAAAAACZ} +{\bkmkend AAAAAAAACZ} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Create a new Neuron in a Cluster Prefab. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i prefab} \cell }{The Cluster Preafb in which the new Neuron should be created\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i name} \cell }{The name of the new Neuron\cell } +{\row } +} +The bias\par +The bias which a value which is always added to the combined value of the neuron It does not have a synapse and therefore no weight of source nucleus \par +}} +{\xe \v parent\:NanoBrain.Neuron} +{\xe \v NanoBrain.Neuron\:parent} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + NanoBrain.Nucleus.parent{\f2 [inherited]}}} +\par +{\bkmkstart AAAAAAAAAS} +{\bkmkend AAAAAAAAAS} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster prefab in which the nucleus is located. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster instance in which the nucleus is located \par +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +The documentation for this class was generated from the following file:{\par +\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs\par +}\par \pard\plain + +\pard\plain \sect\sbkpage +\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +NanoBrain.Nucleus Class Reference\par \pard\plain +{\tc\tcl2 \v NanoBrain.Nucleus} +{\xe \v NanoBrain.Nucleus} +{\bkmkstart AAAAAAAAAK} +{\bkmkend AAAAAAAAAK} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Description\par +\pard\plain +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A Nucleus is a basic element in a brain cluster. \par +}} +Inheritance diagram for NanoBrain.Nucleus:{ +\pard\plain +\par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "class_nano_brain_1_1_nucleus.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Types\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAP" }{}}{\fldrslt {\cs37\ul\cf2 Type}}} + \{ {\b None} +, {\b Neuron} +, {\b MemoryCell} +, {\b Cluster} + \}\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to clone a nucleus to a Cluster prefab. }}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAEQ" }{}}{\fldrslt {\cs37\ul\cf2 ShallowCloneTo}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAS" }{}}{\fldrslt {\cs37\ul\cf2 parent}}} +)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Toggle for printing debugging trace data. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +void {\b UpdateStateIsolated} (){\bkmkstart AAAAAAAAER} +{\bkmkend AAAAAAAAER} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state without updating other Nuclei. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +virtual void {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABK" }{}}{\fldrslt {\cs37\ul\cf2 UpdateNuclei}}} + ()\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state and recursively all Nuclei receiving data from this Nucleus. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Attributes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +string {\b name}{\bkmkstart AAAAAAAABR} +{\bkmkend AAAAAAAABR} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The name of the Nucleus. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAS" }{}}{\fldrslt {\cs37\ul\cf2 parent}}} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster prefab in which the nucleus is located. }{ +}\par +}\par} +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Enumeration Documentation\par +\pard\plain +{\xe \v Type\:NanoBrain.Nucleus} +{\xe \v NanoBrain.Nucleus\:Type} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +enum {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAP" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.Nucleus.Type}}} +}} +\par +{\bkmkstart AAAAAAAAAP} +{\bkmkend AAAAAAAAAP} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to clone a nucleus to a Cluster prefab. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i prefab} \cell }{\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +\par +}}The types of Nucleus \par +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Function Documentation\par +\pard\plain +{\xe \v ShallowCloneTo\:NanoBrain.Nucleus} +{\xe \v NanoBrain.Nucleus\:ShallowCloneTo} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAK" }{}}{\fldrslt {\cs37\ul\cf2 Nucleus}}} + NanoBrain.Nucleus.ShallowCloneTo ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + {\i parent}){\f2 [abstract]}}} +\par +{\bkmkstart AAAAAAAAEQ} +{\bkmkend AAAAAAAAEQ} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Toggle for printing debugging trace data. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Function to make a partial clone of this nucleus\par +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i parent} \cell }{The cluster in which the cloned nucleus should be placed\cell } +{\row } +} +{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Returns\par}\pard\plain \s82\li720\widctlpar\ql\adjustright \fs20\cgrid {\s17 \sa60 \sb30 +\par +}}}} +{\xe \v UpdateNuclei\:NanoBrain.Nucleus} +{\xe \v NanoBrain.Nucleus\:UpdateNuclei} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +virtual void NanoBrain.Nucleus.UpdateNuclei (){\f2 [virtual]}}} +\par +{\bkmkstart AAAAAAAABK} +{\bkmkend AAAAAAAABK} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Update the state and recursively all Nuclei receiving data from this Nucleus. }}\par +{ +Reimplemented in {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAABX" }{}}{\fldrslt {\cs37\ul\cf2 NanoBrain.MemoryCell}}} +.}\par +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Member Data Documentation\par +\pard\plain +{\xe \v parent\:NanoBrain.Nucleus} +{\xe \v NanoBrain.Nucleus\:parent} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAG" }{}}{\fldrslt {\cs37\ul\cf2 Cluster}}} + NanoBrain.Nucleus.parent}} +\par +{\bkmkstart AAAAAAAAAS} +{\bkmkend AAAAAAAAAS} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster prefab in which the nucleus is located. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The cluster instance in which the nucleus is located \par +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +The documentation for this class was generated from the following file:{\par +\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Nucleus.cs\par +}\par \pard\plain + +\pard\plain \sect\sbkpage +\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid +NanoBrain.Synapse Class Reference\par \pard\plain +{\tc\tcl2 \v NanoBrain.Synapse} +{\xe \v NanoBrain.Synapse} +{\bkmkstart AAAAAAAAAL} +{\bkmkend AAAAAAAAAL} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Description\par +\pard\plain +{ +\pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +A Synapse connects the ouput of a Neuron to another Neuron. \par +}} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Member Functions\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAES" }{}}{\fldrslt {\cs37\ul\cf2 Synapse}}} + ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + nucleus, float {\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAET" }{}}{\fldrslt {\cs37\ul\cf2 weight}}} +=1.0f)\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Create a new Synapse. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Public Attributes\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +{\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + {\b neuron}{\bkmkstart AAAAAAAAEU} +{\bkmkend AAAAAAAAEU} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The neuron from which input is received. }{ +}\par +}\par} +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +float {\b weight}{\bkmkstart AAAAAAAAET} +{\bkmkend AAAAAAAAET} +\par +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +The weight value to apply to the Neuron input. }{ +}\par +}\par} +} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Properties\par +\pard\plain + +{ +\pard\plain \s120\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid + +bool {\b isSleeping}{\f2 [get]}{\bkmkstart AAAAAAAAEV} +{\bkmkend AAAAAAAAEV} +\par +} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid +Constructor & Destructor Documentation\par +\pard\plain +{\xe \v Synapse\:NanoBrain.Synapse} +{\xe \v NanoBrain.Synapse\:Synapse} +\pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { +{\b +NanoBrain.Synapse.Synapse ({\field {\*\fldinst { HYPERLINK \\l "AAAAAAAAAJ" }{}}{\fldrslt {\cs37\ul\cf2 Neuron}}} + {\i nucleus}, float {\i weight} = {\f2 1::0f})}} +\par +{\bkmkstart AAAAAAAAES} +{\bkmkend AAAAAAAAES} +{ +\pard\plain \s61\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid +\par +{ +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +Create a new Synapse. }}\par +{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid +{\par +{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid +Parameters\par} +\pard\plain \s81\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i nucleus} \cell }{The neuron from which input is received\cell } +{\row } +\trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 +\clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 +\pard \widctlpar\intbl\adjustright +{{\i weight} \cell }{The weight value to apply to the Neuron input\cell } +{\row } +} +}} +{\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} +The documentation for this class was generated from the following file:{\par +\pard\plain \s121\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid +/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Synapse.cs\par +} +\pard\plain \sect\sbkpage +\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid +\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Index\par +\pard\plain +{\tc \v Index} +{\field\fldedit {\*\fldinst INDEX \\c2 \\*MERGEFORMAT}{\fldrslt INDEX}} +} diff --git a/Documentation/html/rtf/refman.rtf.meta b/Documentation/html/rtf/refman.rtf.meta new file mode 100644 index 0000000..0324b15 --- /dev/null +++ b/Documentation/html/rtf/refman.rtf.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f9796692d8cde808d97648616b2bb072 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LinearAlgebra/test.meta b/Documentation/html/search.meta similarity index 100% rename from LinearAlgebra/test.meta rename to Documentation/html/search.meta diff --git a/Documentation/html/search/all_0.js b/Documentation/html/search/all_0.js new file mode 100644 index 0000000..2ed4933 --- /dev/null +++ b/Documentation/html/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5foutputs_0',['_outputs',['../class_nano_brain_1_1_cluster.html#a15c5159667fe22edfc4889a955a9d293',1,'NanoBrain::Cluster']]] +]; diff --git a/Documentation/html/search/all_0.js.meta b/Documentation/html/search/all_0.js.meta new file mode 100644 index 0000000..13499de --- /dev/null +++ b/Documentation/html/search/all_0.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ba986b9d8b6fa739083b315a103fcddc +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_1.js b/Documentation/html/search/all_1.js new file mode 100644 index 0000000..2ab825f --- /dev/null +++ b/Documentation/html/search/all_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['activationtype_0',['ActivationType',['../class_nano_brain_1_1_neuron.html#ae558c02b00c776805c7fead42cb94612',1,'NanoBrain::Neuron']]], + ['addinstance_1',['addinstance',['../class_nano_brain_1_1_cluster.html#a01b55195c2f5be58659d9b0a5c993a8a',1,'NanoBrain.Cluster.AddInstance()'],['../class_nano_brain_1_1_cluster.html#a1b60bd296f757257a640559b732ed241',1,'NanoBrain.Cluster.AddInstance(ClusterPrefab prefab)']]], + ['addsynapse_2',['AddSynapse',['../class_nano_brain_1_1_neuron.html#a524fdd9e25ebbcb5baca60a942d6eb80',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/all_1.js.meta b/Documentation/html/search/all_1.js.meta new file mode 100644 index 0000000..a51b53f --- /dev/null +++ b/Documentation/html/search/all_1.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0c0ca40a74d21c4eca9027cd81dac16f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_10.js b/Documentation/html/search/all_10.js new file mode 100644 index 0000000..ca67916 --- /dev/null +++ b/Documentation/html/search/all_10.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['unity_0',['Nano Brain for Unity',['../index.html',1,'']]], + ['updatefromnucleus_1',['UpdateFromNucleus',['../class_nano_brain_1_1_cluster.html#ab2e33a3a6642d31b5a927c7ee2db73ab',1,'NanoBrain::Cluster']]], + ['updatenuclei_2',['updatenuclei',['../class_nano_brain_1_1_memory_cell.html#a780592351f670461286b8cd00ec42ebd',1,'NanoBrain.MemoryCell.UpdateNuclei()'],['../class_nano_brain_1_1_nucleus.html#a31e93d392a4a861b55f3d87f0a7d6d59',1,'NanoBrain.Nucleus.UpdateNuclei()']]], + ['updatestateisolated_3',['updatestateisolated',['../class_nano_brain_1_1_cluster.html#ac40b182a3c5f32ec055d7fabbeaedbf3',1,'NanoBrain.Cluster.UpdateStateIsolated()'],['../class_nano_brain_1_1_nucleus.html#aaf267af9b5ad1b5f0247f04ed2934f97',1,'NanoBrain.Nucleus.UpdateStateIsolated()']]], + ['updateweight_4',['UpdateWeight',['../class_nano_brain_1_1_brain.html#a552d2f938f63f3c0f1997174d9098334',1,'NanoBrain::Brain']]] +]; diff --git a/Documentation/html/search/all_10.js.meta b/Documentation/html/search/all_10.js.meta new file mode 100644 index 0000000..0b97ef8 --- /dev/null +++ b/Documentation/html/search/all_10.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bdf36a00d9180ede4acc591a361c2f2b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_11.js b/Documentation/html/search/all_11.js new file mode 100644 index 0000000..a7ec48d --- /dev/null +++ b/Documentation/html/search/all_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['weight_0',['weight',['../class_nano_brain_1_1_synapse.html#ada805a6cfeb40773ed963d24c7e6a496',1,'NanoBrain::Synapse']]] +]; diff --git a/Documentation/html/search/all_11.js.meta b/Documentation/html/search/all_11.js.meta new file mode 100644 index 0000000..559edbe --- /dev/null +++ b/Documentation/html/search/all_11.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1086b93868dfe9a6d98e5656b04c8b14 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_2.js b/Documentation/html/search/all_2.js new file mode 100644 index 0000000..8d6d131 --- /dev/null +++ b/Documentation/html/search/all_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['basename_0',['baseName',['../class_nano_brain_1_1_cluster.html#ad81aed306939c26d22043ca3a0cd71c4',1,'NanoBrain::Cluster']]], + ['bias_1',['bias',['../class_nano_brain_1_1_neuron.html#a37d7161e2012e95bf5d4d620c0f5c7fa',1,'NanoBrain::Neuron']]], + ['brain_2',['brain',['../class_nano_brain_1_1_brain.html',1,'NanoBrain.Brain'],['../class_nano_brain_1_1_brain.html#a9c34c8cba2339f23b6406c45ab8490a8',1,'NanoBrain.Brain.brain']]], + ['brain_20for_20unity_3',['Nano Brain for Unity',['../index.html',1,'']]], + ['brainprefab_4',['brainPrefab',['../class_nano_brain_1_1_brain.html#a47162765076efc24b85d9b892e876648',1,'NanoBrain::Brain']]] +]; diff --git a/Documentation/html/search/all_2.js.meta b/Documentation/html/search/all_2.js.meta new file mode 100644 index 0000000..fa632c9 --- /dev/null +++ b/Documentation/html/search/all_2.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cd879de91045339aa880e4b4ccb981d8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_3.js b/Documentation/html/search/all_3.js new file mode 100644 index 0000000..671f393 --- /dev/null +++ b/Documentation/html/search/all_3.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['cluster_0',['cluster',['../class_nano_brain_1_1_cluster.html',1,'NanoBrain.Cluster'],['../class_nano_brain_1_1_cluster.html#a86341cf5cc0d67a146a48e9c833df7ec',1,'NanoBrain.Cluster.Cluster(ClusterPrefab prefab, Cluster parent)'],['../class_nano_brain_1_1_cluster.html#a3a22ce2493a4d154fd971214b7c484d2',1,'NanoBrain.Cluster.Cluster(ClusterPrefab prefab, ClusterPrefab parent=null)']]], + ['clusterprefab_1',['ClusterPrefab',['../class_nano_brain_1_1_cluster_prefab.html',1,'NanoBrain']]], + ['collectreceivers_2',['CollectReceivers',['../class_nano_brain_1_1_cluster.html#ab067c159f399e69bcc9d2211bc9aa3c5',1,'NanoBrain::Cluster']]], + ['collectsynapsesto_3',['CollectSynapsesTo',['../class_nano_brain_1_1_cluster.html#a8736cab5b8381dc5a175fd03031d308e',1,'NanoBrain::Cluster']]], + ['combinator_4',['combinator',['../class_nano_brain_1_1_neuron.html#aa63477670ae3a6d667f44b500a250c86',1,'NanoBrain::Neuron']]], + ['combinatortype_5',['CombinatorType',['../class_nano_brain_1_1_neuron.html#ad7745cc584fbc2659d77c3202ee6adfe',1,'NanoBrain::Neuron']]], + ['computeorders_6',['computeOrders',['../class_nano_brain_1_1_cluster.html#af3bb2af13fc7fcb15e7610d4c81cb395',1,'NanoBrain::Cluster']]], + ['contents_7',['Table of Contents',['../index.html#autotoc_md1',1,'']]] +]; diff --git a/Documentation/html/search/all_3.js.meta b/Documentation/html/search/all_3.js.meta new file mode 100644 index 0000000..e2bc2d9 --- /dev/null +++ b/Documentation/html/search/all_3.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b2d0258dc79d2fbe09297c0df75b8499 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_4.js b/Documentation/html/search/all_4.js new file mode 100644 index 0000000..44e0d45 --- /dev/null +++ b/Documentation/html/search/all_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['defaultoutput_0',['defaultOutput',['../class_nano_brain_1_1_cluster.html#ac2d36a78d001fde5c95bc48f32e0fcc7',1,'NanoBrain::Cluster']]], + ['deletenucleus_1',['DeleteNucleus',['../class_nano_brain_1_1_cluster.html#a6b5855021a2733df3c25ed67e8777509',1,'NanoBrain::Cluster']]] +]; diff --git a/Documentation/html/search/all_4.js.meta b/Documentation/html/search/all_4.js.meta new file mode 100644 index 0000000..0b8b8f6 --- /dev/null +++ b/Documentation/html/search/all_4.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 828cb31da42df7ca78086c04da629fc9 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_5.js b/Documentation/html/search/all_5.js new file mode 100644 index 0000000..ca40bee --- /dev/null +++ b/Documentation/html/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['for_20unity_0',['Nano Brain for Unity',['../index.html',1,'']]] +]; diff --git a/Documentation/html/search/all_5.js.meta b/Documentation/html/search/all_5.js.meta new file mode 100644 index 0000000..ca9501b --- /dev/null +++ b/Documentation/html/search/all_5.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 297cc839b2ab331c2b8d585b16c4c10e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_6.js b/Documentation/html/search/all_6.js new file mode 100644 index 0000000..ed9f385 --- /dev/null +++ b/Documentation/html/search/all_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getneuron_0',['getneuron',['../class_nano_brain_1_1_cluster.html#a938f7cc08d8fee459e0203e3b6869e06',1,'NanoBrain.Cluster.GetNeuron(string neuronName)'],['../class_nano_brain_1_1_cluster.html#a696fcbdd1ae684a7b55963d8e673b22f',1,'NanoBrain.Cluster.GetNeuron(int thingId, string neuronName, string thingName=null)']]], + ['getnucleus_1',['getnucleus',['../class_nano_brain_1_1_cluster.html#a31a62471a88a8180963be74227fd68be',1,'NanoBrain.Cluster.GetNucleus()'],['../class_nano_brain_1_1_cluster_prefab.html#a49601bf5ea05b4f28974a5c0a1345286',1,'NanoBrain.ClusterPrefab.GetNucleus()']]], + ['getnucleusindex_2',['getnucleusindex',['../class_nano_brain_1_1_cluster.html#aec242a8433041ed22dde2375436016ce',1,'NanoBrain.Cluster.GetNucleusIndex(List< Nucleus > nuclei, Nucleus nucleus)'],['../class_nano_brain_1_1_cluster.html#ad9441d41aa6e2bfd3f9acf111dde1dd8',1,'NanoBrain.Cluster.GetNucleusIndex(List< Nucleus > nuclei, string nucleusName)']]], + ['getsynapse_3',['GetSynapse',['../class_nano_brain_1_1_neuron.html#a1f3c83acf569fa483101fd0ce11ec5fc',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/all_6.js.meta b/Documentation/html/search/all_6.js.meta new file mode 100644 index 0000000..6284903 --- /dev/null +++ b/Documentation/html/search/all_6.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7a7b95515c5b7e94380b832d1e19540d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_7.js b/Documentation/html/search/all_7.js new file mode 100644 index 0000000..ce085f0 --- /dev/null +++ b/Documentation/html/search/all_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['installation_0',['installation',['../md__installation.html',1,'Package Installation'],['../md__installation.html#autotoc_md0',1,'Samples Installation']]], + ['instancecount_1',['instanceCount',['../class_nano_brain_1_1_cluster.html#a5786c4f1f8387b7cb814ed159ddef040',1,'NanoBrain::Cluster']]], + ['instances_2',['instances',['../class_nano_brain_1_1_cluster.html#a9a2eb00412fb5cb200564a1261f3f313',1,'NanoBrain::Cluster']]] +]; diff --git a/Documentation/html/search/all_7.js.meta b/Documentation/html/search/all_7.js.meta new file mode 100644 index 0000000..8a7eb03 --- /dev/null +++ b/Documentation/html/search/all_7.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1c0e9780695344c75be2feb603079d79 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_8.js b/Documentation/html/search/all_8.js new file mode 100644 index 0000000..d98bdd6 --- /dev/null +++ b/Documentation/html/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['lastupdate_0',['lastUpdate',['../class_nano_brain_1_1_neuron.html#ad8697d6cbd7a2656e89a818b4cc75e97',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/all_8.js.meta b/Documentation/html/search/all_8.js.meta new file mode 100644 index 0000000..2b783f9 --- /dev/null +++ b/Documentation/html/search/all_8.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2e5f1605df294dd04bb885f1fd02c534 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_9.js b/Documentation/html/search/all_9.js new file mode 100644 index 0000000..e9694e2 --- /dev/null +++ b/Documentation/html/search/all_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['memorycell_0',['MemoryCell',['../class_nano_brain_1_1_memory_cell.html',1,'NanoBrain']]] +]; diff --git a/Documentation/html/search/all_9.js.meta b/Documentation/html/search/all_9.js.meta new file mode 100644 index 0000000..a7d0362 --- /dev/null +++ b/Documentation/html/search/all_9.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3b30dcc1da93725b6930bfe6e0c830cc +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_a.js b/Documentation/html/search/all_a.js new file mode 100644 index 0000000..e4e1a64 --- /dev/null +++ b/Documentation/html/search/all_a.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['name_0',['name',['../class_nano_brain_1_1_nucleus.html#a35070f04a3fe08ec329b0f043bff0be2',1,'NanoBrain::Nucleus']]], + ['nano_20brain_20for_20unity_1',['Nano Brain for Unity',['../index.html',1,'']]], + ['nanobrain_2',['nanobrain',['../namespace_nano_brain.html',1,'NanoBrain'],['../md__2home_2pascal_2_development_2_projects_2_passer_2_nano_brain_2_nano_brain_2_assets_2_nano_brain-unitypackage_2_r_e_a_d_m_e.html',1,'NanoBrain']]], + ['neuron_3',['neuron',['../class_nano_brain_1_1_neuron.html',1,'NanoBrain.Neuron'],['../class_nano_brain_1_1_synapse.html#ac5d9cb95be7cbc11c3321a8c430e7e5f',1,'NanoBrain.Synapse.neuron'],['../class_nano_brain_1_1_neuron.html#a54a94ea928e9a54552692e7d1e84782e',1,'NanoBrain.Neuron.Neuron()']]], + ['nuclei_4',['nuclei',['../class_nano_brain_1_1_cluster.html#a73e3b7e7a0ae623d1ac55dd442ca9d68',1,'NanoBrain::Cluster']]], + ['nucleus_5',['Nucleus',['../class_nano_brain_1_1_nucleus.html',1,'NanoBrain']]] +]; diff --git a/Documentation/html/search/all_a.js.meta b/Documentation/html/search/all_a.js.meta new file mode 100644 index 0000000..423d056 --- /dev/null +++ b/Documentation/html/search/all_a.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6aed7a8be4271c433b22292831da1225 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_b.js b/Documentation/html/search/all_b.js new file mode 100644 index 0000000..4d9240d --- /dev/null +++ b/Documentation/html/search/all_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['of_20contents_0',['Table of Contents',['../index.html#autotoc_md1',1,'']]], + ['outputs_1',['outputs',['../class_nano_brain_1_1_cluster.html#a89d8b00304b04025ae0446421363aa1f',1,'NanoBrain::Cluster']]] +]; diff --git a/Documentation/html/search/all_b.js.meta b/Documentation/html/search/all_b.js.meta new file mode 100644 index 0000000..49c75a5 --- /dev/null +++ b/Documentation/html/search/all_b.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f1b15f4ddc0599be7b07d08f0931b17a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_c.js b/Documentation/html/search/all_c.js new file mode 100644 index 0000000..cab5f69 --- /dev/null +++ b/Documentation/html/search/all_c.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['package_20installation_0',['Package Installation',['../md__installation.html',1,'']]], + ['parent_1',['parent',['../class_nano_brain_1_1_nucleus.html#a0750e4d9ab80ff06bd58ffebca9d8c6d',1,'NanoBrain::Nucleus']]], + ['prefab_2',['prefab',['../class_nano_brain_1_1_cluster.html#a9a4c212d5247090d59489d3bb3d04c3d',1,'NanoBrain::Cluster']]], + ['processstimulus_3',['ProcessStimulus',['../class_nano_brain_1_1_neuron.html#a30c28f0ede8d4cba4e2937cade0e79e0',1,'NanoBrain::Neuron']]], + ['product_4',['Product',['../class_nano_brain_1_1_neuron.html#ad7745cc584fbc2659d77c3202ee6adfeadeb10517653c255364175796ace3553f',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/all_c.js.meta b/Documentation/html/search/all_c.js.meta new file mode 100644 index 0000000..0c65a6c --- /dev/null +++ b/Documentation/html/search/all_c.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f89ca4bd315f47af2aaaf696c03b7961 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_d.js b/Documentation/html/search/all_d.js new file mode 100644 index 0000000..5b39ccf --- /dev/null +++ b/Documentation/html/search/all_d.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['refresh_0',['Refresh',['../class_nano_brain_1_1_cluster.html#a40ad7f93121a3684699c92bcb03b1c74',1,'NanoBrain::Cluster']]], + ['refreshcomputeorders_1',['RefreshComputeOrders',['../class_nano_brain_1_1_cluster.html#acff74557b8c50f2355898855f1ab6073',1,'NanoBrain::Cluster']]], + ['refreshoutputs_2',['RefreshOutputs',['../class_nano_brain_1_1_cluster.html#a209d8f083a5bd82ce764ee5ac7e9f97e',1,'NanoBrain::Cluster']]], + ['removeinstance_3',['RemoveInstance',['../class_nano_brain_1_1_cluster.html#a5454e0c01870e1c2df93b33f43704210',1,'NanoBrain::Cluster']]], + ['removesynapse_4',['RemoveSynapse',['../class_nano_brain_1_1_neuron.html#a2ae2b960608803beabade55d2c830088',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/all_d.js.meta b/Documentation/html/search/all_d.js.meta new file mode 100644 index 0000000..6627451 --- /dev/null +++ b/Documentation/html/search/all_d.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e60c1b9df4ad96c6b837b2df3ef3197 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_e.js b/Documentation/html/search/all_e.js new file mode 100644 index 0000000..0e99acb --- /dev/null +++ b/Documentation/html/search/all_e.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['samples_20installation_0',['Samples Installation',['../md__installation.html#autotoc_md0',1,'']]], + ['setbias_1',['SetBias',['../class_nano_brain_1_1_neuron.html#a407e9fca0108715d6031ea4f2ae1005d',1,'NanoBrain::Neuron']]], + ['shallowcloneto_2',['shallowcloneto',['../class_nano_brain_1_1_cluster.html#a7ecc2afa858940901336663b435f8fb2',1,'NanoBrain.Cluster.ShallowCloneTo()'],['../class_nano_brain_1_1_neuron.html#afe95b6470ef7689253514229d02fe2b9',1,'NanoBrain.Neuron.ShallowCloneTo()'],['../class_nano_brain_1_1_nucleus.html#a4bb93cd4cd07072f35eae3a98ba5dde8',1,'NanoBrain.Nucleus.ShallowCloneTo()']]], + ['sum_3',['Sum',['../class_nano_brain_1_1_neuron.html#ad7745cc584fbc2659d77c3202ee6adfeaa0ec87054b5e5b7847d0d8780a01a3d5',1,'NanoBrain::Neuron']]], + ['synapse_4',['synapse',['../class_nano_brain_1_1_synapse.html',1,'NanoBrain.Synapse'],['../class_nano_brain_1_1_synapse.html#a63a57254f76939b6a7bbbeb630f839d2',1,'NanoBrain.Synapse.Synapse()']]], + ['synapses_5',['synapses',['../class_nano_brain_1_1_neuron.html#a96a7f4b8480a8fa9fce1d698a41e4dc7',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/all_e.js.meta b/Documentation/html/search/all_e.js.meta new file mode 100644 index 0000000..4635491 --- /dev/null +++ b/Documentation/html/search/all_e.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bfcd342020a22d92685dbc246693fc4a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/all_f.js b/Documentation/html/search/all_f.js new file mode 100644 index 0000000..1765882 --- /dev/null +++ b/Documentation/html/search/all_f.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['table_20of_20contents_0',['Table of Contents',['../index.html#autotoc_md1',1,'']]], + ['thingclusters_1',['thingClusters',['../class_nano_brain_1_1_cluster.html#a1ea21dfdb1cf3e0e032d44e41308ab04',1,'NanoBrain::Cluster']]], + ['trygetnucleus_2',['TryGetNucleus',['../class_nano_brain_1_1_cluster.html#a40543b820890917a47186b04f0d44478',1,'NanoBrain::Cluster']]], + ['type_3',['Type',['../class_nano_brain_1_1_nucleus.html#a16cdfb57663e2f1c4629c4291b889e89',1,'NanoBrain::Nucleus']]] +]; diff --git a/Documentation/html/search/all_f.js.meta b/Documentation/html/search/all_f.js.meta new file mode 100644 index 0000000..8721055 --- /dev/null +++ b/Documentation/html/search/all_f.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 00d8778b6322d400c94a23c153aabe1c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/classes_0.js b/Documentation/html/search/classes_0.js new file mode 100644 index 0000000..611f125 --- /dev/null +++ b/Documentation/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['brain_0',['Brain',['../class_nano_brain_1_1_brain.html',1,'NanoBrain']]] +]; diff --git a/Documentation/html/search/classes_0.js.meta b/Documentation/html/search/classes_0.js.meta new file mode 100644 index 0000000..58bd709 --- /dev/null +++ b/Documentation/html/search/classes_0.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 58020f5cf96f5ccaf93b855230f0e79b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/classes_1.js b/Documentation/html/search/classes_1.js new file mode 100644 index 0000000..4d550bb --- /dev/null +++ b/Documentation/html/search/classes_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['cluster_0',['Cluster',['../class_nano_brain_1_1_cluster.html',1,'NanoBrain']]], + ['clusterprefab_1',['ClusterPrefab',['../class_nano_brain_1_1_cluster_prefab.html',1,'NanoBrain']]] +]; diff --git a/Documentation/html/search/classes_1.js.meta b/Documentation/html/search/classes_1.js.meta new file mode 100644 index 0000000..d493c99 --- /dev/null +++ b/Documentation/html/search/classes_1.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1a4eecdf9848c3e7a94081e9d460757d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/classes_2.js b/Documentation/html/search/classes_2.js new file mode 100644 index 0000000..e9694e2 --- /dev/null +++ b/Documentation/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['memorycell_0',['MemoryCell',['../class_nano_brain_1_1_memory_cell.html',1,'NanoBrain']]] +]; diff --git a/Documentation/html/search/classes_2.js.meta b/Documentation/html/search/classes_2.js.meta new file mode 100644 index 0000000..f488b9d --- /dev/null +++ b/Documentation/html/search/classes_2.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aeb163d5904c4b7c1b436d998ac2cd6f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/classes_3.js b/Documentation/html/search/classes_3.js new file mode 100644 index 0000000..fc3f027 --- /dev/null +++ b/Documentation/html/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['neuron_0',['Neuron',['../class_nano_brain_1_1_neuron.html',1,'NanoBrain']]], + ['nucleus_1',['Nucleus',['../class_nano_brain_1_1_nucleus.html',1,'NanoBrain']]] +]; diff --git a/Documentation/html/search/classes_3.js.meta b/Documentation/html/search/classes_3.js.meta new file mode 100644 index 0000000..0e3a822 --- /dev/null +++ b/Documentation/html/search/classes_3.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2d098db1c2b8d2a74ab46725ee498d54 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/classes_4.js b/Documentation/html/search/classes_4.js new file mode 100644 index 0000000..c82e719 --- /dev/null +++ b/Documentation/html/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['synapse_0',['Synapse',['../class_nano_brain_1_1_synapse.html',1,'NanoBrain']]] +]; diff --git a/Documentation/html/search/classes_4.js.meta b/Documentation/html/search/classes_4.js.meta new file mode 100644 index 0000000..1fcab88 --- /dev/null +++ b/Documentation/html/search/classes_4.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 782c95a9b0e4b3c838916fc671f880de +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/close.svg b/Documentation/html/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/Documentation/html/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/Documentation/html/search/close.svg.meta b/Documentation/html/search/close.svg.meta new file mode 100644 index 0000000..12e214a --- /dev/null +++ b/Documentation/html/search/close.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: b098206296010c8f0984a8c214cd2d0a +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/search/enums_0.js b/Documentation/html/search/enums_0.js new file mode 100644 index 0000000..b0f050d --- /dev/null +++ b/Documentation/html/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['activationtype_0',['ActivationType',['../class_nano_brain_1_1_neuron.html#ae558c02b00c776805c7fead42cb94612',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/enums_0.js.meta b/Documentation/html/search/enums_0.js.meta new file mode 100644 index 0000000..86c309e --- /dev/null +++ b/Documentation/html/search/enums_0.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1835aa295ea511a6fb757a41e31b1a22 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/enums_1.js b/Documentation/html/search/enums_1.js new file mode 100644 index 0000000..a1effce --- /dev/null +++ b/Documentation/html/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['combinatortype_0',['CombinatorType',['../class_nano_brain_1_1_neuron.html#ad7745cc584fbc2659d77c3202ee6adfe',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/enums_1.js.meta b/Documentation/html/search/enums_1.js.meta new file mode 100644 index 0000000..8244f8e --- /dev/null +++ b/Documentation/html/search/enums_1.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0b8d752ed60717203b1c14c244da6430 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/enums_2.js b/Documentation/html/search/enums_2.js new file mode 100644 index 0000000..32db838 --- /dev/null +++ b/Documentation/html/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['type_0',['Type',['../class_nano_brain_1_1_nucleus.html#a16cdfb57663e2f1c4629c4291b889e89',1,'NanoBrain::Nucleus']]] +]; diff --git a/Documentation/html/search/enums_2.js.meta b/Documentation/html/search/enums_2.js.meta new file mode 100644 index 0000000..3f7d252 --- /dev/null +++ b/Documentation/html/search/enums_2.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 492d68d0ec3a737d0a644c211f6f88ef +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/enumvalues_0.js b/Documentation/html/search/enumvalues_0.js new file mode 100644 index 0000000..4e67e01 --- /dev/null +++ b/Documentation/html/search/enumvalues_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['product_0',['Product',['../class_nano_brain_1_1_neuron.html#ad7745cc584fbc2659d77c3202ee6adfeadeb10517653c255364175796ace3553f',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/enumvalues_0.js.meta b/Documentation/html/search/enumvalues_0.js.meta new file mode 100644 index 0000000..03b5941 --- /dev/null +++ b/Documentation/html/search/enumvalues_0.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4c7688f504683f6d4b98d94fe263782c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/enumvalues_1.js b/Documentation/html/search/enumvalues_1.js new file mode 100644 index 0000000..643f53e --- /dev/null +++ b/Documentation/html/search/enumvalues_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['sum_0',['Sum',['../class_nano_brain_1_1_neuron.html#ad7745cc584fbc2659d77c3202ee6adfeaa0ec87054b5e5b7847d0d8780a01a3d5',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/enumvalues_1.js.meta b/Documentation/html/search/enumvalues_1.js.meta new file mode 100644 index 0000000..4b07e5e --- /dev/null +++ b/Documentation/html/search/enumvalues_1.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dffdd2edef386a497be686c82df05a77 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/functions_0.js b/Documentation/html/search/functions_0.js new file mode 100644 index 0000000..d6b6327 --- /dev/null +++ b/Documentation/html/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['addinstance_0',['addinstance',['../class_nano_brain_1_1_cluster.html#a01b55195c2f5be58659d9b0a5c993a8a',1,'NanoBrain.Cluster.AddInstance()'],['../class_nano_brain_1_1_cluster.html#a1b60bd296f757257a640559b732ed241',1,'NanoBrain.Cluster.AddInstance(ClusterPrefab prefab)']]], + ['addsynapse_1',['AddSynapse',['../class_nano_brain_1_1_neuron.html#a524fdd9e25ebbcb5baca60a942d6eb80',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/functions_0.js.meta b/Documentation/html/search/functions_0.js.meta new file mode 100644 index 0000000..ce4e822 --- /dev/null +++ b/Documentation/html/search/functions_0.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 65ed49f03cb48699081132677596b14e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/functions_1.js b/Documentation/html/search/functions_1.js new file mode 100644 index 0000000..d1b25bf --- /dev/null +++ b/Documentation/html/search/functions_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['cluster_0',['cluster',['../class_nano_brain_1_1_cluster.html#a86341cf5cc0d67a146a48e9c833df7ec',1,'NanoBrain.Cluster.Cluster(ClusterPrefab prefab, Cluster parent)'],['../class_nano_brain_1_1_cluster.html#a3a22ce2493a4d154fd971214b7c484d2',1,'NanoBrain.Cluster.Cluster(ClusterPrefab prefab, ClusterPrefab parent=null)']]], + ['collectreceivers_1',['CollectReceivers',['../class_nano_brain_1_1_cluster.html#ab067c159f399e69bcc9d2211bc9aa3c5',1,'NanoBrain::Cluster']]], + ['collectsynapsesto_2',['CollectSynapsesTo',['../class_nano_brain_1_1_cluster.html#a8736cab5b8381dc5a175fd03031d308e',1,'NanoBrain::Cluster']]] +]; diff --git a/Documentation/html/search/functions_1.js.meta b/Documentation/html/search/functions_1.js.meta new file mode 100644 index 0000000..94e0419 --- /dev/null +++ b/Documentation/html/search/functions_1.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ced74dd46c11936909db8f8f9022697c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/functions_2.js b/Documentation/html/search/functions_2.js new file mode 100644 index 0000000..1b5fcc2 --- /dev/null +++ b/Documentation/html/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deletenucleus_0',['DeleteNucleus',['../class_nano_brain_1_1_cluster.html#a6b5855021a2733df3c25ed67e8777509',1,'NanoBrain::Cluster']]] +]; diff --git a/Documentation/html/search/functions_2.js.meta b/Documentation/html/search/functions_2.js.meta new file mode 100644 index 0000000..a64f5e4 --- /dev/null +++ b/Documentation/html/search/functions_2.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a0c134925cf8aa77d98a38a4ead437c3 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/functions_3.js b/Documentation/html/search/functions_3.js new file mode 100644 index 0000000..ed9f385 --- /dev/null +++ b/Documentation/html/search/functions_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getneuron_0',['getneuron',['../class_nano_brain_1_1_cluster.html#a938f7cc08d8fee459e0203e3b6869e06',1,'NanoBrain.Cluster.GetNeuron(string neuronName)'],['../class_nano_brain_1_1_cluster.html#a696fcbdd1ae684a7b55963d8e673b22f',1,'NanoBrain.Cluster.GetNeuron(int thingId, string neuronName, string thingName=null)']]], + ['getnucleus_1',['getnucleus',['../class_nano_brain_1_1_cluster.html#a31a62471a88a8180963be74227fd68be',1,'NanoBrain.Cluster.GetNucleus()'],['../class_nano_brain_1_1_cluster_prefab.html#a49601bf5ea05b4f28974a5c0a1345286',1,'NanoBrain.ClusterPrefab.GetNucleus()']]], + ['getnucleusindex_2',['getnucleusindex',['../class_nano_brain_1_1_cluster.html#aec242a8433041ed22dde2375436016ce',1,'NanoBrain.Cluster.GetNucleusIndex(List< Nucleus > nuclei, Nucleus nucleus)'],['../class_nano_brain_1_1_cluster.html#ad9441d41aa6e2bfd3f9acf111dde1dd8',1,'NanoBrain.Cluster.GetNucleusIndex(List< Nucleus > nuclei, string nucleusName)']]], + ['getsynapse_3',['GetSynapse',['../class_nano_brain_1_1_neuron.html#a1f3c83acf569fa483101fd0ce11ec5fc',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/functions_3.js.meta b/Documentation/html/search/functions_3.js.meta new file mode 100644 index 0000000..1e19153 --- /dev/null +++ b/Documentation/html/search/functions_3.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 665a1ed08b7d61e27a5568974097e3fd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/functions_4.js b/Documentation/html/search/functions_4.js new file mode 100644 index 0000000..c855a1d --- /dev/null +++ b/Documentation/html/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['neuron_0',['Neuron',['../class_nano_brain_1_1_neuron.html#a54a94ea928e9a54552692e7d1e84782e',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/functions_4.js.meta b/Documentation/html/search/functions_4.js.meta new file mode 100644 index 0000000..568b3b2 --- /dev/null +++ b/Documentation/html/search/functions_4.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 01d34ffd14a97c743b4d7ac0aba7d702 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/functions_5.js b/Documentation/html/search/functions_5.js new file mode 100644 index 0000000..649d473 --- /dev/null +++ b/Documentation/html/search/functions_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['processstimulus_0',['ProcessStimulus',['../class_nano_brain_1_1_neuron.html#a30c28f0ede8d4cba4e2937cade0e79e0',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/functions_5.js.meta b/Documentation/html/search/functions_5.js.meta new file mode 100644 index 0000000..40ae364 --- /dev/null +++ b/Documentation/html/search/functions_5.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 81fdf1e58035175299f1747116f142cd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/functions_6.js b/Documentation/html/search/functions_6.js new file mode 100644 index 0000000..5b39ccf --- /dev/null +++ b/Documentation/html/search/functions_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['refresh_0',['Refresh',['../class_nano_brain_1_1_cluster.html#a40ad7f93121a3684699c92bcb03b1c74',1,'NanoBrain::Cluster']]], + ['refreshcomputeorders_1',['RefreshComputeOrders',['../class_nano_brain_1_1_cluster.html#acff74557b8c50f2355898855f1ab6073',1,'NanoBrain::Cluster']]], + ['refreshoutputs_2',['RefreshOutputs',['../class_nano_brain_1_1_cluster.html#a209d8f083a5bd82ce764ee5ac7e9f97e',1,'NanoBrain::Cluster']]], + ['removeinstance_3',['RemoveInstance',['../class_nano_brain_1_1_cluster.html#a5454e0c01870e1c2df93b33f43704210',1,'NanoBrain::Cluster']]], + ['removesynapse_4',['RemoveSynapse',['../class_nano_brain_1_1_neuron.html#a2ae2b960608803beabade55d2c830088',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/functions_6.js.meta b/Documentation/html/search/functions_6.js.meta new file mode 100644 index 0000000..9c78ac7 --- /dev/null +++ b/Documentation/html/search/functions_6.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2ecf36c75790523df9f71bcffb8a2900 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/functions_7.js b/Documentation/html/search/functions_7.js new file mode 100644 index 0000000..09608d8 --- /dev/null +++ b/Documentation/html/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['setbias_0',['SetBias',['../class_nano_brain_1_1_neuron.html#a407e9fca0108715d6031ea4f2ae1005d',1,'NanoBrain::Neuron']]], + ['shallowcloneto_1',['shallowcloneto',['../class_nano_brain_1_1_cluster.html#a7ecc2afa858940901336663b435f8fb2',1,'NanoBrain.Cluster.ShallowCloneTo()'],['../class_nano_brain_1_1_neuron.html#afe95b6470ef7689253514229d02fe2b9',1,'NanoBrain.Neuron.ShallowCloneTo()'],['../class_nano_brain_1_1_nucleus.html#a4bb93cd4cd07072f35eae3a98ba5dde8',1,'NanoBrain.Nucleus.ShallowCloneTo()']]], + ['synapse_2',['Synapse',['../class_nano_brain_1_1_synapse.html#a63a57254f76939b6a7bbbeb630f839d2',1,'NanoBrain::Synapse']]] +]; diff --git a/Documentation/html/search/functions_7.js.meta b/Documentation/html/search/functions_7.js.meta new file mode 100644 index 0000000..846555a --- /dev/null +++ b/Documentation/html/search/functions_7.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3a0c573691300e89d9cdcdfe9c64e9a7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/functions_8.js b/Documentation/html/search/functions_8.js new file mode 100644 index 0000000..eb4e316 --- /dev/null +++ b/Documentation/html/search/functions_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['trygetnucleus_0',['TryGetNucleus',['../class_nano_brain_1_1_cluster.html#a40543b820890917a47186b04f0d44478',1,'NanoBrain::Cluster']]] +]; diff --git a/Documentation/html/search/functions_8.js.meta b/Documentation/html/search/functions_8.js.meta new file mode 100644 index 0000000..cc8d6e3 --- /dev/null +++ b/Documentation/html/search/functions_8.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1e1e327b7d4c34f269fc0762fdd605ea +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/functions_9.js b/Documentation/html/search/functions_9.js new file mode 100644 index 0000000..45f6fe1 --- /dev/null +++ b/Documentation/html/search/functions_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['updatefromnucleus_0',['UpdateFromNucleus',['../class_nano_brain_1_1_cluster.html#ab2e33a3a6642d31b5a927c7ee2db73ab',1,'NanoBrain::Cluster']]], + ['updatenuclei_1',['updatenuclei',['../class_nano_brain_1_1_memory_cell.html#a780592351f670461286b8cd00ec42ebd',1,'NanoBrain.MemoryCell.UpdateNuclei()'],['../class_nano_brain_1_1_nucleus.html#a31e93d392a4a861b55f3d87f0a7d6d59',1,'NanoBrain.Nucleus.UpdateNuclei()']]], + ['updatestateisolated_2',['updatestateisolated',['../class_nano_brain_1_1_cluster.html#ac40b182a3c5f32ec055d7fabbeaedbf3',1,'NanoBrain.Cluster.UpdateStateIsolated()'],['../class_nano_brain_1_1_nucleus.html#aaf267af9b5ad1b5f0247f04ed2934f97',1,'NanoBrain.Nucleus.UpdateStateIsolated()']]], + ['updateweight_3',['UpdateWeight',['../class_nano_brain_1_1_brain.html#a552d2f938f63f3c0f1997174d9098334',1,'NanoBrain::Brain']]] +]; diff --git a/Documentation/html/search/functions_9.js.meta b/Documentation/html/search/functions_9.js.meta new file mode 100644 index 0000000..3dd70af --- /dev/null +++ b/Documentation/html/search/functions_9.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d1db4d60c64a08735b3de279a9a6d3ab +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/mag.svg b/Documentation/html/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/Documentation/html/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/Documentation/html/search/mag.svg.meta b/Documentation/html/search/mag.svg.meta new file mode 100644 index 0000000..d321622 --- /dev/null +++ b/Documentation/html/search/mag.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 670ba244be3f5de23866683631f24f68 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/search/mag_d.svg b/Documentation/html/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/Documentation/html/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/Documentation/html/search/mag_d.svg.meta b/Documentation/html/search/mag_d.svg.meta new file mode 100644 index 0000000..31d72f6 --- /dev/null +++ b/Documentation/html/search/mag_d.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: bb69c47921567861fbba56647589ec16 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/search/mag_sel.svg b/Documentation/html/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/Documentation/html/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/Documentation/html/search/mag_sel.svg.meta b/Documentation/html/search/mag_sel.svg.meta new file mode 100644 index 0000000..399b5e1 --- /dev/null +++ b/Documentation/html/search/mag_sel.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: b9324c2942b664fb0a31114d5552801c +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/search/mag_seld.svg b/Documentation/html/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/Documentation/html/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/Documentation/html/search/mag_seld.svg.meta b/Documentation/html/search/mag_seld.svg.meta new file mode 100644 index 0000000..fd12b38 --- /dev/null +++ b/Documentation/html/search/mag_seld.svg.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 41e1362773440fefa94c022a6cf72822 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12408, guid: 0000000000000000e000000000000000, type: 0} + svgType: 3 + texturedSpriteMeshType: 0 + svgPixelsPerUnit: 100 + gradientResolution: 64 + alignment: 0 + customPivot: {x: 0, y: 0} + generatePhysicsShape: 0 + viewportOptions: 0 + preserveViewport: 0 + advancedMode: 0 + tessellationMode: 1 + predefinedResolutionIndex: 1 + targetResolution: 1080 + resolutionMultiplier: 1 + stepDistance: 10 + samplingStepDistance: 100 + maxCordDeviationEnabled: 0 + maxCordDeviation: 1 + maxTangentAngleEnabled: 0 + maxTangentAngle: 5 + keepTextureAspectRatio: 1 + textureSize: 256 + textureWidth: 256 + textureHeight: 256 + wrapMode: 0 + filterMode: 1 + sampleCount: 4 + preserveSVGImageAspect: 0 + useSVGPixelsPerUnit: 0 + spriteData: + TessellationDetail: 0 + SpriteName: + SpritePivot: {x: 0, y: 0} + SpriteAlignment: 0 + SpriteBorder: {x: 0, y: 0, z: 0, w: 0} + SpriteRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + SpriteID: + PhysicsOutlines: [] diff --git a/Documentation/html/search/namespaces_0.js b/Documentation/html/search/namespaces_0.js new file mode 100644 index 0000000..f525ebd --- /dev/null +++ b/Documentation/html/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nanobrain_0',['NanoBrain',['../namespace_nano_brain.html',1,'']]] +]; diff --git a/Documentation/html/search/namespaces_0.js.meta b/Documentation/html/search/namespaces_0.js.meta new file mode 100644 index 0000000..99c7f56 --- /dev/null +++ b/Documentation/html/search/namespaces_0.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c365b7848f276d43ca260709ba34d31a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/pages_0.js b/Documentation/html/search/pages_0.js new file mode 100644 index 0000000..bde3ebd --- /dev/null +++ b/Documentation/html/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['brain_20for_20unity_0',['Nano Brain for Unity',['../index.html',1,'']]] +]; diff --git a/Documentation/html/search/pages_0.js.meta b/Documentation/html/search/pages_0.js.meta new file mode 100644 index 0000000..c27e077 --- /dev/null +++ b/Documentation/html/search/pages_0.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6c981a5cf6b62efa5b9c32f9e1b95a62 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/pages_1.js b/Documentation/html/search/pages_1.js new file mode 100644 index 0000000..ca40bee --- /dev/null +++ b/Documentation/html/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['for_20unity_0',['Nano Brain for Unity',['../index.html',1,'']]] +]; diff --git a/Documentation/html/search/pages_1.js.meta b/Documentation/html/search/pages_1.js.meta new file mode 100644 index 0000000..227b374 --- /dev/null +++ b/Documentation/html/search/pages_1.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5b9c38fe93e76835d9d7f62d5617818d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/pages_2.js b/Documentation/html/search/pages_2.js new file mode 100644 index 0000000..dc6d821 --- /dev/null +++ b/Documentation/html/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['installation_0',['Package Installation',['../md__installation.html',1,'']]] +]; diff --git a/Documentation/html/search/pages_2.js.meta b/Documentation/html/search/pages_2.js.meta new file mode 100644 index 0000000..2e9236e --- /dev/null +++ b/Documentation/html/search/pages_2.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2b5c7292911003947b81c10e8cec49bf +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/pages_3.js b/Documentation/html/search/pages_3.js new file mode 100644 index 0000000..11dd9d9 --- /dev/null +++ b/Documentation/html/search/pages_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nano_20brain_20for_20unity_0',['Nano Brain for Unity',['../index.html',1,'']]], + ['nanobrain_1',['NanoBrain',['../md__2home_2pascal_2_development_2_projects_2_passer_2_nano_brain_2_nano_brain_2_assets_2_nano_brain-unitypackage_2_r_e_a_d_m_e.html',1,'']]] +]; diff --git a/Documentation/html/search/pages_3.js.meta b/Documentation/html/search/pages_3.js.meta new file mode 100644 index 0000000..44a34fb --- /dev/null +++ b/Documentation/html/search/pages_3.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d5e898cec12687524ad13a526157c187 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/pages_4.js b/Documentation/html/search/pages_4.js new file mode 100644 index 0000000..05d1d2d --- /dev/null +++ b/Documentation/html/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['package_20installation_0',['Package Installation',['../md__installation.html',1,'']]] +]; diff --git a/Documentation/html/search/pages_4.js.meta b/Documentation/html/search/pages_4.js.meta new file mode 100644 index 0000000..2730d6b --- /dev/null +++ b/Documentation/html/search/pages_4.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 762ab96aefd8932e5829f8fd5cb0bd93 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/pages_5.js b/Documentation/html/search/pages_5.js new file mode 100644 index 0000000..6508dbb --- /dev/null +++ b/Documentation/html/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unity_0',['Nano Brain for Unity',['../index.html',1,'']]] +]; diff --git a/Documentation/html/search/pages_5.js.meta b/Documentation/html/search/pages_5.js.meta new file mode 100644 index 0000000..9869dd9 --- /dev/null +++ b/Documentation/html/search/pages_5.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 30e182245cd305c60b79eefcba82a8e2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/properties_0.js b/Documentation/html/search/properties_0.js new file mode 100644 index 0000000..b0f4491 --- /dev/null +++ b/Documentation/html/search/properties_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['basename_0',['baseName',['../class_nano_brain_1_1_cluster.html#ad81aed306939c26d22043ca3a0cd71c4',1,'NanoBrain::Cluster']]], + ['brain_1',['brain',['../class_nano_brain_1_1_brain.html#a9c34c8cba2339f23b6406c45ab8490a8',1,'NanoBrain::Brain']]] +]; diff --git a/Documentation/html/search/properties_0.js.meta b/Documentation/html/search/properties_0.js.meta new file mode 100644 index 0000000..3067454 --- /dev/null +++ b/Documentation/html/search/properties_0.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a5fbd96f77d256c5a90d2c67616466e4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/properties_1.js b/Documentation/html/search/properties_1.js new file mode 100644 index 0000000..1600c64 --- /dev/null +++ b/Documentation/html/search/properties_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['computeorders_0',['computeOrders',['../class_nano_brain_1_1_cluster.html#af3bb2af13fc7fcb15e7610d4c81cb395',1,'NanoBrain::Cluster']]] +]; diff --git a/Documentation/html/search/properties_1.js.meta b/Documentation/html/search/properties_1.js.meta new file mode 100644 index 0000000..e12ccc6 --- /dev/null +++ b/Documentation/html/search/properties_1.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fe74a155ea6d16028b093404058396c3 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/properties_2.js b/Documentation/html/search/properties_2.js new file mode 100644 index 0000000..1e01f0d --- /dev/null +++ b/Documentation/html/search/properties_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['defaultoutput_0',['defaultOutput',['../class_nano_brain_1_1_cluster.html#ac2d36a78d001fde5c95bc48f32e0fcc7',1,'NanoBrain::Cluster']]] +]; diff --git a/Documentation/html/search/properties_2.js.meta b/Documentation/html/search/properties_2.js.meta new file mode 100644 index 0000000..0ae2ed6 --- /dev/null +++ b/Documentation/html/search/properties_2.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d052bcbbc70413592b4cba9cfeec57cb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/properties_3.js b/Documentation/html/search/properties_3.js new file mode 100644 index 0000000..4ee7c8c --- /dev/null +++ b/Documentation/html/search/properties_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['outputs_0',['outputs',['../class_nano_brain_1_1_cluster.html#a89d8b00304b04025ae0446421363aa1f',1,'NanoBrain::Cluster']]] +]; diff --git a/Documentation/html/search/properties_3.js.meta b/Documentation/html/search/properties_3.js.meta new file mode 100644 index 0000000..69c3144 --- /dev/null +++ b/Documentation/html/search/properties_3.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 127747e533ee9514eb83446dfe69454c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/properties_4.js b/Documentation/html/search/properties_4.js new file mode 100644 index 0000000..8e2934b --- /dev/null +++ b/Documentation/html/search/properties_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['synapses_0',['synapses',['../class_nano_brain_1_1_neuron.html#a96a7f4b8480a8fa9fce1d698a41e4dc7',1,'NanoBrain::Neuron']]] +]; diff --git a/Documentation/html/search/properties_4.js.meta b/Documentation/html/search/properties_4.js.meta new file mode 100644 index 0000000..641633c --- /dev/null +++ b/Documentation/html/search/properties_4.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b3c3469325562c7bc9c32b04b0931302 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/search.css b/Documentation/html/search/search.css new file mode 100644 index 0000000..feb41e1 --- /dev/null +++ b/Documentation/html/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: url('mag_sel.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag.svg'); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial,Verdana,sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: black; +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #9D9D9D; + background-color: #F9F9F9; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial,Verdana,sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: black; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: black; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: white; + background-color: #4D4D4D; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid black; + background-color: #EFEFEF; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #EFEFEF; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #555555; + font-family: Arial,Verdana,sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #555555; + font-family: Arial,Verdana,sans-serif; + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial,Verdana,sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial,Verdana,sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/Documentation/html/search/search.css.meta b/Documentation/html/search/search.css.meta new file mode 100644 index 0000000..65f4249 --- /dev/null +++ b/Documentation/html/search/search.css.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2dc5ca8306640ec9cbbd36d4afa4334e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/html/search/search.js b/Documentation/html/search/search.js new file mode 100644 index 0000000..6fd40c6 --- /dev/null +++ b/Documentation/html/search/search.js @@ -0,0 +1,840 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; eli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#424242;-webkit-transition:all 0.25s;transition:all 0.25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}#main-menu-state:not(:checked)~#main-menu{display:none}#main-menu-state:checked~#main-menu{display:block}@media (min-width: 768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked)~#main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#2D2D2D;outline:none}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#2D2D2D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important;color:#555555;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}} diff --git a/Documentation/html/tabs.css.meta b/Documentation/html/tabs.css.meta new file mode 100644 index 0000000..b799213 --- /dev/null +++ b/Documentation/html/tabs.css.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3ef3bd37f39242281ab6d268249c63f8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/doxygen/images.meta b/Documentation/images.meta similarity index 100% rename from doxygen/images.meta rename to Documentation/images.meta diff --git a/Documentation/images/PasserLifeLogoRight1_300.png b/Documentation/images/PasserLifeLogoRight1_300.png new file mode 100644 index 0000000..7480553 Binary files /dev/null and b/Documentation/images/PasserLifeLogoRight1_300.png differ diff --git a/doxygen/images/PasserLifeLogoRight1_300.png.meta b/Documentation/images/PasserLifeLogoRight1_300.png.meta similarity index 100% rename from doxygen/images/PasserLifeLogoRight1_300.png.meta rename to Documentation/images/PasserLifeLogoRight1_300.png.meta diff --git a/Editor/ClusterEditor.cs b/Editor/ClusterEditor.cs index 67764da..0c4b623 100644 --- a/Editor/ClusterEditor.cs +++ b/Editor/ClusterEditor.cs @@ -122,9 +122,9 @@ namespace NanoBrain { // create a SerializedObject wrapper so Unity inspector controls work (and Undo) SerializedObject so = new(prefabAsset); - foreach (Nucleus nucleus in this.prefab.cluster.nuclei) { - nucleus.Initialize(); - } + // foreach (Nucleus nucleus in this.prefab.cluster.nuclei) { + // nucleus.Initialize(); + // } this.inspectorIMGUIContainer = new IMGUIContainer(() => InspectorHandler(so)); @@ -230,8 +230,8 @@ namespace NanoBrain { int instanceCount = cluster.instanceCount; if (instanceCount <= 1) { - if (cluster.siblingClusters != null && cluster.siblingClusters.Length > 1) - instanceCount = cluster.siblingClusters.Count(); + if (cluster.instances != null && cluster.instances.Length > 1) + instanceCount = cluster.instances.Count(); else instanceCount = 1; } @@ -249,8 +249,8 @@ namespace NanoBrain { } EditorGUILayout.EndHorizontal(); - if (GUILayout.Button("Reimport Cluster")) - ReimportCluster(cluster); + // if (GUILayout.Button("Reimport Cluster")) + // ReimportCluster(cluster); } protected void NucleusInspector(Nucleus nucleus, ref bool anythingChanged) { @@ -310,7 +310,7 @@ namespace NanoBrain { } else { if (synapse.neuron.parent is Cluster iReceptor) { - array = iReceptor.siblingClusters; + array = iReceptor.instances; if (iReceptor is Cluster iCluster) elementIx = Cluster.GetNucleusIndex(iCluster.nuclei, synapse.neuron); } @@ -440,30 +440,30 @@ namespace NanoBrain { subclusterInstance.defaultOutput.AddReceiver(nucleus); } - private void ReimportCluster(Cluster subCluster) { - if (subCluster.siblingClusters == null || subCluster.siblingClusters.Length <= 0) { - Cluster reimportedCluster = new(subCluster.prefab, this.prefab); - subCluster.MoveReceivers(reimportedCluster); - // subcluster should be garbage now... - this.currentNucleus = reimportedCluster; - } - else { - this.currentNucleus = null; - List newSiblingsList = new(); - foreach (Cluster sibling in subCluster.siblingClusters) { - Cluster reimportedCluster = new(sibling.prefab, this.prefab) { - name = sibling.name - }; - sibling.MoveReceivers(reimportedCluster); - newSiblingsList.Add(reimportedCluster); - // make the first reimportedCluster the new current nucleus - this.currentNucleus ??= reimportedCluster; - } - Cluster[] newSiblings = newSiblingsList.ToArray(); - foreach (Cluster sibling in newSiblings) - sibling.siblingClusters = newSiblings; - } - } + // private void ReimportCluster(Cluster subCluster) { + // if (subCluster.siblingClusters == null || subCluster.siblingClusters.Length <= 0) { + // Cluster reimportedCluster = new(subCluster.prefab, this.prefab); + // subCluster.MoveReceivers(reimportedCluster); + // // subcluster should be garbage now... + // this.currentNucleus = reimportedCluster; + // } + // else { + // this.currentNucleus = null; + // List newSiblingsList = new(); + // foreach (Cluster sibling in subCluster.siblingClusters) { + // Cluster reimportedCluster = new(sibling.prefab, this.prefab) { + // name = sibling.name + // }; + // sibling.MoveReceivers(reimportedCluster); + // newSiblingsList.Add(reimportedCluster); + // // make the first reimportedCluster the new current nucleus + // this.currentNucleus ??= reimportedCluster; + // } + // Cluster[] newSiblings = newSiblingsList.ToArray(); + // foreach (Cluster sibling in newSiblings) + // sibling.siblingClusters = newSiblings; + // } + // } int selectedConnectNucleus = -1; // Connect to another nucleus @@ -492,12 +492,12 @@ namespace NanoBrain { EditorGUILayout.EndHorizontal(); if (connecting) { Nucleus nucleus = nuclei.ElementAt(selectedConnectNucleus); - if (nucleus is Cluster subCluster) { - subCluster.AddArrayReceiver(this.currentNucleus); - } - else if (nucleus is Neuron neuron) { - neuron.AddReceiver(this.currentNucleus); - } + // if (nucleus is Cluster subCluster) { + // subCluster.AddArrayReceiver(this.currentNucleus); + // } + // else + if (nucleus is Neuron neuron) + neuron.AddReceiver(this.currentNucleus); this.currentCluster.Refresh(); } return connecting; diff --git a/Editor/ClusterViewer.cs b/Editor/ClusterViewer.cs index 1127e5c..b6e006a 100644 --- a/Editor/ClusterViewer.cs +++ b/Editor/ClusterViewer.cs @@ -111,7 +111,7 @@ namespace NanoBrain { if (Application.isPlaying == false) this.serializedBrain = new SerializedObject(this.currentCluster.prefab); - this.selectedOutput = this.currentCluster.outputs[0]; + this.selectedOutput = this.currentCluster.defaultOutput; this.currentNucleus = this.selectedOutput; Rebuild(); } @@ -270,7 +270,7 @@ namespace NanoBrain { Handles.color = Color.black; Handles.DrawAAConvexPolygon(verts); int row = 0; - if (cluster.siblingClusters == null) { + if (cluster.instances == null) { Vector3 pos = new(150, margin + row * spacing, 0.0f); Handles.color = Color.white; // The selected sibling highlight ring @@ -279,7 +279,7 @@ namespace NanoBrain { row++; } else { - foreach (Cluster sibling in cluster.siblingClusters) { + foreach (Cluster sibling in cluster.instances) { Vector3 pos = new(150, margin + row * spacing, 0.0f); Handles.color = Color.white; // The selected sibling highlight ring @@ -459,14 +459,14 @@ namespace NanoBrain { } protected void DrawClusterSynapses(Nucleus nucleus, Vector3 parentPos, float size) { - if (nucleus == null || nucleus.parent == null || nucleus.parent.siblingClusters == null) + if (nucleus == null || nucleus.parent == null || nucleus.parent.instances == null) return; // Hack to disable showing labels expandArray = true; float maxValue = 0; - foreach (Cluster sibling in nucleus.parent.siblingClusters) { + foreach (Cluster sibling in nucleus.parent.instances) { Neuron siblingNeuron = sibling.GetNucleus(nucleus.name) as Neuron; float value = siblingNeuron.outputMagnitude; // no need to add weight as they are all the same if (value > maxValue) @@ -478,7 +478,7 @@ namespace NanoBrain { float margin = 10 + spacing / 2; int row = 0; - foreach (Cluster sibling in nucleus.parent.siblingClusters) { + foreach (Cluster sibling in nucleus.parent.instances) { Neuron siblingNeuron = sibling.GetNucleus(nucleus.name) as Neuron; Vector3 position = new(250, margin + row * spacing, 0.0f); DrawEdge(parentPos, position); @@ -690,8 +690,8 @@ namespace NanoBrain { Handles.Label(labelPosition, cluster.instanceCount.ToString(), labelTextStyle); labelTextStyle.normal.textColor = Color.white; } - else if (cluster.siblingClusters != null && cluster.siblingClusters.Length > 1) { - Handles.Label(labelPosition, cluster.siblingClusters.Length.ToString(), labelTextStyle); + else if (cluster.instances != null && cluster.instances.Length > 1) { + Handles.Label(labelPosition, cluster.instances.Length.ToString(), labelTextStyle); labelTextStyle.normal.textColor = Color.white; } } @@ -856,7 +856,7 @@ namespace NanoBrain { Handles.color = Color.yellow; if (this.selectedSynapseNeuron != null) { - foreach (Cluster sibling in this.selectedSynapseNeuron.parent.siblingClusters) { + foreach (Cluster sibling in this.selectedSynapseNeuron.parent.instances) { Neuron siblingNeuron = sibling.GetNucleus(this.selectedSynapseNeuron.name) as Neuron; Vector3 worldVector = this.gameObject.transform.TransformVector(siblingNeuron.outputValue); Handles.DrawLine(this.gameObject.transform.position, this.gameObject.transform.position + worldVector); diff --git a/README.md b/README.md new file mode 100644 index 0000000..017fe3f --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# %NanoBrain + +Documentation is found in the [Documentation folder](Documentation/html/index.html) diff --git a/README.md.meta b/README.md.meta new file mode 100644 index 0000000..65c5817 --- /dev/null +++ b/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4235740baccf09756af4db8495cd8f87 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LinearAlgebra/.editorconfig b/Runtime/LinearAlgebra/.editorconfig deleted file mode 100644 index 1ec7f97..0000000 --- a/Runtime/LinearAlgebra/.editorconfig +++ /dev/null @@ -1,19 +0,0 @@ -# EditorConfig is awesome: https://EditorConfig.org - -# top-most EditorConfig file -root = true - -[*] -indent_style = space -indent_size = 4 -end_of_line = crlf -charset = utf-8 -trim_trailing_whitespace = false -insert_final_newline = false -max_line_length = 80 - -[*.cs] -csharp_new_line_before_open_brace = none -# Suppress warnings everywhere -dotnet_diagnostic.IDE1006.severity = none -dotnet_diagnostic.IDE0130.severity = none \ No newline at end of file diff --git a/Runtime/LinearAlgebra/.gitea/workflows/unit_tests.yaml b/Runtime/LinearAlgebra/.gitea/workflows/unit_tests.yaml deleted file mode 100644 index e98b26e..0000000 --- a/Runtime/LinearAlgebra/.gitea/workflows/unit_tests.yaml +++ /dev/null @@ -1,37 +0,0 @@ -name: Build and Run C# Unit Tests - -on: - push: - branches: - - '**' - pull_request: - branches: - - '**' - -jobs: - build-and-test: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Setup .NET - uses: actions/setup-dotnet@v1 - with: - dotnet-version: '8.0.x' # Specify the .NET SDK version - - - name: Check Current Directory - run: pwd # Logs the current working directory - - - name: List Files - run: ls -la # Lists all files in the current directory - - - name: Restore Dependencies - run: dotnet restore ./LinearAlgebra-csharp.sln # Restore NuGet packages - - - name: Build the Project - run: dotnet build ./LinearAlgebra-csharp.sln --configuration Release # Build the C# project - - - name: Run Unit Tests - run: dotnet test ./test/LinearAlgebra_Test.csproj --configuration Release # Execute unit tests diff --git a/Runtime/LinearAlgebra/.gitignore b/Runtime/LinearAlgebra/.gitignore deleted file mode 100644 index b32a30c..0000000 --- a/Runtime/LinearAlgebra/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -DoxyGen/DoxyWarnLogfile.txt -.vscode/settings.json -**bin -**obj -**.meta diff --git a/Runtime/LinearAlgebra/LinearAlgebra-csharp.sln b/Runtime/LinearAlgebra/LinearAlgebra-csharp.sln deleted file mode 100644 index 4b13b2b..0000000 --- a/Runtime/LinearAlgebra/LinearAlgebra-csharp.sln +++ /dev/null @@ -1,30 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.2.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LinearAlgebra", "src\LinearAlgebra.csproj", "{ECB58727-0354-924D-AE7B-22F6B21097EB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LinearAlgebra_Test", "test\LinearAlgebra_Test.csproj", "{715BB399-5FC4-2AC9-3757-177CA0C80774}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {ECB58727-0354-924D-AE7B-22F6B21097EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ECB58727-0354-924D-AE7B-22F6B21097EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ECB58727-0354-924D-AE7B-22F6B21097EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ECB58727-0354-924D-AE7B-22F6B21097EB}.Release|Any CPU.Build.0 = Release|Any CPU - {715BB399-5FC4-2AC9-3757-177CA0C80774}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {715BB399-5FC4-2AC9-3757-177CA0C80774}.Debug|Any CPU.Build.0 = Debug|Any CPU - {715BB399-5FC4-2AC9-3757-177CA0C80774}.Release|Any CPU.ActiveCfg = Release|Any CPU - {715BB399-5FC4-2AC9-3757-177CA0C80774}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E93B8294-87D4-4887-83B7-182A623D5833} - EndGlobalSection -EndGlobal diff --git a/Runtime/LinearAlgebra/src/Angle.cs b/Runtime/LinearAlgebra/src/Angle.cs deleted file mode 100644 index 7d2fd6b..0000000 --- a/Runtime/LinearAlgebra/src/Angle.cs +++ /dev/null @@ -1,341 +0,0 @@ -using System; - -namespace LinearAlgebra { - - public struct AngleFloat { - public const float Rad2Deg = 360.0f / ((float)Math.PI * 2); //0.0174532924F; - public const float Deg2Rad = (float)Math.PI * 2 / 360.0f; //57.29578F; - - private AngleFloat(float degrees) { - this.value = degrees; - } - private readonly float value; - - public static AngleFloat Degrees(float degrees) { - // Reduce it to (-180..180] - if (float.IsFinite(degrees)) { - while (degrees < -180) - degrees += 360; - while (degrees >= 180) - degrees -= 360; - } - return new AngleFloat(degrees); - } - - public static AngleFloat Radians(float radians) { - // Reduce it to (-pi..pi] - if (float.IsFinite(radians)) { - while (radians <= -Math.PI) - radians += 2 * (float)Math.PI; - while (radians > Math.PI) - radians -= 2 * (float)Math.PI; - } - - return new AngleFloat(radians * Rad2Deg); - } - - public static AngleFloat Revolutions(float revolutions) { - // reduce it to (-0.5 .. 0.5] - if (float.IsFinite(revolutions)) { - // Get the integer part - int integerPart = (int)revolutions; - - // Get the decimal part - revolutions -= integerPart; - if (revolutions < -0.5) - revolutions += 1; - if (revolutions >= 0.5) - revolutions -= 1; - } - return new AngleFloat(revolutions * 360); - } - - public readonly float inDegrees => this.value; - - public readonly float inRadians => this.value * Deg2Rad; - - public readonly float inRevolutions => this.value / 360.0f; - - public override string ToString() { - return $"{this.inDegrees}\u00B0"; - } - - public static readonly AngleFloat zero = Degrees(0); - public static readonly AngleFloat deg90 = Degrees(90); - public static readonly AngleFloat deg180 = Degrees(180); - - /// - /// Get the sign of the angle - /// - /// The angle - /// -1 when the angle is negative, 1 when it is positive and 0 in all other cases - public static int Sign(AngleFloat a) { - if (a.value < 0) - return -1; - if (a.value > 0) - return 1; - return 0; - } - - /// - /// Returns the magnitude of the angle - /// - /// The angle - /// The positive magnitude of the angle - /// Negative values are negated to get a positive result - public static AngleFloat Abs(AngleFloat a) { - if (Sign(a) < 0) - return -a; - else - return a; - } - - /// - /// Tests the equality of two angles - /// - /// - /// - /// True when the angles are equal, false otherwise - /// The equality is determine within the limits of precision of a float - public static bool operator ==(AngleFloat a1, AngleFloat a2) { - return a1.value == a2.value; - } - - /// - /// Tests the inequality of two angles - /// - /// - /// - /// True when the angles are not equal, false otherwise - /// The equality is determine within the limits of precision of a float - public static bool operator !=(AngleFloat a1, AngleFloat a2) { - return a1.value != a2.value; - } - - public override readonly bool Equals(object obj) { - if (obj is AngleFloat other) { - return this == other; - } - return false; - } - - public override readonly int GetHashCode() { - return this.value.GetHashCode(); - } - - - /// - /// Tests if the first angle is greater than the second - /// - /// - /// - /// True when a1 is greater than a2, False otherwise - public static bool operator >(AngleFloat a1, AngleFloat a2) { - return a1.value > a2.value; - } - - /// - /// Tests if the first angle is greater than or equal to the second - /// - /// - /// - /// True when a1 is greater than or equal to a2, False otherwise - public static bool operator >=(AngleFloat a1, AngleFloat a2) { - return a1.value >= a2.value; - } - - /// - /// Tests if the first angle is less than the second - /// - /// - /// - /// True when a1 is less than a2, False otherwise - public static bool operator <(AngleFloat a1, AngleFloat a2) { - return a1.value < a2.value; - } - - /// - /// Tests if the first angle is less than or equal to the second - /// - /// - /// - /// True when a1 is less than or equal to a2, False otherwise - public static bool operator <=(AngleFloat a1, AngleFloat a2) { - return a1.value <= a2.value; - } - - /// - /// Negate the angle - /// - /// The angle - /// The negated angle - /// The negation of -180 is still -180 because the range is (-180..180] - public static AngleFloat operator -(AngleFloat a) { - AngleFloat r = new(-a.value); - return r; - } - - /// - /// Subtract two angles - /// - /// Angle 1 - /// Angle 2 - /// The result of the subtraction - public static AngleFloat operator -(AngleFloat a1, AngleFloat a2) { - AngleFloat r = new(a1.value - a2.value); - return r; - } - /// - /// Add two angles - /// - /// Angle 1 - /// Angle 2 - /// The result of the addition - public static AngleFloat operator +(AngleFloat a1, AngleFloat a2) { - AngleFloat r = new(a1.value + a2.value); - return r; - } - - /// - /// Multiplies the angle - /// - /// The angle to multiply - /// The factor by which the angle is multiplied - /// The multiplied angle - public static AngleFloat operator *(AngleFloat a, float factor) { - return Degrees(a.inDegrees * factor); - } - public static AngleFloat operator *(float factor, AngleFloat a) { - return Degrees(factor * a.inDegrees); - } - - /// - /// Clamp the angle between the given min and max values - /// - /// The angle to clamp - /// The minimum angle - /// The maximum angle - /// The clamped angle - /// Angles are normalized - public static float Clamp(AngleFloat angle, AngleFloat min, AngleFloat max) { - return Float.Clamp(angle.inDegrees, min.inDegrees, max.inDegrees); - } - - /// @brief Calculates the cosine of an angle - /// @param angle The given angle - /// @return The cosine of the angle - public static float Cos(AngleFloat angle) { - return MathF.Cos(angle.inRadians); - } - /// @brief Calculates the sine of an angle - /// @param angle The given angle - /// @return The sine of the angle - public static float Sin(AngleFloat angle) { - return MathF.Sin(angle.inRadians); - } - /// @brief Calculates the tangent of an angle - /// @param angle The given angle - /// @return The tangent of the angle - public static float Tan(AngleFloat angle) { - return MathF.Tan(angle.inRadians); - } - - /// @brief Calculates the arc cosine angle - /// @param f The value - /// @return The arc cosine for the given value - public static AngleFloat Acos(float f) { - return Radians(MathF.Acos(f)); - } - /// @brief Calculates the arc sine angle - /// @param f The value - /// @return The arc sine for the given value - public static AngleFloat Asin(float f) { - return Radians(MathF.Asin(f)); - } - /// @brief Calculates the arc tangent angle - /// @param f The value - /// @return The arc tangent for the given value - public static AngleFloat Atan(float f) { - return Radians(MathF.Atan(f)); - } - /// @brief Calculates the tangent for the given values - /// @param y The vertical value - /// @param x The horizontal value - /// @return The tanget for the given values - /// Uses the y and x signs to compute the quadrant - public static AngleFloat Atan2(float y, float x) { - return Radians(MathF.Atan2(y, x)); - } - - /// - /// Rotate from one angle to the other with a maximum degrees - /// - /// Starting angle - /// Target angle - /// Maximum angle to rotate - /// The resulting angle - /// This function is compatible with radian and degrees angles - public static AngleFloat MoveTowards(AngleFloat fromAngle, AngleFloat toAngle, float maxDegrees) { - maxDegrees = Math.Max(0, maxDegrees); // filter out negative distances - AngleFloat d = toAngle - fromAngle; - float dDegrees = Abs(d).inDegrees; - d = Degrees(Float.Clamp(dDegrees, 0, maxDegrees)); - if (Sign(d) < 0) - d = -d; - return fromAngle + d; - } - } - - - /// - /// %Angle utilities - /// - public static class Angles { - public const float pi = 3.1415927410125732421875F; - // public static float Rad2Deg = 360.0f / ((float)Math.PI * 2); - // public static float Deg2Rad = ((float)Math.PI * 2) / 360.0f; - - - /// - /// Determine the angle difference, result is a normalized angle - /// - /// First first angle - /// The second angle - /// the angle between the two angles - /// Angle values should be degrees - public static float Difference(float a, float b) { - float r = Normalize(b - a); - return r; - } - - /// - /// Normalize an angle to the range -180 < angle <= 180 - /// - /// The angle to normalize - /// The normalized angle in interval (-180..180] - /// Angle values should be in degrees - public static float Normalize(float angle) { - if (float.IsInfinity(angle)) - return angle; - - while (angle <= -180) angle += 360; - while (angle > 180) angle -= 360; - return angle; - } - - /// - /// Map interval of angles between vectors [0..Pi] to interval [0..1] - /// - /// The first vector - /// The second vector - /// The resulting factor in interval [0..1] - /// Vectors a and b must be normalized - /// \deprecated Please use Vector2.ToFactor instead. - // [Obsolete("Please use Vector2.ToFactor instead.")] - // public static float ToFactor(Vector2Float v1, Vector2Float v2) { - // return (1 - Vector2Float.Dot(v1, v2)) / 2; - // } - - } - -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/Decomposition.cs b/Runtime/LinearAlgebra/src/Decomposition.cs deleted file mode 100644 index ddaf434..0000000 --- a/Runtime/LinearAlgebra/src/Decomposition.cs +++ /dev/null @@ -1,287 +0,0 @@ -using System; -namespace LinearAlgebra { - class QR { - // QR Decomposition of a matrix A - public static (Matrix2 Q, Matrix2 R) Decomposition(Matrix2 A) { - int nRows = A.nRows; - int nCols = A.nCols; - - float[,] Q = new float[nRows, nCols]; - float[,] R = new float[nCols, nCols]; - - // Perform Gram-Schmidt orthogonalization - for (uint colIx = 0; colIx < nCols; colIx++) { - - // Step 1: v = column(ix) of A - float[] v = new float[nRows]; - for (int rowIx = 0; rowIx < nRows; rowIx++) - v[rowIx] = A.data[rowIx, colIx]; - - // Step 2: Subtract projections of v onto previous q's (orthogonalize) - for (uint colIx2 = 0; colIx2 < colIx; colIx2++) { - float dotProd = 0; - for (int i = 0; i < nRows; i++) - dotProd += Q[i, colIx2] * v[i]; - for (int i = 0; i < nRows; i++) - v[i] -= dotProd * Q[i, colIx2]; - } - - // Step 3: Normalize v to get column(ix) of Q - float norm = 0; - for (int rowIx = 0; rowIx < nRows; rowIx++) - norm += v[rowIx] * v[rowIx]; - norm = (float)Math.Sqrt(norm); - - for (int rowIx = 0; rowIx < nRows; rowIx++) - Q[rowIx, colIx] = v[rowIx] / norm; - - // Store the coefficients of R - for (int colIx2 = 0; colIx2 <= colIx; colIx2++) { - R[colIx2, colIx] = 0; - for (int k = 0; k < nRows; k++) - R[colIx2, colIx] += Q[k, colIx2] * A.data[k, colIx]; - } - } - return (new Matrix2(Q), new Matrix2(R)); - } - - // Reduced QR Decomposition of a matrix A - public static (Matrix2 Q, Matrix2 R) ReducedDecomposition(Matrix2 A) { - int nRows = A.nRows; - int nCols = A.nCols; - - float[,] Q = new float[nRows, nCols]; - float[,] R = new float[nCols, nCols]; - - // Perform Gram-Schmidt orthogonalization - for (int colIx = 0; colIx < nCols; colIx++) { - - // Step 1: v = column(colIx) of A - float[] columnIx = new float[nRows]; - bool isZeroColumn = true; - for (int rowIx = 0; rowIx < nRows; rowIx++) { - columnIx[rowIx] = A.data[rowIx, colIx]; - if (columnIx[rowIx] != 0) - isZeroColumn = false; - } - if (isZeroColumn) { - for (int rowIx = 0; rowIx < nRows; rowIx++) - Q[rowIx, colIx] = 0; - // Set corresponding R element to 0 - R[colIx, colIx] = 0; - - Console.WriteLine($"zero column {colIx}"); - - continue; - } - - // Step 2: Subtract projections of v onto previous q's (orthogonalize) - for (int colIx2 = 0; colIx2 < colIx; colIx2++) { - // Compute the dot product of v and column(colIx2) of Q - float dotProduct = 0; - for (int rowIx2 = 0; rowIx2 < nRows; rowIx2++) - dotProduct += columnIx[rowIx2] * Q[rowIx2, colIx2]; - // Subtract the projection from v - for (int rowIx2 = 0; rowIx2 < nRows; rowIx2++) - columnIx[rowIx2] -= dotProduct * Q[rowIx2, colIx2]; - } - - // Step 3: Normalize v to get column(colIx) of Q - float norm = 0; - for (int rowIx = 0; rowIx < nRows; rowIx++) - norm += columnIx[rowIx] * columnIx[rowIx]; - if (norm == 0) - throw new Exception("invalid value"); - - norm = (float)Math.Sqrt(norm); - - for (int rowIx = 0; rowIx < nRows; rowIx++) - Q[rowIx, colIx] = columnIx[rowIx] / norm; - - // Here is where it deviates from the Full QR Decomposition ! - - // Step 4: Compute the row(colIx) of R - for (int colIx2 = colIx; colIx2 < nCols; colIx2++) { - float dotProduct = 0; - for (int rowIx2 = 0; rowIx2 < nRows; rowIx2++) - dotProduct += Q[rowIx2, colIx] * A.data[rowIx2, colIx2]; - R[colIx, colIx2] = dotProduct; - } - } - if (!float.IsFinite(R[0, 0])) - throw new Exception("invalid value"); - - return (new Matrix2(Q), new Matrix2(R)); - } - } - - class SVD { - // According to ChatGPT, Mathnet uses Golub-Reinsch SVD algorithm - // 1. Bidiagonalization: The input matrix AA is reduced to a bidiagonal form using Golub-Kahan bidiagonalization. - // This process involves applying a sequence of Householder reflections to AA to create a bidiagonal matrix. - // This step reduces the complexity by making the matrix simpler while retaining the essential structure needed for SVD. - // - // 2. Diagonalization: Once the matrix is in bidiagonal form, - // the singular values are computed using an iterative process - // (typically involving QR factorization or Jacobi rotations) until convergence. - // This process diagonalizes the bidiagonal matrix and allows extraction of the singular values. - // - // 3. Computing UU and VTVT: After obtaining the singular values, - // the left singular vectors UU and right singular vectors VTVT are computed - // using the accumulated transformations (such as Householder reflections) from the bidiagonalization step. - - // Bidiagnolizations through Householder transformations - public static (Matrix2 U1, Matrix2 B, Matrix2 V1) Bidiagonalization(Matrix2 A) { - int m = A.nRows; // Rows of A - int n = A.nCols; // Columns of A - float[,] U1 = new float[m, m]; // Left orthogonal matrix - float[,] V1 = new float[n, n]; // Right orthogonal matrix - float[,] B = A.Clone().data; // Copy A to B for transformation - - // Initialize U1 and V1 as identity matrices - for (int i = 0; i < m; i++) - U1[i, i] = 1; - for (int i = 0; i < n; i++) - V1[i, i] = 1; - - // Perform Householder reflections to create a bidiagonal matrix B - for (int j = 0; j < n; j++) { - // Step 1: Construct the Householder vector y - float[] y = new float[m - j]; - for (int i = j; i < m; i++) - y[i - j] = B[i, j]; - - // Step 2: Compute the norm and scalar alpha - float norm = 0; - for (int i = 0; i < y.Length; i++) - norm += y[i] * y[i]; - norm = (float)Math.Sqrt(norm); - - if (B[j, j] > 0) - norm = -norm; - - float alpha = (float)Math.Sqrt(0.5 * (norm * (norm - B[j, j]))); - float r = (float)Math.Sqrt(0.5 * (norm * (norm + B[j, j]))); - - // Step 3: Apply the reflection to zero out below diagonal - for (int k = j; k < n; k++) { - float dot = 0; - for (int i = j; i < m; i++) - dot += y[i - j] * B[i, k]; - dot /= r; - - for (int i = j; i < m; i++) - B[i, k] -= 2 * dot * y[i - j]; - } - - // Step 4: Update U1 with the Householder reflection (U1 * Householder) - for (int i = j; i < m; i++) - U1[i, j] = y[i - j] / alpha; - - // Step 5: Update V1 (storing the Householder vector y) - // Correct indexing: we only need to store part of y in V1 from index j to n - for (int i = j; i < n; i++) - V1[j, i] = B[j, i]; - - // Repeat steps for further columns if necessary - } - return (new Matrix2(U1), new Matrix2(B), new Matrix2(V1)); - } - - public static Matrix2 Bidiagonalize(Matrix2 A) { - int m = A.nRows; // Rows of A - int n = A.nCols; // Columns of A - float[,] B = A.Clone().data; // Copy A to B for transformation - - // Perform Householder reflections to create a bidiagonal matrix B - for (int j = 0; j < n; j++) { - // Step 1: Construct the Householder vector y - float[] y = new float[m - j]; - for (int i = j; i < m; i++) - y[i - j] = B[i, j]; - - // Step 2: Compute the norm and scalar alpha - float norm = 0; - for (int i = 0; i < y.Length; i++) - norm += y[i] * y[i]; - norm = (float)Math.Sqrt(norm); - - if (B[j, j] > 0) - norm = -norm; - - float r = (float)Math.Sqrt(0.5 * (norm * (norm + B[j, j]))); - - // Step 3: Apply the reflection to zero out below diagonal - for (int k = j; k < n; k++) { - float dot = 0; - for (int i = j; i < m; i++) - dot += y[i - j] * B[i, k]; - dot /= r; - - for (int i = j; i < m; i++) - B[i, k] -= 2 * dot * y[i - j]; - } - - // Repeat steps for further columns if necessary - } - return new Matrix2(B); - } - - // QR Iteration for diagonalization of a bidiagonal matrix B - public static (Matrix1 singularValues, Matrix2 U, Matrix2 Vt) QRIteration(Matrix2 B) { - int m = B.nRows; - int n = B.nCols; - - Matrix2 U = new(m, m); // Left singular vectors (U) - Matrix2 Vt = new(n, n); // Right singular vectors (V^T) - float[] singularValues = new float[Math.Min(m, n)]; // Singular values - - // Initialize U and Vt as identity matrices - for (int i = 0; i < m; i++) - U.data[i, i] = 1; - for (int i = 0; i < n; i++) - Vt.data[i, i] = 1; - - // Perform QR iterations - float tolerance = 1e-7f; //1e-12f; for double - bool converged = false; - while (!converged) { - // Perform QR decomposition on the matrix B - (Matrix2 Q, Matrix2 R) = QR.Decomposition(B); - - // Update B to be the product Q * R //R * Q - B = R * Q; - - // Accumulate the transformations in U and Vt - U *= Q; - Vt *= R; - - // Check convergence by looking at the off-diagonal elements of B - converged = true; - for (int i = 0; i < m - 1; i++) { - for (int j = i + 1; j < n; j++) { - if (Math.Abs(B.data[i, j]) > tolerance) { - converged = false; - break; - } - } - } - } - - // Extract singular values (diagonal elements of B) - for (int i = 0; i < Math.Min(m, n); i++) - singularValues[i] = B.data[i, i]; - - return (new Matrix1(singularValues), U, Vt); - } - - public static (Matrix2 U, Matrix1 S, Matrix2 Vt) Decomposition(Matrix2 A) { - if (A.nRows != A.nCols) - throw new ArgumentException("SVD: matrix A has to be square."); - - Matrix2 B = Bidiagonalize(A); - (Matrix1 S, Matrix2 U, Matrix2 Vt) = QRIteration(B); - return (U, S, Vt); - } - } -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/Direction.cs b/Runtime/LinearAlgebra/src/Direction.cs deleted file mode 100644 index fd25b98..0000000 --- a/Runtime/LinearAlgebra/src/Direction.cs +++ /dev/null @@ -1,261 +0,0 @@ -using System; -#if UNITY_5_3_OR_NEWER -using Vector3Float = UnityEngine.Vector3; -#endif - -namespace LinearAlgebra -{ - - /// - /// A direction in 3D space - /// - /// A direction is represented using two angles: - /// * The horizontal angle ranging from -180 (inclusive) to 180 (exclusive) - /// degrees which is a rotation in the horizontal plane - /// * A vertical angle ranging from -90 (inclusive) to 90 (exclusive) degrees - /// which is the rotation in the up/down direction applied after the horizontal - /// rotation has been applied. - /// The angles are automatically normalized to stay within the abovenmentioned - /// ranges. - public struct Direction - { - /// @brief horizontal angle, range = (-180..180] degrees - public AngleFloat horizontal; - /// @brief vertical angle, range in degrees = (-90..90] degrees - public AngleFloat vertical; - - /// - /// Create a new direction - /// - /// The horizontal angle - /// The vertical angle - /// The direction will be normalized automatically - /// to ensure the angles are within the allowed ranges - public Direction(AngleFloat horizontal, AngleFloat vertical) - { - this.horizontal = horizontal; - this.vertical = vertical; - this.Normalize(); - } - - /// - /// Create a direction using angle values in degrees - /// - /// The horizontal angle in degrees - /// The vertical angle in degrees - /// The direction - /// The direction will be normalized automatically - /// to ensure the angles are within the allowed ranges - public static Direction Degrees(float horizontal, float vertical) - { - Direction d = new() - { - horizontal = AngleFloat.Degrees(horizontal), - vertical = AngleFloat.Degrees(vertical) - }; - d.Normalize(); - return d; - } - /// - /// Create a direction using angle values in radians - /// - /// The horizontal angle in radians - /// The vertical angle in radians - /// The direction - public static Direction Radians(float horizontal, float vertical) - { - Direction d = new() - { - horizontal = AngleFloat.Radians(horizontal), - vertical = AngleFloat.Radians(vertical) - }; - d.Normalize(); - return d; - } - - public override readonly string ToString() { - return $"Direction(h: {this.horizontal}, v: {this.vertical})"; - } - - /// - /// A forward direction with zero for both angles - /// - public readonly static Direction forward = Degrees(0, 0); - /// - /// A backward direction with horizontal angle -180 and zero vertical - /// angle - /// - public readonly static Direction backward = Degrees(-180, 0); - /// - /// A upward direction with zero horizontal angle and vertical angle 90 - /// - public readonly static Direction up = Degrees(0, 90); - /// - /// A downward direction with zero horizontal angle and vertical angle - /// -90 - /// - public readonly static Direction down = Degrees(0, -90); - /// - /// A left-pointing direction with horizontal angle -90 and zero - /// vertical angle - /// - public readonly static Direction left = Degrees(-90, 0); - /// - /// A right-pointing direction with horizontal angle 90 and zero - /// vertical angle - /// - public readonly static Direction right = Degrees(90, 0); - - private void Normalize() - { - if (this.vertical > AngleFloat.deg90 || this.vertical < -AngleFloat.deg90) - { - this.horizontal += AngleFloat.deg180; - this.vertical = AngleFloat.Degrees(180 - this.vertical.inDegrees); - } - } - -#if UNITY_5_3_OR_NEWER - /// - /// Convert the direction into a carthesian vector - /// - /// The carthesian vector corresponding to this direction. - public readonly UnityEngine.Vector3 ToVector3() { - // Convert degrees to radians - float radH = this.horizontal.inRadians; - float radV = this.vertical.inRadians; - - // Calculate Vector - float cosV = MathF.Cos(radV); - float sinV = MathF.Sin(radV); - - float x = cosV * MathF.Sin(radH); - float y = sinV; - float z = cosV * MathF.Cos(radH); - - return new UnityEngine.Vector3(x, y, z); - } - - /// - /// Convert a carthesian vector into a direction - /// - /// The carthesian vector - /// The direction - /// Information about the length of the carthesian vector is not - /// included in this transformation - public static Direction FromVector3(UnityEngine.Vector3 v) { - AngleFloat horizontal = AngleFloat.Atan2(v.x, v.z); - AngleFloat vertical = AngleFloat.deg90 - AngleFloat.Acos(v.y); - Direction d = new(horizontal, vertical); - return d; - } -#else - /// - /// Convert the direction into a carthesian vector - /// - /// The carthesian vector corresponding to this direction. - public readonly Vector3Float ToVector3() { - // Quaternion q = Quaternion.Euler(90 - this.vertical.inDegrees, this.horizontal.inDegrees, 0); - // Vector3Float v = q * Vector3Float.forward; - // return v; - - float radH = this.horizontal.inRadians; - float radV = this.vertical.inRadians; - - float cosV = MathF.Cos(radV); - float sinV = MathF.Sin(radV); - - float horizontal = cosV * MathF.Sin(radH); - float vertical = sinV; - float depth = cosV * MathF.Cos(radH); - - return new Vector3Float(horizontal, vertical, depth); - } - - /// - /// Convert a carthesian vector into a direction - /// - /// The carthesian vector - /// The direction - /// Information about the length of the carthesian vector is not - /// included in this transformation - public static Direction FromVector3(Vector3Float v) - { - AngleFloat horizontal = AngleFloat.Atan2(v.horizontal, v.depth); - AngleFloat vertical = AngleFloat.deg90 - AngleFloat.Acos(v.vertical); - Direction d = new(horizontal, vertical); - return d; - } -#endif - - public static Direction operator -(Direction d) { - AngleFloat horizontal = d.horizontal + AngleFloat.deg180; - AngleFloat vertical = -d.vertical; - return new Direction(horizontal, vertical); - } - - /// - /// Tests the equality of two directions - /// - /// - /// - /// True when the direction angles are equal, false otherwise. - public static bool operator ==(Direction d1, Direction d2) - { - bool horizontalEq = d1.horizontal == d2.horizontal; - bool verticalEq = d1.vertical == d2.vertical; - return horizontalEq && verticalEq; - } - - /// - /// Tests the inequality of two directions - /// - /// - /// - /// True when the direction angles are not equal, false otherwise. - public static bool operator !=(Direction d1, Direction d2) - { - bool horizontalNEq = d1.horizontal != d2.horizontal; - bool verticalNEq = d1.vertical != d2.vertical; - return horizontalNEq || verticalNEq; - } - - public override readonly bool Equals(object obj) - { - if (obj is not Direction d) - return false; - - bool horizontalEq = this.horizontal == d.horizontal; - bool verticalEq = this.vertical == d.vertical; - return horizontalEq && verticalEq; - } - - - public override readonly int GetHashCode() - { - return HashCode.Combine(horizontal, vertical); - } - - public static AngleFloat UnsignedAngle(Direction d1, Direction d2) { - // Convert angles from degrees to radians - float horizontal1Rad = d1.horizontal.inRadians; - float vertical1Rad = d1.vertical.inRadians; - - float horizontal2Rad = d2.horizontal.inRadians; - float vertical2Rad = d2.vertical.inRadians; - - // Calculate the cosine of the angle using the spherical law of cosines - float cosTheta = MathF.Sin(vertical1Rad) * MathF.Sin(vertical2Rad) + - MathF.Cos(vertical1Rad) * MathF.Cos(vertical2Rad) * - MathF.Cos(horizontal1Rad - horizontal2Rad); - - // Clip cosTheta to the valid range for acos - cosTheta = Float.Clamp(cosTheta, -1.0f, 1.0f); - - // Calculate the angle - AngleFloat angle = AngleFloat.Acos(cosTheta); - return angle; - } - } - -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/Float.cs b/Runtime/LinearAlgebra/src/Float.cs deleted file mode 100644 index 2217b84..0000000 --- a/Runtime/LinearAlgebra/src/Float.cs +++ /dev/null @@ -1,41 +0,0 @@ -namespace LinearAlgebra { - - /// - /// Float number utilities - /// - public class Float { - /// - /// The precision of float numbers - /// - public const float epsilon = 1E-05f; - /// - /// The square of the float number precision - /// - public const float sqrEpsilon = 1e-10f; - - /// - /// Clamp the value between the given minimum and maximum values - /// - /// The value to clamp - /// The minimum value - /// The maximum value - /// The clamped value - public static float Clamp(float f, float min, float max) { - if (f < min) - return min; - if (f > max) - return max; - return f; - } - - /// - /// Clamp the value between to the interval [0..1] - /// - /// The value to clamp - /// The clamped value - public static float Clamp01(float f) { - return Clamp(f, 0, 1); - } - } - -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/LinearAlgebra.csproj b/Runtime/LinearAlgebra/src/LinearAlgebra.csproj deleted file mode 100644 index d2d5a85..0000000 --- a/Runtime/LinearAlgebra/src/LinearAlgebra.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - false - false - net8.0 - - - - - - - - diff --git a/Runtime/LinearAlgebra/src/Matrix.cs b/Runtime/LinearAlgebra/src/Matrix.cs deleted file mode 100644 index 37c6c24..0000000 --- a/Runtime/LinearAlgebra/src/Matrix.cs +++ /dev/null @@ -1,689 +0,0 @@ -using System; -#if UNITY_5_3_OR_NEWER -using Vector3Float = UnityEngine.Vector3; -using Vector2Float = UnityEngine.Vector2; -using Quaternion = UnityEngine.Quaternion; -#endif - -namespace LinearAlgebra { - - public readonly struct Slice - { - public int start { get; } - public int stop { get; } - public Slice(int start, int stop) - { - this.start = start; - this.stop = stop; - } - } - - public class Matrix2 { - public float[,] data { get; } - - public int nRows => data.GetLength(0); - public int nCols => data.GetLength(1); - - public Matrix2(int nRows, int nCols) - { - this.data = new float[nRows, nCols]; - } - public Matrix2(float[,] data) { - this.data = data; - } - - public Matrix2 Clone() { - float[,] data = new float[this.nRows, nCols]; - for (int rowIx = 0; rowIx < this.nRows; rowIx++) { - for (int colIx = 0; colIx < this.nCols; colIx++) - data[rowIx, colIx] = this.data[rowIx, colIx]; - } - return new Matrix2(data); - } - - public static Matrix2 Zero(int nRows, int nCols) - { - return new Matrix2(nRows, nCols); - } - - public static Matrix2 FromVector3(Vector3Float v) { - float[,] result = new float[3, 1]; - result[0, 0] = v.horizontal; - result[1, 0] = v.vertical; - result[2, 0] = v.depth; - return new Matrix2(result); - } - - public static Matrix2 Identity(int size) - { - return Diagonal(1, size); - } - public static Matrix2 Identity(int nRows, int nCols) - { - Matrix2 m = Zero(nRows, nCols); - m.FillDiagonal(1); - return m; - } - - public static Matrix2 Diagonal(Matrix1 v) { - float[,] resultData = new float[v.size, v.size]; - for (int ix = 0; ix < v.size; ix++) - resultData[ix, ix] = v.data[ix]; - return new Matrix2(resultData); - } - public static Matrix2 Diagonal(float f, int size) - { - float[,] resultData = new float[size, size]; - for (int ix = 0; ix < size; ix++) - resultData[ix, ix] = f; - return new Matrix2(resultData); - } - public void FillDiagonal(Matrix1 v) - { - int n = (int)Math.Min(Math.Min(this.nRows, this.nCols), v.size); - for (int ix = 0; ix < n; ix++) - this.data[ix, ix] = v.data[ix]; - } - public void FillDiagonal(float f) - { - int n = Math.Min(this.nRows, this.nCols); - for (int ix = 0; ix < n; ix++) - this.data[ix, ix] = f; - } - - public static Matrix2 SkewMatrix(Vector3Float v) { - float[,] result = new float[3, 3] { - {0, -v.depth, v.vertical}, - {v.depth, 0, -v.horizontal}, - {-v.vertical, v.horizontal, 0} - }; - return new Matrix2(result); - } - - public Matrix1 GetRow(int rowIx) { - float[] row = new float[this.nCols]; - for (int colIx = 0; colIx < this.nCols; colIx++) { - row[colIx] = this.data[rowIx, colIx]; - } - return new Matrix1(row); - } - -#if UNITY_5_3_OR_NEWER - public UnityEngine.Vector3 GetRow3(int rowIx) { - int cols = this.nCols; - UnityEngine.Vector3 row = new() { - x = this.data[rowIx, 0], - y = this.data[rowIx, 1], - z = this.data[rowIx, 2] - }; - return row; - } -#endif - public void SetRow(int rowIx, Matrix1 v) { - for (uint ix = 0; ix < v.size; ix++) - this.data[rowIx, ix] = v.data[ix]; - } - public void SetRow3(int rowIx, Vector3Float v) { - this.data[rowIx, 0] = v.horizontal; - this.data[rowIx, 1] = v.vertical; - this.data[rowIx, 2] = v.depth; - } - - public void SwapRows(int row1, int row2) { - for (uint ix = 0; ix < this.nCols; ix++) { - float temp = this.data[row1, ix]; - this.data[row1, ix] = this.data[row2, ix]; - this.data[row2, ix] = temp; - } - } - - public Matrix1 GetColumn(int colIx) - { - float[] column = new float[this.nRows]; - for (int i = 0; i < this.nRows; i++) { - column[i] = this.data[i, colIx]; - } - return new Matrix1(column); - } - public void SetColumn(int colIx, Matrix1 v) { - for (uint ix = 0; ix < v.size; ix++) - this.data[ix, colIx] = v.data[ix]; - } - public void SetColumn(int colIx, Vector3Float v) { - this.data[0, colIx] = v.horizontal; - this.data[1, colIx] = v.vertical; - this.data[2, colIx] = v.depth; - } - - public static bool AllClose(Matrix2 A, Matrix2 B, float atol = 1e-08f) { - for (int i = 0; i < A.nRows; i++) { - for (int j = 0; j < A.nCols; j++) { - float d = MathF.Abs(A.data[i, j] - B.data[i, j]); - if (d > atol) - return false; - } - } - return true; - } - - public Matrix2 Transpose() { - float[,] resultData = new float[this.nCols, this.nRows]; - for (uint rowIx = 0; rowIx < this.nRows; rowIx++) { - for (uint colIx = 0; colIx < this.nCols; colIx++) - resultData[colIx, rowIx] = this.data[rowIx, colIx]; - } - return new Matrix2(resultData); - // double checked code - } - public Matrix2 transposed { - get => Transpose(); - } - - public static Matrix2 operator -(Matrix2 m) { - float[,] result = new float[m.nRows, m.nCols]; - - for (int i = 0; i < m.nRows; i++) { - for (int j = 0; j < m.nCols; j++) - result[i, j] = -m.data[i, j]; - } - return new Matrix2(result); - } - - public static Matrix2 operator -(Matrix2 A, Matrix2 B) { - if (A.nRows != B.nRows || A.nCols != B.nCols) - throw new System.ArgumentException("Size of A must match size of B."); - - float[,] result = new float[A.nRows, B.nCols]; - - for (int i = 0; i < A.nRows; i++) { - for (int j = 0; j < A.nCols; j++) - result[i, j] = A.data[i, j] - B.data[i, j]; - } - return new Matrix2(result); - } - - public static Matrix2 operator +(Matrix2 A, Matrix2 B) { - if (A.nRows != B.nRows || A.nCols != B.nCols) - throw new System.ArgumentException("Size of A must match size of B."); - - float[,] result = new float[A.nRows, B.nCols]; - - for (int i = 0; i < A.nRows; i++) { - for (int j = 0; j < A.nCols; j++) - result[i, j] = A.data[i, j] + B.data[i, j]; - } - return new Matrix2(result); - } - - public static Matrix2 operator *(Matrix2 A, Matrix2 B) { - if (A.nCols != B.nRows) - throw new System.ArgumentException("Number of columns in A must match number of rows in B."); - - float[,] result = new float[A.nRows, B.nCols]; - - for (int i = 0; i < A.nRows; i++) { - for (int j = 0; j < B.nCols; j++) { - float sum = 0.0f; - for (int k = 0; k < A.nCols; k++) - sum += A.data[i, k] * B.data[k, j]; - - result[i, j] = sum; - } - } - - return new Matrix2(result); - // double checked code - } - - public static Matrix1 operator *(Matrix2 A, Matrix1 v) { - float[] result = new float[A.nRows]; - - for (int i = 0; i < A.nRows; i++) { - for (int j = 0; j < A.nCols; j++) { - result[i] += A.data[i, j] * v.data[j]; - } - } - - return new Matrix1(result); - } - - public static Vector3Float operator *(Matrix2 A, Vector3Float v) { - return new Vector3Float( - A.data[0, 0] * v.horizontal + A.data[0, 1] * v.vertical + A.data[0, 2] * v.depth, - A.data[1, 0] * v.horizontal + A.data[1, 1] * v.vertical + A.data[1, 2] * v.depth, - A.data[2, 0] * v.horizontal + A.data[2, 1] * v.vertical + A.data[2, 2] * v.depth - ); - } - - public static Matrix2 operator *(Matrix2 A, float s) { - float[,] result = new float[A.nRows, A.nCols]; - - for (int i = 0; i < A.nRows; i++) { - for (int j = 0; j < A.nCols; j++) - result[i, j] = A.data[i, j] * s; - } - - return new Matrix2(result); - } - public static Matrix2 operator *(float s, Matrix2 A) { - return A * s; - } - - public static Matrix2 operator /(Matrix2 A, float s) { - float[,] result = new float[A.nRows, A.nCols]; - - for (int i = 0; i < A.nRows; i++) { - for (int j = 0; j < A.nCols; j++) - result[i, j] = A.data[i, j] / s; - } - - return new Matrix2(result); - } - public static Matrix2 operator /(float s, Matrix2 A) { - float[,] result = new float[A.nRows, A.nCols]; - - for (int i = 0; i < A.nRows; i++) { - for (int j = 0; j < A.nCols; j++) - result[i, j] = s / A.data[i, j]; - } - - return new Matrix2(result); - } - - public Matrix2 GetRows(Slice slice) { - return GetRows(slice.start, slice.stop); - } - public Matrix2 GetRows(int from, int to) { - if (from < 0 || to >= this.nRows) - throw new System.ArgumentException("Slice index out of range."); - - float[,] result = new float[to - from, this.nCols]; - int resultRowIx = 0; - for (int rowIx = from; rowIx < to; rowIx++) { - for (int colIx = 0; colIx < this.nCols; colIx++) - result[resultRowIx, colIx] = this.data[rowIx, colIx]; - - resultRowIx++; - } - - return new Matrix2(result); - } - - public Matrix2 Slice(Slice slice) - { - return Slice(slice.start, slice.stop); - } - public Matrix2 Slice(int from, int to) - { - if (from < 0 || to >= this.nRows) - throw new System.ArgumentException("Slice index out of range."); - - float[,] result = new float[to - from, this.nCols]; - int resultRowIx = 0; - for (int rowIx = from; rowIx < to; rowIx++) - { - for (int colIx = 0; colIx < this.nCols; colIx++) - { - result[resultRowIx, colIx] = this.data[rowIx, colIx]; - } - resultRowIx++; - } - - return new Matrix2(result); - } - public Matrix2 Slice(Slice rowRange, Slice colRange) { - return Slice((rowRange.start, rowRange.stop), (colRange.start, colRange.stop)); - } - public Matrix2 Slice((int start, int stop) rowRange, (int start, int stop) colRange) - { - float[,] result = new float[rowRange.stop - rowRange.start, colRange.stop - colRange.start]; - - int resultRowIx = 0; - int resultColIx = 0; - for (int i = rowRange.start; i < rowRange.stop; i++) - { - for (int j = colRange.start; j < colRange.stop; j++) - result[resultRowIx, resultColIx] = this.data[i, j]; - } - return new Matrix2(result); - } - - public void UpdateSlice(Slice slice, Matrix2 m) { - UpdateSlice((slice.start, slice.stop), m); - } - public void UpdateSlice((int start, int stop) slice, Matrix2 m) { - // if (slice.start == slice.stop) - // Console.WriteLine("WARNING: no data is updates when start equals stop in a slice!"); - int mRowIx = 0; - for (int rowIx = slice.start; rowIx < slice.stop; rowIx++, mRowIx++) { - for (int colIx = 0; colIx < this.nCols; colIx++) - this.data[rowIx, colIx] = m.data[mRowIx, colIx]; - } - } - - public void UpdateSlice(Slice rowRange, Slice colRange, Matrix2 m) - { - UpdateSlice((rowRange.start, rowRange.stop), (colRange.start, colRange.stop), m); - } - public void UpdateSlice((int start, int stop) rowRange, (int start, int stop) colRange, Matrix2 m) - { - for (int i = rowRange.start; i < rowRange.stop; i++) - { - for (int j = colRange.start; j < colRange.stop; j++) - this.data[i, j] = m.data[i - rowRange.start, j - colRange.start]; - } - } - - public Matrix2 Inverse() { - Matrix2 A = this; - // unchecked - int n = A.nRows; - - // Create an identity matrix of the same size as the original matrix - float[,] augmentedMatrix = new float[n, 2 * n]; - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - augmentedMatrix[i, j] = A.data[i, j]; - augmentedMatrix[i, j + n] = (i == j) ? 1 : 0; // Identity matrix - } - } - - // Perform Gaussian elimination - for (int i = 0; i < n; i++) { - // Find the pivot row - float pivot = augmentedMatrix[i, i]; - if (Math.Abs(pivot) < 1e-10) // Check for singular matrix - throw new InvalidOperationException("Matrix is singular and cannot be inverted."); - - // Normalize the pivot row - for (int j = 0; j < 2 * n; j++) - augmentedMatrix[i, j] /= pivot; - - // Eliminate the column below the pivot - for (int j = i + 1; j < n; j++) { - float factor = augmentedMatrix[j, i]; - for (int k = 0; k < 2 * n; k++) - augmentedMatrix[j, k] -= factor * augmentedMatrix[i, k]; - } - } - - // Back substitution - for (int i = n - 1; i >= 0; i--) - { - // Eliminate the column above the pivot - for (int j = i - 1; j >= 0; j--) - { - float factor = augmentedMatrix[j, i]; - for (int k = 0; k < 2 * n; k++) - augmentedMatrix[j, k] -= factor * augmentedMatrix[i, k]; - } - } - - // Extract the inverse matrix from the augmented matrix - float[,] inverse = new float[n, n]; - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) - inverse[i, j] = augmentedMatrix[i, j + n]; - } - - return new Matrix2(inverse); - } - - public float Determinant() - { - int n = this.nRows; - if (n != this.nCols) - throw new System.ArgumentException("Matrix must be square."); - - if (n == 1) - return this.data[0, 0]; // Base case for 1x1 matrix - - if (n == 2) // Base case for 2x2 matrix - return this.data[0, 0] * this.data[1, 1] - this.data[0, 1] * this.data[1, 0]; - - float det = 0; - for (int col = 0; col < n; col++) - det += (col % 2 == 0 ? 1 : -1) * this.data[0, col] * this.Minor(0, col).Determinant(); - - return det; - } - - // Helper function to compute the minor of a matrix - private Matrix2 Minor(int rowToRemove, int colToRemove) - { - int n = this.nRows; - float[,] minor = new float[n - 1, n - 1]; - - int r = 0, c = 0; - for (int i = 0; i < n; i++) { - if (i == rowToRemove) continue; - - c = 0; - for (int j = 0; j < n; j++) { - if (j == colToRemove) continue; - - minor[r, c] = this.data[i, j]; - c++; - } - r++; - } - - return new Matrix2(minor); - } - - public static Matrix2 DeleteRows(Matrix2 A, Slice rowRange) { - float[,] result = new float[A.nRows - (rowRange.stop - rowRange.start), A.nCols]; - - int resultRowIx = 0; - for (int i = 0; i < A.nRows; i++) { - if (i >= rowRange.start && i < rowRange.stop) - continue; - - for (int j = 0; j < A.nCols; j++) - result[resultRowIx, j] = A.data[i, j]; - - resultRowIx++; - } - return new Matrix2(result); - } - - internal static Matrix2 DeleteColumns(Matrix2 A, Slice colRange) { - float[,] result = new float[A.nRows, A.nCols - (colRange.stop - colRange.start)]; - - for (int i = 0; i < A.nRows; i++) { - int resultColIx = 0; - for (int j = 0; j < A.nCols; j++) { - if (j >= colRange.start && j < colRange.stop) - continue; - - result[i, resultColIx++] = A.data[i, j]; - } - } - return new Matrix2(result); - } - } - - public class Matrix1 - { - public float[] data { get; } - - public int size => data.GetLength(0); - - public Matrix1(int size) - { - this.data = new float[size]; - } - - public Matrix1(float[] data) { - this.data = data; - } - - public static Matrix1 Zero(int size) - { - return new Matrix1(size); - } - - public static Matrix1 FromVector2(Vector2Float v) { - float[] result = new float[2]; - result[0] = v.horizontal; - result[1] = v.vertical; - return new Matrix1(result); - } - - public static Matrix1 FromVector3(Vector3Float v) { - float[] result = new float[3]; - result[0] = v.horizontal; - result[1] = v.vertical; - result[2] = v.depth; - return new Matrix1(result); - } - -#if UNITY_5_3_OR_NEWER - public static Matrix1 FromQuaternion(Quaternion q) { - float[] result = new float[4]; - result[0] = q.x; - result[1] = q.y; - result[2] = q.z; - result[3] = q.w; - return new Matrix1(result); - } -#endif - - public Vector2Float vector2 { - get { - if (this.size != 2) - throw new System.ArgumentException("Matrix1 must be of size 2"); - return new Vector2Float(this.data[0], this.data[1]); - } - } - public Vector3Float vector3 { - get { - if (this.size != 3) - throw new System.ArgumentException("Matrix1 must be of size 3"); - return new Vector3Float(this.data[0], this.data[1], this.data[2]); - } - } - -#if UNITY_5_3_OR_NEWER - public Quaternion quaternion { - get { - if (this.size != 4) - throw new System.ArgumentException("Matrix1 must be of size 4"); - return new Quaternion(this.data[0], this.data[1], this.data[2], this.data[3]); - } - } -#endif - - public Matrix1 Clone() { - float[] data = new float[this.size]; - for (int rowIx = 0; rowIx < this.size; rowIx++) - data[rowIx] = this.data[rowIx]; - return new Matrix1(data); - } - - - public float magnitude { - get { - float sum = 0; - foreach (var elm in data) - sum += elm; - return sum / data.Length; - } - } - public static Matrix1 operator +(Matrix1 A, Matrix1 B) { - if (A.size != B.size) - throw new System.ArgumentException("Size of A must match size of B."); - - float[] result = new float[A.size]; - - for (int i = 0; i < A.size; i++) { - result[i] = A.data[i] + B.data[i]; - } - return new Matrix1(result); - } - - public Matrix2 Transpose() { - float[,] r = new float[1, this.size]; - for (uint colIx = 0; colIx < this.size; colIx++) - r[1, colIx] = this.data[colIx]; - - return new Matrix2(r); - } - - public static float Dot(Matrix1 a, Matrix1 b) { - if (a.size != b.size) - throw new System.ArgumentException("Vectors must be of the same length."); - - float result = 0.0f; - for (int i = 0; i < a.size; i++) { - result += a.data[i] * b.data[i]; - } - return result; - } - - public static Matrix1 operator -(Matrix1 A, Matrix1 B) { - if (A.size != B.size) - throw new System.ArgumentException("Size of A must match size of B."); - - float[] result = new float[A.size]; - - for (int i = 0; i < A.size; i++) { - result[i] = A.data[i] - B.data[i]; - } - return new Matrix1(result); - } - - public static Matrix1 operator *(Matrix1 A, float f) - { - float[] result = new float[A.size]; - - for (int i = 0; i < A.size; i++) - result[i] += A.data[i] * f; - - return new Matrix1(result); - } - public static Matrix1 operator *(float f, Matrix1 A) { - return A * f; - } - - public static Matrix1 operator /(Matrix1 A, float f) { - float[] result = new float[A.size]; - - for (int i = 0; i < A.size; i++) - result[i] = A.data[i] / f; - - return new Matrix1(result); - } - public static Matrix1 operator /(float f, Matrix1 A) { - float[] result = new float[A.size]; - - for (int i = 0; i < A.size; i++) - result[i] = f / A.data[i]; - - return new Matrix1(result); - } - - public Matrix1 Slice(Slice range) - { - return Slice(range.start, range.stop); - } - public Matrix1 Slice(int from, int to) - { - if (from < 0 || to >= this.size) - throw new System.ArgumentException("Slice index out of range."); - - float[] result = new float[to - from]; - int resultIx = 0; - for (int ix = from; ix < to; ix++) - result[resultIx++] = this.data[ix]; - - return new Matrix1(result); - } - public void UpdateSlice(Slice slice, Matrix1 v) { - int vIx = 0; - for (int ix = slice.start; ix < slice.stop; ix++, vIx++) - this.data[ix] = v.data[vIx]; - } - } - -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/Quat32.cs b/Runtime/LinearAlgebra/src/Quat32.cs deleted file mode 100644 index 19ee9bc..0000000 --- a/Runtime/LinearAlgebra/src/Quat32.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System; - -namespace LinearAlgebra { - public class Quat32 { - public float x; - public float y; - public float z; - public float w; - - public Quat32() { - this.x = 0; - this.y = 0; - this.z = 0; - this.w = 1; - } - - public Quat32(float x, float y, float z, float w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - - public static Quat32 FromSwingTwist(SwingTwist s) { - Quat32 q32 = Quat32.Euler(-s.swing.vertical.inDegrees, s.swing.horizontal.inDegrees, s.twist.inDegrees); - return q32; - } - - public static Quat32 Euler(float yaw, float pitch, float roll) { - float rollOver2 = roll * AngleFloat.Deg2Rad * 0.5f; - float sinRollOver2 = (float)Math.Sin((float)rollOver2); - float cosRollOver2 = (float)Math.Cos((float)rollOver2); - float pitchOver2 = pitch * 0.5f; - float sinPitchOver2 = (float)Math.Sin((float)pitchOver2); - float cosPitchOver2 = (float)Math.Cos((float)pitchOver2); - float yawOver2 = yaw * 0.5f; - float sinYawOver2 = (float)Math.Sin((float)yawOver2); - float cosYawOver2 = (float)Math.Cos((float)yawOver2); - Quat32 result = new Quat32() { - w = cosYawOver2 * cosPitchOver2 * cosRollOver2 + - sinYawOver2 * sinPitchOver2 * sinRollOver2, - x = sinYawOver2 * cosPitchOver2 * cosRollOver2 + - cosYawOver2 * sinPitchOver2 * sinRollOver2, - y = cosYawOver2 * sinPitchOver2 * cosRollOver2 - - sinYawOver2 * cosPitchOver2 * sinRollOver2, - z = cosYawOver2 * cosPitchOver2 * sinRollOver2 - - sinYawOver2 * sinPitchOver2 * cosRollOver2 - }; - return result; - } - - public void ToAngles(out float right, out float up, out float forward) { - float test = this.x * this.y + this.z * this.w; - if (test > 0.499f) { // singularity at north pole - right = 0; - up = 2 * (float)Math.Atan2(this.x, this.w) * AngleFloat.Rad2Deg; - forward = 90; - return; - //return Vector3(0, 2 * (float)atan2(this.x, this.w) * Angle.Rad2Deg, 90); - } - else if (test < -0.499f) { // singularity at south pole - right = 0; - up = -2 * (float)Math.Atan2(this.x, this.w) * AngleFloat.Rad2Deg; - forward = -90; - return; - //return Vector3(0, -2 * (float)atan2(this.x, this.w) * Angle.Rad2Deg, -90); - } - else { - float sqx = this.x * this.x; - float sqy = this.y * this.y; - float sqz = this.z * this.z; - - right = (float)Math.Atan2(2 * this.x * this.w - 2 * this.y * this.z, 1 - 2 * sqx - 2 * sqz) * AngleFloat.Rad2Deg; - up = (float)Math.Atan2(2 * this.y * this.w - 2 * this.x * this.z, 1 - 2 * sqy - 2 * sqz) * AngleFloat.Rad2Deg; - forward = (float)Math.Asin(2 * test) * AngleFloat.Rad2Deg; - return; - // return Vector3( - // atan2f(2 * this.x * this.w - 2 * this.y * this.z, 1 - 2 * sqx - 2 * sqz) * - // Rad2Deg, - // atan2f(2 * this.y * this.w - 2 * this.x * this.z, 1 - 2 * sqy - 2 * sqz) * - // Rad2Deg, - // asinf(2 * test) * Angle.Rad2Deg); - } - } - - } -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/Quaternion.cs b/Runtime/LinearAlgebra/src/Quaternion.cs deleted file mode 100644 index 7936843..0000000 --- a/Runtime/LinearAlgebra/src/Quaternion.cs +++ /dev/null @@ -1,582 +0,0 @@ -using System; -#if UNITY_5_3_OR_NEWER -using Quaternion = UnityEngine.Quaternion; -#endif - -namespace LinearAlgebra { - -#if UNITY_5_3_OR_NEWER - public class QuaternionExtensions { - public static Quaternion Reflect(Quaternion q) { - return new(-q.x, -q.y, -q.z, q.w); - } - - public static Matrix2 ToRotationMatrix(Quaternion q) { - float w = q.x, x = q.y, y = q.z, z = q.w; - - float[,] result = new float[,] - { - { 1 - 2 * (y * y + z * z), 2 * (x * y - w * z), 2 * (x * z + w * y) }, - { 2 * (x * y + w * z), 1 - 2 * (x * x + z * z), 2 * (y * z - w * x) }, - { 2 * (x * z - w * y), 2 * (y * z + w * x), 1 - 2 * (x * x + y * y) } - }; - return new Matrix2(result); - } - - public static Quaternion FromRotationMatrix(Matrix2 m) { - float trace = m.data[0, 0] + m.data[1, 1] + m.data[2, 2]; - float w, x, y, z; - - if (trace > 0) { - float s = 0.5f / (float)Math.Sqrt(trace + 1.0f); - w = 0.25f / s; - x = (m.data[2, 1] - m.data[1, 2]) * s; - y = (m.data[0, 2] - m.data[2, 0]) * s; - z = (m.data[1, 0] - m.data[0, 1]) * s; - } - else { - if (m.data[0, 0] > m.data[1, 1] && m.data[0, 0] > m.data[2, 2]) { - float s = 2.0f * (float)Math.Sqrt(1.0f + m.data[0, 0] - m.data[1, 1] - m.data[2, 2]); - w = (m.data[2, 1] - m.data[1, 2]) / s; - x = 0.25f * s; - y = (m.data[0, 1] + m.data[1, 0]) / s; - z = (m.data[0, 2] + m.data[2, 0]) / s; - } - else if (m.data[1, 1] > m.data[2, 2]) { - float s = 2.0f * (float)Math.Sqrt(1.0f + m.data[1, 1] - m.data[0, 0] - m.data[2, 2]); - w = (m.data[0, 2] - m.data[2, 0]) / s; - x = (m.data[0, 1] + m.data[1, 0]) / s; - y = 0.25f * s; - z = (m.data[1, 2] + m.data[2, 1]) / s; - } - else { - float s = 2.0f * (float)Math.Sqrt(1.0f + m.data[2, 2] - m.data[0, 0] - m.data[1, 1]); - w = (m.data[1, 0] - m.data[0, 1]) / s; - x = (m.data[0, 2] + m.data[2, 0]) / s; - y = (m.data[1, 2] + m.data[2, 1]) / s; - z = 0.25f * s; - } - } - - return new Quaternion(x, y, z, w); - } - } -#else - public struct Quaternion { - public float x; - public float y; - public float z; - public float w; - - /// - /// create a new quaternion with the given values - /// - /// x component - /// y component - /// z component - /// w component - public Quaternion(float x, float y, float z, float w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - - /// - /// An identity quaternion - /// - public static readonly Quaternion identity = new(0, 0, 0, 1); - - private readonly Vector3Float xyz => new(x, y, z); - - private readonly float magnitude => MathF.Sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); - - private readonly float sqrMagnitude => x * x + y * y + z * z + w * w; - - /// - /// Convert to unit quaternion - /// - /// This will preserve the orientation, - /// but ensures that it is a unit quaternion. - public readonly Quaternion normalized { - get { - float length = this.magnitude; - Quaternion q = new(this.x / length, this.y / length, this.z / length, this.w / length); - return q; - } - } - - /// - /// Convert to unity quaternion - /// - /// The quaternion to convert - /// A unit quaternion - /// This will preserve the orientation, - /// but ensures that it is a unit quaternion. - public static Quaternion Normalize(Quaternion q) { - return q.normalized; - } - - /// - /// Convert to euler angles - /// - /// The quaternion to convert - /// A vector containing euler angles - /// The euler angles performed in the order: Z, X, Y - public static Vector3Float ToAngles(Quaternion q) { - // Extract Euler angles in Unity order (X = pitch, Y = yaw, Z = roll), returned in degrees as (x,pitch),(y,yaw),(z,roll) - // Handle singularities/gimbal lock - float test = 2f * (q.w * q.x - q.y * q.z); - // clamp - if (test >= 1f) test = 1f; - if (test <= -1f) test = -1f; - - float pitch = MathF.Asin(test); // X - - float roll = MathF.Atan2(2f * (q.w * q.z + q.x * q.y), - 1f - 2f * (q.x * q.x + q.z * q.z)); // Z - - float yaw = MathF.Atan2(2f * (q.w * q.y + q.x * q.z), - 1f - 2f * (q.y * q.y + q.x * q.x)); // Y - - const float rad2deg = 180f / MathF.PI; - return new Vector3Float(pitch * rad2deg, yaw * rad2deg, roll * rad2deg); - // float test = q.x * q.y + q.z * q.w; - // if (test > 0.499f) // singularity at north pole - // return new Vector3Float(0, 2 * MathF.Atan2(q.x, q.w) * AngleFloat.Rad2Deg, 90); - - // else if (test < -0.499f) // singularity at south pole - // return new Vector3Float(0, -2 * MathF.Atan2(q.x, q.w) * AngleFloat.Rad2Deg, -90); - - // else { - // float sqx = q.x * q.x; - // float sqy = q.y * q.y; - // float sqz = q.z * q.z; - - // return new Vector3Float( - // MathF.Atan2(2 * q.x * q.w - 2 * q.y * q.z, 1 - 2 * sqx - 2 * sqz) * - // AngleFloat.Rad2Deg, - // MathF.Atan2(2 * q.y * q.w - 2 * q.x * q.z, 1 - 2 * sqy - 2 * sqz) * - // AngleFloat.Rad2Deg, - // MathF.Asin(2 * test) * AngleFloat.Rad2Deg); - // } - } - - /// - /// Create a rotation from euler angles - /// - /// The angle around the right axis - /// The angle around the upward axis - /// The angle around the forward axis - /// The resulting quaternion - /// Rotation are appied in the order Z, X, Y. - public static Quaternion Euler(float x, float y, float z) { - return Quaternion.Euler(new Vector3Float(x, y, z)); - } - /// - /// Create a rotation from a vector containing euler angles - /// - /// Vector with the euler angles - /// The resulting quaternion - /// Rotation are appied in the order Z, X, Y. - public static Quaternion Euler(Vector3Float angles) { - Vector3Float euler = angles * AngleFloat.Deg2Rad; - float cx = MathF.Cos(euler.horizontal * 0.5f); - float sx = MathF.Sin(euler.horizontal * 0.5f); - float cy = MathF.Cos(euler.vertical * 0.5f); - float sy = MathF.Sin(euler.vertical * 0.5f); - float cz = MathF.Cos(euler.depth * 0.5f); - float sz = MathF.Sin(euler.depth * 0.5f); - - // Unity uses intrinsic Z, then X, then Y -> q = Qy * Qx * Qz - Quaternion q; - q.w = cy * cx * cz + sy * sx * sz; - q.x = cy * sx * cz + sy * cx * sz; - q.y = sy * cx * cz - cy * sx * sz; - q.z = cy * cx * sz - sy * sx * cz; - return q; - } - - /// - /// Multiply two quaternions - /// - /// - /// - /// The resulting rotation - public static Quaternion operator *(Quaternion q1, Quaternion q2) { - return new Quaternion( - q1.x * q2.w + q1.y * q2.z - q1.z * q2.y + q1.w * q2.x, - -q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y, - q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z, - -q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + q1.w * q2.w); - } - - /// - /// Rotate a vector using this quaterion - /// - /// The rotation - /// The vector to rotate - /// The rotated vector - public static Vector3Float operator *(Quaternion q, Vector3Float v) { - float num = q.x * 2; - float num2 = q.y * 2; - float num3 = q.z * 2; - float num4 = q.x * num; - float num5 = q.y * num2; - float num6 = q.z * num3; - float num7 = q.x * num2; - float num8 = q.x * num3; - float num9 = q.y * num3; - float num10 = q.w * num; - float num11 = q.w * num2; - float num12 = q.w * num3; - - float px = v.horizontal; - float py = v.vertical; - float pz = v.depth; - float rx = - (1 - (num5 + num6)) * px + (num7 - num12) * py + (num8 + num11) * pz; - float ry = - (num7 + num12) * px + (1 - (num4 + num6)) * py + (num9 - num10) * pz; - float rz = - (num8 - num11) * px + (num9 + num10) * py + (1 - (num4 + num5)) * pz; - Vector3Float result = new(rx, ry, rz); - return result; - } - - /// - /// The inverse of quaterion - /// - /// The quaternion for which the inverse is - /// needed The inverted quaternion - public static Quaternion Inverse(Quaternion q) { - float n = MathF.Sqrt(q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w); - return new Quaternion(-q.x / n, -q.y / n, -q.z / n, q.w / n); - } - - /// - /// A rotation which looks in the given direction - /// - /// The look direction - /// The up direction - /// The look rotation - public static Quaternion LookRotation(Vector3Float forward, Vector3Float up) { - Vector3Float nForward = forward.normalized; - Vector3Float nRight = Vector3Float.Normalize(Vector3Float.Cross(up, nForward)); - Vector3Float nUp = Vector3Float.Cross(nForward, nRight); - float m00 = nRight.horizontal; // x; - float m01 = nRight.vertical; // y; - float m02 = nRight.depth; // z; - float m10 = nUp.horizontal; // x; - float m11 = nUp.vertical; // y; - float m12 = nUp.depth; // z; - float m20 = nForward.horizontal; // x; - float m21 = nForward.vertical; // y; - float m22 = nForward.depth; // z; - - float num8 = (m00 + m11) + m22; - float x, y, z, w; - if (num8 > 0) { - float num = MathF.Sqrt(num8 + 1); - w = num * 0.5f; - num = 0.5f / num; - x = (m12 - m21) * num; - y = (m20 - m02) * num; - z = (m01 - m10) * num; - return new Quaternion(x, y, z, w); - } - if ((m00 >= m11) && (m00 >= m22)) { - float num7 = MathF.Sqrt(((1 + m00) - m11) - m22); - float num4 = 0.5F / num7; - x = 0.5f * num7; - y = (m01 + m10) * num4; - z = (m02 + m20) * num4; - w = (m12 - m21) * num4; - return new Quaternion(x, y, z, w); - } - if (m11 > m22) { - float num6 = MathF.Sqrt(((1 + m11) - m00) - m22); - float num3 = 0.5F / num6; - x = (m10 + m01) * num3; - y = 0.5F * num6; - z = (m21 + m12) * num3; - w = (m20 - m02) * num3; - return new Quaternion(x, y, z, w); - } - float num5 = MathF.Sqrt(((1 + m22) - m00) - m11); - float num2 = 0.5F / num5; - x = (m20 + m02) * num2; - y = (m21 + m12) * num2; - z = 0.5F * num5; - w = (m01 - m10) * num2; - return new Quaternion(x, y, z, w); - } - - /// - /// Creates a quaternion with the given forward direction with up = - /// Vector3::up - /// - /// The look direction - /// The rotation for this direction - /// For the rotation, Vector::up is used for the up direction. - /// Note: if the forward direction == Vector3::up, the result is - /// Quaternion::identity - public static Quaternion LookRotation(Vector3Float forward) { - Vector3Float up = new(0, 1, 0); - return LookRotation(forward, up); - } - - /// - /// Calculat the rotation from on vector to another - /// - /// The from direction - /// The to direction - /// The rotation from the first to the second vector - public static Quaternion FromToRotation(Vector3Float fromDirection, Vector3Float toDirection) { - Vector3Float axis = Vector3Float.Cross(fromDirection, toDirection); - axis = axis.normalized; - AngleFloat angle = Vector3Float.SignedAngle(fromDirection, toDirection, axis); - Quaternion rotation = AngleAxis(angle, axis); - return rotation; - - } - - /// - /// Rotate form one orientation to anther with a maximum amount of degrees - /// - /// The from rotation - /// The destination rotation - /// The maximum amount of degrees to - /// rotate The possibly limited rotation - public static Quaternion RotateTowards(Quaternion from, Quaternion to, - float maxDegreesDelta) { - float num = Quaternion.UnsignedAngle(from, to); - if (num == 0) { - return to; - } - float t = MathF.Min(1, maxDegreesDelta / num); - return SlerpUnclamped(from, to, t); - - } - - /// - /// Convert an angle/axis representation to a quaternion - /// - /// The angle - /// The axis - /// The resulting quaternion - public static Quaternion AngleAxis(AngleFloat angle, Vector3Float axis) { - if (axis.sqrMagnitude == 0.0f) - return Quaternion.identity; - - float radians = angle.inRadians; - radians *= 0.5f; - - Vector3Float axis2 = axis * MathF.Sin(radians); - float x = axis2.horizontal; // x; - float y = axis2.vertical; // y; - float z = axis2.depth; // z; - float w = MathF.Cos(radians); - - return new Quaternion(x, y, z, w).normalized; - } - /// - /// Convert this quaternion to angle/axis representation - /// - /// A pointer to the angle for the result - /// A pointer to the axis for the result - public readonly void ToAngleAxis(out AngleFloat angle, out Vector3Float axis) { - Quaternion q1 = (MathF.Abs(this.w) > 1.0f) ? this.normalized : this; - angle = AngleFloat.Radians(2.0f * MathF.Acos(q1.w)); // angle - float den = MathF.Sqrt(1.0F - q1.w * q1.w); - if (den > 0.0001f) { - axis = Vector3Float.Normalize(q1.xyz / den); - } - else { - // This occurs when the angle is zero. - // Not a problem: just set an arbitrary normalized axis. - axis = Vector3Float.right; - } - } - - /// - /// Get the angle between two orientations - /// - /// The first orientation - /// The second orientation - /// The smallest angle in degrees between the two - /// orientations - public static float UnsignedAngle(Quaternion q1, Quaternion q2) { - // float f = Dot(q1, q2); - // return MathF.Acos(MathF.Min(MathF.Abs(f), 1)) * 2 * AngleFloat.Rad2Deg; - - float dot = q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w; - dot = MathF.Min(MathF.Max(dot, -1f), 1f); - return 2f * MathF.Acos(MathF.Abs(dot)) * (180f / MathF.PI); - } - - /// - /// Sherical lerp between two rotations - /// - /// The first rotation - /// The second rotation - /// The factor between 0 and 1. - /// The resulting rotation - /// A factor 0 returns rotation1, factor1 returns rotation2. - public static Quaternion Slerp(Quaternion a, - Quaternion b, float t) { - if (t > 1) - t = 1; - if (t < 0) - t = 0; - return SlerpUnclamped(a, b, t); - } - - /// - /// Unclamped sherical lerp between two rotations - /// - /// The first rotation - /// The second rotation - /// The factor - /// The resulting rotation - /// A factor 0 returns rotation1, factor1 returns rotation2. - /// Values outside the 0..1 range will result in extrapolated rotations - public static Quaternion SlerpUnclamped(Quaternion a, - Quaternion b, float t) { - // if either input is zero, return the other. - if (a.sqrMagnitude == 0.0f) { - if (b.sqrMagnitude == 0.0f) { - return identity; - } - return b; - } - else if (b.sqrMagnitude == 0.0f) { - return a; - } - - Vector3Float axyz = a.xyz; - Vector3Float bxyz = b.xyz; - float cosHalfAngle = a.w * b.w + Vector3Float.Dot(axyz, bxyz); - - Quaternion b2 = b; - if (cosHalfAngle >= 1.0f || cosHalfAngle <= -1.0f) { - // angle = 0.0f, so just return one input. - return a; - } - else if (cosHalfAngle < 0.0f) { - b2.x = -b.x; - b2.y = -b.y; - b2.z = -b.z; - b2.w = -b.w; - cosHalfAngle = -cosHalfAngle; - } - - float blendA; - float blendB; - if (cosHalfAngle < 0.99f) { - // do proper slerp for big angles - float halfAngle = MathF.Acos(cosHalfAngle); - float sinHalfAngle = MathF.Sin(halfAngle); - float oneOverSinHalfAngle = 1.0F / sinHalfAngle; - blendA = MathF.Sin(halfAngle * (1.0F - t)) * oneOverSinHalfAngle; - blendB = MathF.Sin(halfAngle * t) * oneOverSinHalfAngle; - } - else { - // do lerp if angle is really small. - blendA = 1.0f - t; - blendB = t; - } - Vector3Float v = axyz * blendA + b2.xyz * blendB; - Quaternion result = - new(v.horizontal, v.vertical, v.depth, blendA * a.w + blendB * b2.w); - if (result.sqrMagnitude > 0.0f) - return result.normalized; - else - return Quaternion.identity; - } - - /// - /// Convert this quaternion to angle/axis representation - /// - /// A pointer to the angle for the result - /// A pointer to the axis for the result - public readonly void ToAngleAxis(out float angle, out Vector3Float axis) { - ToAxisAngleRad(this, out axis, out angle); - angle *= AngleFloat.Rad2Deg; - } - private static void ToAxisAngleRad(Quaternion q, - out Vector3Float axis, - out float angle) { - Quaternion q1 = (MathF.Abs(q.w) > 1.0f) ? Quaternion.Normalize(q) : q; - angle = 2.0f * MathF.Acos(q1.w); // angle - float den = MathF.Sqrt(1.0F - q1.w * q1.w); - if (den > 0.0001f) { - axis = (q1.xyz / den).normalized; - } - else { - // This occurs when the angle is zero. - // Not a problem: just set an arbitrary normalized axis. - axis = new Vector3Float(1, 0, 0); - } - } - - /// - /// Returns the angle of around the give axis for a rotation - /// - /// The axis around which the angle should be - /// computed The source rotation - /// The signed angle around the axis - public static float GetAngleAround(Vector3Float axis, Quaternion rotation) { - Quaternion secondaryRotation = GetRotationAround(axis, rotation); - secondaryRotation.ToAngleAxis(out float rotationAngle, out Vector3Float rotationAxis); - - // Do the axis point in opposite directions? - if (Vector3Float.Dot(axis, rotationAxis) < 0) - rotationAngle = -rotationAngle; - - return rotationAngle; - } - - /// - /// Returns the rotation limited around the given axis - /// - /// The axis which which the rotation should be - /// limited The source rotation - /// The rotation around the given axis - public static Quaternion GetRotationAround(Vector3Float axis, Quaternion rotation) { - Vector3Float ra = new(rotation.x, rotation.y, rotation.z); // rotation axis - Vector3Float p = Vector3Float.Project( - ra, axis); // return projection ra on to axis (parallel component) - Quaternion twist = new(p.horizontal, p.vertical, p.depth, rotation.w); - twist = Normalize(twist); - return twist; - - } - - /// - /// Swing-twist decomposition of a rotation - /// - /// The base direction for the decomposition - /// The source rotation - /// A pointer to the quaternion for the swing - /// result A pointer to the quaternion for the - /// twist result - static void GetSwingTwist(Vector3Float axis, Quaternion q, - out Quaternion swing, out Quaternion twist) { - twist = GetRotationAround(axis, q); - swing = q * Inverse(twist); - } - - /// - /// Calculate the dot product of two quaternions - /// - /// The first rotation - /// The second rotation - /// - public static float Dot(Quaternion q1, Quaternion q2) { - return q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w; - } - } -#endif - -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/Spherical.cs b/Runtime/LinearAlgebra/src/Spherical.cs deleted file mode 100644 index 318839d..0000000 --- a/Runtime/LinearAlgebra/src/Spherical.cs +++ /dev/null @@ -1,279 +0,0 @@ -using System; -using System.Collections.Generic; - -#if UNITY_5_3_OR_NEWER -using Vector3 = UnityEngine.Vector3; -#endif - -namespace LinearAlgebra { - /// - /// A spherical vector - /// - /// This is a struct such that it is a value type and cannot be null - public struct Spherical { - /// - /// Create a spherical vector - /// - /// The distance in meters - /// The direction of the vector - public Spherical(float distance, Direction direction) { - if (distance > 0) { - this.distance = distance; - this.direction = direction; - } - else { - this.distance = -distance; - this.direction = -direction; - } - } - - /// - /// Create spherical vector. All given angles are in degrees - /// - /// The distance in meters - /// The horizontal angle in degrees - /// The vertical angle in degrees - /// - public static Spherical Degrees(float distance, float horizontal, float vertical) { - Direction direction = Direction.Degrees(horizontal, vertical); - Spherical s = new(distance, direction); - return s; - } - - public static Spherical Radians(float distance, float horizontal, float vertical) { - Direction direction = Direction.Radians(horizontal, vertical); - Spherical s = new(distance, direction); - return s; - } - - /// - /// The distance in meters - /// - /// @remark The distance should never be negative - public float distance; - /// - /// The direction of the vector - /// - public Direction direction; - - /// - /// A spherical vector with zero degree angles and distance - /// - public readonly static Spherical zero = new(0, Direction.forward); - /// - /// A normalized forward-oriented vector - /// - public readonly static Spherical forward = new(1, Direction.forward); - -#if UNITY_5_3_OR_NEWER - public static Spherical FromVector3(Vector3 v) { - float distance = v.magnitude; - Direction direction = Direction.FromVector3(v / distance); - return new Spherical(distance, direction); - } - - public readonly Vector3 ToVector3() { - Vector3 v = this.direction.ToVector3(); - v *= this.distance; - return v; - } -#else - public static Spherical FromVector3(Vector3Float v) { - float distance = v.magnitude; - if (distance == 0.0f) - return Spherical.zero; - else { - float verticalAngle = (float)(Math.PI / 2 - Math.Acos(v.vertical / distance)) * AngleFloat.Rad2Deg; - float horizontalAngle = (float)Math.Atan2(v.horizontal, v.depth) * AngleFloat.Rad2Deg; - return Degrees(distance, horizontalAngle, verticalAngle); - } - } - - public readonly Vector3Float ToVector3() { - // float verticalRad = (AngleFloat.deg90 - this.direction.vertical).inRadians; - // float horizontalRad = this.direction.horizontal.inRadians; - // float cosVertical = (float)Math.Cos(verticalRad); - // float sinVertical = (float)Math.Sin(verticalRad); - // float cosHorizontal = (float)Math.Cos(horizontalRad); - // float sinHorizontal = (float)Math.Sin(horizontalRad); - - // float x = this.distance * sinVertical * sinHorizontal; - // float y = this.distance * cosVertical; - // float z = this.distance * sinVertical * cosHorizontal; - - // Vector3Float v = new(x, y, z); - Vector3Float v = this.direction.ToVector3(); - v *= this.distance; - return v; - } -#endif - - public override readonly string ToString() { - return $"Spherical({this.distance}, h: {this.direction.horizontal}, v: {this.direction.vertical})"; - } - - - public readonly float magnitude => this.distance; - - public Spherical normalized { - get { - Spherical r = new() { - distance = 1, - direction = this.direction - }; - return r; - } - } - - public static Spherical operator +(Spherical s1, Spherical s2) { - // let's do it the easy way... - // using vars to be compatible with both unity (Vector3) and native (Vector3Float) - var v1 = s1.ToVector3(); - var v2 = s2.ToVector3(); - var v = v1 + v2; - Spherical r = FromVector3(v); - return r; - } - - public static Spherical operator *(Spherical v, float d) { - Spherical r = new(v.distance * d, v.direction); - return r; - } - - public static bool operator ==(Spherical v1, Spherical v2) { - return (v1.distance == v2.distance && v1.direction == v2.direction); - } - - public static bool operator !=(Spherical v1, Spherical v2) { - return (v1.distance != v2.distance || v1.direction != v2.direction); - } - - public override readonly bool Equals(object o) { - if (o is Spherical s) - return this == s; - return false; - } - - public override readonly int GetHashCode() { - return HashCode.Combine(this.distance, this.direction); - } - - public static float Distance(Spherical v1, Spherical v2) { - // Convert degrees to radians - float thetaARadians = v1.direction.horizontal.inRadians; - float phiARadians = v1.direction.vertical.inRadians;// DegreesToRadians(phiA); - float thetaBRadians = v2.direction.horizontal.inRadians; // DegreesToRadians(thetaB); - float phiBRadians = v2.direction.vertical.inRadians; // DegreesToRadians(phiB); - - // Calculate sine and cosine values - float sinPhiA = MathF.Sin(phiARadians); - float cosPhiA = MathF.Cos(phiARadians); - float sinPhiB = MathF.Sin(phiBRadians); - float cosPhiB = MathF.Cos(phiBRadians); - - // Calculate the cosine of the difference in azimuthal angles - float cosThetaDifference = MathF.Cos(thetaARadians - thetaBRadians); - - // Apply the spherical law of cosines - float distance = MathF.Sqrt( - v1.distance * v1.distance + - v2.distance * v2.distance - - 2 * v1.distance * v2.distance * (sinPhiA * sinPhiB * cosThetaDifference + cosPhiA * cosPhiB) - ); - - return distance; - } - - public static Spherical Average(Spherical v1, Spherical v2) { - const float EPS = 1e-6f; - - // Angles in radians - float a1 = v1.direction.horizontal.inRadians; - float a2 = v2.direction.horizontal.inRadians; - float e1 = v1.direction.vertical.inRadians; - float e2 = v2.direction.vertical.inRadians; - - // Fast path: exactly same direction (allowing wrap for azimuth) -> preserve exact angles - bool sameAz = MathF.Abs(MathF.IEEERemainder(a1 - a2, MathF.PI * 2f)) < EPS; - bool sameEl = MathF.Abs(e1 - e2) < EPS; - if (sameAz && sameEl) { - // Distances may differ; average distance but keep exact angles from v1 - float rAvgExact = 0.5f * (v1.distance + v2.distance); - return new Spherical(rAvgExact, v1.direction); - } - - // Horizontal unit-circle sum - float cx = MathF.Cos(a1) + MathF.Cos(a2); - float cy = MathF.Sin(a1) + MathF.Sin(a2); - - // Vertical as z = sin(el) - float z1 = MathF.Sin(e1); - float z2 = MathF.Sin(e2); - float cz = z1 + z2; - - // Magnitude of summed unit-direction vectors - float sumX = cx; - float sumY = cy; - float sumZ = cz; - float magSum = MathF.Sqrt(sumX * sumX + sumY * sumY + sumZ * sumZ); - - // If the two direction unit-vectors cancel (or nearly), return zero distance. - if (magSum < EPS) { - return Spherical.Radians(0f, 0f, 0f); - } - - // Normalized averaged direction components - float ux = sumX / magSum; - float uy = sumY / magSum; - float uz = sumZ / magSum; - - // Compute averaged angles from normalized vector - float azAvgRad = MathF.Atan2(uy, ux); - float elAvgRad = MathF.Asin(Float.Clamp(uz, -1f, 1f)); - - // Average distance (arithmetic mean) - float rAvg = 0.5f * (v1.distance + v2.distance); - - return Spherical.Radians(rAvg, azAvgRad, elAvgRad); - } - - public static Spherical Sum(List vectors) { - if (vectors == null || vectors.Count == 0) - throw new ArgumentException("vectors must contain at least one element", nameof(vectors)); - -#if UNITY_5_3_OR_NEWER - Vector3 sum = Vector3.zero; -#else - Vector3Float sum = Vector3Float.zero; -#endif - foreach (Spherical v in vectors) - sum += v.ToVector3(); - - return FromVector3(sum); - } - - - public static Spherical Average(List vectors) { - if (vectors == null || vectors.Count == 0) - throw new ArgumentException("vectors must contain at least one element", nameof(vectors)); - -#if UNITY_5_3_OR_NEWER - Vector3 sum = Vector3.zero; -#else - Vector3Float sum = Vector3Float.zero; -#endif - int n = 0; - foreach (Spherical v in vectors) { - sum += v.ToVector3(); - n++; - } - var avg = sum / n; - - // if (avg.sqrMagnitude == 0f) - // return new Spherical(0f, new Direction(AngleFloat.Radians(0f), AngleFloat.Radians(0f))); - // else - return FromVector3(avg); - } - - } -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/SwingTwist.cs b/Runtime/LinearAlgebra/src/SwingTwist.cs deleted file mode 100644 index df6e048..0000000 --- a/Runtime/LinearAlgebra/src/SwingTwist.cs +++ /dev/null @@ -1,136 +0,0 @@ -// #if !UNITY_5_3_OR_NEWER -// using UnityEngine; -// #endif - -namespace LinearAlgebra { - - /// - /// An orientation using swing and twist angles - /// - /// The swing rotation - /// The twist rotation - public struct SwingTwist { - public Direction swing; - public AngleFloat twist; - - public SwingTwist(Direction swing, AngleFloat twist) { - this.swing = swing; - this.twist = twist; - } - - /// - /// Create a swing/twist rotation using angles in degrees - /// - /// The swing angle in the horizontal plane in degrees - /// The swing angle in the vertical plan in degrees - /// The twist angle in degrees - /// The swing/twist rotation - public static SwingTwist Degrees(float horizontalSwing, float verticalSwing, float twist) { - Direction swing = Direction.Degrees(horizontalSwing, verticalSwing); - AngleFloat twistAngle = AngleFloat.Degrees(twist); - SwingTwist s = new(swing, twistAngle); - return s; - } - - /// - /// Create a swing/twist rotation using angles in degrees - /// - /// The swing angle in the horizontal plane in degrees - /// The swing angle in the vertical plan in degrees - /// The twist angle in degrees - /// The swing/twist rotation - public static SwingTwist Radians(float horizontalSwing, float verticalSwing, float twist) { - Direction swing = Direction.Radians(horizontalSwing, verticalSwing); - AngleFloat twistAngle = AngleFloat.Radians(twist); - SwingTwist s = new(swing, twistAngle); - return s; - } - -#if UNITY_5_3_OR_NEWER - /// - /// A zero angle rotation - /// - public static readonly SwingTwist zero = Degrees(0, 0, 0); - - public Spherical ToAngleAxis() { - UnityEngine.Quaternion q = this.ToQuaternion(); - q.ToAngleAxis(out float angle, out UnityEngine.Vector3 axis); - Direction direction = Direction.FromVector3(axis); - - Spherical r = new(angle, direction); - return r; - } - - public static SwingTwist FromAngleAxis(Spherical r) { - UnityEngine.Vector3 vectorAxis = r.direction.ToVector3(); - UnityEngine.Quaternion q = UnityEngine.Quaternion.AngleAxis(r.distance, vectorAxis); - return FromQuaternion(q); - } - - /// - /// Convert a quaternion in a swing/twist rotation - /// - /// The quaternion to convert - /// The swing/twist rotation - public static SwingTwist FromQuaternion(UnityEngine.Quaternion q) { - UnityEngine.Vector3 angles = q.eulerAngles; - SwingTwist r = Degrees(angles.y, -angles.x, -angles.z); - return r; - } - - public UnityEngine.Quaternion ToQuaternion() { - UnityEngine.Quaternion q = UnityEngine.Quaternion.Euler(this.swing.vertical.inDegrees, - this.swing.horizontal.inDegrees, - this.twist.inDegrees); - return q; - } -#else - /// - /// A zero angle rotation - /// - public static readonly SwingTwist zero = Degrees(0, 0, 0); - - public Spherical ToAngleAxis() { - LinearAlgebra.Quaternion q = this.ToQuaternion(); - q.ToAngleAxis(out float angle, out Vector3Float axis); - Direction direction = Direction.FromVector3(axis); - - Spherical r = new(angle, direction); - return r; - } - - public static SwingTwist FromAngleAxis(Spherical r) { - Vector3Float vectorAxis = r.direction.ToVector3(); - LinearAlgebra.Quaternion q = LinearAlgebra.Quaternion.AngleAxis(AngleFloat.Degrees(r.distance), vectorAxis); - return FromQuaternion(q); - } - - /// - /// Convert a quaternion in a swing/twist rotation - /// - /// The quaternion to convert - /// The swing/twist rotation - public static SwingTwist FromQuaternion(LinearAlgebra.Quaternion q) { - Vector3Float v = LinearAlgebra.Quaternion.ToAngles(q); - SwingTwist r = Degrees(v.vertical, v.horizontal, v.depth); - return r; - } - - public LinearAlgebra.Quaternion ToQuaternion() { - LinearAlgebra.Quaternion q = LinearAlgebra.Quaternion.Euler(this.swing.vertical.inDegrees, - this.swing.horizontal.inDegrees, - this.twist.inDegrees); - return q; - - } - - public static SwingTwist FromQuat32(Quat32 q32) { - q32.ToAngles(out float right, out float up, out float forward); - SwingTwist r = Degrees(up, right, forward); - return r; - } -#endif - - } - -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/Vector2Float.cs b/Runtime/LinearAlgebra/src/Vector2Float.cs deleted file mode 100644 index ac1867c..0000000 --- a/Runtime/LinearAlgebra/src/Vector2Float.cs +++ /dev/null @@ -1,479 +0,0 @@ -using System; -using System.Numerics; - -namespace LinearAlgebra { - - /* - public struct Vector2Int { - public int horizontal; - public int vertical; - - public Vector2Int(int horizontal, int vertical) { - this.horizontal = horizontal; - this.vertical = vertical; - } - - /// - /// A vector with zero for all axis - /// - public static readonly Vector2Int zero = new(0, 0); - /// - /// A vector with values (1, 1) - /// - public static readonly Vector2Int one = new(1, 1); - /// - /// A vector with values (0, 1) - /// - public static readonly Vector2Int up = new(0, 1); - /// - /// A vector with values (0, -1) - /// - public static readonly Vector2Int down = new(0, -1); - /// - /// A vector with values (0, 1) - /// - public static readonly Vector2Int forward = new(0, 1); - /// - /// A vector with values (0, -1) - /// - public static readonly Vector2Int back = new(0, -1); - /// - /// A vector3 with values (-1, 0) - /// - public static readonly Vector2Int left = new(-1, 0); - /// - /// A vector with values (1, 0) - /// - public static readonly Vector2Int right = new(1, 0); - - /// - /// Tests if the vector has equal values as the given vector - /// - /// The vector to compare to - /// true if the vector values are equal - public readonly bool Equals(Vector2Int v) => this.horizontal == v.horizontal && vertical == v.vertical; - - /// - /// Tests if the vector is equal to the given object - /// - /// The object to compare to - /// false when the object is not a Vector2 or does not have equal values - public override readonly bool Equals(object obj) { - if (obj is not Vector2Int v) - return false; - - return (this.horizontal == v.horizontal && this.vertical == v.vertical); - } - - /// - /// Tests if the two vectors have equal values - /// - /// The first vector - /// The second vector - /// truewhen the vectors have equal values - /// Note that this uses a Float equality check which cannot be not exact in all cases. - /// In most cases it is better to check if the Vector2.Distance between the vectors is smaller than Float.epsilon - /// Or more efficient: (v1 - v2).sqrMagnitude < Float.sqrEpsilon - public static bool operator ==(Vector2Int v1, Vector2Int v2) { - return (v1.horizontal == v2.horizontal && v1.vertical == v2.vertical); - } - /// - /// Tests if two vectors have different values - /// - /// The first vector - /// The second vector - /// truewhen the vectors have different values - /// Note that this uses a Float equality check which cannot be not exact in all case. - /// In most cases it is better to check if the Vector2.Distance between the vectors is smaller than Float.epsilon. - /// Or more efficient: (v1 - v2).sqrMagnitude < Float.sqrEpsilon - public static bool operator !=(Vector2Int v1, Vector2Int v2) { - return (v1.horizontal != v2.horizontal || v1.vertical != v2.vertical); - } - public readonly float magnitude { - get { - int h = this.horizontal; - int v = this.vertical; - return MathF.Sqrt(h * h + v * v); - } - } - - public static float MagnitudeOf(Vector2Int v) { - return v.magnitude; - } - - public static Vector2Int operator -(Vector2Int v1, Vector2Int v2) { - return new Vector2Int(v1.horizontal - v2.horizontal, v1.vertical - v2.vertical); - } - public static Vector2Int operator +(Vector2Int v1, Vector2Int v2) { - return new Vector2Int(v1.horizontal + v2.horizontal, v1.vertical + v2.vertical); - } - - public static float Distance(Vector2Int v1, Vector2Int v2) { - return (v1 - v2).magnitude; - } - } - - public struct Vector2Float { - public float horizontal; - public float vertical; - - public Vector2Float(float horizontal, float vertical) { - this.horizontal = horizontal; - this.vertical = vertical; - } - - public readonly float magnitude { - get { - float h = this.horizontal; - float v = this.vertical; - return MathF.Sqrt(h * h + v * v); - } - } - - public static Vector2Float operator -(Vector2Float v1, Vector2Float v2) { - return new Vector2Float(v1.horizontal - v2.horizontal, v1.vertical - v2.vertical); - } - - public static float Distance(Vector2Float v1, Vector2Float v2) { - return (v1 - v2).magnitude; - } - } - */ - - /// - /// 2-dimensional vectors - /// - public struct Vector2Float { - - /// - /// The right axis of the vector - /// - public float horizontal; // left/right - /// - /// The upward/forward axis of the vector - /// - public float vertical; // forward/backward - // directions are to be inline with Vector3 as much as possible... - - /// - /// Create a new 2-dimensional vector - /// - /// x axis value - /// y axis value - public Vector2Float(float x, float y) { - this.horizontal = x; - this.vertical = y; - } - - /// - /// Convert a Vector2Int into a Vector2Float - /// - /// The Vector2Int - public Vector2Float(Vector2Int v) { - this.horizontal = v.horizontal; - this.vertical = v.vertical; - } - - /// - /// A vector with zero for all axis - /// - public static readonly Vector2Float zero = new Vector2Float(0, 0); - /// - /// A vector with values (1, 1) - /// - public static readonly Vector2Float one = new Vector2Float(1, 1); - /// - /// A vector with values (0, 1) - /// - public static readonly Vector2Float up = new Vector2Float(0, 1); - /// - /// A vector with values (0, -1) - /// - public static readonly Vector2Float down = new Vector2Float(0, -1); - /// - /// A vector with values (0, 1) - /// - public static readonly Vector2Float forward = new Vector2Float(0, 1); - /// - /// A vector with values (0, -1) - /// - public static readonly Vector2Float back = new Vector2Float(0, -1); - /// - /// A vector3 with values (-1, 0) - /// - public static readonly Vector2Float left = new Vector2Float(-1, 0); - /// - /// A vector with values (1, 0) - /// - public static readonly Vector2Float right = new Vector2Float(1, 0); - - /// - /// The squared length of this vector - /// - /// The squared length - /// The squared length is computationally simpler than the real length. - /// Think of Pythagoras A^2 + B^2 = C^2. - /// This leaves out the calculation of the squared root of C. - public readonly float sqrMagnitude => horizontal * horizontal + vertical * vertical; - public static float SqrMagnitudeOf(Vector2Float v) { - return v.sqrMagnitude; - } - - /// - /// The length of this vector - /// - /// The length of this vector - public readonly float magnitude => MathF.Sqrt(horizontal * horizontal + vertical * vertical); - public static float MagnitudeOf(Vector2Float v) { - return v.magnitude; - } - - /// - /// Convert the vector to a length of a 1 - /// - /// The vector with length 1 - public Vector2Float normalized { - get { - float l = magnitude; - Vector2Float v = zero; - if (l > Float.epsilon) - v = this / l; - return v; - } - } - public static Vector2Float Normalize(Vector2Float v) { - return v.normalized; - } - - /// - /// Add two vectors - /// - /// The first vector - /// The second vector - /// The result of adding the two vectors - public static Vector2Float operator +(Vector2Float v1, Vector2Float v2) { - Vector2Float v = new Vector2Float(v1.horizontal + v2.horizontal, v1.vertical + v2.vertical); - return v; - } - - /// - /// Subtract two vectors - /// - /// The first vector - /// The second vector - /// The result of adding the two vectors - public static Vector2Float operator -(Vector2Float v1, Vector2Float v2) { - Vector2Float v = new Vector2Float(v1.horizontal - v2.horizontal, v1.vertical - v2.vertical); - return v; - } - - /// - /// Negate the vector - /// - /// The vector to negate - /// The negated vector - /// This will result in a vector pointing in the opposite direction - public static Vector2Float operator -(Vector2Float v1) { - Vector2Float v = new Vector2Float(-v1.horizontal, -v1.vertical); - return v; - } - - /// - /// Scale a vector uniformly down - /// - /// The vector to scale - /// The scaling factor - /// The scaled vector - /// Each component of the vector will be devided by the same factor. - public static Vector2Float operator /(Vector2Float v, float f) { - Vector2Float r = new(v.horizontal / f, v.vertical / f); - return r; - } - - - /// - /// Scale a vector uniformly up - /// - /// The vector to scale - /// The scaling factor - /// The scaled vector - /// Each component of the vector will be multipled with the same factor. - public static Vector2Float operator *(Vector2Float v1, float f) { - Vector2Float v = new Vector2Float(v1.horizontal * f, v1.vertical * f); - return v; - } - - /// - /// Scale a vector uniformly up - /// - /// The scaling factor - /// The vector to scale - /// The scaled vector - /// Each component of the vector will be multipled with the same factor. - public static Vector2Float operator *(float f, Vector2Float v1) { - Vector2Float v = new Vector2Float(f * v1.horizontal, f * v1.vertical); - return v; - } - - /// @brief Scale the vector using another vector - /// @param v1 The vector to scale - /// @param v2 A vector with the scaling factors - /// @return The scaled vector - /// @remark Each component of the vector v1 will be multiplied with the - /// matching component from the scaling vector v2. - public static Vector2Float Scale(Vector2Float v1, Vector2Float v2) { - return new Vector2Float(v1.horizontal * v2.horizontal, v1.vertical * v2.vertical); - } - - /// - /// Tests if the vector has equal values as the given vector - /// - /// The vector to compare to - /// true if the vector values are equal - //public readonly bool Equals(Vector2Float v1) => horizontal == v1.horizontal && vertical == v1.vertical; - - /// - /// Tests if the two vectors have equal values - /// - /// The first vector - /// The second vector - /// truewhen the vectors have equal values - /// Note that this uses a Float equality check which cannot be not exact in all cases. - /// In most cases it is better to check if the Vector2.Distance between the vectors is smaller than Float.epsilon - /// Or more efficient: (v1 - v2).sqrMagnitude < Float.sqrEpsilon - public static bool operator ==(Vector2Float v1, Vector2Float v2) { - return (v1.horizontal == v2.horizontal && v1.vertical == v2.vertical); - } - - /// - /// Tests if two vectors have different values - /// - /// The first vector - /// The second vector - /// truewhen the vectors have different values - /// Note that this uses a Float equality check which cannot be not exact in all case. - /// In most cases it is better to check if the Vector2.Distance between the vectors is smaller than Float.epsilon. - /// Or more efficient: (v1 - v2).sqrMagnitude < Float.sqrEpsilon - public static bool operator !=(Vector2Float v1, Vector2Float v2) { - return (v1.horizontal != v2.horizontal || v1.vertical != v2.vertical); - } - - /// - /// Tests if the vector is equal to the given object - /// - /// The object to compare to - /// false when the object is not a Vector2 or does not have equal values - public override readonly bool Equals(object obj) { - if (obj is not Vector2Float v) - return false; - - return (horizontal == v.horizontal && vertical == v.vertical); - } - - /// - /// Get an hash code for the vector - /// - /// The hash code - public override readonly int GetHashCode() { - return HashCode.Combine(horizontal, vertical); - } - - /// - /// Get the distance between two vectors - /// - /// The first vector - /// The second vector - /// The distance between the two vectors - public static float Distance(Vector2Float v1, Vector2Float v2) { - float x = v1.horizontal - v2.horizontal; - float y = v1.vertical - v2.vertical; - float d = (float)Math.Sqrt(x * x + y * y); - return d; - } - - /// - /// The dot product of two vectors - /// - /// The first vector - /// The second vector - /// The dot product of the two vectors - public static float Dot(Vector2Float v1, Vector2Float v2) { - return v1.horizontal * v2.horizontal + v1.vertical * v2.vertical; - } - - /// - /// Calculate the signed angle between two vectors. - /// - /// The starting vector - /// The ending vector - /// The axis to rotate around - /// The signed angle in degrees - public static float SignedAngle(Vector2Float from, Vector2Float to) { - //float sign = Math.Sign(v1.y * v2.x - v1.x * v2.y); - //return Vector2.Angle(v1, v2) * sign; - - float sqrMagFrom = from.sqrMagnitude; - float sqrMagTo = to.sqrMagnitude; - - if (sqrMagFrom == 0 || sqrMagTo == 0) - return 0; - //if (!isfinite(sqrMagFrom) || !isfinite(sqrMagTo)) - // return nanf(""); - - float angleFrom = (float)Math.Atan2(from.vertical, from.horizontal); - float angleTo = (float)Math.Atan2(to.vertical, to.horizontal); - return -(angleTo - angleFrom) * AngleFloat.Rad2Deg; - } - - public static float UnsignedAngle(Vector2Float from, Vector2Float to) { - return MathF.Abs(SignedAngle(from, to)); - } - - /// - /// Rotates the vector with the given angle - /// - /// The vector to rotate - /// The angle in degrees - /// - public static Vector2Float Rotate(Vector2Float v1, AngleFloat angle) { - float sin = (float)Math.Sin(angle.inRadians); - float cos = (float)Math.Cos(angle.inRadians); - // float sin = AngleFloat.Sin(angle); - // float cos = AngleFloat.Cos(angle); - - float tx = v1.horizontal; - float ty = v1.vertical; - Vector2Float v = new Vector2Float() { - horizontal = (cos * tx) - (sin * ty), - vertical = (sin * tx) + (cos * ty) - }; - return v; - } - - /// - /// Lerp between two vectors - /// - /// The from vector - /// The to vector - /// The interpolation distance [0..1] - /// The lerped vector - /// The factor f is unclamped. Value 0 matches the *v1* vector, Value 1 - /// matches the *v2* vector Value -1 is *v1* vector minus the difference - /// between *v1* and *v2* etc. - public static Vector2Float Lerp(Vector2Float v1, Vector2Float v2, float f) { - Vector2Float v = v1 + (v2 - v1) * f; - return v; - } - - /// - /// Map interval of angles between vectors [0..Pi] to interval [0..1] - /// - /// The first vector - /// The second vector - /// The resulting factor in interval [0..1] - /// Vectors a and b must be normalized - public static float ToFactor(Vector2Float v1, Vector2Float v2) { - return (1 - Vector2Float.Dot(v1, v2)) / 2; - } - } -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/Vector2Int.cs b/Runtime/LinearAlgebra/src/Vector2Int.cs deleted file mode 100644 index ed68e8b..0000000 --- a/Runtime/LinearAlgebra/src/Vector2Int.cs +++ /dev/null @@ -1,185 +0,0 @@ -using System; - -namespace LinearAlgebra { - - public struct Vector2Int { - public int horizontal; - public int vertical; - - public Vector2Int(int horizontal, int vertical) { - this.horizontal = horizontal; - this.vertical = vertical; - } - - /// - /// A vector with zero for all axis - /// - public static readonly Vector2Int zero = new(0, 0); - /// - /// A vector with values (1, 1) - /// - public static readonly Vector2Int one = new(1, 1); - /// - /// A vector with values (0, 1) - /// - public static readonly Vector2Int up = new(0, 1); - /// - /// A vector with values (0, -1) - /// - public static readonly Vector2Int down = new(0, -1); - /// - /// A vector with values (0, 1) - /// - public static readonly Vector2Int forward = new(0, 1); - /// - /// A vector with values (0, -1) - /// - public static readonly Vector2Int back = new(0, -1); - /// - /// A vector3 with values (-1, 0) - /// - public static readonly Vector2Int left = new(-1, 0); - /// - /// A vector with values (1, 0) - /// - public static readonly Vector2Int right = new(1, 0); - - /* - /// - /// Get an hash code for the vector - /// - /// The hash code - public override int GetHashCode() { - return (this.horizontal, this.vertical).GetHashCode(); - } - - /// - /// Tests if the vector has equal values as the given vector - /// - /// The vector to compare to - /// true if the vector values are equal - public readonly bool Equals(Vector2Int v) => this.horizontal == v.horizontal && vertical == v.vertical; - - */ - - /// - /// Tests if the two vectors have equal values - /// - /// The first vector - /// The second vector - /// truewhen the vectors have equal values - /// Note that this uses a Float equality check which cannot be not exact in all cases. - /// In most cases it is better to check if the Vector2.Distance between the vectors is smaller than Float.epsilon - /// Or more efficient: (v1 - v2).sqrMagnitude < Float.sqrEpsilon - public static bool operator ==(Vector2Int v1, Vector2Int v2) { - return (v1.horizontal == v2.horizontal && v1.vertical == v2.vertical); - } - /// - /// Tests if two vectors have different values - /// - /// The first vector - /// The second vector - /// truewhen the vectors have different values - /// Note that this uses a Float equality check which cannot be not exact in all case. - /// In most cases it is better to check if the Vector2.Distance between the vectors is smaller than Float.epsilon. - /// Or more efficient: (v1 - v2).sqrMagnitude < Float.sqrEpsilon - public static bool operator !=(Vector2Int v1, Vector2Int v2) { - return (v1.horizontal != v2.horizontal || v1.vertical != v2.vertical); - } - - /// - /// Tests if the vector is equal to the given object - /// - /// The object to compare to - /// false when the object is not a Vector2 or does not have equal values - public override readonly bool Equals(object obj) { - if (obj is not Vector2Int v) - return false; - - return (this.horizontal == v.horizontal && this.vertical == v.vertical); - } - - /// - /// Get an hash code for the vector - /// - /// The hash code - public override readonly int GetHashCode() { - return HashCode.Combine(horizontal, vertical); - } - - public readonly float sqrMagnitude => this.horizontal * this.horizontal + this.vertical * this.vertical; - - public static float SqrMagnitudeOf(Vector2Int v) { - return v.sqrMagnitude; - } - - public readonly float magnitude => - MathF.Sqrt(this.horizontal * this.horizontal + this.vertical * this.vertical); - - public static float MagnitudeOf(Vector2Int v) { - return v.magnitude; - } - - /// @brief Convert the vector to a length of 1 - /// @return The vector normalized to a length of 1 - public readonly Vector2Float normalized { - get { - float l = magnitude; - Vector2Float v = Vector2Float.zero; - if (l > Float.epsilon) - v = new Vector2Float(this) / l; - return v; - } - } - /// @brief Convert the vector to a length of 1 - /// @param v The vector to convert - /// @return The vector normalized to a length of 1 - public static Vector2Float Normalize(Vector2Int v) { - float num = v.magnitude; - Vector2Float result = Vector2Float.zero; - if (num > Float.epsilon) - result = new Vector2Float(v) / num; - - return result; - } - - public static Vector2Int operator -(Vector2Int v) { - return new Vector2Int(-v.horizontal, -v.vertical); - } - - public static Vector2Int operator -(Vector2Int v1, Vector2Int v2) { - return new Vector2Int(v1.horizontal - v2.horizontal, v1.vertical - v2.vertical); - } - public static Vector2Int operator +(Vector2Int v1, Vector2Int v2) { - return new Vector2Int(v1.horizontal + v2.horizontal, v1.vertical + v2.vertical); - } - - public static Vector2Int operator /(Vector2Int v, int f) { - return new Vector2Int(v.horizontal / f, v.vertical / f); - } - - public static Vector2Int operator *(Vector2Int v1, int d) { - return new Vector2Int(v1.horizontal * d, v1.vertical * d); - } - - public static Vector2Int operator *(int d, Vector2Int v1) { - return new Vector2Int(d * v1.horizontal, d * v1.vertical); - } - - public static Vector2Int Scale(Vector2Int v1, Vector2Int v2) { - return new Vector2Int(v1.horizontal * v2.horizontal, v1.vertical * v2.vertical); - } - - /// @brief The dot product of two vectors - /// @param v1 The first vector - /// @param v2 The second vector - /// @return The dot product of the two vectors - public static int Dot(Vector2Int v1, Vector2Int v2) { - return v1.horizontal * v2.horizontal + v1.vertical * v2.vertical; - } - - public static float Distance(Vector2Int v1, Vector2Int v2) { - return (v1 - v2).magnitude; - } - } -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/Vector3Float.cs b/Runtime/LinearAlgebra/src/Vector3Float.cs deleted file mode 100644 index bcf8626..0000000 --- a/Runtime/LinearAlgebra/src/Vector3Float.cs +++ /dev/null @@ -1,402 +0,0 @@ -//#if !UNITY_5_3_OR_NEWER -using System; - -namespace LinearAlgebra { - /* - public struct Vector3Float { - public float horizontal; - public float vertical; - public float depth; - - public Vector3Float(float horizontal, float vertical, float depth) { - this.horizontal = horizontal; - this.vertical = vertical; - this.depth = depth; - } - - /// - /// A vector with zero for all axis - /// - public static readonly Vector3Float zero = new(0, 0, 0); - - public readonly float magnitude { - get => (float)Math.Sqrt(this.horizontal * this.horizontal + this.vertical * this.vertical + this.depth * this.depth); - } - - /// - /// Convert the vector to a length of a 1 - /// - /// The vector with length 1 - public readonly Vector3Float normalized { - get { - float l = magnitude; - Vector3Float v = zero; - if (l > Float.epsilon) - v = this / l; - return v; - } - } - - - public static Vector3Float operator *(Vector3Float v, float f) { - Vector3Float r = new(v.horizontal * f, v.vertical * f, v.depth * f); - return r; - } - public static Vector3Float operator /(Vector3Float v, float f) { - Vector3Float r = new(v.horizontal / f, v.vertical / f, v.depth / f); - return r; - } - - public static float Dot(Vector3Float v1, Vector3Float v2) { - return v1.horizontal * v2.horizontal + v1.vertical * v2.vertical + - v1.depth * v2.depth; - } - - const float epsilon = 1E-05f; - public static Vector3Float Project(Vector3Float v, Vector3Float n) { - float sqrMagnitude = Dot(n, n); - if (sqrMagnitude < epsilon) - return zero; - else { - float dot = Dot(v, n); - Vector3Float r = n * dot; - r /= sqrMagnitude; - return r; - } - - } - } - */ - - /// - /// 3-dimensional vectors - /// - /// This uses the right-handed coordinate system. - public struct Vector3Float { - - /// - /// The right axis of the vector - /// - public float horizontal; //> left/right - /// - /// The upward axis of the vector - /// - public float vertical; //> up/down - /// - /// The forward axis of the vector - /// - public float depth; //> forward/backward - - /// - /// Create a new 3-dimensional vector - /// - /// x axis value - /// y axis value - /// z axis value - public Vector3Float(float horizontal, float vertical, float depth) { - this.horizontal = horizontal; - this.vertical = vertical; - this.depth = depth; - } - - public Vector3Float(Vector3Int v) { - this.horizontal = v.horizontal; - this.vertical = v.vertical; - this.depth = v.depth; - } - - public static Vector3Float FromSpherical(Spherical s) { - float verticalRad = (AngleFloat.deg90 - s.direction.vertical).inRadians; - float horizontalRad = s.direction.horizontal.inRadians; - float cosVertical = MathF.Cos(verticalRad); - float sinVertical = MathF.Sin(verticalRad); - float cosHorizontal = MathF.Cos(horizontalRad); - float sinHorizontal = MathF.Sin(horizontalRad); - - float horizontal = s.distance * sinVertical * sinHorizontal; - float vertical = s.distance * cosVertical; - float depth = s.distance * sinVertical * cosHorizontal; - return new Vector3Float(horizontal, vertical, depth); - } - - public override string ToString() { - return $"({this.horizontal}, {this.vertical}, {this.depth})"; - } - - /// - /// A vector with zero for all axis - /// - public static readonly Vector3Float zero = new Vector3Float(0, 0, 0); - /// - /// A vector with one for all axis - /// - public static readonly Vector3Float one = new Vector3Float(1, 1, 1); - /// - /// A Vector3Float with values (-1, 0, 0) - /// - public static readonly Vector3Float left = new Vector3Float(-1, 0, 0); - /// - /// A vector with values (1, 0, 0) - /// - public static readonly Vector3Float right = new Vector3Float(1, 0, 0); - /// - /// A vector with values (0, -1, 0) - /// - public static readonly Vector3Float down = new Vector3Float(0, -1, 0); - /// - /// A vector with values (0, 1, 0) - /// - public static readonly Vector3Float up = new Vector3Float(0, 1, 0); - /// - /// A vector with values (0, 0, -1) - /// - public static readonly Vector3Float back = new Vector3Float(0, -1, 0); - /// - /// A vector with values (0, 0, 1) - /// - public static readonly Vector3Float forward = new Vector3Float(0, 1, 0); - - /// @brief The vector length - /// @return The vector length - public readonly float magnitude => MathF.Sqrt(horizontal * horizontal + vertical * vertical + depth * depth); - /// - /// The vector length - /// - /// The vector for which you need the length - /// The vector length - public static float MagnitudeOf(Vector3Float v) { - return v.magnitude; - } - - /// @brief The squared vector length - /// @return The squared vector length - /// @remark The squared length is computationally simpler than the real - /// length. Think of Pythagoras A^2 + B^2 = C^2. This leaves out the - /// calculation of the squared root of C. - public readonly float sqrMagnitude => (horizontal * horizontal + vertical * vertical + depth * depth); - - /// - /// The squared vector length - /// - /// The vector for which you need the squared length - /// The squared vector length - /// The squared length is computationally simpler than the real - /// length. Think of Pythagoras A^2 + B^2 = C^2. This leaves out the - /// calculation of the squared root of C. - public static float SqrMagnitudeOf(Vector3Float v) { - return v.sqrMagnitude; - } - - /// @brief Convert the vector to a length of 1 - /// @return The vector normalized to a length of 1 - public readonly Vector3Float normalized { - get { - float l = magnitude; - Vector3Float v = zero; - if (l > Float.epsilon) - v = this / l; - return v; - } - } - /// @brief Convert the vector to a length of 1 - /// @param v The vector to convert - /// @return The vector normalized to a length of 1 - public static Vector3Float Normalize(Vector3Float v) { - float num = v.magnitude; - Vector3Float result = zero; - if (num > Float.epsilon) - result = v / num; - - return result; - } - - /// - /// Negate te vector such that it points in the opposite direction - /// - /// - /// The negated vector - public static Vector3Float operator -(Vector3Float v1) { - Vector3Float v = new(-v1.horizontal, -v1.vertical, -v1.depth); - return v; - } - - /// - /// Subtract two vectors - /// - /// - /// - /// The result of the subtraction - public static Vector3Float operator -(Vector3Float v1, Vector3Float v2) { - Vector3Float v = new(v1.horizontal - v2.horizontal, v1.vertical - v2.vertical, v1.depth - v2.depth); - return v; - } - - /// - /// Add two vectors - /// - /// - /// - /// The result of the addition - public static Vector3Float operator +(Vector3Float v1, Vector3Float v2) { - Vector3Float v = new(v1.horizontal + v2.horizontal, v1.vertical + v2.vertical, v1.depth + v2.depth); - return v; - } - - /// @brief Scale the vector using another vector - /// @param v1 The vector to scale - /// @param v2 A vector with the scaling factors - /// @return The scaled vector - /// @remark Each component of the vector v1 will be multiplied with the - /// matching component from the scaling vector v2. - public static Vector3Float Scale(Vector3Float v1, Vector3Float v2) { - return new Vector3Float(v1.horizontal * v2.horizontal, v1.vertical * v2.vertical, v1.depth * v2.depth); - } - - - public static Vector3Float operator *(Vector3Float v1, float d) { - Vector3Float v = new(v1.horizontal * d, v1.vertical * d, v1.depth * d); - return v; - } - - public static Vector3Float operator *(float d, Vector3Float v1) { - Vector3Float v = new(d * v1.horizontal, d * v1.vertical, d * v1.depth); - return v; - } - - public static Vector3Float operator /(Vector3Float v1, float d) { - Vector3Float v = new(v1.horizontal / d, v1.vertical / d, v1.depth / d); - return v; - } - - - //public bool Equals(Vector3Float v) => (horizontal == v.horizontal && vertical == v.vertical && depth == v.depth); - - public static bool operator ==(Vector3Float v1, Vector3Float v2) { - return (v1.horizontal == v2.horizontal && v1.vertical == v2.vertical && v1.depth == v2.depth); - } - - public static bool operator !=(Vector3Float v1, Vector3Float v2) { - return (v1.horizontal != v2.horizontal || v1.vertical != v2.vertical || v1.depth != v2.depth); - } - - public override readonly bool Equals(object obj) { - if (obj is not Vector3Float v) - return false; - - return (horizontal == v.horizontal && vertical == v.vertical && depth == v.depth); - } - - public override readonly int GetHashCode() { - return HashCode.Combine(horizontal, vertical, depth); - } - - /// @brief The distance between two vectors - /// @param v1 The first vector - /// @param v2 The second vector - /// @return The distance between the two vectors - public static float Distance(Vector3Float v1, Vector3Float v2) { - return (v2 - v1).magnitude; - } - - /// @brief The dot product of two vectors - /// @param v1 The first vector - /// @param v2 The second vector - /// @return The dot product of the two vectors - public static float Dot(Vector3Float v1, Vector3Float v2) { - return v1.horizontal * v2.horizontal + v1.vertical * v2.vertical + v1.depth * v2.depth; - } - - /// @brief The cross product of two vectors - /// @param v1 The first vector - /// @param v2 The second vector - /// @return The cross product of the two vectors - public static Vector3Float Cross(Vector3Float v1, Vector3Float v2) { - return new Vector3Float(v1.vertical * v2.depth - v1.depth * v2.vertical, v1.depth * v2.horizontal - v1.horizontal * v2.depth, - v1.horizontal * v2.vertical - v1.vertical * v2.horizontal); - - } - - /// @brief Project the vector on another vector - /// @param v The vector to project - /// @param n The normal vecto to project on - /// @return The projected vector - public static Vector3Float Project(Vector3Float v, Vector3Float n) { - float sqrMagnitude = Dot(n, n); - if (sqrMagnitude < Float.epsilon) - return zero; - else { - float dot = Dot(v, n); - Vector3Float r = n * dot / sqrMagnitude; - return r; - } - } - - /// @brief Project the vector on a plane defined by a normal orthogonal to the - /// plane. - /// @param v The vector to project - /// @param n The normal of the plane to project on - /// @return Teh projected vector - public static Vector3Float ProjectOnPlane(Vector3Float v, Vector3Float n) { - Vector3Float r = v - Project(v, n); - return r; - } - - /// @brief The angle between two vectors - /// @param v1 The first vector - /// @param v2 The second vector - /// @return The angle between the two vectors - /// @remark This reterns an unsigned angle which is the shortest distance - /// between the two vectors. Use Vector3::SignedAngle if a signed angle is - /// needed. - public static AngleFloat UnsignedAngle(Vector3Float v1, Vector3Float v2) { - float denominator = MathF.Sqrt(v1.sqrMagnitude * v2.sqrMagnitude); - if (denominator < Float.epsilon) - return AngleFloat.zero; - - float dot = Dot(v1, v2); - float fraction = dot / denominator; - if (float.IsNaN(fraction)) - return AngleFloat.Degrees( - fraction); // short cut to returning NaN universally - - float cdot = Float.Clamp(fraction, -1.0f, 1.0f); - float r = MathF.Acos(cdot); - return AngleFloat.Radians(r); - } - /// @brief The signed angle between two vectors - /// @param v1 The starting vector - /// @param v2 The ending vector - /// @param axis The axis to rotate around - /// @return The signed angle between the two vectors - public static AngleFloat SignedAngle(Vector3Float v1, Vector3Float v2, - Vector3Float axis) { - // angle in [0,180] - AngleFloat angle = UnsignedAngle(v1, v2); - - Vector3Float cross = Cross(v1, v2); - float b = Dot(axis, cross); - float signd = b < 0 ? -1.0F : (b > 0 ? 1.0F : 0.0F); - - // angle in [-179,180] - AngleFloat signed_angle = angle * signd; - - return signed_angle; - } - - - /// @brief Lerp (linear interpolation) between two vectors - /// @param v1 The starting vector - /// @param v2 The ending vector - /// @param f The interpolation distance - /// @return The lerped vector - /// @remark The factor f is unclamped. Value 0 matches the vector *v1*, Value - /// 1 matches vector *v2*. Value -1 is vector *v1* minus the difference - /// between *v1* and *v2* etc. - public static Vector3Float Lerp(Vector3Float v1, Vector3Float v2, float f) { - Vector3Float v = v1 + (v2 - v1) * f; - return v; - } - - } -} -//#endif \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/Vector3Int.cs b/Runtime/LinearAlgebra/src/Vector3Int.cs deleted file mode 100644 index 18edf40..0000000 --- a/Runtime/LinearAlgebra/src/Vector3Int.cs +++ /dev/null @@ -1,273 +0,0 @@ -//#if !UNITY_5_3_OR_NEWER -using System; - -namespace LinearAlgebra { - - /// - /// 3-dimensional vectors - /// - /// This uses the right-handed coordinate system. - /// - /// Create a new 3-dimensional vector - /// - /// x axis value - /// y axis value - /// z axis value - public struct Vector3Int { - - /// - /// The right axis of the vector - /// - public int horizontal; //> left/right - /// - /// The upward axis of the vector - /// - public int vertical; //> up/down - /// - /// The forward axis of the vector - /// - public int depth; //> forward/backward - - public Vector3Int(int horizontal, int vertical, int depth) { - this.horizontal = horizontal; - this.vertical = vertical; - this.depth = depth; - } - - /// - /// A vector with zero for all axis - /// - public static readonly Vector3Int zero = new(0, 0, 0); - /// - /// A vector with one for all axis - /// - public static readonly Vector3Int one = new(1, 1, 1); - /// - /// A Vector3Int with values (-1, 0, 0) - /// - public static readonly Vector3Int left = new(-1, 0, 0); - /// - /// A vector with values (1, 0, 0) - /// - public static readonly Vector3Int right = new(1, 0, 0); - /// - /// A vector with values (0, -1, 0) - /// - public static readonly Vector3Int down = new(0, -1, 0); - /// - /// A vector with values (0, 1, 0) - /// - public static readonly Vector3Int up = new(0, 1, 0); - /// - /// A vector with values (0, 0, -1) - /// - public static readonly Vector3Int back = new(0, -1, 0); - /// - /// A vector with values (0, 0, 1) - /// - public static readonly Vector3Int forward = new(0, 1, 0); - - /// @brief The vector length - /// @return The vector length - public readonly float magnitude => MathF.Sqrt(horizontal * horizontal + vertical * vertical + depth * depth); - /// - /// The vector length - /// - /// The vector for which you need the length - /// The vector length - public static float MagnitudeOf(Vector3Int v) { - return v.magnitude; - } - - /// @brief The squared vector length - /// @return The squared vector length - /// @remark The squared length is computationally simpler than the real - /// length. Think of Pythagoras A^2 + B^2 = C^2. This leaves out the - /// calculation of the squared root of C. - public readonly float sqrMagnitude => (horizontal * horizontal + vertical * vertical + depth * depth); - - /// - /// The squared vector length - /// - /// The vector for which you need the squared length - /// The squared vector length - /// The squared length is computationally simpler than the real - /// length. Think of Pythagoras A^2 + B^2 = C^2. This leaves out the - /// calculation of the squared root of C. - public static float SqrMagnitudeOf(Vector3Int v) { - return v.sqrMagnitude; - } - - /// @brief Convert the vector to a length of 1 - /// @return The vector normalized to a length of 1 - public readonly Vector3Float normalized { - get { - float l = magnitude; - Vector3Float v = Vector3Float.zero; - if (l > Float.epsilon) - v = new Vector3Float(this) / l; - return v; - } - } - /// @brief Convert the vector to a length of 1 - /// @param v The vector to convert - /// @return The vector normalized to a length of 1 - public static Vector3Float Normalize(Vector3Int v) { - float num = v.magnitude; - Vector3Float result = Vector3Float.zero; - if (num > Float.epsilon) - result = new Vector3Float(v) / num; - - return result; - } - - /// - /// Negate te vector such that it points in the opposite direction - /// - /// - /// The negated vector - public static Vector3Int operator -(Vector3Int v1) { - Vector3Int v = new(-v1.horizontal, -v1.vertical, -v1.depth); - return v; - } - - /// - /// Subtract two vectors - /// - /// - /// - /// The result of the subtraction - public static Vector3Int operator -(Vector3Int v1, Vector3Int v2) { - Vector3Int v = new(v1.horizontal - v2.horizontal, v1.vertical - v2.vertical, v1.depth - v2.depth); - return v; - } - - /// - /// Add two vectors - /// - /// - /// - /// The result of the addition - public static Vector3Int operator +(Vector3Int v1, Vector3Int v2) { - Vector3Int v = new(v1.horizontal + v2.horizontal, v1.vertical + v2.vertical, v1.depth + v2.depth); - return v; - } - - /// @brief Scale the vector using another vector - /// @param v1 The vector to scale - /// @param v2 A vector with the scaling factors - /// @return The scaled vector - /// @remark Each component of the vector v1 will be multiplied with the - /// matching component from the scaling vector v2. - public static Vector3Int Scale(Vector3Int v1, Vector3Int v2) { - return new Vector3Int(v1.horizontal * v2.horizontal, v1.vertical * v2.vertical, v1.depth * v2.depth); - } - - - public static Vector3Int operator *(Vector3Int v1, int d) { - Vector3Int v = new(v1.horizontal * d, v1.vertical * d, v1.depth * d); - return v; - } - - public static Vector3Int operator *(int d, Vector3Int v1) { - Vector3Int v = new(d * v1.horizontal, d * v1.vertical, d * v1.depth); - return v; - } - - public static Vector3Int operator /(Vector3Int v1, int d) { - Vector3Int v = new(v1.horizontal / d, v1.vertical / d, v1.depth / d); - return v; - } - - public bool Equals(Vector3Int v) => (horizontal == v.horizontal && vertical == v.vertical && depth == v.depth); - - public override bool Equals(object obj) { - if (!(obj is Vector3Int v)) - return false; - - return (horizontal == v.horizontal && vertical == v.vertical && depth == v.depth); - } - - public static bool operator ==(Vector3Int v1, Vector3Int v2) { - return (v1.horizontal == v2.horizontal && v1.vertical == v2.vertical && v1.depth == v2.depth); - } - - public static bool operator !=(Vector3Int v1, Vector3Int v2) { - return (v1.horizontal != v2.horizontal || v1.vertical != v2.vertical || v1.depth != v2.depth); - } - - public override int GetHashCode() { - return (horizontal, vertical, depth).GetHashCode(); - } - - /// @brief The distance between two vectors - /// @param v1 The first vector - /// @param v2 The second vector - /// @return The distance between the two vectors - public static float Distance(Vector3Int v1, Vector3Int v2) { - return (v2 - v1).magnitude; - } - - /// @brief The dot product of two vectors - /// @param v1 The first vector - /// @param v2 The second vector - /// @return The dot product of the two vectors - public static float Dot(Vector3Int v1, Vector3Int v2) { - return v1.horizontal * v2.horizontal + v1.vertical * v2.vertical + v1.depth * v2.depth; - } - - /// @brief The cross product of two vectors - /// @param v1 The first vector - /// @param v2 The second vector - /// @return The cross product of the two vectors - public static Vector3Int Cross(Vector3Int v1, Vector3Int v2) { - return new Vector3Int(v1.vertical * v2.depth - v1.depth * v2.vertical, v1.depth * v2.horizontal - v1.horizontal * v2.depth, - v1.horizontal * v2.vertical - v1.vertical * v2.horizontal); - - } - - /// @brief The angle between two vectors - /// @param v1 The first vector - /// @param v2 The second vector - /// @return The angle between the two vectors - /// @remark This reterns an unsigned angle which is the shortest distance - /// between the two vectors. Use Vector3::SignedAngle if a signed angle is - /// needed. - public static AngleFloat UnsignedAngle(Vector3Int v1, Vector3Int v2) { - float denominator = MathF.Sqrt(v1.sqrMagnitude * v2.sqrMagnitude); - if (denominator < Float.epsilon) - return AngleFloat.zero; - - float dot = Dot(v1, v2); - float fraction = dot / denominator; - if (float.IsNaN(fraction)) - return AngleFloat.Degrees( - fraction); // short cut to returning NaN universally - - float cdot = Float.Clamp(fraction, -1.0f, 1.0f); - float r = MathF.Acos(cdot); - return AngleFloat.Radians(r); - } - /// @brief The signed angle between two vectors - /// @param v1 The starting vector - /// @param v2 The ending vector - /// @param axis The axis to rotate around - /// @return The signed angle between the two vectors - public static AngleFloat SignedAngle(Vector3Int v1, Vector3Int v2, - Vector3Int axis) { - // angle in [0,180] - AngleFloat angle = UnsignedAngle(v1, v2); - - Vector3Int cross = Cross(v1, v2); - float b = Dot(axis, cross); - float signd = b < 0 ? -1.0F : (b > 0 ? 1.0F : 0.0F); - - // angle in [-179,180] - AngleFloat signed_angle = angle * signd; - - return signed_angle; - } - - } -} -//#endif \ No newline at end of file diff --git a/Runtime/LinearAlgebra/src/float16.cs b/Runtime/LinearAlgebra/src/float16.cs deleted file mode 100644 index 4b58cdd..0000000 --- a/Runtime/LinearAlgebra/src/float16.cs +++ /dev/null @@ -1,322 +0,0 @@ -using System; - -namespace LinearAlgebra { - - public class float16 { - // - // FILE: float16.cpp - // AUTHOR: Rob Tillaart - // VERSION: 0.1.8 - // PURPOSE: library for Float16s for Arduino - // URL: http://en.wikipedia.org/wiki/Half-precision_floating-point_format - - ushort _value; - - public float16() { _value = 0; } - - public float16(float f) { - //_value = f32tof16(f); - _value = F32ToF16__(f); - } - - public float toFloat() { - return f16tof32(_value); - } - - public ushort GetBinary() { return _value; } - public void SetBinary(ushort value) { _value = value; } - - ////////////////////////////////////////////////////////// - // - // EQUALITIES - // - /* - bool float16::operator ==(const float16 &f) { return (_value == f._value); } - - bool float16::operator !=(const float16 &f) { return (_value != f._value); } - - bool float16::operator >(const float16 &f) { - if ((_value & 0x8000) && (f._value & 0x8000)) - return _value < f._value; - if (_value & 0x8000) - return false; - if (f._value & 0x8000) - return true; - return _value > f._value; - } - - bool float16::operator >=(const float16 &f) { - if ((_value & 0x8000) && (f._value & 0x8000)) - return _value <= f._value; - if (_value & 0x8000) - return false; - if (f._value & 0x8000) - return true; - return _value >= f._value; - } - - bool float16::operator <(const float16 &f) { - if ((_value & 0x8000) && (f._value & 0x8000)) - return _value > f._value; - if (_value & 0x8000) - return true; - if (f._value & 0x8000) - return false; - return _value < f._value; - } - - bool float16::operator <=(const float16 &f) { - if ((_value & 0x8000) && (f._value & 0x8000)) - return _value >= f._value; - if (_value & 0x8000) - return true; - if (f._value & 0x8000) - return false; - return _value <= f._value; - } - - ////////////////////////////////////////////////////////// - // - // NEGATION - // - float16 float16::operator -() { - float16 f16; - f16.setBinary(_value ^ 0x8000); - return f16; - } - - ////////////////////////////////////////////////////////// - // - // MATH - // - float16 float16::operator +(const float16 &f) { - return float16(this->toDouble() + f.toDouble()); - } - - float16 float16::operator -(const float16 &f) { - return float16(this->toDouble() - f.toDouble()); - } - - float16 float16::operator *(const float16 &f) { - return float16(this->toDouble() * f.toDouble()); - } - - float16 float16::operator /(const float16 &f) { - return float16(this->toDouble() / f.toDouble()); - } - - float16 & float16::operator+=(const float16 &f) { - *this = this->toDouble() + f.toDouble(); - return *this; - } - - float16 & float16::operator-=(const float16 &f) { - *this = this->toDouble() - f.toDouble(); - return *this; - } - - float16 & float16::operator*=(const float16 &f) { - *this = this->toDouble() * f.toDouble(); - return *this; - } - - float16 & float16::operator/=(const float16 &f) { - *this = this->toDouble() / f.toDouble(); - return *this; - } - - ////////////////////////////////////////////////////////// - // - // MATH HELPER FUNCTIONS - // - int float16::sign() { - if (_value & 0x8000) - return -1; - if (_value & 0xFFFF) - return 1; - return 0; - } - - bool float16::isZero() { return ((_value & 0x7FFF) == 0x0000); } - - bool float16::isNaN() { - if ((_value & 0x7C00) != 0x7C00) - return false; - if ((_value & 0x03FF) == 0x0000) - return false; - return true; - } - - bool float16::isInf() { return ((_value == 0x7C00) || (_value == 0xFC00)); } - */ - ////////////////////////////////////////////////////////// - // - // CORE CONVERSION - // - float f16tof32(ushort _value) { - //ushort sgn; - ushort man; - int exp; - float f; - - //Debug.Log($"{_value}"); - - bool sgn = (_value & 0x8000) > 0; - exp = (_value & 0x7C00) >> 10; - man = (ushort)(_value & 0x03FF); - - //Debug.Log($"{sgn} {exp} {man}"); - - // ZERO - if ((_value & 0x7FFF) == 0) { - return sgn ? -0 : 0; - } - // NAN & INF - if (exp == 0x001F) { - if (man == 0) - return sgn ? float.NegativeInfinity : float.PositiveInfinity; //-INFINITY : INFINITY; - else - return float.NaN; // NAN; - } - - // SUBNORMAL/NORMAL - if (exp == 0) - f = 0; - else - f = 1; - - // PROCESS MANTISSE - for (int i = 9; i >= 0; i--) { - f *= 2; - if ((man & (1 << i)) != 0) - f = f + 1; - } - //Debug.Log($"{f}"); - f = f * (float)Math.Pow(2.0f, exp - 25); - if (exp == 0) { - f = f * (float)Math.Pow(2.0f, -13); // 5.96046447754e-8; - } - //Debug.Log($"{f}"); - return sgn ? -f : f; - } - - public static uint SingleToInt32Bits(float value) { - byte[] bytes = BitConverter.GetBytes(value); - if (BitConverter.IsLittleEndian) - Array.Reverse(bytes); // If the system is little-endian, reverse the byte order - return BitConverter.ToUInt32(bytes, 0); - } - - public ushort F32ToF16__(float f) { - uint t = BitConverter.ToUInt32(BitConverter.GetBytes(f), 0); - ushort man = (ushort)((t & 0x007FFFFF) >> 12); - int exp = (int)((t & 0x7F800000) >> 23); - bool sgn = (t & 0x80000000) != 0; - - // handle 0 - if ((t & 0x7FFFFFFF) == 0) { - return sgn ? (ushort)0x8000 : (ushort)0x0000; - } - // denormalized float32 does not fit in float16 - if (exp == 0x00) { - return sgn ? (ushort)0x8000 : (ushort)0x0000; - } - // handle infinity & NAN - if (exp == 0x00FF) { - if (man != 0) - return 0xFE00; // NAN - return sgn ? (ushort)0xFC00 : (ushort)0x7C00; // -INF : INF - } - - // normal numbers - exp = exp - 127 + 15; - // overflow does not fit => INF - if (exp > 30) { - return sgn ? (ushort)0xFC00 : (ushort)0x7C00; // -INF : INF - } - // subnormal numbers - if (exp < -38) { - return sgn ? (ushort)0x8000 : (ushort)0x0000; // -0 or 0 ? just 0 ? - } - if (exp <= 0) // subnormal - { - man >>= (exp + 14); - // rounding - man++; - man >>= 1; - if (sgn) - return (ushort)(0x8000 | man); - return man; - } - - // normal - // TODO rounding - exp <<= 10; - man++; - man >>= 1; - if (sgn) - return (ushort)(0x8000 | exp | man); - return (ushort)(exp | man); - } - - //This function is faulty!!!! - ushort f32tof16(float f) { - //uint t = *(uint*)&f; - //uint t = (uint)BitConverter.SingleToInt32Bits(f); - uint t = SingleToInt32Bits(f); - // man bits = 10; but we keep 11 for rounding - ushort man = (ushort)((t & 0x007FFFFF) >> 12); - short exp = (short)((t & 0x7F800000) >> 23); - bool sgn = (t & 0x80000000) != 0; - - // handle 0 - if ((t & 0x7FFFFFFF) == 0) { - return sgn ? (ushort)0x8000 : (ushort)0x0000; - } - // denormalized float32 does not fit in float16 - if (exp == 0x00) { - return sgn ? (ushort)0x8000 : (ushort)0x0000; - } - // handle infinity & NAN - if (exp == 0x00FF) { - if (man != 0) - return 0xFE00; // NAN - return sgn ? (ushort)0xFC00 : (ushort)0x7C00; // -INF : INF - } - - // normal numbers - exp = (short)(exp - 127 + 15); - // overflow does not fit => INF - if (exp > 30) { - return sgn ? (ushort)0xFC00 : (ushort)0x7C00; // -INF : INF - } - // subnormal numbers - if (exp < -38) { - return sgn ? (ushort)0x8000 : (ushort)0x0000; // -0 or 0 ? just 0 ? - } - if (exp <= 0) // subnormal - { - man >>= (exp + 14); - // rounding - man++; - man >>= 1; - if (sgn) - return (ushort)(0x8000 | man); - return man; - } - - // normal - // TODO rounding - exp <<= 10; - man++; - man >>= 1; - ushort uexp = (ushort)exp; - if (sgn) - return (ushort)(0x8000 | uexp | man); - return (ushort)(uexp | man); - } - - // -- END OF FILE -- - } - -} \ No newline at end of file diff --git a/Runtime/LinearAlgebra/test/AngleTest.cs b/Runtime/LinearAlgebra/test/AngleTest.cs deleted file mode 100644 index 8362d82..0000000 --- a/Runtime/LinearAlgebra/test/AngleTest.cs +++ /dev/null @@ -1,501 +0,0 @@ -#if !UNITY_5_6_OR_NEWER -using System; -using System.Formats.Asn1; -using NUnit.Framework; - -namespace LinearAlgebra.Test { - public class AngleTests { - [SetUp] - public void Setup() { - } - - [Test] - public void Construct() { - // Degrees - float angle = 0.0f; - AngleFloat a = AngleFloat.Degrees(angle); - Assert.AreEqual(angle, a.inDegrees); - - angle = -180.0f; - a = AngleFloat.Degrees(angle); - Assert.AreEqual(angle, a.inDegrees); - - angle = 270.0f; - a = AngleFloat.Degrees(angle); - Assert.AreEqual(-90, a.inDegrees); - - angle = -270.0f; - a = AngleFloat.Degrees(angle); - Assert.AreEqual(90, a.inDegrees); - - // Radians - angle = 0.0f; - a = AngleFloat.Radians(angle); - Assert.AreEqual(angle, a.inRadians); - - angle = (float)-Math.PI; - a = AngleFloat.Radians(angle); - Assert.AreEqual(angle, a.inRadians); - - angle = (float)Math.PI * 1.5f; - a = AngleFloat.Radians(angle); - Assert.AreEqual(-Math.PI * 0.5f, a.inRadians, 1.0E-05F); - - // Revolutions - angle = 0.0f; - a = AngleFloat.Revolutions(angle); - Assert.AreEqual(angle, a.inRevolutions); - - angle = -0.5f; - a = AngleFloat.Revolutions(angle); - Assert.AreEqual(angle, a.inRevolutions); - - angle = 0.75f; - a = AngleFloat.Revolutions(angle); - Assert.AreEqual(-0.25f, a.inRevolutions); - - } - - [Test] - public void Revolutions() { - AngleFloat a; - - // Test zero - a = AngleFloat.Revolutions(0.0f); - Assert.AreEqual(0.0f, a.inRevolutions); - - // Test positive values within range - a = AngleFloat.Revolutions(0.25f); - Assert.AreEqual(0.25f, a.inRevolutions); - - a = AngleFloat.Revolutions(0.5f); - Assert.AreEqual(-0.5f, a.inRevolutions); - - // Test negative values within range - a = AngleFloat.Revolutions(-0.25f); - Assert.AreEqual(-0.25f, a.inRevolutions); - - a = AngleFloat.Revolutions(-0.5f); - Assert.AreEqual(-0.5f, a.inRevolutions); - - // Test values outside range (positive) - a = AngleFloat.Revolutions(1.0f); - Assert.AreEqual(0.0f, a.inRevolutions); - - a = AngleFloat.Revolutions(1.25f); - Assert.AreEqual(0.25f, a.inRevolutions); - - a = AngleFloat.Revolutions(1.75f); - Assert.AreEqual(-0.25f, a.inRevolutions); - - // Test values outside range (negative) - a = AngleFloat.Revolutions(-1.0f); - Assert.AreEqual(0.0f, a.inRevolutions); - - a = AngleFloat.Revolutions(-1.25f); - Assert.AreEqual(-0.25f, a.inRevolutions); - - a = AngleFloat.Revolutions(-1.75f); - Assert.AreEqual(0.25f, a.inRevolutions); - - // Test infinity - a = AngleFloat.Revolutions(float.PositiveInfinity); - Assert.AreEqual(float.PositiveInfinity, a.inRevolutions); - - a = AngleFloat.Revolutions(float.NegativeInfinity); - Assert.AreEqual(float.NegativeInfinity, a.inRevolutions); - } - - [Test] - public void Equality() { - // Test equality operator - Assert.IsTrue(AngleFloat.Degrees(90) == AngleFloat.Degrees(90), "90 == 90"); - Assert.IsFalse(AngleFloat.Degrees(90) == AngleFloat.Degrees(45), "90 == 45"); - Assert.IsTrue(AngleFloat.Degrees(0) == AngleFloat.Degrees(0), "0 == 0"); - Assert.IsTrue(AngleFloat.Degrees(-180) == AngleFloat.Degrees(-180), "-180 == -180"); - - // Test inequality operator - Assert.IsTrue(AngleFloat.Degrees(90) != AngleFloat.Degrees(45), "90 != 45"); - Assert.IsFalse(AngleFloat.Degrees(90) != AngleFloat.Degrees(90), "90 != 90"); - Assert.IsTrue(AngleFloat.Degrees(0) != AngleFloat.Degrees(1), "0 != 1"); - - // Test greater than operator - Assert.IsTrue(AngleFloat.Degrees(90) > AngleFloat.Degrees(45), "90 > 45"); - Assert.IsFalse(AngleFloat.Degrees(45) > AngleFloat.Degrees(90), "45 > 90"); - Assert.IsFalse(AngleFloat.Degrees(90) > AngleFloat.Degrees(90), "90 > 90"); - - // Test greater than or equal operator - Assert.IsTrue(AngleFloat.Degrees(90) >= AngleFloat.Degrees(45), "90 >= 45"); - Assert.IsTrue(AngleFloat.Degrees(90) >= AngleFloat.Degrees(90), "90 >= 90"); - Assert.IsFalse(AngleFloat.Degrees(45) >= AngleFloat.Degrees(90), "45 >= 90"); - - // Test less than operator - Assert.IsTrue(AngleFloat.Degrees(45) < AngleFloat.Degrees(90), "45 < 90"); - Assert.IsFalse(AngleFloat.Degrees(90) < AngleFloat.Degrees(45), "90 < 45"); - Assert.IsFalse(AngleFloat.Degrees(90) < AngleFloat.Degrees(90), "90 < 90"); - - // Test less than or equal operator - Assert.IsTrue(AngleFloat.Degrees(45) <= AngleFloat.Degrees(90), "45 <= 90"); - Assert.IsTrue(AngleFloat.Degrees(90) <= AngleFloat.Degrees(90), "90 <= 90"); - Assert.IsFalse(AngleFloat.Degrees(90) <= AngleFloat.Degrees(45), "90 <= 45"); - } - - // [Test] - // public void Normalize() { - // float r = 0; - - // r = Angle.Normalize(90); - // Assert.AreEqual(r, 90, "Normalize 90"); - - // r = Angle.Normalize(-90); - // Assert.AreEqual(r, -90, "Normalize -90"); - - // r = Angle.Normalize(270); - // Assert.AreEqual(r, -90, "Normalize 270"); - - // r = Angle.Normalize(270 + 360); - // Assert.AreEqual(r, -90, "Normalize 270+360"); - - // r = Angle.Normalize(-270); - // Assert.AreEqual(r, 90, "Normalize -270"); - - // r = Angle.Normalize(-270 - 360); - // Assert.AreEqual(r, 90, "Normalize -270-360"); - - // r = Angle.Normalize(0); - // Assert.AreEqual(r, 0, "Normalize 0"); - - // r = Angle.Normalize(float.PositiveInfinity); - // Assert.AreEqual(r, float.PositiveInfinity, "Normalize INFINITY"); - - // r = Angle.Normalize(float.NegativeInfinity); - // Assert.AreEqual(r, float.NegativeInfinity, "Normalize INFINITY"); - // } - - [Test] - public void Clamp() { - float r = 0; - - r = AngleFloat.Clamp(AngleFloat.Degrees(1), AngleFloat.Degrees(0), AngleFloat.Degrees(2)); - Assert.AreEqual(1, r, "Clamp 1 0 2"); - - r = AngleFloat.Clamp(AngleFloat.Degrees(-1), AngleFloat.Degrees(0), AngleFloat.Degrees(2)); - Assert.AreEqual(0, r, "Clamp -1 0 2"); - - r = AngleFloat.Clamp(AngleFloat.Degrees(3), AngleFloat.Degrees(0), AngleFloat.Degrees(2)); - Assert.AreEqual(2, r, "Clamp 3 0 2"); - - r = AngleFloat.Clamp(AngleFloat.Degrees(1), AngleFloat.Degrees(0), AngleFloat.Degrees(0)); - Assert.AreEqual(0, r, "Clamp 1 0 0"); - - r = AngleFloat.Clamp(AngleFloat.Degrees(0), AngleFloat.Degrees(0), AngleFloat.Degrees(0)); - Assert.AreEqual(0, r, "Clamp 0 0 0"); - - r = AngleFloat.Clamp(AngleFloat.Degrees(0), AngleFloat.Degrees(1), AngleFloat.Degrees(-1)); - Assert.AreEqual(1, r, "Clamp 0 1 -1"); - - r = AngleFloat.Clamp(AngleFloat.Degrees(1), AngleFloat.Degrees(0), AngleFloat.Degrees(float.PositiveInfinity)); - Assert.AreEqual(1, r, "Clamp 1 0 INFINITY"); - - r = AngleFloat.Clamp(AngleFloat.Degrees(1), AngleFloat.Degrees(float.NegativeInfinity), AngleFloat.Degrees(1)); - Assert.AreEqual(1, r, "Clamp 1 -INFINITY 1"); - } - - [Test] - public void Cos() { - // Test zero - Assert.AreEqual(1.0f, AngleFloat.Cos(AngleFloat.Degrees(0)), 1.0E-05F, "Cos(0°)"); - - // Test 90 degrees - Assert.AreEqual(0.0f, AngleFloat.Cos(AngleFloat.Degrees(90)), 1.0E-05F, "Cos(90°)"); - - // Test 180 degrees - Assert.AreEqual(-1.0f, AngleFloat.Cos(AngleFloat.Degrees(180)), 1.0E-05F, "Cos(180°)"); - - // Test 270 degrees - Assert.AreEqual(0.0f, AngleFloat.Cos(AngleFloat.Degrees(270)), 1.0E-05F, "Cos(270°)"); - - // Test 45 degrees - Assert.AreEqual(MathF.Sqrt(2) / 2, AngleFloat.Cos(AngleFloat.Degrees(45)), 1.0E-05F, "Cos(45°)"); - - // Test negative angle - Assert.AreEqual(1.0f, AngleFloat.Cos(AngleFloat.Degrees(-360)), 1.0E-05F, "Cos(-360°)"); - - // Test using radians - Assert.AreEqual(1.0f, AngleFloat.Cos(AngleFloat.Radians(0)), 1.0E-05F, "Cos(0 rad)"); - Assert.AreEqual(0.0f, AngleFloat.Cos(AngleFloat.Radians((float)Math.PI / 2)), 1.0E-05F, "Cos(Ï€/2)"); - Assert.AreEqual(-1.0f, AngleFloat.Cos(AngleFloat.Radians((float)Math.PI)), 1.0E-05F, "Cos(Ï€)"); - } - - [Test] - public void Sin() { - // Test zero - Assert.AreEqual(0.0f, AngleFloat.Sin(AngleFloat.Degrees(0)), 1.0E-05F, "Sin(0°)"); - - // Test 90 degrees - Assert.AreEqual(1.0f, AngleFloat.Sin(AngleFloat.Degrees(90)), 1.0E-05F, "Sin(90°)"); - - // Test 180 degrees - Assert.AreEqual(0.0f, AngleFloat.Sin(AngleFloat.Degrees(180)), 1.0E-05F, "Sin(180°)"); - - // Test 270 degrees - Assert.AreEqual(-1.0f, AngleFloat.Sin(AngleFloat.Degrees(270)), 1.0E-05F, "Sin(270°)"); - - // Test 45 degrees - Assert.AreEqual(MathF.Sqrt(2) / 2, AngleFloat.Sin(AngleFloat.Degrees(45)), 1.0E-05F, "Sin(45°)"); - - // Test negative angle - Assert.AreEqual(0.0f, AngleFloat.Sin(AngleFloat.Degrees(-360)), 1.0E-05F, "Sin(-360°)"); - - // Test using radians - Assert.AreEqual(0.0f, AngleFloat.Sin(AngleFloat.Radians(0)), 1.0E-05F, "Sin(0 rad)"); - Assert.AreEqual(1.0f, AngleFloat.Sin(AngleFloat.Radians((float)Math.PI / 2)), 1.0E-05F, "Sin(Ï€/2)"); - Assert.AreEqual(0.0f, AngleFloat.Sin(AngleFloat.Radians((float)Math.PI)), 1.0E-05F, "Sin(Ï€)"); - } - - [Test] - public void Tan() { - // Test zero - Assert.AreEqual(0.0f, AngleFloat.Tan(AngleFloat.Degrees(0)), 1.0E-05F, "Tan(0°)"); - - // Test 45 degrees - Assert.AreEqual(1.0f, AngleFloat.Tan(AngleFloat.Degrees(45)), 1.0E-05F, "Tan(45°)"); - - // Test -45 degrees - Assert.AreEqual(-1.0f, AngleFloat.Tan(AngleFloat.Degrees(-45)), 1.0E-05F, "Tan(-45°)"); - - // Test using radians - Assert.AreEqual(0.0f, AngleFloat.Tan(AngleFloat.Radians(0)), 1.0E-05F, "Tan(0 rad)"); - Assert.AreEqual(1.0f, AngleFloat.Tan(AngleFloat.Radians((float)Math.PI / 4)), 1.0E-05F, "Tan(Ï€/4)"); - } - - [Test] - public void Acos() { - // Test 1 (0 degrees) - Assert.AreEqual(0.0f, AngleFloat.Acos(1.0f).inRadians, 1.0E-05F, "Acos(1)"); - - // Test 0 (90 degrees or Ï€/2 radians) - Assert.AreEqual((float)Math.PI / 2, AngleFloat.Acos(0.0f).inRadians, 1.0E-05F, "Acos(0)"); - - // Test -1 (-180 degrees or Ï€ radians) - Assert.AreEqual((float)-Math.PI, AngleFloat.Acos(-1.0f).inRadians, 1.0E-05F, "Acos(-1)"); - - // Test 0.5 (60 degrees or Ï€/3 radians) - Assert.AreEqual((float)Math.PI / 3, AngleFloat.Acos(0.5f).inRadians, 1.0E-05F, "Acos(0.5)"); - - // Test sqrt(2)/2 (45 degrees or Ï€/4 radians) - Assert.AreEqual((float)Math.PI / 4, AngleFloat.Acos(MathF.Sqrt(2) / 2).inRadians, 1.0E-05F, "Acos(√2/2)"); - } - - [Test] - public void Asin() { - // Test 0 (0 degrees) - Assert.AreEqual(0.0f, AngleFloat.Asin(0.0f).inRadians, 1.0E-05F, "Asin(0)"); - - // Test 1 (90 degrees or Ï€/2 radians) - Assert.AreEqual((float)Math.PI / 2, AngleFloat.Asin(1.0f).inRadians, 1.0E-05F, "Asin(1)"); - - // Test -1 (-90 degrees or -Ï€/2 radians) - Assert.AreEqual(-(float)Math.PI / 2, AngleFloat.Asin(-1.0f).inRadians, 1.0E-05F, "Asin(-1)"); - - // Test 0.5 (30 degrees or Ï€/6 radians) - Assert.AreEqual((float)Math.PI / 6, AngleFloat.Asin(0.5f).inRadians, 1.0E-05F, "Asin(0.5)"); - - // Test sqrt(2)/2 (45 degrees or Ï€/4 radians) - Assert.AreEqual((float)Math.PI / 4, AngleFloat.Asin(MathF.Sqrt(2) / 2).inRadians, 1.0E-05F, "Asin(√2/2)"); - } - - - [Test] - public void Atan() { - // Test zero - Assert.AreEqual(0.0f, AngleFloat.Atan(0.0f).inRadians, 1.0E-05F, "Atan(0)"); - - // Test 1 (45 degrees or Ï€/4 radians) - Assert.AreEqual((float)Math.PI / 4, AngleFloat.Atan(1.0f).inRadians, 1.0E-05F, "Atan(1)"); - - // Test -1 (-45 degrees or -Ï€/4 radians) - Assert.AreEqual(-(float)Math.PI / 4, AngleFloat.Atan(-1.0f).inRadians, 1.0E-05F, "Atan(-1)"); - - // Test sqrt(3) (60 degrees or Ï€/3 radians) - Assert.AreEqual((float)Math.PI / 3, AngleFloat.Atan(MathF.Sqrt(3)).inRadians, 1.0E-05F, "Atan(√3)"); - - // Test 1/sqrt(3) (30 degrees or Ï€/6 radians) - Assert.AreEqual((float)Math.PI / 6, AngleFloat.Atan(1.0f / MathF.Sqrt(3)).inRadians, 1.0E-05F, "Atan(1/√3)"); - - // Test positive infinity - Assert.AreEqual((float)Math.PI / 2, AngleFloat.Atan(float.PositiveInfinity).inRadians, 1.0E-05F, "Atan(+∞)"); - - // Test negative infinity - Assert.AreEqual(-(float)Math.PI / 2, AngleFloat.Atan(float.NegativeInfinity).inRadians, 1.0E-05F, "Atan(-∞)"); - } - - [Test] - public void Atan2() { - // Test basic quadrant I - Assert.AreEqual((float)Math.PI / 4, AngleFloat.Atan2(1.0f, 1.0f).inRadians, 1.0E-05F, "Atan2(1, 1)"); - - // Test quadrant II - Assert.AreEqual(3 * (float)Math.PI / 4, AngleFloat.Atan2(1.0f, -1.0f).inRadians, 1.0E-05F, "Atan2(1, -1)"); - - // Test quadrant III - Assert.AreEqual(-(float)Math.PI * 0.75f, AngleFloat.Atan2(-1.0f, -1.0f).inRadians, 1.0E-05F, "Atan2(-1, -1)"); - - // Test quadrant IV - Assert.AreEqual(-(float)Math.PI / 4, AngleFloat.Atan2(-1.0f, 1.0f).inRadians, 1.0E-05F, "Atan2(-1, 1)"); - - // Test positive x-axis - Assert.AreEqual(0.0f, AngleFloat.Atan2(0.0f, 1.0f).inRadians, 1.0E-05F, "Atan2(0, 1)"); - - // Test positive y-axis - Assert.AreEqual((float)Math.PI / 2, AngleFloat.Atan2(1.0f, 0.0f).inRadians, 1.0E-05F, "Atan2(1, 0)"); - - // Test negative y-axis - Assert.AreEqual(-(float)Math.PI / 2, AngleFloat.Atan2(-1.0f, 0.0f).inRadians, 1.0E-05F, "Atan2(-1, 0)"); - - // Test origin - Assert.AreEqual(0.0f, AngleFloat.Atan2(0.0f, 0.0f).inRadians, 1.0E-05F, "Atan2(0, 0)"); - - // Test with different magnitudes - Assert.AreEqual((float)Math.PI / 3, AngleFloat.Atan2(MathF.Sqrt(3), 1.0f).inRadians, 1.0E-05F, "Atan2(√3, 1)"); - - // Test negative x-axis - Assert.AreEqual((float)-Math.PI, AngleFloat.Atan2(0.0f, -1.0f).inRadians, 1.0E-05F, "Atan2(0, -1)"); - } - - [Test] - public void Multiplication() { - AngleFloat r = AngleFloat.zero; - - // Angle * float - r = AngleFloat.Degrees(90) * 2; - Assert.AreEqual(-180, r.inDegrees, "Multiply 90 * 2"); - - r = AngleFloat.Degrees(45) * 0.5f; - Assert.AreEqual(22.5f, r.inDegrees, "Multiply 45 * 0.5"); - - r = AngleFloat.Degrees(90) * 0; - Assert.AreEqual(0, r.inDegrees, "Multiply 90 * 0"); - - r = AngleFloat.Degrees(-90) * 2; - Assert.AreEqual(-180, r.inDegrees, "Multiply -90 * 2"); - - r = AngleFloat.Degrees(270) * 2; - Assert.AreEqual(-180, r.inDegrees, "Multiply 270 * 2 (normalized)"); - - // float * Angle - r = 2 * AngleFloat.Degrees(90); - Assert.AreEqual(-180, r.inDegrees, "Multiply 2 * 90"); - - r = 0.5f * AngleFloat.Degrees(45); - Assert.AreEqual(22.5, r.inDegrees, "Multiply 0.5 * 45"); - - r = 0 * AngleFloat.Degrees(90); - Assert.AreEqual(0, r.inDegrees, "Multiply 0 * 90"); - - r = 2 * AngleFloat.Degrees(-90); - Assert.AreEqual(-180, r.inDegrees, "Multiply 2 * -90"); - - // Negative factor - r = AngleFloat.Degrees(90) * -1; - Assert.AreEqual(-90, r.inDegrees, "Multiply 90 * -1"); - - r = -1 * AngleFloat.Degrees(90); - Assert.AreEqual(-90, r.inDegrees, "Multiply -1 * 90"); - } - - [Test] - public void MoveTowards() { - AngleFloat r = AngleFloat.zero; - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(90), 30); - Assert.AreEqual(30, r.inDegrees, "MoveTowards 0 90 30"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(90), 90); - Assert.AreEqual(90, r.inDegrees, "MoveTowards 0 90 90"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(90), 180); - Assert.AreEqual(90, r.inDegrees, "MoveTowards 0 90 180"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(90), 270); - Assert.AreEqual(90, r.inDegrees, "MoveTowrads 0 90 270"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(90), -30); - Assert.AreEqual(0, r.inDegrees, "MoveTowards 0 90 -30"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(-90), -30); - Assert.AreEqual(0, r.inDegrees, "MoveTowards 0 -90 -30"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(-90), -90); - Assert.AreEqual(0, r.inDegrees, "MoveTowards 0 -90 -90"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(-90), -180); - Assert.AreEqual(0, r.inDegrees, "MoveTowards 0 -90 -180"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(-90), -270); - Assert.AreEqual(0, r.inDegrees, "MoveTowrads 0 -90 -270"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(90), 0); - Assert.AreEqual(0, r.inDegrees, "MoveTowards 0 90 0"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(0), 0); - Assert.AreEqual(0, r.inDegrees, "MoveTowards 0 0 0"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(0), 30); - Assert.AreEqual(0, r.inDegrees, "MoveTowrads 0 0 30"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(90), float.PositiveInfinity); - Assert.AreEqual(90, r.inDegrees, "MoveTowards 0 90 INFINITY"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(float.PositiveInfinity), 30); - Assert.AreEqual(30, r.inDegrees, "MoveTowrads 0 INFINITY 30"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(-90), float.NegativeInfinity); - Assert.AreEqual(0, r.inDegrees, "MoveTowards 0 -90 -INFINITY"); - - r = AngleFloat.MoveTowards(AngleFloat.Degrees(0), AngleFloat.Degrees(float.NegativeInfinity), -30); - Assert.AreEqual(0, r.inDegrees, "MoveTowrads 0 -INFINITY -30"); - - } - - [Test] - public void Difference() { - float r = 0; - - r = Angles.Difference(0, 90); - Assert.AreEqual(90, r, "Difference 0 90"); - - r = Angles.Difference(0, -90); - Assert.AreEqual(-90, r, "Difference 0 -90"); - - r = Angles.Difference(0, 270); - Assert.AreEqual(-90, r, "Difference 0 270"); - - r = Angles.Difference(0, -270); - Assert.AreEqual(90, r, "Difference 0 -270"); - - r = Angles.Difference(90, 0); - Assert.AreEqual(-90, r, "Difference 90 0"); - - r = Angles.Difference(-90, 0); - Assert.AreEqual(90, r, "Difference -90 0"); - - r = Angles.Difference(0, 0); - Assert.AreEqual(0, r, "Difference 0 0"); - - r = Angles.Difference(90, 90); - Assert.AreEqual(0, r, "Difference 90 90"); - - r = Angles.Difference(0, float.PositiveInfinity); - Assert.AreEqual(float.PositiveInfinity, r, "Difference 0 INFINITY"); - - r = Angles.Difference(0, float.NegativeInfinity); - Assert.AreEqual(float.NegativeInfinity, r, "Difference 0 -INFINITY"); - - r = Angles.Difference(float.NegativeInfinity, float.PositiveInfinity); - Assert.AreEqual(float.PositiveInfinity, r, "Difference -INFINITY INFINITY"); - } - } - -} -#endif diff --git a/Runtime/LinearAlgebra/test/DirectionTest.cs b/Runtime/LinearAlgebra/test/DirectionTest.cs deleted file mode 100644 index 0eb9882..0000000 --- a/Runtime/LinearAlgebra/test/DirectionTest.cs +++ /dev/null @@ -1,226 +0,0 @@ -#if !UNITY_5_6_OR_NEWER -using System; -using NUnit.Framework; - -namespace LinearAlgebra.Test { - public class DirectionTest { - - [Test] - public void RadiansForward() { - Direction d = Direction.Radians(0, 0); - Assert.AreEqual(0, d.horizontal.inDegrees, 0.0001f); - Assert.AreEqual(0, d.vertical.inDegrees, 0.0001f); - } - - [Test] - public void RadiansUp() { - Direction d = Direction.Radians(0, (float)Math.PI / 2); - Assert.AreEqual(0, d.horizontal.inDegrees, 0.0001f); - Assert.AreEqual(90, d.vertical.inDegrees, 0.0001f); - } - - [Test] - public void RadiansDown() { - Direction d = Direction.Radians(0, -(float)Math.PI / 2); - Assert.AreEqual(0, d.horizontal.inDegrees, 0.0001f); - Assert.AreEqual(-90, d.vertical.inDegrees, 0.0001f); - } - - [Test] - public void RadiansArbitrary() { - Direction d = Direction.Radians((float)Math.PI / 4, (float)Math.PI / 6); - Assert.AreEqual(45, d.horizontal.inDegrees, 0.0001f); - Assert.AreEqual(30, d.vertical.inDegrees, 0.0001f); - } - - [Test] - public void DegreesNormalize1() { - Direction d = Direction.Degrees(112, 91); - Assert.AreEqual(-68, d.horizontal.inDegrees, 0.0001f); - Assert.AreEqual(89, d.vertical.inDegrees, 0.0001f); - } - - [Test] - public void RadiansEquivalentToDegreesConversion() { - Direction d1 = Direction.Radians((float)Math.PI / 3, (float)Math.PI / 4); - Direction d2 = Direction.Degrees(60, 45); - Assert.AreEqual(d1.horizontal.inDegrees, d2.horizontal.inDegrees, 0.0001f); - Assert.AreEqual(d1.vertical.inDegrees, d2.vertical.inDegrees, 0.0001f); - } - - [Test] - public void ToVector3Forward() { - Direction d = Direction.forward; - Vector3Float v = d.ToVector3(); - Assert.AreEqual(0, v.horizontal, 0.0001f); - Assert.AreEqual(0, v.vertical, 0.0001f); - Assert.AreEqual(1, v.depth, 0.0001f); - } - - [Test] - public void ToVector3Up() { - Direction d = Direction.up; - Vector3Float v = d.ToVector3(); - Assert.AreEqual(0, v.horizontal, 0.0001f); - Assert.AreEqual(1, v.vertical, 0.0001f); - Assert.AreEqual(0, v.depth, 0.0001f); - } - - [Test] - public void ToVector3Down() { - Direction d = Direction.down; - Vector3Float v = d.ToVector3(); - Assert.AreEqual(0, v.horizontal, 0.0001f); - Assert.AreEqual(-1, v.vertical, 0.0001f); - Assert.AreEqual(0, v.depth, 0.0001f); - } - - [Test] - public void ToVector3Left() { - Direction d = Direction.left; - Vector3Float v = d.ToVector3(); - Assert.AreEqual(-1, v.horizontal, 0.0001f); - Assert.AreEqual(0, v.vertical, 0.0001f); - Assert.AreEqual(0, v.depth, 0.0001f); - } - - [Test] - public void FromVector3Forward() { - Vector3Float v = new(0, 0, 1); - Direction d = Direction.FromVector3(v); - Assert.AreEqual(0, d.horizontal.inDegrees, 0.0001f); - Assert.AreEqual(0, d.vertical.inDegrees, 0.0001f); - } - - [Test] - public void ToVector3AndBack() { - Direction d1 = Direction.Degrees(45, 30); - Vector3Float v = d1.ToVector3(); - Direction d2 = Direction.FromVector3(v); - Assert.AreEqual(d1.horizontal.inDegrees, d2.horizontal.inDegrees, 0.0001f); - Assert.AreEqual(d1.vertical.inDegrees, d2.vertical.inDegrees, 0.0001f); - } - - [Test] - public void ToVector3AndBack2() { - Direction d1 = Direction.Degrees(-135, 85); - Vector3Float v = d1.ToVector3(); - Direction d2 = Direction.FromVector3(v); - Assert.AreEqual(d1.horizontal.inDegrees, d2.horizontal.inDegrees, 0.0001f); - Assert.AreEqual(d1.vertical.inDegrees, d2.vertical.inDegrees, 0.0001f); - } - - [Test] - public void Compare() { - Direction d1 = Direction.Degrees(45, 135); - Direction d2 = new(AngleFloat.Degrees(45), AngleFloat.Degrees(135)); - bool r; - r = d1 == d2; - Assert.True(r); - Assert.AreEqual(d1, d2); - } - - [Test] - public void NotEqualWithDifferentHorizontal() { - Direction d1 = Direction.Degrees(45, 30); - Direction d2 = Direction.Degrees(90, 30); - Assert.True(d1 != d2); - } - - [Test] - public void NotEqualWithDifferentVertical() { - Direction d1 = Direction.Degrees(45, 30); - Direction d2 = Direction.Degrees(45, 60); - Assert.True(d1 != d2); - } - - [Test] - public void NotEqualWithDifferentBoth() { - Direction d1 = Direction.Degrees(45, 30); - Direction d2 = Direction.Degrees(90, 60); - Assert.True(d1 != d2); - } - - [Test] - public void NotEqualWithSameValues() { - Direction d1 = Direction.Degrees(45, 30); - Direction d2 = Direction.Degrees(45, 30); - Assert.False(d1 != d2); - } - - - [Test] - public void EqualsWithSameValues() { - Direction d1 = Direction.Degrees(45, 30); - Direction d2 = Direction.Degrees(45, 30); - Assert.True(d1.Equals(d2)); - } - - [Test] - public void EqualsWithDifferentHorizontal() { - Direction d1 = Direction.Degrees(45, 30); - Direction d2 = Direction.Degrees(90, 30); - Assert.False(d1.Equals(d2)); - } - - [Test] - public void EqualsWithDifferentVertical() { - Direction d1 = Direction.Degrees(45, 30); - Direction d2 = Direction.Degrees(45, 60); - Assert.False(d1.Equals(d2)); - } - - [Test] - public void EqualsWithDifferentBoth() { - Direction d1 = Direction.Degrees(45, 30); - Direction d2 = Direction.Degrees(90, 60); - Assert.False(d1.Equals(d2)); - } - - [Test] - public void EqualsWithNonDirectionObject() { - Direction d = Direction.Degrees(45, 30); - Assert.False(d.Equals("not a direction")); - } - - [Test] - public void EqualsWithNull() { - Direction d = Direction.Degrees(45, 30); - Assert.False(d.Equals(null)); - } - - [Test] - public void EqualsWithZeros() { - Direction d1 = Direction.forward; - Direction d2 = Direction.Degrees(0, 0); - Assert.True(d1.Equals(d2)); - } - - [Test] - public void HashCode() { - Direction d1 = Direction.Degrees(45, 30); - Direction d2 = Direction.Degrees(45, 30); - Assert.AreEqual(d1.GetHashCode(), d2.GetHashCode()); - - d1 = Direction.Degrees(45, 30); - d2 = Direction.Degrees(90, 30); - Assert.AreNotEqual(d1.GetHashCode(), d2.GetHashCode()); - - d1 = Direction.Degrees(45, 30); - d2 = Direction.Degrees(45, 60); - Assert.AreNotEqual(d1.GetHashCode(), d2.GetHashCode()); - - Direction d = Direction.Degrees(45, 30); - int hash1 = d.GetHashCode(); - int hash2 = d.GetHashCode(); - Assert.AreEqual(hash1, hash2); - - d1 = Direction.forward; - d2 = Direction.Degrees(0, 0); - Assert.AreEqual(d1.GetHashCode(), d2.GetHashCode()); - } - - }; -} -#endif - diff --git a/Runtime/LinearAlgebra/test/LinearAlgebra_Test.csproj b/Runtime/LinearAlgebra/test/LinearAlgebra_Test.csproj deleted file mode 100644 index 5b48e60..0000000 --- a/Runtime/LinearAlgebra/test/LinearAlgebra_Test.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - net8.0 - false - true - - - - - - - - - - - - - diff --git a/Runtime/LinearAlgebra/test/QuaternionTest.cs b/Runtime/LinearAlgebra/test/QuaternionTest.cs deleted file mode 100644 index 9dd5a96..0000000 --- a/Runtime/LinearAlgebra/test/QuaternionTest.cs +++ /dev/null @@ -1,185 +0,0 @@ -#if !UNITY_5_6_OR_NEWER -using NUnit.Framework; - -namespace LinearAlgebra.Test { - - public class QuaternionTest { - - [SetUp] - public void Setup() { - } - - [Test] - public void Normalize() { - Quaternion q1 = new(0, 0, 0, 1); - Quaternion r = Quaternion.identity; - - r = q1.normalized; - Assert.AreEqual(r, q1, "q.normalized 0 0 0 1"); - - r = Quaternion.Normalize(q1); - Assert.AreEqual(r, q1, "q.normalized 0 0 0 1"); - } - - [Test] - public void ToAngles() { - Quaternion q1 = new(0, 0, 0, 1); - Vector3Float v = Vector3Float.zero; - - v = Quaternion.ToAngles(q1); - Assert.AreEqual(v, new Vector3Float(0, 0, 0), "ToAngles 0 0 0 1"); - - q1 = new(1, 0, 0, 0); - v = Quaternion.ToAngles(q1); - Assert.AreEqual(0, v.horizontal, "1 0 0 0 H"); - Assert.AreEqual(180, v.vertical, "1 0 0 0 V"); - Assert.AreEqual(180, v.depth, "1 0 0 0 D"); - - } - - [Test] - public void Multiplication() { - Quaternion q1 = new(0, 0, 0, 1); - Quaternion q2 = new(1, 0, 0, 0); - Quaternion r; - - r = q1 * q2; - Assert.AreEqual(r, new Quaternion(1, 0, 0, 0), "0 0 0 1 * 1 0 0 0 "); - } - - [Test] - public void MultiplicationVector() { - Quaternion q1 = new(0, 0, 0, 1); - Vector3Float v1 = new(0, 1, 0); - Vector3Float r; - - r = q1 * v1; - Assert.AreEqual(r, new Vector3Float(0, 1, 0), "0 0 0 1 * Vector 0 1 0"); - - q1 = new(1, 0, 0, 0); - r = q1 * v1; - Assert.AreEqual(r, new Vector3Float(0, -1, 0), "1 0 0 0 * Vector 0 1 0"); - } - - [Test] - public void Equality() { - Quaternion q1 = new(0, 0, 0, 1); - Quaternion q2 = new(1, 0, 0, 0); - Assert.AreNotEqual(q1, q2, "0 0 0 1 == 1 0 0 0"); - - q2 = new(0, 0, 0, 1); - Assert.AreEqual(q1, q2, "0 0 0 1 == 1 0 0 0"); - } - - [Test, Ignore("ToDo")] - public void Inverse() { } - - [Test, Ignore("ToDo")] - public void LookRotation() { } - - [Test, Ignore("ToDo")] - public void FromToRotation() { } - - [Test, Ignore("ToDo")] - public void RotateTowards() { } - - [Test, Ignore("ToDo")] - public void AngleAxis() { } - - [Test, Ignore("ToDo")] - public void Angle() { } - - [Test, Ignore("ToDo")] - public void Slerp() { } - - [Test, Ignore("ToDo")] - public void SlerpUnclamped() { } - - [Test] - public void Euler() { - Vector3Float v1 = new(0, 0, 0); - Quaternion q; - - q = Quaternion.Euler(v1); - Assert.AreEqual(q, Quaternion.identity, "Euler Vector 0 0 0"); - - q = Quaternion.Euler(0, 0, 0); - Assert.AreEqual(q, Quaternion.identity, "Euler 0 0 0"); - - v1 = new(90, 90, -90); - q = Quaternion.Euler(v1); - Assert.AreEqual(q, new Quaternion(0, 0.707106709F, -0.707106709F, 0), "Euler Vector 90 90 -90"); - - q = Quaternion.Euler(90, 90, -90); - Assert.AreEqual(q, new Quaternion(0, 0.707106709F, -0.707106709F, 0), "Euler 90 90 -90"); - } - - [Test] - public void EulerToAngles() { - Vector3Float v; - Quaternion q; - Quaternion r; - - //v = new(0, 0, 0); - q = Quaternion.Euler(0, 0 , 0); - v = Quaternion.ToAngles(q); - r = Quaternion.Euler(v); - Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f, "0 0 0"); - - q = Quaternion.Euler(-45, -30, -15); - v = Quaternion.ToAngles(q); - r = Quaternion.Euler(v); - Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f, "-45, -30, -15"); - - // Gimball lock - // q = Quaternion.Euler(90, 90, -90); - // v = Quaternion.ToAngles(q); - // r = Quaternion.Euler(v); - // Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f, "0 0 0"); - - } - - [Test] - public void GetAngleAround() { - Vector3Float v1 = new(0, 1, 0); - Quaternion q1 = new(0, 0, 0, 1); - - float f = Quaternion.GetAngleAround(v1, q1); - Assert.AreEqual(f, 0, "GetAngleAround 0 1 0 , 0 0 0 1"); - - q1 = new(0, 0.707106709F, -0.707106709F, 0); - f = Quaternion.GetAngleAround(v1, q1); - Assert.AreEqual(f, 180, "GetAngleAround 0 1 0 , 0 0.7 -0.7 0"); - - v1 = new(0, 0, 0); - f = Quaternion.GetAngleAround(v1, q1); - Assert.IsTrue(float.IsNaN(f), "GetAngleAround 0 0 0 , 0 0.7 -0.7 0"); - } - - [Test] - public void GetRotationAround() { - Vector3Float v1 = new(0, 1, 0); - Quaternion q1 = new(0, 0, 0, 1); - - Quaternion q = Quaternion.GetRotationAround(v1, q1); - Assert.AreEqual(q, new Quaternion(0, 0, 0, 1), "GetRotationAround 0 1 0 , 0 0 0 1"); - - q1 = new(0, 0.707106709F, -0.707106709F, 0); - q = Quaternion.GetRotationAround(v1, q1); - Assert.AreEqual(q, new Quaternion(0, 1, 0, 0), "GetRotationAround 0 1 0 , 0 0.7 -0.7 0"); - - v1 = new(0, 0, 0); - q = Quaternion.GetRotationAround(v1, q1); - bool r = float.IsNaN(q.x) && float.IsNaN(q.y) && float.IsNaN(q.z) && float.IsNaN(q.w); - Assert.IsTrue(r, "GetRotationAround 0 0 0 , 0 0.7 -0.7 0"); - } - - [Test, Ignore("ToDo")] - public void GetSwingTwist() { } - - [Test, Ignore("ToDo")] - public void Dot() { } - - } -} -#endif \ No newline at end of file diff --git a/Runtime/LinearAlgebra/test/SphericalTest.cs b/Runtime/LinearAlgebra/test/SphericalTest.cs deleted file mode 100644 index 658ca04..0000000 --- a/Runtime/LinearAlgebra/test/SphericalTest.cs +++ /dev/null @@ -1,271 +0,0 @@ -#if !UNITY_5_6_OR_NEWER -using System; -using System.Collections.Generic; -using NUnit.Framework; - -namespace LinearAlgebra.Test { - public class SphericalTest { - [SetUp] - public void Setup() { - } - - [Test] - public void FromVector3() { -#if UNITY_5_6_OR_NEWER - UnityEngine.Vector3 v = new(0, 0, 1); -#else - Vector3Float v = new(0, 0, 1); -#endif - Spherical s = Spherical.FromVector3(v); - Assert.AreEqual(1.0f, s.distance, "s.distance 0 0 1"); - Assert.AreEqual(0.0f, s.direction.horizontal.inDegrees, "s.hor 0 0 1"); - Assert.AreEqual(0.0f, s.direction.vertical.inDegrees, 1.0E-05F, "s.vert 0 0 1"); - - v = new(0, 1, 0); - s = Spherical.FromVector3(v); - Assert.AreEqual(1.0f, s.distance, "s.distance 0 1 0"); - Assert.AreEqual(0.0f, s.direction.horizontal.inDegrees, "s.hor 0 1 0"); - Assert.AreEqual(90.0f, s.direction.vertical.inDegrees, "s.vert 0 1 0"); - - v = new(1, 0, 0); - s = Spherical.FromVector3(v); - Assert.AreEqual(1.0f, s.distance, "s.distance 1 0 0"); - Assert.AreEqual(90.0f, s.direction.horizontal.inDegrees, "s.hor 1 0 0"); - Assert.AreEqual(0.0f, s.direction.vertical.inDegrees, 1.0E-05F, "s.vert 1 0 0"); - } - - [Test] - public void Addition() { - Spherical v1 = Spherical.Degrees(1, 45, 0); - Spherical v2 = Spherical.zero; - Spherical r = Spherical.zero; - - r = v1 + v2; - Assert.AreEqual(v1.distance, r.distance, 1.0E-05F, "Addition(0,0,0)"); - - r = v1; - r += v2; - Assert.AreEqual(v1.distance, r.distance, 1.0E-05F, "Addition(0,0,0)"); - - v2 = Spherical.Degrees(1, 0, 90); - r = v1 + v2; - Assert.AreEqual(Math.Sqrt(2), r.distance, 1.0E-05F, "Addition(1 0 90)"); - Assert.AreEqual(45.0f, r.direction.horizontal.inDegrees, 1e-5f, "Addition(1 0 90)"); - Assert.AreEqual(45.0f, r.direction.vertical.inDegrees, 1.0E-05F, "Addition(1 0 90)"); - } - - [Test] - public void Average2_IdenticalVectors() { - Direction dir = Direction.Radians(MathF.PI / 4f, MathF.PI / 6f); - Spherical v = new(2.5f, dir); - - Spherical avg = Spherical.Average(v, v); - - Assert.AreEqual(2.5f, avg.distance, 1e-5f); - Assert.AreEqual(dir.horizontal, avg.direction.horizontal); - Assert.AreEqual(dir.vertical, avg.direction.vertical); - } - - [Test] - public void Average2_OppositeUnitVectors() { - // Two opposite vectors: same distance, horizontal opposite (pi apart), same vertical - Spherical v1 = Spherical.Radians(1f, 0f, 0f); - Spherical v2 = Spherical.Radians(1f, MathF.PI, 0f); - Spherical avg = Spherical.Average(v1, v2); - - Assert.AreEqual(0f, avg.distance, 1e-4f); - // When distance is zero, angles may be undefined; allow any angle but ensure near-zero magnitude - } - - [Test] - public void Average2_WeightedByDistance() { - // Two vectors same direction but different distances -> weighted average distance - Direction dir = Direction.Radians(MathF.PI / 3f, MathF.PI / 4f); - Spherical a = new(1f, dir); - Spherical b = new(3f, dir); - Spherical avg = Spherical.Average(a, b); - - // average distance should be (1+3)/2 = 2 - Assert.AreEqual(2f, avg.distance, 1e-5f); - Assert.AreEqual(dir.horizontal.inRadians, avg.direction.horizontal.inRadians, 1e-5f); - Assert.AreEqual(dir.vertical.inRadians, avg.direction.vertical.inRadians, 1e-5f); - } - - [Test] - public void Average2_OppositeButNotExact_NotZero() { - // Nearly opposite but not exact; expect a valid averaged direction and averaged distance - Direction d1 = Direction.Radians(0f, 0f); - Direction d2 = Direction.Radians(MathF.PI - 1e-3f, 0.0f); // slight offset - Spherical v1 = new(2.0f, d1); - Spherical v2 = new(4.0f, d2); - - Spherical avg = Spherical.Average(v1, v2); - - // Distance is arithmetic mean - Assert.AreEqual(3.0f, avg.distance, 1e-5f); - - // Averaged azimuth should be near +pi/2 or -pi/2? we can check it's not NaN and unit-vector properties hold - float ux = MathF.Cos(avg.direction.horizontal.inRadians) * MathF.Cos(avg.direction.vertical.inRadians); - float uy = MathF.Sin(avg.direction.horizontal.inRadians) * MathF.Cos(avg.direction.vertical.inRadians); - float uz = MathF.Sin(avg.direction.vertical.inRadians); - float mag = MathF.Sqrt(ux * ux + uy * uy + uz * uz); - Assert.IsTrue(mag > 0.999f && mag < 1.001f); - - } - - [Test] - public void Average2_BasicAverageDirectionAndDistance() { - // Two different directions not cancelling: expect vector-average result - Direction d1 = Direction.Radians(MathF.PI / 6f, MathF.PI / 12f); // 30°, 15° - Direction d2 = Direction.Radians(MathF.PI / 3f, MathF.PI / 18f); // 60°, 10° - Spherical v1 = new(2.0f, d1); - Spherical v2 = new(4.0f, d2); - - Spherical avg = Spherical.Average(v1, v2); - - // Distance is arithmetic mean - Assert.AreEqual(3.0f, avg.distance, 1e-5f); - - // Check averaged unit-vector equals normalized sum of unit vectors computed here - float a1 = d1.horizontal.inRadians; - float a2 = d2.horizontal.inRadians; - float e1 = d1.vertical.inRadians; - float e2 = d2.vertical.inRadians; - - float cx = MathF.Cos(a1) + MathF.Cos(a2); - float cy = MathF.Sin(a1) + MathF.Sin(a2); - float z1 = MathF.Sin(e1); - float z2 = MathF.Sin(e2); - float cz = z1 + z2; - float mag = MathF.Sqrt(cx * cx + cy * cy + cz * cz); - Assert.IsTrue(mag > 1e-6f); - - float ux = cx / mag; - float uy = cy / mag; - float uz = cz / mag; - - // Reconstruct direction from avg result - float uxAvg = MathF.Cos(avg.direction.horizontal.inRadians) * MathF.Cos(avg.direction.vertical.inRadians); - float uyAvg = MathF.Sin(avg.direction.horizontal.inRadians) * MathF.Cos(avg.direction.vertical.inRadians); - float uzAvg = MathF.Sin(avg.direction.vertical.inRadians); - - Assert.AreEqual(ux, uxAvg, 1e-4f); - Assert.AreEqual(uy, uyAvg, 1e-4f); - Assert.AreEqual(uz, uzAvg, 1e-4f); - } - - [Test] - public void Average_IdenticalVectors() { - var dir = Direction.Radians(MathF.PI / 4f, MathF.PI / 6f); - var v = new Spherical(2.5f, dir); - var list = new List { v, v, v }; - - var avg = Spherical.Average(list); - - Assert.AreEqual(2.5f, avg.distance, 1e-5f); - Assert.AreEqual(dir.horizontal, avg.direction.horizontal); - Assert.AreEqual(dir.vertical, avg.direction.vertical); - } - - [Test] - public void Average_SingleElement() { - Spherical s = Spherical.Radians(1.234f, 0.3f, -0.7f); - Spherical avg = Spherical.Average(new List { s }); - - Assert.AreEqual(s.distance, avg.distance, 1e-5f); - Assert.AreEqual(s.direction.horizontal.inRadians, avg.direction.horizontal.inRadians, 1e-5f); - Assert.AreEqual(s.direction.vertical.inRadians, avg.direction.vertical.inRadians, 1e-5f); - } - - [Test] - public void Average_OppositeUnitVectors() { - // Two opposite vectors: same distance, horizontal opposite (pi apart), same vertical - Spherical v1 = Spherical.Radians(1f, 0f, 0f); - Spherical v2 = Spherical.Radians(1f, MathF.PI, 0f); - Spherical avg = Spherical.Average(new List { v1, v2 }); - - Assert.AreEqual(0f, avg.distance, 1e-4f); - // When distance is zero, angles may be undefined; allow any angle but ensure near-zero magnitude - } - - [Test] - public void Average_WeightedByDistance() { - // Two vectors same direction but different distances -> weighted average distance - Direction dir = Direction.Radians(MathF.PI / 3f, MathF.PI / 4f); - Spherical a = new(1f, dir); - Spherical b = new(3f, dir); - Spherical avg = Spherical.Average(new List { a, b }); - - // average distance should be (1+3)/2 = 2 - Assert.AreEqual(2f, avg.distance, 1e-5f); - Assert.AreEqual(dir.horizontal.inRadians, avg.direction.horizontal.inRadians, 1e-5f); - Assert.AreEqual(dir.vertical.inRadians, avg.direction.vertical.inRadians, 1e-5f); - } - - [Test] - public void Average_AxisSymmetricAroundVertical() { - // Four vectors around azimuth 0, pi/2, pi, 3pi/2 at same elevation (vertical) angle phi - float phi = MathF.PI / 6f; // elevation from horizontal plane - var dirs = new List { - new(1f, Direction.Radians(0f, phi)), - new(1f, Direction.Radians(MathF.PI/2, phi)), - new(1f, Direction.Radians(MathF.PI, phi)), - new(1f, Direction.Radians(3*MathF.PI/2, phi)) - }; - - Spherical avg = Spherical.Average(dirs); - - // rAvg should equal r * sin(elevation) = sin(phi) - Assert.AreEqual(MathF.Sin(phi), avg.distance, 1e-4f); - // vertical angle undefined when horizontal xy components cancel; allow any angle but ensure r matches - } - - [Test] - public void Average_AxisSymmetricAroundVertical2() { - // Four vectors around azimuth 0, pi/2, pi, 3pi/2 at same polar angle from vertical (alpha) - float alpha = MathF.PI / 6f; // polar angle from vertical - float elevation = MathF.PI / 2f - alpha; // convert polar-from-vertical to elevation - var dirs = new List { - new(1f, Direction.Radians(0f, elevation)), - new(1f, Direction.Radians(MathF.PI/2, elevation)), - new(1f, Direction.Radians(MathF.PI, elevation)), - new(1f, Direction.Radians(3*MathF.PI/2, elevation)) - }; - - Spherical avg = Spherical.Average(dirs); - - // rAvg should equal r * sin(elevation) which equals cos(alpha) - Assert.AreEqual(MathF.Cos(alpha), avg.distance, 1e-4f); - } - - [Test] - public void Average_CompareWithVector3() { - // Four vectors around azimuth 0, pi/2, pi, 3pi/2 at same polar angle from vertical (alpha) - float alpha = MathF.PI / 6f; // polar angle from vertical - float elevation = MathF.PI / 2f - alpha; // convert polar-from-vertical to elevation - List dirs = new List { - new(1f, Direction.Radians(0f, elevation)), - new(2f, Direction.Radians(MathF.PI/2, elevation+1)), - new(3f, Direction.Radians(MathF.PI, elevation+2)), - new(4f, Direction.Radians(3*MathF.PI/2, elevation+3)) - }; - - Spherical avg = Spherical.Average(dirs); - -#if UNITY_5_3_OR_NEWER - UnityEngine.Vector3 r = UnityEngine.Vector3.zero; -#else - Vector3Float r = Vector3Float.zero; -#endif - foreach (Spherical dir in dirs) { - r += dir.ToVector3(); - } - r = r / 4; - Spherical avg2 = Spherical.FromVector3(r); - - Assert.AreEqual(avg, avg2); - } - - } -} -#endif \ No newline at end of file diff --git a/Runtime/LinearAlgebra/test/SwingTwistTest.cs b/Runtime/LinearAlgebra/test/SwingTwistTest.cs deleted file mode 100644 index 5f05a96..0000000 --- a/Runtime/LinearAlgebra/test/SwingTwistTest.cs +++ /dev/null @@ -1,131 +0,0 @@ -#if !UNITY_5_6_OR_NEWER -using NUnit.Framework; - -namespace LinearAlgebra.Test { - - [TestFixture] - public class SwingTwistTest { - - [Test] - public void Degrees_CreatesSwingTwistWithDegreeAngles() { - SwingTwist st = SwingTwist.Degrees(45, 30, 15); - Assert.IsNotNull(st); - Assert.AreEqual(45, st.swing.horizontal.inDegrees, 0.01f); - Assert.AreEqual(30, st.swing.vertical.inDegrees, 0.01f); - Assert.AreEqual(15, st.twist.inDegrees, 0.01f); - } - - [Test] - public void Radians_CreatesSwingTwistWithRadianAngles() { - float pi = (float)System.Math.PI; - SwingTwist st = SwingTwist.Radians(pi / 4, pi / 6, pi / 12); - Assert.IsNotNull(st); - Assert.AreEqual(45, st.swing.horizontal.inDegrees, 0.01f); - Assert.AreEqual(30, st.swing.vertical.inDegrees, 0.01f); - Assert.AreEqual(15, st.twist.inDegrees, 0.01f); - } - - [Test] - public void Zero_CreatesZeroRotation() { - SwingTwist st = SwingTwist.zero; - Assert.AreEqual(0, st.swing.horizontal.inDegrees, 0.01f); - Assert.AreEqual(0, st.swing.vertical.inDegrees, 0.01f); - Assert.AreEqual(0, st.twist.inDegrees, 0.01f); - } - - [Test] - public void QuaternionTest() { - Quaternion q; - SwingTwist s; - Quaternion r; - - q = Quaternion.identity; - s = SwingTwist.FromQuaternion(q); - r = s.ToQuaternion(); - Assert.AreEqual(q, r); - - q = Quaternion.Euler(90, 0, 0); - s = SwingTwist.FromQuaternion(q); - Assert.AreEqual(0, s.swing.horizontal.inDegrees, 10e-2f); - Assert.AreEqual(90, s.swing.vertical.inDegrees, 10e-2f); - Assert.AreEqual(0, s.twist.inDegrees, 0.01f); - r = s.ToQuaternion(); - Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); - - q = Quaternion.Euler(0, 90, 0); - s = SwingTwist.FromQuaternion(q); - Assert.AreEqual(90, s.swing.horizontal.inDegrees,10e-2f); - Assert.AreEqual(0, s.swing.vertical.inDegrees, 0.01f); - Assert.AreEqual(0, s.twist.inDegrees, 0.01f); - r = s.ToQuaternion(); - Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); - - q = Quaternion.Euler(0, 0, 90); - s = SwingTwist.FromQuaternion(q); - Assert.AreEqual(0, s.swing.horizontal.inDegrees, 0.01f); - Assert.AreEqual(0, s.swing.vertical.inDegrees, 0.01f); - Assert.AreEqual(90, s.twist.inDegrees, 0.01f); - r = s.ToQuaternion(); - Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); - - q = Quaternion.Euler(0, 180, 0); - s = SwingTwist.FromQuaternion(q); - Assert.AreEqual(-180, s.swing.horizontal.inDegrees, 0.01f); - Assert.AreEqual(0, s.swing.vertical.inDegrees, 0.01f); - Assert.AreEqual(0, s.twist.inDegrees, 0.01f); - r = s.ToQuaternion(); - Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); - - q = Quaternion.Euler(0, 135, 0); - s = SwingTwist.FromQuaternion(q); - Assert.AreEqual(135, s.swing.horizontal.inDegrees, 0.01f); - Assert.AreEqual(0, s.swing.vertical.inDegrees, 0.01f); - Assert.AreEqual(0, s.twist.inDegrees, 0.01f); - r = s.ToQuaternion(); - Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); - - q = Quaternion.Euler(60, 45, 30); - s = SwingTwist.FromQuaternion(q); - Assert.AreEqual(45, s.swing.horizontal.inDegrees, 0.01f); - Assert.AreEqual(60, s.swing.vertical.inDegrees, 0.01f); - Assert.AreEqual(30, s.twist.inDegrees, 0.01f); - // r = s.ToQuaternion(); - // Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); - - // q = Quaternion.Euler(-45, -30, -15); - // s = SwingTwist.FromQuaternion(q); - // Assert.AreEqual(-30, s.swing.horizontal.inDegrees, 0.01f); - // Assert.AreEqual(-45, s.swing.vertical.inDegrees, 0.01f); - // Assert.AreEqual(-15, s.twist.inDegrees, 0.01f); - // r = s.ToQuaternion(); - // Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); - - // q = Quaternion.Euler(180, 180, 180); - // s = SwingTwist.FromQuaternion(q); - // Assert.AreEqual(-180, s.swing.horizontal.inDegrees, 0.01f); - // Assert.AreEqual(-180, s.swing.vertical.inDegrees, 0.01f); - // Assert.AreEqual(-180, s.twist.inDegrees, 0.01f); - // r = s.ToQuaternion(); - // Assert.AreEqual(0, Quaternion.UnsignedAngle(q, r), 10e-2f); - - } - - [Test] - public void ToAngleAxis_ConvertsToSpherical() { - SwingTwist st = SwingTwist.Degrees(45, 30, 15); - Spherical s = st.ToAngleAxis(); - Assert.IsNotNull(s); - } - - [Test] - public void FromAngleAxis_ConvertsFromSpherical() { - Spherical s = new(90, Direction.Degrees(45, 0)); - SwingTwist st = SwingTwist.FromAngleAxis(s); - Assert.IsNotNull(st); - } - - } - -} - -#endif \ No newline at end of file diff --git a/Runtime/LinearAlgebra/test/Vector2FloatTest.cs b/Runtime/LinearAlgebra/test/Vector2FloatTest.cs deleted file mode 100644 index 867765a..0000000 --- a/Runtime/LinearAlgebra/test/Vector2FloatTest.cs +++ /dev/null @@ -1,364 +0,0 @@ -#if !UNITY_5_6_OR_NEWER -using NUnit.Framework; - -namespace LinearAlgebra.Test { - using Vector2 = Vector2Float; - - public class Vector2FloatTest { - - [SetUp] - public void Setup() { - } - - [Test] - public void FromPolar() { - } - - [Test] - public void Equality() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - - Assert.IsFalse(v1 == v2, "4 5 == 1 2"); - Assert.IsTrue(v1 != v2, "4 5 != 1 2"); - - v2 = new(4, 5); - Assert.IsTrue(v1 == v2, "4 5 == 4 5"); - Assert.IsFalse(v1 != v2, "4 5 != 4 5"); - } - - [Test] - public void Magnitude() { - Vector2 v = new(1, 2); - float m = 0; - m = v.magnitude; - Assert.AreEqual(m, 2.236068F, "v.magnitude 1 2"); - - m = Vector2.MagnitudeOf(v); - Assert.AreEqual(m, 2.236068F, "MagnitudeOf 1 2"); - - v = new(-1, -2); - m = v.magnitude; - Assert.AreEqual(m, 2.236068F, "v.magnitude -1 -2"); - - v = new(0, 0); - m = v.magnitude; - Assert.AreEqual(m, 0, "v.magnitude 0 0"); - } - - [Test] - public void SqrMagnitude() { - Vector2 v = new(1, 2); - float m = 0; - - m = v.sqrMagnitude; - Assert.AreEqual(m, 5, "v.sqrMagnitude 1 2"); - - m = Vector2.SqrMagnitudeOf(v); - Assert.AreEqual(m, 5, "SqrMagnitudeOf 1 2"); - - v = new(-1, -2); - m = v.sqrMagnitude; - Assert.AreEqual(m, 5, "v.sqrMagnitude -1 -2"); - - v = new(0, 0); - m = v.sqrMagnitude; - Assert.AreEqual(m, 0, "v.sqrMagnitude 0 0"); - } - - [Test] - public void Distance() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - float f = 0; - - f = Vector2.Distance(v1, v2); - Assert.AreEqual(f, 4.24264002f, 1.0E-05F, "Distance(4 5, 1 2)"); - - v2 = new(-1, -2); - f = Vector2.Distance(v1, v2); - Assert.AreEqual(f, 8.602325F, "Distance(4 5, 1 2)"); - - v2 = new(0, 0); - f = Vector2.Distance(v1, v2); - Assert.AreEqual(f, 6.403124F, 1.0E-05F, "Distance(4 5, 1 2)"); - } - - [Test] - public void Normalize() { - Vector2 v = new(0, 3); - Vector2Float r; - - r = v.normalized; - Assert.AreEqual(0, r.horizontal, "normalized 0 3 H"); - Assert.AreEqual(1, r.vertical, "normalized 0 3 V"); - - r = Vector2.Normalize(v); - Assert.AreEqual(0, r.horizontal, "Normalize 0 3 H"); - Assert.AreEqual(1, r.vertical, "Normalize 0 3 V"); - - v = new(0, -3); - r = v.normalized; - Assert.AreEqual(0, r.horizontal, "normalized 0 -3 H"); - Assert.AreEqual(-1, r.vertical, "normalized 0 -3 V"); - - v = new(0, 0); - r = v.normalized; - Assert.AreEqual(0, r.horizontal, "normalized 0 0 H"); - Assert.AreEqual(0, r.vertical, "normalized 0 0 V"); - } - - [Test] - public void Negate() { - Vector2 v = new(4, 5); - Vector2 r; - - r = -v; - Assert.AreEqual(-4, r.horizontal, "- 4 5 H"); - Assert.AreEqual(-5, r.vertical, "- 4 5 V"); - - v = new(-4, -5); - r = -v; - Assert.AreEqual(4, r.horizontal, "- -4 -5 H"); - Assert.AreEqual(5, r.vertical, "- -4 -5 V"); - - v = new(0, 0); - r = -v; - Assert.AreEqual(0, r.horizontal, "- 0 0 H"); - Assert.AreEqual(0, r.vertical, "- 0 0 V"); - } - - [Test] - public void Subtract() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - Vector2 r = Vector2.zero; - - r = v1 - v2; - Assert.IsTrue(r == new Vector2(3, 3), "4 5 - 1 2"); - - v2 = new(-1, -2); - r = v1 - v2; - Assert.IsTrue(r == new Vector2(5, 7), "4 5 - -1 -2"); - - v2 = new(4, 5); - r = v1 - v2; - Assert.IsTrue(r == new Vector2(0, 0), "4 5 - 4 5"); - r = v1; - r -= v2; - Assert.AreEqual(r, new Vector2(0, 0), "4 5 - 4 5"); - - v2 = new(0, 0); - r = v1 - v2; - Assert.AreEqual(r, new Vector2(4, 5), "4 5 - 0 0"); - r -= v2; - Assert.AreEqual(r, new Vector2(4, 5), "4 5 - 0 0"); - } - - [Test] - public void Addition() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - Vector2 r = Vector2.zero; - - r = v1 + v2; - Assert.IsTrue(r == new Vector2(5, 7), "4 5 + 1 2"); - - v2 = new(-1, -2); - r = v1 + v2; - Assert.IsTrue(r == new Vector2(3, 3), "4 5 + -1 -2"); - r = v1; - r += v2; - Assert.AreEqual(r, new Vector2(3, 3), "4 5 + -1 -2"); - - v2 = new(0, 0); - r = v1 + v2; - Assert.AreEqual(r, new Vector2(4, 5), "4 5 + 0 0"); - r += v2; - Assert.AreEqual(r, new Vector2(4, 5), "4 5 + 0 0"); - } - - [Test] - public void Scale() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - Vector2 r; - - r = Vector2.Scale(v1, v2); - Assert.AreEqual(4, r.horizontal, "Scale 4 5 , 1 2 H"); - Assert.AreEqual(10, r.vertical, "Scale 4 5 , 1 2 V"); - - v2 = new(-1, -2); - r = Vector2.Scale(v1, v2); - Assert.AreEqual(-4, r.horizontal, "Scale 4 5 , -1 -2 H"); - Assert.AreEqual(-10, r.vertical, "Scale 4 5 , -1 -2 V"); - - v2 = new(0, 0); - r = Vector2.Scale(v1, v2); - Assert.AreEqual(0, r.horizontal, "Scale 4 5 , 0 0 H"); - Assert.AreEqual(0, r.vertical, "Scale 4 5 , 0 0 V"); - } - - [Test] - public void Multiply() { - Vector2 v1 = new(4, 5); - int f = 3; - Vector2 r; - - r = v1 * f; - Assert.AreEqual(12, r.horizontal, "4 5 * 3 H"); - Assert.AreEqual(15, r.vertical, "4 5 * 3 V"); - - r = f * v1; - Assert.AreEqual(12, r.horizontal, "3 * 4 5 H"); - Assert.AreEqual(15, r.vertical, "3 * 4 5 V"); - - f = -3; - r = v1 * f; - Assert.AreEqual(-12, r.horizontal, "4 5 * -3 H"); - Assert.AreEqual(-15, r.vertical, "4 5 * -3 V"); - - f = 0; - r = v1 * f; - Assert.AreEqual(0, r.horizontal, "4 5 * 0 H"); - Assert.AreEqual(0, r.vertical, "4 5 * 0 V"); - } - - [Test] - public void Divide() { - Vector2 v1 = new(4, 5); - float f = 2; - Vector2 r; - - r = v1 / f; - Assert.AreEqual(2, r.horizontal, "4 5 / 2 H"); - Assert.AreEqual(2.5, r.vertical, "4 5 / 2 V"); - - f = -2; - r = v1 / f; - Assert.AreEqual(-2, r.horizontal, "4 5 / -2 H"); - Assert.AreEqual(-2.5, r.vertical, "4 5 / -2 V"); - - f = 0; - r = v1 / f; - Assert.AreEqual(float.PositiveInfinity, r.horizontal, "4 5 / 0 H"); - Assert.AreEqual(float.PositiveInfinity, r.vertical, "4 5 / 0 V"); - } - - [Test] - public void Dot() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - float f; - - f = Vector2.Dot(v1, v2); - Assert.AreEqual(14, f, "Dot(4 5, 1 2)"); - - v2 = new(-1, -2); - f = Vector2.Dot(v1, v2); - Assert.AreEqual(-14, f, "Dot(4 5, -1 -2)"); - - v2 = new(0, 0); - f = Vector2.Dot(v1, v2); - Assert.AreEqual(0, f, "Dot(4 5, 0 0)"); - } - - [Test] - public void SignedAngle() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - float f; - - f = Vector2.SignedAngle(v1, v2); - Assert.AreEqual(-12.094758f, f); - - v2 = new(-1, -2); - f = Vector2.SignedAngle(v1, v2); - Assert.AreEqual(167.905228f, f); - - v2 = new(0, 0); - f = Vector2.SignedAngle(v1, v2); - Assert.AreEqual(0, f); - - v1 = new(0, 1); - v2 = new(1, 0); - f = Vector2.SignedAngle(v1, v2); - Assert.AreEqual(90, f); - - v1 = new(0, 1); - v2 = new(0, -1); - f = Vector2.SignedAngle(v1, v2); - Assert.AreEqual(180, f); - } - - [Test] - public void UnsignedAngle() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - float f; - - f = Vector2.UnsignedAngle(v1, v2); - Assert.AreEqual(12.094758f, f); - - v2 = new(-1, -2); - f = Vector2.UnsignedAngle(v1, v2); - Assert.AreEqual(167.905228f, f); - - v2 = new(0, 0); - f = Vector2.UnsignedAngle(v1, v2); - Assert.AreEqual(0, f); - - v1 = new(0, 1); - v2 = new(1, 0); - f = Vector2.UnsignedAngle(v1, v2); - Assert.AreEqual(90, f); - - v1 = new(0, 1); - v2 = new(0, -1); - f = Vector2.UnsignedAngle(v1, v2); - Assert.AreEqual(180, f); - } - - [Test] - public void Rotate() { - Vector2 v1 = new(1, 2); - Vector2 r; - - r = Vector2.Rotate(v1, AngleFloat.Degrees(0)); - Assert.AreEqual(0, Vector2.Distance(r, v1)); - - r = Vector2.Rotate(v1, AngleFloat.Degrees(180)); - Assert.AreEqual(0, Vector2.Distance(r, new Vector2(-1, -2)), 1.0e-06); - - r = Vector2.Rotate(v1, AngleFloat.Degrees(-90)); - Assert.AreEqual(0, Vector2.Distance(r, new Vector2(2, -1)), 1.0e-06); - - r = Vector2.Rotate(v1, AngleFloat.Degrees(270)); - Assert.AreEqual(0, Vector2.Distance(r, new Vector2(2, -1)), 1.0e-06); - } - - [Test] - public void Lerp() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - Vector2 r; - - r = Vector2.Lerp(v1, v2, 0); - Assert.AreEqual(0, Vector2.Distance(r, v1), 0); - - r = Vector2.Lerp(v1, v2, 1); - Assert.AreEqual(0, Vector2.Distance(r, v2), 0); - - r = Vector2.Lerp(v1, v2, 0.5f); - Assert.AreEqual(0, Vector2.Distance(r, new Vector2(2.5f, 3.5f)), 0); - - r = Vector2.Lerp(v1, v2, -1); - Assert.AreEqual(0, Vector2.Distance(r, new Vector2(7, 8)), 0); - - r = Vector2.Lerp(v1, v2, 2); - Assert.AreEqual(0, Vector2.Distance(r, new Vector2(-2, -1)), 0); - } - - } -} -#endif \ No newline at end of file diff --git a/Runtime/LinearAlgebra/test/Vector2IntTest.cs b/Runtime/LinearAlgebra/test/Vector2IntTest.cs deleted file mode 100644 index 3647ca0..0000000 --- a/Runtime/LinearAlgebra/test/Vector2IntTest.cs +++ /dev/null @@ -1,270 +0,0 @@ -#if !UNITY_5_6_OR_NEWER -using NUnit.Framework; - -namespace LinearAlgebra.Test { - using Vector2 = Vector2Int; - - public class Vector2IntTest { - - [SetUp] - public void Setup() { - } - - [Test] - public void FromPolar() { - } - - [Test] - public void Equality() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - - Assert.IsFalse(v1 == v2, "4 5 == 1 2"); - Assert.IsTrue(v1 != v2, "4 5 != 1 2"); - - v2 = new(4, 5); - Assert.IsTrue(v1 == v2, "4 5 == 4 5"); - Assert.IsFalse(v1 != v2, "4 5 != 4 5"); - } - - [Test] - public void Magnitude() { - Vector2 v = new(1, 2); - float m = 0; - m = v.magnitude; - Assert.AreEqual(m, 2.236068F, "v.magnitude 1 2"); - - m = Vector2.MagnitudeOf(v); - Assert.AreEqual(m, 2.236068F, "MagnitudeOf 1 2"); - - v = new(-1, -2); - m = v.magnitude; - Assert.AreEqual(m, 2.236068F, "v.magnitude -1 -2"); - - v = new(0, 0); - m = v.magnitude; - Assert.AreEqual(m, 0, "v.magnitude 0 0"); - } - - [Test] - public void SqrMagnitude() { - Vector2 v = new(1, 2); - float m = 0; - - m = v.sqrMagnitude; - Assert.AreEqual(m, 5, "v.sqrMagnitude 1 2"); - - m = Vector2.SqrMagnitudeOf(v); - Assert.AreEqual(m, 5, "SqrMagnitudeOf 1 2"); - - v = new(-1, -2); - m = v.sqrMagnitude; - Assert.AreEqual(m, 5, "v.sqrMagnitude -1 -2"); - - v = new(0, 0); - m = v.sqrMagnitude; - Assert.AreEqual(m, 0, "v.sqrMagnitude 0 0"); - } - - [Test] - public void Distance() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - float f = 0; - - f = Vector2.Distance(v1, v2); - Assert.AreEqual(f, 4.24264002f, 1.0E-05F, "Distance(4 5, 1 2)"); - - v2 = new(-1, -2); - f = Vector2.Distance(v1, v2); - Assert.AreEqual(f, 8.602325F, "Distance(4 5, 1 2)"); - - v2 = new(0, 0); - f = Vector2.Distance(v1, v2); - Assert.AreEqual(f, 6.403124F, 1.0E-05F, "Distance(4 5, 1 2)"); - } - - [Test] - public void Normalize() { - Vector2 v = new(0, 3); - Vector2Float r; - - r = v.normalized; - Assert.AreEqual(0, r.horizontal, "normalized 0 3 H"); - Assert.AreEqual(1, r.vertical, "normalized 0 3 V"); - - r = Vector2.Normalize(v); - Assert.AreEqual(0, r.horizontal, "Normalize 0 3 H"); - Assert.AreEqual(1, r.vertical, "Normalize 0 3 V"); - - v = new(0, -3); - r = v.normalized; - Assert.AreEqual(0, r.horizontal, "normalized 0 -3 H"); - Assert.AreEqual(-1, r.vertical, "normalized 0 -3 V"); - - v = new(0, 0); - r = v.normalized; - Assert.AreEqual(0, r.horizontal, "normalized 0 0 H"); - Assert.AreEqual(0, r.vertical, "normalized 0 0 V"); - } - - [Test] - public void Negate() { - Vector2 v = new(4, 5); - Vector2 r; - - r = -v; - Assert.AreEqual(-4, r.horizontal, "- 4 5 H"); - Assert.AreEqual(-5, r.vertical, "- 4 5 V"); - - v = new(-4, -5); - r = -v; - Assert.AreEqual(4, r.horizontal, "- -4 -5 H"); - Assert.AreEqual(5, r.vertical, "- -4 -5 V"); - - v = new(0, 0); - r = -v; - Assert.AreEqual(0, r.horizontal, "- 0 0 H"); - Assert.AreEqual(0, r.vertical, "- 0 0 V"); - } - - [Test] - public void Subtract() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - Vector2 r = Vector2.zero; - - r = v1 - v2; - Assert.IsTrue(r == new Vector2(3, 3), "4 5 - 1 2"); - - v2 = new(-1, -2); - r = v1 - v2; - Assert.IsTrue(r == new Vector2(5, 7), "4 5 - -1 -2"); - - v2 = new(4, 5); - r = v1 - v2; - Assert.IsTrue(r == new Vector2(0, 0), "4 5 - 4 5"); - r = v1; - r -= v2; - Assert.AreEqual(r, new Vector2(0, 0), "4 5 - 4 5"); - - v2 = new(0, 0); - r = v1 - v2; - Assert.AreEqual(r, new Vector2(4, 5), "4 5 - 0 0"); - r -= v2; - Assert.AreEqual(r, new Vector2(4, 5), "4 5 - 0 0"); - } - - [Test] - public void Addition() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - Vector2 r = Vector2.zero; - - r = v1 + v2; - Assert.IsTrue(r == new Vector2(5, 7), "4 5 + 1 2"); - - v2 = new(-1, -2); - r = v1 + v2; - Assert.IsTrue(r == new Vector2(3, 3), "4 5 + -1 -2"); - r = v1; - r += v2; - Assert.AreEqual(r, new Vector2(3, 3), "4 5 + -1 -2"); - - v2 = new(0, 0); - r = v1 + v2; - Assert.AreEqual(r, new Vector2(4, 5), "4 5 + 0 0"); - r += v2; - Assert.AreEqual(r, new Vector2(4, 5), "4 5 + 0 0"); - } - - [Test] - public void Scale() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - Vector2 r; - - r = Vector2.Scale(v1, v2); - Assert.AreEqual(4, r.horizontal, "Scale 4 5 , 1 2 H"); - Assert.AreEqual(10, r.vertical, "Scale 4 5 , 1 2 V"); - - v2 = new(-1, -2); - r = Vector2.Scale(v1, v2); - Assert.AreEqual(-4, r.horizontal, "Scale 4 5 , -1 -2 H"); - Assert.AreEqual(-10, r.vertical, "Scale 4 5 , -1 -2 V"); - - v2 = new(0, 0); - r = Vector2.Scale(v1, v2); - Assert.AreEqual(0, r.horizontal, "Scale 4 5 , 0 0 H"); - Assert.AreEqual(0, r.vertical, "Scale 4 5 , 0 0 V"); - } - - [Test] - public void Multiply() { - Vector2 v1 = new(4, 5); - int f = 3; - Vector2 r; - - r = v1 * f; - Assert.AreEqual(12, r.horizontal, "4 5 * 3 H"); - Assert.AreEqual(15, r.vertical, "4 5 * 3 V"); - - r = f * v1; - Assert.AreEqual(12, r.horizontal, "3 * 4 5 H"); - Assert.AreEqual(15, r.vertical, "3 * 4 5 V"); - - f = -3; - r = v1 * f; - Assert.AreEqual(-12, r.horizontal, "4 5 * -3 H"); - Assert.AreEqual(-15, r.vertical, "4 5 * -3 V"); - - f = 0; - r = v1 * f; - Assert.AreEqual(0, r.horizontal, "4 5 * 0 H"); - Assert.AreEqual(0, r.vertical, "4 5 * 0 V"); - } - - [Test] - public void Divide() { - Vector2 v1 = new(4, 5); - int f = 2; - Vector2 r; - - r = v1 / f; - Assert.AreEqual(2, r.horizontal, "4 5 / 2 H"); - Assert.AreEqual(2, r.vertical, "4 5 / 2 V"); - - f = -2; - r = v1 / f; - Assert.AreEqual(-2, r.horizontal, "4 5 / -2 H"); - Assert.AreEqual(-2, r.vertical, "4 5 / -2 V"); - - Assert.Throws(() => { - f = 0; - r = v1 / f; - Assert.AreEqual(float.PositiveInfinity, r.horizontal, "4 5 / 0 H"); - Assert.AreEqual(float.PositiveInfinity, r.vertical, "4 5 / 0 V"); - }); - } - - [Test] - public void Dot() { - Vector2 v1 = new(4, 5); - Vector2 v2 = new(1, 2); - int f; - - f = Vector2.Dot(v1, v2); - Assert.AreEqual(14, f, "Dot(4 5, 1 2)"); - - v2 = new(-1, -2); - f = Vector2.Dot(v1, v2); - Assert.AreEqual(-14, f, "Dot(4 5, -1 -2)"); - - v2 = new(0, 0); - f = Vector2.Dot(v1, v2); - Assert.AreEqual(0, f, "Dot(4 5, 0 0)"); - } - - } -} -#endif \ No newline at end of file diff --git a/Runtime/LinearAlgebra/test/Vector3FloatTest.cs b/Runtime/LinearAlgebra/test/Vector3FloatTest.cs deleted file mode 100644 index fd3c2dc..0000000 --- a/Runtime/LinearAlgebra/test/Vector3FloatTest.cs +++ /dev/null @@ -1,581 +0,0 @@ -#if !UNITY_5_6_OR_NEWER -using NUnit.Framework; - -namespace LinearAlgebra.Test { - using Vector3 = Vector3Float; - - public class Vector3FloatTest { - - [Test] - public void FromSpherical() { - Vector3 v = new(0, 0, 1); - Spherical s = Spherical.FromVector3(v); - Vector3 r = Vector3.FromSpherical(s); - - Assert.AreEqual(0, r.horizontal, "0 0 1"); - Assert.AreEqual(0, r.vertical, 1.0e-06, "0 0 1"); - Assert.AreEqual(1, r.depth, "0 0 1"); - - v = new(0, 1, 0); - s = Spherical.FromVector3(v); - r = Vector3.FromSpherical(s); - Assert.AreEqual(0, r.horizontal, "0 0 1"); - Assert.AreEqual(1, r.vertical, "0 0 1"); - Assert.AreEqual(0, r.depth, 1.0e-06, "0 0 1"); - - v = new(1, 0, 0); - s = Spherical.FromVector3(v); - r = Vector3.FromSpherical(s); - Assert.AreEqual(1, r.horizontal, "0 0 1"); - Assert.AreEqual(0, r.vertical, 1.0e-06, "0 0 1"); - Assert.AreEqual(0, r.depth, 1.0e-06, "0 0 1"); - } - - [Test] - public void Magnitude() { - Vector3 v = new(1, 2, 3); - float m = 0; - - m = v.magnitude; - Assert.AreEqual(3.7416575f, m, "magnitude 1 2 3"); - - m = Vector3.MagnitudeOf(v); - Assert.AreEqual(3.7416575f, m, "MagnitudeOf 1 2 3"); - - v = new(-1, -2, -3); - m = v.magnitude; - Assert.AreEqual(3.7416575f, m, "magnitude -1 -2 -3"); - - v = new(0, 0, 0); - m = v.magnitude; - Assert.AreEqual(0, m, "magnitude 0 0 0"); - - // Infinity tests are still missing - } - - [Test] - public void SqrMagnitude() { - Vector3 v = new(1, 2, 3); - float m = 0; - - m = v.sqrMagnitude; - Assert.AreEqual(14, m, "sqrMagnitude 1 2 3"); - - m = Vector3.SqrMagnitudeOf(v); - Assert.AreEqual(14, m, "SqrMagnitudeOf 1 2 3"); - - v = new(-1, -2, -3); - m = v.sqrMagnitude; - Assert.AreEqual(14, m, "sqrMagnitude -1 -2 -3"); - - v = new(0, 0, 0); - m = v.sqrMagnitude; - Assert.AreEqual(0, m, "sqrMagnitude 0 0 0"); - - // Infinity tests are still missing - } - - [Test] - public void Normalize() { - Vector3 v = new(0, 2, 0); - Vector3 r; - - r = v.normalized; - Assert.AreEqual(new Vector3(0, 1, 0), r, "normalized 0 2 0"); - - r = Vector3.Normalize(v); - Assert.AreEqual(new Vector3(0, 1, 0), r, "Normalize 0 2 0"); - - v = new(0, -2, 0); - r = v.normalized; - Assert.AreEqual(new Vector3(0, -1, 0), r, "normalized 0 -2 0"); - v = new(0, 0, 0); - r = v.normalized; - Assert.AreEqual(new Vector3(0, 0, 0), r, "normalized 0 0 0"); - - v = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - r = v.normalized; - Assert.IsTrue(float.IsNaN(r.horizontal), "normalized infinity infinity infinity"); - Assert.IsTrue(float.IsNaN(r.vertical), "normalized infinity infinity infinity"); - Assert.IsTrue(float.IsNaN(r.depth), "normalized infinity infinity infinity"); - - v = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - r = v.normalized; - Assert.IsTrue(float.IsNaN(r.horizontal), "normalized -infinity -infinity -infinity"); - Assert.IsTrue(float.IsNaN(r.vertical), "normalized -infinity -infinity -infinity"); - Assert.IsTrue(float.IsNaN(r.depth), "normalized -infinity -infinity -infinity"); - } - - [Test] - public void Negate() { - Vector3 v = new(4, 5, 6); - Vector3 r; - - r = -v; - Assert.AreEqual(-4, r.horizontal, "- 4 5 6 H"); - Assert.AreEqual(-5, r.vertical, "- 4 5 6 V"); - Assert.AreEqual(-6, r.depth, "- 4 5 6 D"); - - v = new(-4, -5, -6); - r = -v; - Assert.AreEqual(4, r.horizontal, "- -4 -5 -6 H"); - Assert.AreEqual(5, r.vertical, "- -4 -5 -6 V"); - Assert.AreEqual(6, r.depth, "- -4 -5 -6 D"); - - v = new(0, 0, 0); - r = -v; - Assert.AreEqual(new Vector3(0, 0, 0), r, "- 0 0 0"); - Assert.AreEqual(0, r.horizontal, "- 0 0 0 H"); - Assert.AreEqual(0, r.vertical, "- 0 0 0 V"); - Assert.AreEqual(0, r.depth, "- 0 0 0 D"); - - - v = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - r = -v; - Assert.AreEqual(new Vector3(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity), r, "- inifinty infinity infinity"); - - v = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - r = -v; - Assert.AreEqual(new Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity), r, "- -inifinty -infinity -infinity"); - } - - [Test] - public void Subtract() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r = Vector3.zero; - - r = v1 - v2; - Assert.IsTrue(r == new Vector3(3, 3, 3), "4 5 6 - 1 2 3"); - - v2 = new(-1, -2, -3); - r = v1 - v2; - Assert.IsTrue(r == new Vector3(5, 7, 9), "4 5 6 - -1 -2 -3"); - - v2 = new(4, 5, 6); - r = v1 - v2; - Assert.IsTrue(r == new Vector3(0, 0, 0), "4 5 6 - 4 5 6"); - r = v1; - r -= v2; - Assert.AreEqual(r, new Vector3(0, 0, 0), "4 5 6 - 4 5 6"); - - v2 = new(0, 0, 0); - r = v1 - v2; - Assert.AreEqual(r, new Vector3(4, 5, 6), "4 5 6 - 0 0 0"); - r -= v2; - Assert.AreEqual(r, new Vector3(4, 5, 6), "4 5 6 - 0 0 0"); - - // Infinity tests are still missing - } - - [Test] - public void Addition() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r = Vector3.zero; - - r = v1 + v2; - Assert.IsTrue(r == new Vector3(5, 7, 9), "4 5 6 + 1 2 3"); - - v2 = new(-1, -2, -3); - r = v1 + v2; - Assert.IsTrue(r == new Vector3(3, 3, 3), "4 5 6 + -1 -2 -3"); - r = v1; - r += v2; - Assert.AreEqual(r, new Vector3(3, 3, 3), "4 5 6 + -1 -2 -3"); - - v2 = new(0, 0, 0); - r = v1 + v2; - Assert.AreEqual(r, new Vector3(4, 5, 6), "4 5 6 + 0 0 0"); - r += v2; - Assert.AreEqual(r, new Vector3(4, 5, 6), "4 5 6 + 0 0 0"); - - // Infinity tests are still missing - } - - [Test] - public void Scale() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r; - - r = Vector3.Scale(v1, v2); - Assert.AreEqual(4, r.horizontal, "Scale 4 5 6 , 1 2 3 H"); - Assert.AreEqual(10, r.vertical, "Scale 4 5 6 , 1 2 3 V"); - Assert.AreEqual(18, r.depth, "Scale 4 5 6 , 1 2 3 D"); - - v2 = new(-1, -2, -3); - r = Vector3.Scale(v1, v2); - Assert.AreEqual(-4, r.horizontal, "Scale 4 5 6 , -1 -2 -3 H"); - Assert.AreEqual(-10, r.vertical, "Scale 4 5 6 , -1 -2 -3 V"); - Assert.AreEqual(-18, r.depth, "Scale 4 5 6 , -1 -2 -3 D"); - - v2 = new(0, 0, 0); - r = Vector3.Scale(v1, v2); - Assert.AreEqual(0, r.horizontal, "Scale 4 5 6 , 0 0 0 H"); - Assert.AreEqual(0, r.vertical, "Scale 4 5 6 , 0 0 0 V"); - Assert.AreEqual(0, r.depth, "Scale 4 5 6 , 0 0 0 D"); - - v2 = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - r = Vector3.Scale(v1, v2); - Assert.AreEqual(float.PositiveInfinity, r.horizontal, "Scale 4 5 6 , inf inf inf H"); - Assert.AreEqual(float.PositiveInfinity, r.vertical, "Scale 4 5 6 , inf inf inf V"); - Assert.AreEqual(float.PositiveInfinity, r.depth, "Scale 4 5 6 , inf inf inf D"); - - v2 = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - r = Vector3.Scale(v1, v2); - Assert.AreEqual(float.NegativeInfinity, r.horizontal, "Scale 4 5 6 , -inf -inf -inf H"); - Assert.AreEqual(float.NegativeInfinity, r.vertical, "Scale 4 5 6 , -inf -inf -inf V"); - Assert.AreEqual(float.NegativeInfinity, r.depth, "Scale 4 5 6 , -inf -inf -inf D"); - } - - [Test] - public void Multiply() { - Vector3 v1 = new(4, 5, 6); - float f = 3; - Vector3 r; - - r = v1 * f; - Assert.AreEqual(12, r.horizontal, "4 5 6 * 3 H"); - Assert.AreEqual(15, r.vertical, "4 5 6 * 3 V"); - Assert.AreEqual(18, r.depth, "4 5 6 * 3 D"); - - f = -3; - r = v1 * f; - Assert.AreEqual(-12, r.horizontal, "4 5 6 * -3 H"); - Assert.AreEqual(-15, r.vertical, "4 5 6 * -3 V"); - Assert.AreEqual(-18, r.depth, "4 5 6 * -3 D"); - - f = 0; - r = v1 * f; - Assert.AreEqual(0, r.horizontal, "4 5 6 * 0 H"); - Assert.AreEqual(0, r.vertical, "4 5 6 * 0 V"); - Assert.AreEqual(0, r.depth, "4 5 6 * 0 D"); - - f = float.PositiveInfinity; - r = v1 * f; - Assert.AreEqual(float.PositiveInfinity, r.horizontal, "4 5 6 * inf H"); - Assert.AreEqual(float.PositiveInfinity, r.vertical, "4 5 6 * inf V"); - Assert.AreEqual(float.PositiveInfinity, r.depth, "4 5 6 * inf D"); - - f = float.NegativeInfinity; - r = v1 * f; - Assert.AreEqual(float.NegativeInfinity, r.horizontal, "4 5 6 * -inf H"); - Assert.AreEqual(float.NegativeInfinity, r.vertical, "4 5 6 * -inf V"); - Assert.AreEqual(float.NegativeInfinity, r.depth, "4 5 6 * -inf D"); - } - - [Test] - public void Divide() { - Vector3 v1 = new(4, 5, 6); - float f = 2; - Vector3 r; - - r = v1 / f; - Assert.AreEqual(2, r.horizontal, "4 5 6 / 2 H"); - Assert.AreEqual(2.5, r.vertical, "4 5 6 / 2 V"); - Assert.AreEqual(3, r.depth, "4 5 6 / 2 D"); - - f = -2; - r = v1 / f; - Assert.AreEqual(-2, r.horizontal, "4 5 6 / -2 H"); - Assert.AreEqual(-2.5, r.vertical, "4 5 6 / -2 V"); - Assert.AreEqual(-3, r.depth, "4 5 6 / -2 D"); - - f = 0; - r = v1 / f; - Assert.AreEqual(float.PositiveInfinity, r.horizontal, "4 5 6 / 0 H"); - Assert.AreEqual(float.PositiveInfinity, r.vertical, "4 5 6 / 0 V"); - Assert.AreEqual(float.PositiveInfinity, r.depth, "4 5 6 / 0 D"); - - f = float.PositiveInfinity; - r = v1 / f; - Assert.AreEqual(0, r.horizontal, "4 5 6 / inf H"); - Assert.AreEqual(0, r.vertical, "4 5 6 / inf V"); - Assert.AreEqual(0, r.depth, "4 5 6 / inf D"); - - f = float.NegativeInfinity; - r = v1 / f; - Assert.AreEqual(0, r.horizontal, "4 5 6 / -inf H"); - Assert.AreEqual(0, r.vertical, "4 5 6 / -inf V"); - Assert.AreEqual(0, r.depth, "4 5 6 / -inf D"); - } - - [Test] - public void Dot() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - float f; - - f = Vector3.Dot(v1, v2); - Assert.AreEqual(32, f, "Dot(4 5 6, 1 2 3)"); - - v2 = new(-1, -2, -3); - f = Vector3.Dot(v1, v2); - Assert.AreEqual(-32, f, "Dot(4 5 6, -1 -2 -3)"); - - v2 = new(0, 0, 0); - f = Vector3.Dot(v1, v2); - Assert.AreEqual(0, f, "Dot(4 5 6, 0 0 0)"); - - v2 = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - f = Vector3.Dot(v1, v2); - Assert.AreEqual(float.PositiveInfinity, f, "Dot(4 5 6, inf inf inf)"); - - v2 = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - f = Vector3.Dot(v1, v2); - Assert.AreEqual(float.NegativeInfinity, f, "Dot(4 5 6, -inf -inf -inf)"); - } - - [Test] - public void Equality() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - bool r; - - r = v1 == v2; - Assert.IsFalse(r, "4 5 6 == 1 2 3"); - - v2 = new(4, 5, 6); - r = v1 == v2; - Assert.IsTrue(r, "4 5 6 == 4 5 6"); - - v2 = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - r = v1 == v2; - Assert.IsFalse(r, "4 5 6 == inf inf inf"); - - v1 = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - r = v1 == v2; - Assert.IsFalse(r, "-inf -inf -inf == inf inf inf"); - } - - [Test] - public void Distance() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - float f; - - f = Vector3.Distance(v1, v2); - Assert.AreEqual(5.19615221F, f, "Distance(4 5 6, 1 2 3)"); - - v2 = new(-1, -2, -3); - f = Vector3.Distance(v1, v2); - Assert.AreEqual(12.4498997F, f, "Distance(4 5 6, -1 -2 -3)"); - - v2 = new(0, 0, 0); - f = Vector3.Distance(v1, v2); - Assert.AreEqual(v1.magnitude, f, "Distance(4 5 6, 0 0 0)"); - - v2 = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - f = Vector3.Distance(v1, v2); - Assert.AreEqual(float.PositiveInfinity, f, "Distance(4 5 6, inf inf inf)"); - - v2 = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - f = Vector3.Distance(v1, v2); - Assert.AreEqual(float.PositiveInfinity, f, "Distance(4 5 6, -inf -inf -inf)"); - } - - [Test] - public void Cross() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r; - - r = Vector3.Cross(v1, v2); - Assert.AreEqual(3, r.horizontal, "Cross(4 5 6, 1 2 3) H"); - Assert.AreEqual(-6, r.vertical, "Cross(4 5 6, 1 2 3) V"); - Assert.AreEqual(3, r.depth, "Cross(4 5 6, 1 2 3) D"); - - v2 = new(-1, -2, -3); - r = Vector3.Cross(v1, v2); - Assert.AreEqual(-3, r.horizontal, "Cross(4 5 6, -1 -2 -3) H"); - Assert.AreEqual(6, r.vertical, "Cross(4 5 6, -1 -2 -3) V"); - Assert.AreEqual(-3, r.depth, "Cross(4 5 6, -1 -2 -3) D"); - - v2 = new(0, 0, 0); - r = Vector3.Cross(v1, v2); - Assert.AreEqual(0, r.horizontal, "Cross(4 5 6, 0 0 0) H"); - Assert.AreEqual(0, r.vertical, "Cross(4 5 6, 0 0 0) V"); - Assert.AreEqual(0, r.depth, "Cross(4 5 6, 0 0 0) D"); - - v2 = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - r = Vector3.Cross(v1, v2); - Assert.IsTrue(float.IsNaN(r.horizontal), "Cross(4 5 6, inf inf inf) H"); - Assert.IsTrue(float.IsNaN(r.vertical), "Cross(4 5 6, inf inf inf) V"); - Assert.IsTrue(float.IsNaN(r.depth), "Cross(4 5 6, inf inf inf) D"); - - v2 = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - r = Vector3.Cross(v1, v2); - Assert.IsTrue(float.IsNaN(r.horizontal), "Cross(4 5 6, -inf -inf -inf) H"); - Assert.IsTrue(float.IsNaN(r.vertical), "Cross(4 5 6, -inf -inf -inf) V"); - Assert.IsTrue(float.IsNaN(r.depth), "Cross(4 5 6, -inf -inf -inf) D"); - } - - [Test] - public void Project() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r; - - r = Vector3.Project(v1, v2); - Assert.AreEqual(2.28571439F, r.horizontal, "Project(4 5 6, 1 2 3) H"); - Assert.AreEqual(4.57142878F, r.vertical, "Project(4 5 6, 1 2 3) V"); - Assert.AreEqual(6.85714293F, r.depth, "Project(4 5 6, 1 2 3) D"); - - v2 = new(-1, -2, -3); - r = Vector3.Project(v1, v2); - Assert.AreEqual(2.28571439F, r.horizontal, "Project(4 5 6, -1 -2 -3) H"); - Assert.AreEqual(4.57142878F, r.vertical, "Project(4 5 6, -1 -2 -3) V"); - Assert.AreEqual(6.85714293F, r.depth, "Project(4 5 6, -1 -2 -3) D"); - - v2 = new(0, 0, 0); - r = Vector3.Project(v1, v2); - Assert.AreEqual(0, r.horizontal, "Project(4 5 6, 0 0 0) H"); - Assert.AreEqual(0, r.vertical, "Project(4 5 6, 0 0 0) V"); - Assert.AreEqual(0, r.depth, "Project(4 5 6, 0 0 0) D"); - - r = Vector3.Project(v2, v1); - Assert.AreEqual(0, r.horizontal, "Project(0 0 0, 4 5 6) H"); - Assert.AreEqual(0, r.vertical, "Project(0 0 0, 4 5 6) V"); - Assert.AreEqual(0, r.depth, "Project(0 0 0, 4 5 6) D"); - - v2 = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - r = Vector3.Project(v1, v2); - Assert.IsTrue(float.IsNaN(r.horizontal), "Project(4 5 6, inf inf inf) H"); - Assert.IsTrue(float.IsNaN(r.vertical), "Project(4 5 6, inf inf inf) V"); - Assert.IsTrue(float.IsNaN(r.depth), "Project(4 5 6, inf inf inf) D"); - - v2 = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - r = Vector3.Project(v1, v2); - Assert.IsTrue(float.IsNaN(r.horizontal), "Project(4 5 6, -inf -inf -inf) H"); - Assert.IsTrue(float.IsNaN(r.vertical), "Project(4 5 6, -inf -inf -inf) V"); - Assert.IsTrue(float.IsNaN(r.depth), "Project(4 5 6, -inf -inf -inf) D"); - } - - [Test] - public void ProjectOnPlane() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r; - - r = Vector3.ProjectOnPlane(v1, v2); - Assert.AreEqual(1.71428561F, r.horizontal, "ProjectOnPlane(4 5 6, 1 2 3) H"); - Assert.AreEqual(0.428571224F, r.vertical, "ProjectOnPlane(4 5 6, 1 2 3) V"); - Assert.AreEqual(-0.857142925F, r.depth, "ProjectOnPlane(4 5 6, 1 2 3) D"); - - v2 = new(-1, -2, -3); - r = Vector3.ProjectOnPlane(v1, v2); - Assert.AreEqual(1.71428561F, r.horizontal, "ProjectOnPlane(4 5 6, -1 -2 -3) H"); - Assert.AreEqual(0.428571224F, r.vertical, "ProjectOnPlane(4 5 6, -1 -2 -3) V"); - Assert.AreEqual(-0.857142925F, r.depth, "ProjectOnPlane(4 5 6, -1 -2 -3) D"); - - v2 = new(0, 0, 0); - r = Vector3.ProjectOnPlane(v1, v2); - Assert.AreEqual(4, r.horizontal, "ProjectOnPlane(4 5 6, 0 0 0) H"); - Assert.AreEqual(5, r.vertical, "ProjectOnPlane(4 5 6, 0 0 0) V"); - Assert.AreEqual(6, r.depth, "ProjectOnPlane(4 5 6, 0 0 0) D"); - - r = Vector3.ProjectOnPlane(v2, v1); - Assert.AreEqual(0, r.horizontal, "ProjectOnPlane(0 0 0, 4 5 6) H"); - Assert.AreEqual(0, r.vertical, "ProjectOnPlane(0 0 0, 4 5 6) V"); - Assert.AreEqual(0, r.depth, "ProjectOnPlane(0 0 0, 4 5 6) D"); - - v2 = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - r = Vector3.ProjectOnPlane(v1, v2); - Assert.IsTrue(float.IsNaN(r.horizontal), "ProjectOnPlane(4 5 6, inf inf inf) H"); - Assert.IsTrue(float.IsNaN(r.vertical), "ProjectOnPlane(4 5 6, inf inf inf) V"); - Assert.IsTrue(float.IsNaN(r.depth), "ProjectOnPlane(4 5 6, inf inf inf) D"); - - v2 = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - r = Vector3.ProjectOnPlane(v1, v2); - Assert.IsTrue(float.IsNaN(r.horizontal), "ProjectOnPlane(4 5 6, -inf -inf -inf) H"); - Assert.IsTrue(float.IsNaN(r.vertical), "ProjectOnPlane(4 5 6, -inf -inf -inf) V"); - Assert.IsTrue(float.IsNaN(r.depth), "ProjectOnPlane(4 5 6, -inf -inf -inf) D"); - } - - [Test] - public void UnsignedAngle() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - AngleFloat a; - - a = Vector3.UnsignedAngle(v1, v2); - Assert.AreEqual(12.9331379F, a.inDegrees, "Angle(4 5 6, 1 2 3)"); - - v2 = new(-1, -2, -3); - a = Vector3.UnsignedAngle(v1, v2); - Assert.AreEqual(167.066849F, a.inDegrees, "Angle(4 5 6, -1 -2 -3)"); - - v2 = new(0, 0, 0); - a = Vector3.UnsignedAngle(v1, v2); - Assert.AreEqual(0, a.inDegrees, "Angle(4 5 6, 0 0 0)"); - - v2 = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - a = Vector3.UnsignedAngle(v1, v2); - Assert.IsTrue(float.IsNaN(a.inDegrees), "Angle(4 5 6, inf inf inf)"); - - v2 = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - a = Vector3.UnsignedAngle(v1, v2); - Assert.IsTrue(float.IsNaN(a.inDegrees), "Angle(4 5 6, inf inf inf)"); - } - - [Test] - public void SignedAngle() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 v3 = new(7, 8, -9); - AngleFloat a; - - a = Vector3.SignedAngle(v1, v2, v3); - Assert.AreEqual(-12.9331379F, a.inDegrees, "SignedAngle(4 5 6, 1 2 3, 7 8 -9)"); - - v2 = new(-1, -2, -3); - a = Vector3.SignedAngle(v1, v2, v3); - Assert.AreEqual(167.066849F, a.inDegrees, "SignedAngle(4 5 6, -1 -2 -3, 7 8 -9)"); - - v2 = new(0, 0, 0); - a = Vector3.SignedAngle(v1, v2, v3); - Assert.AreEqual(0, a.inDegrees, "SignedAngle(4 5 6, 0 0 0, 7 8 -9)"); - - v2 = new(1, 2, 3); - v3 = new(-7, -8, 9); - a = Vector3.SignedAngle(v1, v2, v3); - Assert.AreEqual(12.9331379F, a.inDegrees, "SignedAngle(4 5 6, 1 2 3, -7 -8 9)"); - - v3 = new(0, 0, 0); - a = Vector3.SignedAngle(v1, v2, v3); - Assert.AreEqual(0, a.inDegrees, "SignedAngle(4 5 6, 1 2 3, 0 0 0)"); - - v2 = new(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity); - a = Vector3.SignedAngle(v1, v2, v3); - Assert.IsTrue(float.IsNaN(a.inDegrees), "SignedAngle(4 5 6, inf inf inf, 0 0 0)"); - - v2 = new(float.NegativeInfinity, float.NegativeInfinity, float.NegativeInfinity); - a = Vector3.SignedAngle(v1, v2, v3); - Assert.IsTrue(float.IsNaN(a.inDegrees), "SignedAngle(4 5 6, -inf -inf -inf, 0 0 0)"); - } - - [Test] - public void Lerp() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r; - - r = Vector3.Lerp(v1, v2, 0); - Assert.AreEqual(0, Vector3.Distance(r, v1), 0); - - r = Vector3.Lerp(v1, v2, 1); - Assert.AreEqual(0, Vector3.Distance(r, v2), 0); - - r = Vector3.Lerp(v1, v2, 0.5f); - Assert.AreEqual(0, Vector3.Distance(r, new Vector3(2.5f, 3.5f, 4.5f)), 0); - - r = Vector3.Lerp(v1, v2, -1); - Assert.AreEqual(0, Vector3.Distance(r, new Vector3(7, 8, 9)), 0); - - r = Vector3.Lerp(v1, v2, 2); - Assert.AreEqual(0, Vector3.Distance(r, new Vector3(-2, -1, 0)), 0); - } - } -} -#endif \ No newline at end of file diff --git a/Runtime/LinearAlgebra/test/Vector3IntTest.cs b/Runtime/LinearAlgebra/test/Vector3IntTest.cs deleted file mode 100644 index b718178..0000000 --- a/Runtime/LinearAlgebra/test/Vector3IntTest.cs +++ /dev/null @@ -1,349 +0,0 @@ -#if !UNITY_5_6_OR_NEWER -using NUnit.Framework; - -namespace LinearAlgebra.Test { - using Vector3 = Vector3Int; - - public class Vector3IntTest { - - [Test] - public void Equality() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - - Assert.IsFalse(v1 == v2, "4 5 6 == 1 2 3"); - Assert.IsTrue(v1 != v2, "4 5 6 != 1 2 3"); - - v2 = new(4, 5, 6); - Assert.IsTrue(v1 == v2, "4 5 6 == 4 5 6"); - Assert.IsFalse(v1 != v2, "4 5 6 != 4 5 6"); - } - - [Test] - public void Magnitude() { - Vector3 v = new(1, 2, 3); - float m = 0; - - m = v.magnitude; - Assert.AreEqual(3.7416575f, m, "magnitude 1 2 3"); - - m = Vector3.MagnitudeOf(v); - Assert.AreEqual(3.7416575f, m, "MagnitudeOf 1 2 3"); - - v = new(-1, -2, -3); - m = v.magnitude; - Assert.AreEqual(3.7416575f, m, "magnitude -1 -2 -3"); - - v = new(0, 0, 0); - m = v.magnitude; - Assert.AreEqual(0, m, "magnitude 0 0 0"); - - // Infinity tests are still missing - } - - [Test] - public void SqrMagnitude() { - Vector3 v = new(1, 2, 3); - float m = 0; - - m = v.sqrMagnitude; - Assert.AreEqual(14, m, "sqrMagnitude 1 2 3"); - - m = Vector3.SqrMagnitudeOf(v); - Assert.AreEqual(14, m, "SqrMagnitudeOf 1 2 3"); - - v = new(-1, -2, -3); - m = v.sqrMagnitude; - Assert.AreEqual(14, m, "sqrMagnitude -1 -2 -3"); - - v = new(0, 0, 0); - m = v.sqrMagnitude; - Assert.AreEqual(0, m, "sqrMagnitude 0 0 0"); - - // Infinity tests are still missing - } - - [Test] - public void Distance() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - float f; - - f = Vector3.Distance(v1, v2); - Assert.AreEqual(5.19615221F, f, "Distance(4 5 6, 1 2 3)"); - - v2 = new(-1, -2, -3); - f = Vector3.Distance(v1, v2); - Assert.AreEqual(12.4498997F, f, "Distance(4 5 6, -1 -2 -3)"); - - v2 = new(0, 0, 0); - f = Vector3.Distance(v1, v2); - Assert.AreEqual(v1.magnitude, f, "Distance(4 5 6, 0 0 0)"); - } - - [Test] - public void Normalize() { - Vector3 v = new(0, 2, 0); - Vector3Float r; - - r = v.normalized; - //Assert.AreEqual(new Vector3(0, 1, 0), r, "normalized 0 2 0"); - Assert.AreEqual(0, r.horizontal, "normalized 0 2 0"); - Assert.AreEqual(1, r.vertical, "normalized 0 2 0"); - Assert.AreEqual(0, r.depth, "normalized 0 2 0"); - - r = Vector3.Normalize(v); - Assert.AreEqual(new Vector3Float(0, 1, 0), r, "Normalize 0 2 0"); - - v = new(0, -2, 0); - r = v.normalized; - Assert.AreEqual(new Vector3Float(0, -1, 0), r, "normalized 0 -2 0"); - v = new(0, 0, 0); - r = v.normalized; - Assert.AreEqual(new Vector3Float(0, 0, 0), r, "normalized 0 0 0"); - } - - [Test] - public void Negate() { - Vector3 v = new(4, 5, 6); - Vector3 r; - - r = -v; - Assert.AreEqual(-4, r.horizontal, "- 4 5 6 H"); - Assert.AreEqual(-5, r.vertical, "- 4 5 6 V"); - Assert.AreEqual(-6, r.depth, "- 4 5 6 D"); - - v = new(-4, -5, -6); - r = -v; - Assert.AreEqual(4, r.horizontal, "- -4 -5 -6 H"); - Assert.AreEqual(5, r.vertical, "- -4 -5 -6 V"); - Assert.AreEqual(6, r.depth, "- -4 -5 -6 D"); - - v = new(0, 0, 0); - r = -v; - Assert.AreEqual(new Vector3(0, 0, 0), r, "- 0 0 0"); - Assert.AreEqual(0, r.horizontal, "- 0 0 0 H"); - Assert.AreEqual(0, r.vertical, "- 0 0 0 V"); - Assert.AreEqual(0, r.depth, "- 0 0 0 D"); - } - - [Test] - public void Subtract() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r = Vector3.zero; - - r = v1 - v2; - Assert.IsTrue(r == new Vector3(3, 3, 3), "4 5 6 - 1 2 3"); - - v2 = new(-1, -2, -3); - r = v1 - v2; - Assert.IsTrue(r == new Vector3(5, 7, 9), "4 5 6 - -1 -2 -3"); - - v2 = new(4, 5, 6); - r = v1 - v2; - Assert.IsTrue(r == new Vector3(0, 0, 0), "4 5 6 - 4 5 6"); - r = v1; - r -= v2; - Assert.AreEqual(r, new Vector3(0, 0, 0), "4 5 6 - 4 5 6"); - - v2 = new(0, 0, 0); - r = v1 - v2; - Assert.AreEqual(r, new Vector3(4, 5, 6), "4 5 6 - 0 0 0"); - r -= v2; - Assert.AreEqual(r, new Vector3(4, 5, 6), "4 5 6 - 0 0 0"); - - // Infinity tests are still missing - } - - [Test] - public void Addition() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r = Vector3.zero; - - r = v1 + v2; - Assert.IsTrue(r == new Vector3(5, 7, 9), "4 5 6 + 1 2 3"); - - v2 = new(-1, -2, -3); - r = v1 + v2; - Assert.IsTrue(r == new Vector3(3, 3, 3), "4 5 6 + -1 -2 -3"); - r = v1; - r += v2; - Assert.AreEqual(r, new Vector3(3, 3, 3), "4 5 6 + -1 -2 -3"); - - v2 = new(0, 0, 0); - r = v1 + v2; - Assert.AreEqual(r, new Vector3(4, 5, 6), "4 5 6 + 0 0 0"); - r += v2; - Assert.AreEqual(r, new Vector3(4, 5, 6), "4 5 6 + 0 0 0"); - - // Infinity tests are still missing - } - - [Test] - public void Scale() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r; - - r = Vector3.Scale(v1, v2); - Assert.AreEqual(4, r.horizontal, "Scale 4 5 6 , 1 2 3 H"); - Assert.AreEqual(10, r.vertical, "Scale 4 5 6 , 1 2 3 V"); - Assert.AreEqual(18, r.depth, "Scale 4 5 6 , 1 2 3 D"); - - v2 = new(-1, -2, -3); - r = Vector3.Scale(v1, v2); - Assert.AreEqual(-4, r.horizontal, "Scale 4 5 6 , -1 -2 -3 H"); - Assert.AreEqual(-10, r.vertical, "Scale 4 5 6 , -1 -2 -3 V"); - Assert.AreEqual(-18, r.depth, "Scale 4 5 6 , -1 -2 -3 D"); - - v2 = new(0, 0, 0); - r = Vector3.Scale(v1, v2); - Assert.AreEqual(0, r.horizontal, "Scale 4 5 6 , 0 0 0 H"); - Assert.AreEqual(0, r.vertical, "Scale 4 5 6 , 0 0 0 V"); - Assert.AreEqual(0, r.depth, "Scale 4 5 6 , 0 0 0 D"); - } - - [Test] - public void Multiply() { - Vector3 v1 = new(4, 5, 6); - int f = 3; - Vector3 r; - - r = v1 * f; - Assert.AreEqual(12, r.horizontal, "4 5 6 * 3 H"); - Assert.AreEqual(15, r.vertical, "4 5 6 * 3 V"); - Assert.AreEqual(18, r.depth, "4 5 6 * 3 D"); - - r = f * v1; - Assert.AreEqual(12, r.horizontal, "3 * 4 5 6 H"); - Assert.AreEqual(15, r.vertical, "3 * 4 5 6 V"); - Assert.AreEqual(18, r.depth, "3 * 4 5 6 D"); - - f = -3; - r = v1 * f; - Assert.AreEqual(-12, r.horizontal, "4 5 6 * -3 H"); - Assert.AreEqual(-15, r.vertical, "4 5 6 * -3 V"); - Assert.AreEqual(-18, r.depth, "4 5 6 * -3 D"); - - f = 0; - r = v1 * f; - Assert.AreEqual(0, r.horizontal, "4 5 6 * 0 H"); - Assert.AreEqual(0, r.vertical, "4 5 6 * 0 V"); - Assert.AreEqual(0, r.depth, "4 5 6 * 0 D"); - } - - [Test] - public void Divide() { - Vector3 v1 = new(4, 5, 6); - int f = 2; - Vector3 r; - - r = v1 / f; - Assert.AreEqual(2, r.horizontal, "4 5 6 / 2 H"); - Assert.AreEqual(2, r.vertical, "4 5 6 / 2 V"); - Assert.AreEqual(3, r.depth, "4 5 6 / 2 D"); - - f = -2; - r = v1 / f; - Assert.AreEqual(-2, r.horizontal, "4 5 6 / -2 H"); - Assert.AreEqual(-2, r.vertical, "4 5 6 / -2 V"); - Assert.AreEqual(-3, r.depth, "4 5 6 / -2 D"); - - Assert.Throws(() => { - f = 0; - r = v1 / f; - }); - } - - [Test] - public void Dot() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - float f; - - f = Vector3.Dot(v1, v2); - Assert.AreEqual(32, f, "Dot(4 5 6, 1 2 3)"); - - v2 = new(-1, -2, -3); - f = Vector3.Dot(v1, v2); - Assert.AreEqual(-32, f, "Dot(4 5 6, -1 -2 -3)"); - - v2 = new(0, 0, 0); - f = Vector3.Dot(v1, v2); - Assert.AreEqual(0, f, "Dot(4 5 6, 0 0 0)"); - } - - [Test] - public void Cross() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 r; - - r = Vector3.Cross(v1, v2); - Assert.AreEqual(3, r.horizontal, "Cross(4 5 6, 1 2 3) H"); - Assert.AreEqual(-6, r.vertical, "Cross(4 5 6, 1 2 3) V"); - Assert.AreEqual(3, r.depth, "Cross(4 5 6, 1 2 3) D"); - - v2 = new(-1, -2, -3); - r = Vector3.Cross(v1, v2); - Assert.AreEqual(-3, r.horizontal, "Cross(4 5 6, -1 -2 -3) H"); - Assert.AreEqual(6, r.vertical, "Cross(4 5 6, -1 -2 -3) V"); - Assert.AreEqual(-3, r.depth, "Cross(4 5 6, -1 -2 -3) D"); - - v2 = new(0, 0, 0); - r = Vector3.Cross(v1, v2); - Assert.AreEqual(0, r.horizontal, "Cross(4 5 6, 0 0 0) H"); - Assert.AreEqual(0, r.vertical, "Cross(4 5 6, 0 0 0) V"); - Assert.AreEqual(0, r.depth, "Cross(4 5 6, 0 0 0) D"); - } - - [Test] - public void UnsignedAngle() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - AngleFloat a; - - a = Vector3.UnsignedAngle(v1, v2); - Assert.AreEqual(12.9331379F, a.inDegrees, "Angle(4 5 6, 1 2 3)"); - - v2 = new(-1, -2, -3); - a = Vector3.UnsignedAngle(v1, v2); - Assert.AreEqual(167.066849F, a.inDegrees, "Angle(4 5 6, -1 -2 -3)"); - - v2 = new(0, 0, 0); - a = Vector3.UnsignedAngle(v1, v2); - Assert.AreEqual(0, a.inDegrees, "Angle(4 5 6, 0 0 0)"); - } - - [Test] - public void SignedAngle() { - Vector3 v1 = new(4, 5, 6); - Vector3 v2 = new(1, 2, 3); - Vector3 v3 = new(7, 8, -9); - AngleFloat a; - - a = Vector3.SignedAngle(v1, v2, v3); - Assert.AreEqual(-12.9331379F, a.inDegrees, "SignedAngle(4 5 6, 1 2 3, 7 8 -9)"); - - v2 = new(-1, -2, -3); - a = Vector3.SignedAngle(v1, v2, v3); - Assert.AreEqual(167.066849F, a.inDegrees, "SignedAngle(4 5 6, -1 -2 -3, 7 8 -9)"); - - v2 = new(0, 0, 0); - a = Vector3.SignedAngle(v1, v2, v3); - Assert.AreEqual(0, a.inDegrees, "SignedAngle(4 5 6, 0 0 0, 7 8 -9)"); - - v2 = new(1, 2, 3); - v3 = new(-7, -8, 9); - a = Vector3.SignedAngle(v1, v2, v3); - Assert.AreEqual(12.9331379F, a.inDegrees, "SignedAngle(4 5 6, 1 2 3, -7 -8 9)"); - - v3 = new(0, 0, 0); - a = Vector3.SignedAngle(v1, v2, v3); - Assert.AreEqual(0, a.inDegrees, "SignedAngle(4 5 6, 1 2 3, 0 0 0)"); - } - } -} -#endif \ No newline at end of file diff --git a/Runtime/Scripts/Core/Cluster.cs b/Runtime/Scripts/Core/Cluster.cs index be51790..2d5a1f7 100644 --- a/Runtime/Scripts/Core/Cluster.cs +++ b/Runtime/Scripts/Core/Cluster.cs @@ -17,6 +17,10 @@ namespace NanoBrain { public class Cluster : Nucleus { // It may be that clusters will not be nuclei anymore in the future.... + /// + /// The prefab used to create this cluster + /// + /// Cluster should always be created from prefabs public ClusterPrefab prefab; /// @@ -31,20 +35,37 @@ namespace NanoBrain { } } - // This should not be serialized - //[SerializeReference] + /// + /// All cluster instance of a multi-cluster + /// + /// A cluster is a multi-cluster when there is more than one instance. + /// The actual instances are only created at runtime. + /// The value instanceCount determines how many instances will be present at runtime. [NonSerialized] - public Cluster[] siblingClusters; - // This serialization should be enough + public Cluster[] instances; + + /// + /// The number of cluster instances in a multi-cluster + /// + /// A cluster is a multi-clsuter when there is more than one instance. [SerializeField] public int instanceCount = 1; + /// + /// The mapping from things to cluster instances + /// + /// In a multi-cluster each instance can be used for a thing. + /// Cluster instance may also not (yet) be mapped to a thing. public Dictionary thingClusters = new(); + /// + /// All nuclei in this cluster + /// [SerializeReference] public List nuclei = new(); // the nuclei sorted using topological sorting // to ensure that the cluster is computer in the right order - public List sortedNuclei; + + //public List sortedNuclei; #region Init @@ -60,8 +81,8 @@ namespace NanoBrain { this.parent = parent; this.parent?.nuclei.Add(this); ClonePrefab(); - _ = this.inputs; - this.sortedNuclei = TopologicalSort(this.nuclei); + // _ = this.inputs; + //this.sortedNuclei = TopologicalSort(this.nuclei); } /// @@ -75,12 +96,9 @@ namespace NanoBrain { if (parent != null) this.parent = parent.cluster; - // if (this.parent.prefab != null) - // this.parent.prefab.cluster.nuclei.Add(this); - ClonePrefab(); - _ = this.inputs; - this.sortedNuclei = TopologicalSort(this.nuclei); + // _ = this.inputs; + //this.sortedNuclei = TopologicalSort(this.nuclei); } /// @@ -129,7 +147,7 @@ namespace NanoBrain { //Debug.Log($"Add synapse {clonedCluster.name}.{clonedSender.name} -> {clonedNeuron.name} [{clonedSender.receivers.Count}]"); } else { - int ix = GetNucleusIndex(prefabNuclei, prefabSynapse.neuron); + int ix = GetNucleusIndex(this.prefab.cluster.nuclei, prefabSynapse.neuron); if (ix < 0) continue; if (clonedNuclei[ix] is not Neuron clonedSender) @@ -164,7 +182,7 @@ namespace NanoBrain { } Cluster[] siblingClusters = siblings.ToArray(); foreach (Cluster sibling in siblings) - sibling.siblingClusters = siblingClusters; + sibling.instances = siblingClusters; } // Ensure that all neurons are computed to initialize bias @@ -175,123 +193,88 @@ namespace NanoBrain { } } - // private void CloneSynapses(Neuron prefabNeuron, Neuron clonedNeuron) { - // foreach (Synapse prefabSynapse in prefabNeuron.synapses) { - // Neuron synapseNeuron = prefabSynapse.neuron; - // if (synapseNeuron.parent.prefab != null && synapseNeuron.parent.prefab != this.prefab) { - // // Neuron is in another cluster, find the cloned cluster first - // ClusterPrefab prefabCluster = synapseNeuron.parent.prefab; - // Cluster clonedCluster = this.nuclei.Find(n => n.name == prefabCluster.name) as Cluster; - // if (clonedCluster == null) - // continue; + // /// + // /// Sort the nuclei in a correct evaluation order + // /// + // /// + // /// + // /// + // private List TopologicalSort(List nodes) { + // Dictionary inDegree = new(); + // foreach (Nucleus node in nodes) + // inDegree[node] = 0; // Initialize in-degree to zero - // // Now find the neuron in that cloned cluster - // int neuronIx = GetNucleusIndex(prefabCluster.cluster.nuclei, prefabSynapse.neuron.name); - // if (neuronIx < 0) - // // Could not find the neuron in the prefab cluster - // continue; - // if (clonedCluster.nuclei[neuronIx] is not Neuron clonedSender) - // // Could not find the neuron in the cloned cluster - // continue; - - // clonedSender.AddReceiver(clonedNeuron, prefabSynapse.weight); - // //Debug.Log($"Add synapse {clonedCluster.name}.{clonedSender.name} -> {clonedNeuron.name} [{clonedSender.receivers.Count}]"); + // // Calculate in-degrees + // foreach (Nucleus node in nodes) { + // if (node is Cluster cluster) { + // foreach (Nucleus receiver in cluster.CollectReceivers()) + // inDegree[receiver]++; // } - // else { - // Neuron clonedSender = this.nuclei.Find(n => n.name == prefabSynapse.neuron.name) as Neuron; - // // Copy the receivers which will also create the synapse - // clonedSender.AddReceiver(clonedNeuron, prefabSynapse.weight); - // // Debug.Log($"Add synapse {clonedSender.name} -> {clonedNeuron.name}"); + // else if (node is Neuron neuron) { + // foreach (Nucleus receiver in neuron.receivers) + // inDegree[receiver]++; // } // } + // Queue queue = new(); + // foreach (Nucleus node in nodes) { + // if (inDegree[node] == 0) // Nodes with no dependencies + // queue.Enqueue(node); + // } + // // The queue basically stores all input nuclei? + + // List sortedOrder = new(); + // while (queue.Count > 0) { + // Nucleus current = queue.Dequeue(); + // sortedOrder.Add(current); // Process the node + + // if (current is Neuron neuron) { + // foreach (Nucleus receiver in neuron.receivers) { + // inDegree[receiver]--; + // if (inDegree[receiver] == 0) // If all dependencies resolved + // queue.Enqueue(receiver); + // } + // } + // else if (current is Cluster cluster) { + // foreach (Nucleus receiver in cluster.CollectReceivers()) { + // inDegree[receiver]--; + // if (inDegree[receiver] == 0) // If all dependencies resolved + // queue.Enqueue(receiver); + // } + // } + // } + + // // Check for cycles in the graph + // if (sortedOrder.Count != nodes.Count) + // throw new InvalidOperationException("Graph is not a DAG; a cycle exists."); + + // return sortedOrder; // } - /// - /// Sort the nuclei in a correct evaluation order - /// - /// - /// - /// - private List TopologicalSort(List nodes) { - Dictionary inDegree = new(); - foreach (Nucleus node in nodes) - inDegree[node] = 0; // Initialize in-degree to zero - // Calculate in-degrees - foreach (Nucleus node in nodes) { - if (node is Cluster cluster) { - foreach (Nucleus receiver in cluster.CollectReceivers()) - inDegree[receiver]++; - } - else if (node is Neuron neuron) { - foreach (Nucleus receiver in neuron.receivers) - inDegree[receiver]++; - } - } + // public override Nucleus Clone(ClusterPrefab parent) { + // Cluster clone = new(this.prefab, parent); - Queue queue = new(); - foreach (Nucleus node in nodes) { - if (inDegree[node] == 0) // Nodes with no dependencies - queue.Enqueue(node); - } - // The queue basically stores all input nuclei? + // foreach (Nucleus nucleus in this.nuclei) { + // if (nucleus is Neuron output) { + // foreach (Nucleus receiver in output.receivers) { + // int ix = GetNucleusIndex(this.nuclei, output); + // Debug.Log($"{output.name} -> {receiver.name}: {ix}"); + // if (ix < 0) + // continue; - List sortedOrder = new(); - while (queue.Count > 0) { - Nucleus current = queue.Dequeue(); - sortedOrder.Add(current); // Process the node + // if (clone.nuclei[ix] is not Neuron clonedOutput) + // continue; - if (current is Neuron neuron) { - foreach (Nucleus receiver in neuron.receivers) { - inDegree[receiver]--; - if (inDegree[receiver] == 0) // If all dependencies resolved - queue.Enqueue(receiver); - } - } - else if (current is Cluster cluster) { - foreach (Nucleus receiver in cluster.CollectReceivers()) { - inDegree[receiver]--; - if (inDegree[receiver] == 0) // If all dependencies resolved - queue.Enqueue(receiver); - } - } - } + // clonedOutput.AddReceiver(receiver); + // } + // } + // } - // Check for cycles in the graph - if (sortedOrder.Count != nodes.Count) - throw new InvalidOperationException("Graph is not a DAG; a cycle exists."); - - return sortedOrder; - } - - public override Nucleus Clone(ClusterPrefab parent) { - Cluster clone = new(this.prefab, parent); - - // foreach (Synapse synapse in this.synapses) { - // Synapse clonedSynapse = clone.AddSynapse(synapse.neuron); - // clonedSynapse.weight = synapse.weight; - // } - - foreach (Nucleus nucleus in this.nuclei) { - if (nucleus is Neuron output) { - foreach (Nucleus receiver in output.receivers) { - int ix = GetNucleusIndex(this.nuclei, output); - Debug.Log($"{output.name} -> {receiver.name}: {ix}"); - if (ix < 0) - continue; - - if (clone.nuclei[ix] is not Neuron clonedOutput) - continue; - - clonedOutput.AddReceiver(receiver); - } - } - } - - return clone; - } + // return clone; + // } + /// \copydoc NanoBrain::Nucleus::ShallowCloneTo public override Nucleus ShallowCloneTo(Cluster parent) { // Clusters should not be cloned, but instantiated from the prefab.... Cluster clone = new(this.prefab, parent) { @@ -340,14 +323,12 @@ namespace NanoBrain { } - protected int GetNucleusIndex(Nucleus[] nuclei, Nucleus nucleus) { - for (int i = 0; i < nuclei.Length; i++) { - if (nucleus == nuclei[i]) - return i; - } - return -1; - } - + /// + /// Get the index of a nucleus in a list of nuclei + /// + /// The list of nuclei to search + /// The nucleus to find + /// The index of the nucleus in the list or -1 when it has not been found public static int GetNucleusIndex(List nuclei, Nucleus nucleus) { int i = 0; foreach (Nucleus nucleiElement in nuclei) { @@ -359,6 +340,12 @@ namespace NanoBrain { return -1; } + /// + /// Get the index of a nucleus with the given name in a list of nuclei + /// + /// The list of nuclei to search + /// The name of the nucleus to find + /// The index of the nucleus in the list or -1 when it has not been found public static int GetNucleusIndex(List nuclei, string nucleusName) { int i = 0; foreach (Nucleus nucleiElement in nuclei) { @@ -370,28 +357,39 @@ namespace NanoBrain { return -1; } - #endregion Init #region Cluster Array + /// + /// Increase the number of instances in an multi-cluster + /// + /// /remark Note this does not create the instances. + /// This is only intended to be used for prefabs. public void AddInstance() { this.instanceCount++; } + /// + /// Create an new instance in a multi-cluster + /// + /// The prefab to use to create the new instance + /// /remark This does not change the instanceCount. + /// It should only be used at runtime. public void AddInstance(ClusterPrefab prefab) { // Ensure siblingClusters exists - if (this.siblingClusters == null || this.siblingClusters.Length == 0) - this.siblingClusters = new Cluster[1] { this }; + if (this.instances == null || this.instances.Length == 0) + this.instances = new Cluster[1] { this }; // Prepare the new array - int newLength = this.siblingClusters.Length + 1; + int newLength = this.instances.Length + 1; Cluster[] newSiblings = new Cluster[newLength]; for (int i = 0; i < newSiblings.Length - 1; i++) - newSiblings[i] = this.siblingClusters[i]; + newSiblings[i] = this.instances[i]; - Cluster newCluster = this.Clone(prefab) as Cluster; + //Cluster newCluster = this.Clone(prefab) as Cluster; + Cluster newCluster = new(prefab); string baseName = this.name; int colonPos = baseName.IndexOf(":"); if (colonPos > 0) @@ -401,66 +399,37 @@ namespace NanoBrain { // All siblingClusters need to user this array! foreach (Cluster sibling in newSiblings) - sibling.siblingClusters = newSiblings; + sibling.instances = newSiblings; } + /// + /// Decrease the number of instance in a multi-cluster + /// public void RemoveInstance() { if (instanceCount > 1) instanceCount--; else { - if (this.siblingClusters == null || this.siblingClusters.Length <= 1) + // It is not clear to me why we update the siblingClusters when the + // instanceCount <= 1.... + if (this.instances == null || this.instances.Length <= 1) return; // Prepare the new array - int newLength = this.siblingClusters.Length - 1; + int newLength = this.instances.Length - 1; Cluster[] newClusters = new Cluster[newLength]; for (int i = 0; i < newLength; i++) - newClusters[i] = this.siblingClusters[i]; + newClusters[i] = this.instances[i]; - Neuron.Delete(this.siblingClusters[^1]); - this.siblingClusters = newClusters; + Neuron.Delete(this.instances[^1]); + this.instances = newClusters; } } - // public virtual Cluster GetThingCluster() { - // Cluster selectedCluster = SelectCluster(); - // return selectedCluster; - // } - // public virtual Cluster GetThingCluster(int thingId, string thingName = null) { - // if (thingClusters.TryGetValue(thingId, out Cluster cluster)) - // return cluster; - - // Cluster selectedCluster = SelectCluster(); - // selectedCluster.name = baseName + ": " + thingName; - // thingClusters[thingId] = selectedCluster; - // return selectedCluster; - // } - - // private Cluster SelectCluster() { - // if (this.siblingClusters == null) - // return this; - - // // Find a sleeping cluster - // // foreach (Cluster cluster in this.siblingClusters) { - // // if (cluster.defaultOutput.isSleeping) { - // // RemoveThingCluster(cluster); - // // return cluster; - // // } - // // } - - // // Find longest unused cluster - // // Note this uses the default output... - // Cluster unusedCluster = this.siblingClusters[0]; - // for (int ix = 1; ix < this.siblingClusters.Length; ix++) { - // if (this.siblingClusters[ix].defaultOutput.lastUpdate < unusedCluster.defaultOutput.lastUpdate) - // unusedCluster = this.siblingClusters[ix]; - // } - - // RemoveThingCluster(unusedCluster); - // return unusedCluster; - // } - + /// + /// Remove a mapping from a thing to a cluster such that it becomes available for new things + /// + /// The multi-cluster instance which not no longer be mapped private void RemoveThingCluster(Cluster cluster) { List keysToRemove = new(); foreach (KeyValuePair kvp in thingClusters) { @@ -472,46 +441,53 @@ namespace NanoBrain { thingClusters.Remove(thingId); } - public bool SameSiblingsAs(Cluster[] otherSiblingClusters) { - if (this.siblingClusters == null) - return false; - for (int ix = 0; ix < this.siblingClusters.Length; ix++) { - if (this.siblingClusters[ix] != otherSiblingClusters[ix]) - return false; - } - return true; - } + // public bool SameSiblingsAs(Cluster[] otherSiblingClusters) { + // if (this.siblingClusters == null) + // return false; + // for (int ix = 0; ix < this.siblingClusters.Length; ix++) { + // if (this.siblingClusters[ix] != otherSiblingClusters[ix]) + // return false; + // } + // return true; + // } - public void AddArrayReceiver(Nucleus receiverToAdd, float weight = 1) { - this.defaultOutput.AddReceiver(receiverToAdd, weight); - // foreach (Cluster cluster in this.siblingClusters) { - // cluster.defaultOutput.AddReceiver(receiverToAdd, weight); - // } + // public void AddArrayReceiver(Nucleus receiverToAdd, float weight = 1) { + // this.defaultOutput.AddReceiver(receiverToAdd, weight); + // // foreach (Cluster cluster in this.siblingClusters) { + // // cluster.defaultOutput.AddReceiver(receiverToAdd, weight); + // // } - } + // } #endregion ClusterArray - public List _inputs = null; - public virtual List inputs { - get { - if (this._inputs == null) { - this._inputs = new(); - foreach (Nucleus nucleus in this.nuclei) { - if (nucleus is not Neuron neuron) - continue; - // inputs have no synapses - if (neuron.synapses.Count == 0) - this._inputs.Add(nucleus); - } - RefreshComputeOrders(); - } - return this._inputs; - } - } + // private List _inputs = null; + // public virtual List inputs { + // get { + // if (this._inputs == null) { + // this._inputs = new(); + // foreach (Nucleus nucleus in this.nuclei) { + // if (nucleus is not Neuron neuron) + // continue; + // // inputs have no synapses + // if (neuron.synapses.Count == 0) + // this._inputs.Add(nucleus); + // } + // RefreshComputeOrders(); + // } + // return this._inputs; + // } + // } + + /// + /// This gives the order in which nuclei should be computed when a nucleus is updated + /// private Dictionary> _computeOrders; + /// + /// This gives the order in which nuclei should be computed when a nucleus is updated + /// public Dictionary> computeOrders { get { if (_computeOrders == null || _computeOrders.Count == 0) { @@ -522,6 +498,12 @@ namespace NanoBrain { return _computeOrders; } } + /// + /// Refresh the order in which neurons should be computed + /// + public void RefreshComputeOrders() { + this._computeOrders = null; + } public void RefreshComputeOrders() { this._computeOrders = null; } @@ -588,6 +570,9 @@ namespace NanoBrain { return sortedOrder; } + /// + /// The first nucleus in a cluster is the default output + /// public virtual Neuron defaultOutput {//=> this.nuclei[0] as Nucleus; get { if (this.nuclei.Count > 0) @@ -595,7 +580,16 @@ namespace NanoBrain { return null; } } + + /// + /// The neurons without outgoing connections + /// + /// These neurons can potentially be connected to neurons in other clusters protected List _outputs = null; + /// + /// The neurons without outgoing connections + /// + /// These neurons can potentially be connected to neurons in other clusters public List outputs { get { if (this._outputs == null || this._outputs.Count == 0) { @@ -608,10 +602,19 @@ namespace NanoBrain { return this._outputs; } } + /// + /// Reset the list of outputs such that they will be re-determined + /// public void RefreshOutputs() { this._outputs = null; } + /// + /// Try to find a nucleus in this cluster + /// + /// The name of the nucleus to find + /// The found nucleus or null if it is not found + /// True when the nucleus is found, false otherwise public bool TryGetNucleus(string nucleusName, out Nucleus foundNucleus) { foreach (Nucleus receptor in this.nuclei) { if (receptor is Nucleus nucleus) @@ -624,6 +627,11 @@ namespace NanoBrain { return false; } + /// + /// Get a nucleus in this cluster + /// + /// The name of the nucleus to find + /// The found nucleus or null when it is not found public Nucleus GetNucleus(string nucleusName) { int dotPosition = nucleusName.IndexOf('.'); if (dotPosition >= 0) { @@ -653,6 +661,11 @@ namespace NanoBrain { } } + /// + /// Get a neuron in this cluster + /// + /// The name of the neuron to find + /// The found neuron or null when it is not found public Neuron GetNeuron(string neuronName) { foreach (Nucleus nucleus in this.nuclei) { if (nucleus is Neuron neuron && neuron.name == neuronName) @@ -661,8 +674,16 @@ namespace NanoBrain { return null; } + /// + /// Get a neuron in an instance of a multi-cluster + /// + /// The id of the thing mapped to the cluster instance + /// The name of the neuron to find + /// The name of the thing mapped to the cluster instance + /// The found neuron or null when it is not found + /// The cluster instance mapped to the thing will be neuron.parent if a neuron is found. public Neuron GetNeuron(int thingId, string neuronName, string thingName = null) { - if (this.siblingClusters == null || this.siblingClusters.Length <= 1) + if (this.instances == null || this.instances.Length <= 1) return this.GetNeuron(neuronName); // See if we are already using a cluster for thingId @@ -671,7 +692,7 @@ namespace NanoBrain { // Find the cluster with the lowest value neuron Neuron lowestNeuron = null; - foreach (Cluster sibling in this.siblingClusters) { + foreach (Cluster sibling in this.instances) { Neuron neuron = sibling.GetNeuron(neuronName); if (lowestNeuron == null || neuron.outputMagnitude < lowestNeuron.outputMagnitude) lowestNeuron = neuron; @@ -706,6 +727,12 @@ namespace NanoBrain { return neuron; */ } + + /// + /// Delete a nucleus from this clsuter + /// + /// The nucleus to delete + /// True if a nucleus was deleted, false if the nucleus could not be found public bool DeleteNucleus(Nucleus nucleus) { if (this.nuclei.Contains(nucleus) == false) { // Try to find the nucleus by name @@ -724,6 +751,11 @@ namespace NanoBrain { #region Receivers + /// + /// Collect all receiving nuclei of signals from this cluster + /// + /// Ensure that a receiver is only listed once in the result + /// The list of receivers public virtual List CollectReceivers(bool removeDuplicates = false) { List receivers = new(); foreach (Nucleus outputNucleus in this.nuclei) { @@ -744,21 +776,31 @@ namespace NanoBrain { return receivers; } - public List<(Neuron, Nucleus)> CollectConnections() { - List<(Neuron, Nucleus)> connections = new(); + /// + /// Collect all connections to receivers of signals from this cluster + /// + /// A list of pairs of the sending neuron in this cluster and the matching receiving nucleus + // public List<(Neuron, Nucleus)> CollectConnections() { + // List<(Neuron, Nucleus)> connections = new(); - foreach (Nucleus outputNucleus in this.nuclei) { - if (outputNucleus is not Neuron output) - continue; + // foreach (Nucleus outputNucleus in this.nuclei) { + // if (outputNucleus is not Neuron output) + // continue; - foreach (Nucleus receiver in output.receivers) { - // Only add receivers outside this cluster - if (receiver.parent.prefab != this.prefab) - connections.Add((output, receiver)); - } - } - return connections; - } + // foreach (Nucleus receiver in output.receivers) { + // // Only add receivers outside this cluster + // if (receiver.parent.prefab != this.prefab) + // connections.Add((output, receiver)); + // } + // } + // return connections; + // } + + /// + /// Collect all synapses of senders in another cluster of signals to this cluster + /// + /// The other cluster with sending neurons + /// A list of synapses to the neurons in the other clusters public List CollectSynapsesTo(Cluster otherCluster) { List collectedSynapses = new(); @@ -773,38 +815,43 @@ namespace NanoBrain { return collectedSynapses; } - public void MoveReceivers(Cluster newCluster) { - Debug.Log($"Move receivers for {this.name} to {newCluster.name}"); - foreach (Nucleus outputNucleus in this.nuclei) { - if (outputNucleus is not Neuron output) - continue; - // Find the existing output in the new cluster - if (newCluster.GetNucleus(output.name) is not Neuron newOutput) { - Debug.LogWarning($"Could not find output {this.name}.{output.name} in {newCluster.name}"); - continue; - } - Debug.Log($"Check {this.name}.{output.name} receivers"); - Nucleus[] receivers = output.receivers.ToArray(); - foreach (Nucleus receiver in receivers) { - if (receiver.parent.prefab != this.prefab) { - // Replace synapse with new synapse - // to the new cluster - Debug.Log($"move {receiver.name} from {this.name}.{output.name} to {newCluster.name}.{newOutput.name}"); - if (receiver is not Neuron receiverNeuron) - continue; - Synapse synapse = receiverNeuron.GetSynapse(output); - newOutput.AddReceiver(receiver, synapse.weight); - output.RemoveReceiver(receiver); - } - } - } - } + // public void MoveReceivers(Cluster newCluster) { + // Debug.Log($"Move receivers for {this.name} to {newCluster.name}"); + // foreach (Nucleus outputNucleus in this.nuclei) { + // if (outputNucleus is not Neuron output) + // continue; + + // // Find the existing output in the new cluster + // if (newCluster.GetNucleus(output.name) is not Neuron newOutput) { + // Debug.LogWarning($"Could not find output {this.name}.{output.name} in {newCluster.name}"); + // continue; + // } + // Debug.Log($"Check {this.name}.{output.name} receivers"); + // Nucleus[] receivers = output.receivers.ToArray(); + // foreach (Nucleus receiver in receivers) { + // if (receiver.parent.prefab != this.prefab) { + // // Replace synapse with new synapse + // // to the new cluster + // Debug.Log($"move {receiver.name} from {this.name}.{output.name} to {newCluster.name}.{newOutput.name}"); + // if (receiver is not Neuron receiverNeuron) + // continue; + // Synapse synapse = receiverNeuron.GetSynapse(output); + // newOutput.AddReceiver(receiver, synapse.weight); + // output.RemoveReceiver(receiver); + // } + // } + // } + // } #endregion Receivers #region Update + /// + /// Update the state of the nucleus and all nuclei receiving from it + /// + /// The nucleus to start updating public void UpdateFromNucleus(Nucleus startNucleus) { // no bias+synapse input state calculation for now... @@ -830,6 +877,7 @@ namespace NanoBrain { //UpdateNuclei(); } + /// \copydoc NanoBrain::Nucleus::UpdateStateIsolated public override void UpdateStateIsolated() { throw new Exception("Cluster should not be updated!"); } @@ -842,6 +890,10 @@ namespace NanoBrain { #endregion Update + /// + /// Recalculate derived properties + /// + /// This can be used to recalculate derived properties after the set of nuclei has been changed public void Refresh() { // This should not be needed, but somehow somewhere the parent is changed... foreach (Nucleus nucleus in this.nuclei) { diff --git a/Runtime/Scripts/Core/Neuron.cs b/Runtime/Scripts/Core/Neuron.cs index 59a4640..a4927d8 100644 --- a/Runtime/Scripts/Core/Neuron.cs +++ b/Runtime/Scripts/Core/Neuron.cs @@ -307,19 +307,19 @@ namespace NanoBrain { return clone; } - /// \copydoc NanoBrain::Nucleus::Clone - public override Nucleus Clone(ClusterPrefab prefab) { - Neuron clone = new(prefab.cluster, this.name); - CloneFields(clone); - foreach (Synapse synapse in this.synapses) { - Synapse clonedSynapse = clone.AddSynapse(synapse.neuron); - clonedSynapse.weight = synapse.weight; - } - foreach (Nucleus receiver in this.receivers) { - clone.AddReceiver(receiver); - } - return clone; - } + // \copydoc NanoBrain::Nucleus::Clone + // public override Nucleus Clone(ClusterPrefab prefab) { + // Neuron clone = new(prefab.cluster, this.name); + // CloneFields(clone); + // foreach (Synapse synapse in this.synapses) { + // Synapse clonedSynapse = clone.AddSynapse(synapse.neuron); + // clonedSynapse.weight = synapse.weight; + // } + // foreach (Nucleus receiver in this.receivers) { + // clone.AddReceiver(receiver); + // } + // return clone; + // } protected virtual void CloneFields(Neuron clone) { clone.bias = this.bias; diff --git a/Runtime/Scripts/Core/Nucleus.cs b/Runtime/Scripts/Core/Nucleus.cs index 594fd57..4864165 100644 --- a/Runtime/Scripts/Core/Nucleus.cs +++ b/Runtime/Scripts/Core/Nucleus.cs @@ -48,7 +48,7 @@ public abstract class Nucleus { /// /// /// - public abstract Nucleus Clone(ClusterPrefab prefab); + // public abstract Nucleus Clone(ClusterPrefab prefab); /// /// The types of Nucleus @@ -63,7 +63,7 @@ public abstract class Nucleus { //ClusterArray, } - public virtual void Initialize() {} + // public virtual void Initialize() {} // #region Synapses diff --git a/doxygen/DoxyWarnLogfile.txt b/doxygen/DoxyWarnLogfile.txt deleted file mode 100644 index 14f5b84..0000000 --- a/doxygen/DoxyWarnLogfile.txt +++ /dev/null @@ -1,230 +0,0 @@ -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Angle.cs:294: warning: Member pi (variable) of class LinearAlgebra.Angles is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Direction.cs:76: warning: Member ToString() (function) of struct LinearAlgebra.Direction is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Direction.cs:223: warning: Member Equals(object obj) (function) of struct LinearAlgebra.Direction is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Direction.cs:234: warning: Member GetHashCode() (function) of struct LinearAlgebra.Direction is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Direction.cs:191: warning: Member operator-(Direction d) (function) of struct LinearAlgebra.Direction is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Direction.cs:239: warning: Member UnsignedAngle(Direction d1, Direction d2) (function) of struct LinearAlgebra.Direction is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:12: warning: Unsupported xml/html tag found -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:75: warning: Member ToVector3() (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:92: warning: Member ToVector3() (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:111: warning: Member ToString() (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:151: warning: Member Equals(object o) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:157: warning: Member GetHashCode() (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:43: warning: Member Radians(float distance, float horizontal, float vertical) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:69: warning: Member FromVector3(Vector3 v) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:81: warning: Member FromVector3(Vector3Float v) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:128: warning: Member operator+(Spherical s1, Spherical s2) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:138: warning: Member operator*(Spherical v, float d) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:143: warning: Member operator==(Spherical v1, Spherical v2) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:147: warning: Member operator!=(Spherical v1, Spherical v2) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:161: warning: Member Distance(Spherical v1, Spherical v2) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:187: warning: Member Average(Spherical v1, Spherical v2) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:240: warning: Member Sum(List< Spherical > vectors) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:256: warning: Member Average(List< Spherical > vectors) (function) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:116: warning: Member magnitude (property) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Spherical.cs:118: warning: Member normalized (property) of struct LinearAlgebra.Spherical is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/SwingTwist.cs:16: warning: Member SwingTwist(Direction swing, AngleFloat twist) (function) of struct LinearAlgebra.SwingTwist is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/SwingTwist.cs:55: warning: Member ToAngleAxis() (function) of struct LinearAlgebra.SwingTwist is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/SwingTwist.cs:81: warning: Member ToQuaternion() (function) of struct LinearAlgebra.SwingTwist is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/SwingTwist.cs:93: warning: Member ToAngleAxis() (function) of struct LinearAlgebra.SwingTwist is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/SwingTwist.cs:119: warning: Member ToQuaternion() (function) of struct LinearAlgebra.SwingTwist is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/SwingTwist.cs:64: warning: Member FromAngleAxis(Spherical r) (function) of struct LinearAlgebra.SwingTwist is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/SwingTwist.cs:102: warning: Member FromAngleAxis(Spherical r) (function) of struct LinearAlgebra.SwingTwist is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/SwingTwist.cs:127: warning: Member FromQuat32(Quat32 q32) (function) of struct LinearAlgebra.SwingTwist is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/SwingTwist.cs:13: warning: Member swing (variable) of struct LinearAlgebra.SwingTwist is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/SwingTwist.cs:14: warning: Member twist (variable) of struct LinearAlgebra.SwingTwist is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector2Float.cs:218: warning: Member SqrMagnitudeOf(Vector2Float v) (function) of struct LinearAlgebra.Vector2Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector2Float.cs:227: warning: Member MagnitudeOf(Vector2Float v) (function) of struct LinearAlgebra.Vector2Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector2Float.cs:244: warning: Member Normalize(Vector2Float v) (function) of struct LinearAlgebra.Vector2Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector2Float.cs:428: warning: Member UnsignedAngle(Vector2Float from, Vector2Float to) (function) of struct LinearAlgebra.Vector2Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector2Float.cs:335: warning: argument 'v1' from the argument list of LinearAlgebra.Vector2Float.operator== has multiple @param documentation sections -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector2Float.cs:407: warning: argument 'axis' of command @param is not found in the argument list of LinearAlgebra.Vector2Float::SignedAngle(Vector2Float from, Vector2Float to) -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Float.cs:102: warning: Member Vector3Float(Vector3Int v) (function) of struct LinearAlgebra.Vector3Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Float.cs:122: warning: Member ToString() (function) of struct LinearAlgebra.Vector3Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Float.cs:282: warning: Member Equals(object obj) (function) of struct LinearAlgebra.Vector3Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Float.cs:289: warning: Member GetHashCode() (function) of struct LinearAlgebra.Vector3Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Float.cs:108: warning: Member FromSpherical(Spherical s) (function) of struct LinearAlgebra.Vector3Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Float.cs:256: warning: Member operator*(Vector3Float v1, float d) (function) of struct LinearAlgebra.Vector3Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Float.cs:261: warning: Member operator*(float d, Vector3Float v1) (function) of struct LinearAlgebra.Vector3Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Float.cs:266: warning: Member operator/(Vector3Float v1, float d) (function) of struct LinearAlgebra.Vector3Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Float.cs:274: warning: Member operator==(Vector3Float v1, Vector3Float v2) (function) of struct LinearAlgebra.Vector3Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Float.cs:278: warning: Member operator!=(Vector3Float v1, Vector3Float v2) (function) of struct LinearAlgebra.Vector3Float is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Int.cs:31: warning: Member Vector3Int(int horizontal, int vertical, int depth) (function) of struct LinearAlgebra.Vector3Int is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Int.cs:182: warning: Member Equals(Vector3Int v) (function) of struct LinearAlgebra.Vector3Int is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Int.cs:184: warning: Member Equals(object obj) (function) of struct LinearAlgebra.Vector3Int is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Int.cs:199: warning: Member GetHashCode() (function) of struct LinearAlgebra.Vector3Int is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Int.cs:167: warning: Member operator*(Vector3Int v1, int d) (function) of struct LinearAlgebra.Vector3Int is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Int.cs:172: warning: Member operator*(int d, Vector3Int v1) (function) of struct LinearAlgebra.Vector3Int is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Int.cs:177: warning: Member operator/(Vector3Int v1, int d) (function) of struct LinearAlgebra.Vector3Int is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Int.cs:191: warning: Member operator==(Vector3Int v1, Vector3Int v2) (function) of struct LinearAlgebra.Vector3Int is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/src/Vector3Int.cs:195: warning: Member operator!=(Vector3Int v1, Vector3Int v2) (function) of struct LinearAlgebra.Vector3Int is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/test/Vector2FloatTest.cs:5: warning: Member Vector2 (typedef) of namespace LinearAlgebra.Test is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/LinearAlgebra/test/Vector3FloatTest.cs:5: warning: Member Vector3 (typedef) of namespace LinearAlgebra.Test is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:215: warning: Member Clone(ClusterPrefab parent) (function) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:239: warning: Member ShallowCloneTo(Cluster parent) (function) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:428: warning: Member TryGetNucleus(string nucleusName, out Nucleus foundNucleus) (function) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:440: warning: Member GetNucleus(string nucleusName) (function) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:476: warning: Member CollectReceivers() (function) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:493: warning: Member UpdateFromNucleus(Nucleus startNucleus) (function) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:516: warning: Member UpdateStateIsolated() (function) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:293: warning: Member GetNucleusIndex(List< Nucleus > nuclei, Nucleus nucleus) (function) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:306: warning: Member prefab (variable) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:310: warning: Member clusterNuclei (variable) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:313: warning: Member sortedNuclei (variable) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:316: warning: Member _inputs (variable) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:332: warning: Member computeOrders (variable) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:285: warning: Member GetNucleusIndex(Nucleus[] nuclei, Nucleus nucleus) (function) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:414: warning: Member _outputs (variable) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:317: warning: Member inputs (property) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:407: warning: Member defaultOutput (property) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Cluster.cs:415: warning: Member outputs (property) of class NanoBrain.Cluster is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:79: warning: Member EnsureInitialization() (function) of class NanoBrain.ClusterPrefab is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:85: warning: Member GarbageCollection() (function) of class NanoBrain.ClusterPrefab is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:93: warning: Member MarkNuclei(HashSet< Nucleus > visitedNuclei, Nucleus nucleus) (function) of class NanoBrain.ClusterPrefab is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:124: warning: Member UpdateNuclei() (function) of class NanoBrain.ClusterPrefab is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:129: warning: Member GetNucleusIndex(Nucleus receiver) (function) of class NanoBrain.ClusterPrefab is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:26: warning: Member inputs (property) of class NanoBrain.ClusterPrefab is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:45: warning: Member outputs (property) of class NanoBrain.ClusterPrefab is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:24: warning: Unsupported xml/html tag found -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:24: warning: Unsupported xml/html tag found -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:18: warning: Unsupported xml/html tag found -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ClusterPrefab.cs:18: warning: Unsupported xml/html tag found -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/MemoryCell.cs:15: warning: Member MemoryCell(ClusterPrefab cluster, string name) (function) of class NanoBrain.MemoryCell is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/MemoryCell.cs:16: warning: Member MemoryCell(Cluster parent, string name) (function) of class NanoBrain.MemoryCell is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/MemoryCell.cs:28: warning: Member ShallowCloneTo(Cluster newParent) (function) of class NanoBrain.MemoryCell is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/MemoryCell.cs:45: warning: Member UpdateStateIsolated() (function) of class NanoBrain.MemoryCell is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:83: warning: Member GenerateCurve() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:270: warning: Member CombinatorSum() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:311: warning: Member CombinatorSum() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:277: warning: Member CombinatorProduct() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:318: warning: Member CombinatorProduct() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:285: warning: Member CombinatorMax() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:327: warning: Member CombinatorMax() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:439: warning: Member AddReceiver(Nucleus receiverToAdd, float weight=1) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:444: warning: Member RemoveReceiver(Nucleus receiverToRemove) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:469: warning: Member ProcessStimulusDirect(Vector3 inputValue, int thingId=0, string thingName=null) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:218: warning: Member Delete(Nucleus nucleus) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/MemoryCell.cs:18: warning: Member staticMemory (variable) of class NanoBrain.MemoryCell is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:72: warning: Member _curvePreset (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:80: warning: Member curve (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:81: warning: Member curveMax (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:179: warning: Member WhenFiring (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:185: warning: Member stale (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:186: warning: Member staleValueForSleep (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:209: warning: Member CloneFields(Neuron clone) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:358: warning: Member ActivatorLinear(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:397: warning: Member ActivatorLinear(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:362: warning: Member ActivatorSqrt(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:401: warning: Member ActivatorSqrt(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:367: warning: Member ActivatorPower(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:406: warning: Member ActivatorPower(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:372: warning: Member ActivatorReciprocal(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:411: warning: Member ActivatorReciprocal(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:381: warning: Member ActivatorCustom(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:420: warning: Member ActivatorCustom(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:151: warning: Member _outputValue (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:165: warning: Member _outputValue (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/MemoryCell.cs:19: warning: Member isSleeping (property) of class NanoBrain.MemoryCell is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:73: warning: Member curvePreset (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:152: warning: Member outputValue (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:166: warning: Member outputValue (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:160: warning: Member outputMagnitude (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:161: warning: Member outputSqrMagnitude (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:178: warning: Member isFiring (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:263: warning: Member Combinator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:304: warning: Member Combinator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:350: warning: Member Activator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:389: warning: Member Activator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:434: warning: Member receivers (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:83: warning: Member GenerateCurve() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:254: warning: Member UpdateStateIsolated() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:270: warning: Member CombinatorSum() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:277: warning: Member CombinatorProduct() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:285: warning: Member CombinatorMax() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:311: warning: Member CombinatorSum() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:318: warning: Member CombinatorProduct() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:327: warning: Member CombinatorMax() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:439: warning: Member AddReceiver(Nucleus receiverToAdd, float weight=1) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:444: warning: Member RemoveReceiver(Nucleus receiverToRemove) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:469: warning: Member ProcessStimulusDirect(Vector3 inputValue, int thingId=0, string thingName=null) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:218: warning: Member Delete(Nucleus nucleus) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:72: warning: Member _curvePreset (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:80: warning: Member curve (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:81: warning: Member curveMax (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:179: warning: Member WhenFiring (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:185: warning: Member stale (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:186: warning: Member staleValueForSleep (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:209: warning: Member CloneFields(Neuron clone) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:358: warning: Member ActivatorLinear(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:362: warning: Member ActivatorSqrt(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:367: warning: Member ActivatorPower(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:372: warning: Member ActivatorReciprocal(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:381: warning: Member ActivatorCustom(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:397: warning: Member ActivatorLinear(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:401: warning: Member ActivatorSqrt(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:406: warning: Member ActivatorPower(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:411: warning: Member ActivatorReciprocal(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:420: warning: Member ActivatorCustom(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:151: warning: Member _outputValue (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:165: warning: Member _outputValue (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:73: warning: Member curvePreset (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:152: warning: Member outputValue (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:160: warning: Member outputMagnitude (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:161: warning: Member outputSqrMagnitude (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:166: warning: Member outputValue (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:178: warning: Member isFiring (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:182: warning: Member isSleeping (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:263: warning: Member Combinator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:304: warning: Member Combinator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:350: warning: Member Activator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:389: warning: Member Activator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:434: warning: Member receivers (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:189: warning: argument 'parent' of command @param is not found in the argument list of NanoBrain.Neuron::ShallowCloneTo(Cluster newParent) -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:189: warning: The following parameter of NanoBrain.Neuron.ShallowCloneTo(Cluster newParent) is not documented: - parameter 'newParent' -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/NucleusArray.cs:83: warning: Member thingReceivers (variable) of class NanoBrain.NucleusArray is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/NucleusArray.cs:22: warning: Member nuclei (property) of class NanoBrain.NucleusArray is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Receptor.cs:81: warning: Member UpdateStateIsolated() (function) of class NanoBrain.Receptor is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:83: warning: Member GenerateCurve() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:270: warning: Member CombinatorSum() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:311: warning: Member CombinatorSum() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:277: warning: Member CombinatorProduct() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:318: warning: Member CombinatorProduct() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:285: warning: Member CombinatorMax() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:327: warning: Member CombinatorMax() (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:439: warning: Member AddReceiver(Nucleus receiverToAdd, float weight=1) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:444: warning: Member RemoveReceiver(Nucleus receiverToRemove) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:469: warning: Member ProcessStimulusDirect(Vector3 inputValue, int thingId=0, string thingName=null) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:218: warning: Member Delete(Nucleus nucleus) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:72: warning: Member _curvePreset (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:80: warning: Member curve (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:81: warning: Member curveMax (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:179: warning: Member WhenFiring (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:185: warning: Member stale (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:186: warning: Member staleValueForSleep (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:209: warning: Member CloneFields(Neuron clone) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:358: warning: Member ActivatorLinear(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:397: warning: Member ActivatorLinear(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:362: warning: Member ActivatorSqrt(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:401: warning: Member ActivatorSqrt(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:367: warning: Member ActivatorPower(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:406: warning: Member ActivatorPower(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:372: warning: Member ActivatorReciprocal(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:411: warning: Member ActivatorReciprocal(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:381: warning: Member ActivatorCustom(float3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:420: warning: Member ActivatorCustom(Vector3 input) (function) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:151: warning: Member _outputValue (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:165: warning: Member _outputValue (variable) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Receptor.cs:60: warning: Member array (property) of class NanoBrain.Receptor is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:73: warning: Member curvePreset (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:152: warning: Member outputValue (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:166: warning: Member outputValue (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:160: warning: Member outputMagnitude (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:161: warning: Member outputSqrMagnitude (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:178: warning: Member isFiring (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:182: warning: Member isSleeping (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:263: warning: Member Combinator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:304: warning: Member Combinator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:350: warning: Member Activator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:389: warning: Member Activator (property) of class NanoBrain.Neuron is not documented. -/home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Neuron.cs:434: warning: Member receivers (property) of class NanoBrain.Neuron is not documented.