From 4363079d43cb47b469fd2c7de60bbe25e541558c Mon Sep 17 00:00:00 2001 From: Pascal Serrarens Date: Thu, 7 May 2026 15:25:20 +0200 Subject: [PATCH] Squashed 'NanoBrain/' changes from 7ef8e42..ec3b1d4 ec3b1d4 Completed cluster documentation 348fee3 Update .gitea/workflows/copy_documentation.yml 911e52f Update .gitea/workflows/copy_documentation.yml d472790 Update .gitea/workflows/copy_documentation.yml b87f40f Trying to get the workflow running...10 2b0db4f Trying to get the workflow running...9 927fd6d Trying to get the workflow running...8 176f399 Trying to get the workflow running...7 3c841c7 Trying to get the workflow running...6 5c798c2 Trying to get the workflow running...5 30b25a1 Trying to get the workflow running...4 5edf019 Trying to get the workflow running...3 587cf82 Trying to get the workflow running...2 a1d3aa7 Trying to get the workflow running...1 97ec277 Removed LinearAlgebra, first setup webserver copy workflow 5827396 Fixed documentation links ce19335 Added Documentation da370bb Improvements 32b5885 Multi smell works 33ea14b Single smell works a651ec6 Add neuron property drawer baa7def Pheromones WIP 551b4d9 Improve ant walking speed 7187f61 Ant is walking again c78722a Make it work again 2ff550c Removed clusterPrefab property 2ef67fe Cleanup and fix connect neuron a9a0072 Merge commit 'dd326823a8256f3ddb808e071d98c4aede72e410' 22ee17c Insect rig improvements b6a3bc1 Added insect body parts 517e738 Merge commit '4ae9a15fc61f386b96ce0f7b440780f562d7dc68' 033ddf4 Merge commit '05fd588f9bc41d84113d410a2ca992f1a2ee66e0' ef700c0 Merge commit '3f8716794ad9d685cfb9ed9dd230eb31cd8df10f' 7d5e157 Added NanoBrain namespace f138201 Merge commit '611055cdcd58b01f2f19991ad35eb8fe8e573ebb' 1c4d361 Merge commit '9fcbaa5bf84f91680d24b56dbf114bcb97de4aee' 0f83945 Added NanoBrain subtree 6f398ad Merge commit '8e87e4ea77308b51c3691bdad96e7f9707952821' as 'NanoBrain' 587f104 Move out non-subtree NanoBrain fc581a0 cleanup & documentation 837c5ce WIP Physics based walking 63486d1 The ant does it ant things! ce8e476 Added sample assets... 88d5eb5 Placing home pheromones 481829c Ensure model follows target in editor 018c99d Any walks e709ea4 Steps to get it working c1dcc83 Initial Ant setup af2fa77 Merge commit '04ca8dda0793476a59fc06f1958453730a99c105' as 'NanoBrain' 04ca8dd Squashed 'NanoBrain/' content from commit b3423b9 d9ba98d WIP: Initial scripts 2219e98 Initial commit git-subtree-dir: NanoBrain git-subtree-split: ec3b1d46ab2b9f332a8ae63589b09c3fb6fb1b1a --- .gitea/workflows/copy_documentation.yml | 34 + doxygen.meta => Documentation.meta | 0 Documentation/DoxyWarnLogfile.txt | 106 + .../DoxyWarnLogfile.txt.meta | 0 {doxygen => Documentation}/Doxyfile | 0 {doxygen => Documentation}/Doxyfile.meta | 0 {doxygen => Documentation}/DoxygenLayout.xml | 0 .../DoxygenLayout.xml.meta | 0 Documentation/Installation.md | 14 + Documentation/Installation.md.meta | 7 + Documentation/ToC.md | 5 + Documentation/ToC.md.meta | 7 + {doxygen => Documentation}/custom_doxygen.css | 0 .../custom_doxygen.css.meta | 0 LinearAlgebra.meta => Documentation/html.meta | 2 +- .../html}/PasserLifeLogoRight1_300.png | Bin .../html/PasserLifeLogoRight1_300.png.meta | 117 + Documentation/html/annotated.html | 95 + Documentation/html/annotated.html.meta | 7 + Documentation/html/bc_s.png | Bin 0 -> 636 bytes Documentation/html/bc_s.png.meta | 117 + Documentation/html/bc_sd.png | Bin 0 -> 583 bytes Documentation/html/bc_sd.png.meta | 117 + .../class_nano_brain_1_1_brain-members.html | 93 + ...ass_nano_brain_1_1_brain-members.html.meta | 7 + .../html/class_nano_brain_1_1_brain.html | 175 + .../html/class_nano_brain_1_1_brain.html.meta | 7 + .../class_nano_brain_1_1_cluster-members.html | 124 + ...s_nano_brain_1_1_cluster-members.html.meta | 7 + .../html/class_nano_brain_1_1_cluster.html | 987 +++++ .../class_nano_brain_1_1_cluster.html.meta | 7 + .../html/class_nano_brain_1_1_cluster.png | Bin 0 -> 565 bytes .../class_nano_brain_1_1_cluster.png.meta | 117 + ...nano_brain_1_1_cluster_prefab-members.html | 94 + ...brain_1_1_cluster_prefab-members.html.meta | 7 + .../class_nano_brain_1_1_cluster_prefab.html | 145 + ...ss_nano_brain_1_1_cluster_prefab.html.meta | 7 + ...ss_nano_brain_1_1_memory_cell-members.html | 155 + ...no_brain_1_1_memory_cell-members.html.meta | 7 + .../class_nano_brain_1_1_memory_cell.html | 687 ++++ ...class_nano_brain_1_1_memory_cell.html.meta | 7 + .../html/class_nano_brain_1_1_memory_cell.png | Bin 0 -> 942 bytes .../class_nano_brain_1_1_memory_cell.png.meta | 117 + .../class_nano_brain_1_1_neuron-members.html | 153 + ...ss_nano_brain_1_1_neuron-members.html.meta | 7 + .../html/class_nano_brain_1_1_neuron.html | 708 ++++ .../class_nano_brain_1_1_neuron.html.meta | 7 + .../html/class_nano_brain_1_1_neuron.png | Bin 0 -> 953 bytes .../html/class_nano_brain_1_1_neuron.png.meta | 117 + .../class_nano_brain_1_1_nucleus-members.html | 96 + ...s_nano_brain_1_1_nucleus-members.html.meta | 7 + .../html/class_nano_brain_1_1_nucleus.html | 251 ++ .../class_nano_brain_1_1_nucleus.html.meta | 7 + .../html/class_nano_brain_1_1_nucleus.png | Bin 0 -> 1319 bytes .../class_nano_brain_1_1_nucleus.png.meta | 117 + .../class_nano_brain_1_1_synapse-members.html | 94 + ...s_nano_brain_1_1_synapse-members.html.meta | 7 + .../html/class_nano_brain_1_1_synapse.html | 159 + .../class_nano_brain_1_1_synapse.html.meta | 7 + Documentation/html/classes.html | 101 + Documentation/html/classes.html.meta | 7 + Documentation/html/closed.png | Bin 0 -> 125 bytes Documentation/html/closed.png.meta | 117 + Documentation/html/custom_doxygen.css | 12 + .../html/custom_doxygen.css.meta | 3 +- .../dir_14eca4e58e6d71e3a9859288c1bd2735.html | 87 + ...14eca4e58e6d71e3a9859288c1bd2735.html.meta | 7 + .../dir_4f6666a8f2ab10bc970eb7559668f031.html | 93 + ...4f6666a8f2ab10bc970eb7559668f031.html.meta | 7 + .../dir_961f031cbd4067daa41f3038afdffb61.html | 87 + ...961f031cbd4067daa41f3038afdffb61.html.meta | 7 + .../dir_d52cd4d528148a4237c9bd37fdf6f7e8.html | 95 + ...d52cd4d528148a4237c9bd37fdf6f7e8.html.meta | 7 + .../dir_ff8b04b97203665bfd386b445c7d0b7c.html | 87 + ...ff8b04b97203665bfd386b445c7d0b7c.html.meta | 7 + Documentation/html/doc.svg | 12 + Documentation/html/doc.svg.meta | 53 + Documentation/html/docd.svg | 12 + Documentation/html/docd.svg.meta | 53 + Documentation/html/doxygen.css | 1685 ++++++++ Documentation/html/doxygen.css.meta | 7 + Documentation/html/doxygen.svg | 28 + Documentation/html/doxygen.svg.meta | 53 + Documentation/html/dynsections.js | 192 + Documentation/html/dynsections.js.meta | 7 + Documentation/html/folderclosed.svg | 11 + Documentation/html/folderclosed.svg.meta | 53 + Documentation/html/folderclosedd.svg | 11 + Documentation/html/folderclosedd.svg.meta | 53 + Documentation/html/folderopen.svg | 17 + Documentation/html/folderopen.svg.meta | 53 + Documentation/html/folderopend.svg | 12 + Documentation/html/folderopend.svg.meta | 53 + Documentation/html/functions.html | 192 + Documentation/html/functions.html.meta | 7 + Documentation/html/functions_enum.html | 85 + Documentation/html/functions_enum.html.meta | 7 + Documentation/html/functions_func.html | 145 + Documentation/html/functions_func.html.meta | 7 + Documentation/html/functions_prop.html | 88 + Documentation/html/functions_prop.html.meta | 7 + Documentation/html/functions_vars.html | 96 + Documentation/html/functions_vars.html.meta | 7 + Documentation/html/hierarchy.html | 94 + Documentation/html/hierarchy.html.meta | 7 + Documentation/html/index.html | 89 + Documentation/html/index.html.meta | 7 + Documentation/html/jquery.js | 34 + Documentation/html/jquery.js.meta | 7 + ...nano_brain-unitypackage_2_r_e_a_d_m_e.html | 85 + ...brain-unitypackage_2_r_e_a_d_m_e.html.meta | 7 + Documentation/html/md__installation.html | 91 + Documentation/html/md__installation.html.meta | 7 + Documentation/html/menu.js | 136 + Documentation/html/menu.js.meta | 7 + Documentation/html/menudata.js | 63 + Documentation/html/menudata.js.meta | 7 + Documentation/html/minus.svg | 8 + Documentation/html/minus.svg.meta | 53 + Documentation/html/minusd.svg | 8 + Documentation/html/minusd.svg.meta | 53 + Documentation/html/namespace_nano_brain.html | 115 + .../html/namespace_nano_brain.html.meta | 7 + Documentation/html/nav_f.png | Bin 0 -> 134 bytes Documentation/html/nav_f.png.meta | 117 + Documentation/html/nav_fd.png | Bin 0 -> 135 bytes Documentation/html/nav_fd.png.meta | 117 + Documentation/html/nav_g.png | Bin 0 -> 95 bytes Documentation/html/nav_g.png.meta | 117 + Documentation/html/nav_h.png | Bin 0 -> 87 bytes Documentation/html/nav_h.png.meta | 117 + Documentation/html/nav_hd.png | Bin 0 -> 99 bytes Documentation/html/nav_hd.png.meta | 117 + Documentation/html/open.png | Bin 0 -> 115 bytes Documentation/html/open.png.meta | 117 + Documentation/html/pages.html | 89 + Documentation/html/pages.html.meta | 7 + Documentation/html/plus.svg | 9 + Documentation/html/plus.svg.meta | 53 + Documentation/html/plusd.svg | 9 + Documentation/html/plusd.svg.meta | 53 + .../src.meta => Documentation/html/rtf.meta | 2 +- .../html/rtf/PasserLifeLogoRight1_300.png | Bin 0 -> 10323 bytes .../rtf/PasserLifeLogoRight1_300.png.meta | 117 + .../html/rtf/class_nano_brain_1_1_cluster.png | Bin 0 -> 565 bytes .../rtf/class_nano_brain_1_1_cluster.png.meta | 117 + .../rtf/class_nano_brain_1_1_memory_cell.png | Bin 0 -> 942 bytes .../class_nano_brain_1_1_memory_cell.png.meta | 117 + .../html/rtf/class_nano_brain_1_1_neuron.png | Bin 0 -> 953 bytes .../rtf/class_nano_brain_1_1_neuron.png.meta | 117 + .../html/rtf/class_nano_brain_1_1_nucleus.png | Bin 0 -> 1319 bytes .../rtf/class_nano_brain_1_1_nucleus.png.meta | 117 + Documentation/html/rtf/refman.rtf | 3631 +++++++++++++++++ Documentation/html/rtf/refman.rtf.meta | 7 + .../html/search.meta | 2 +- Documentation/html/search/all_0.js | 4 + Documentation/html/search/all_0.js.meta | 7 + Documentation/html/search/all_1.js | 6 + Documentation/html/search/all_1.js.meta | 7 + Documentation/html/search/all_10.js | 8 + Documentation/html/search/all_10.js.meta | 7 + Documentation/html/search/all_11.js | 4 + Documentation/html/search/all_11.js.meta | 7 + Documentation/html/search/all_2.js | 8 + Documentation/html/search/all_2.js.meta | 7 + Documentation/html/search/all_3.js | 11 + Documentation/html/search/all_3.js.meta | 7 + Documentation/html/search/all_4.js | 5 + Documentation/html/search/all_4.js.meta | 7 + Documentation/html/search/all_5.js | 4 + Documentation/html/search/all_5.js.meta | 7 + Documentation/html/search/all_6.js | 7 + Documentation/html/search/all_6.js.meta | 7 + Documentation/html/search/all_7.js | 6 + Documentation/html/search/all_7.js.meta | 7 + Documentation/html/search/all_8.js | 4 + Documentation/html/search/all_8.js.meta | 7 + Documentation/html/search/all_9.js | 4 + Documentation/html/search/all_9.js.meta | 7 + Documentation/html/search/all_a.js | 9 + Documentation/html/search/all_a.js.meta | 7 + Documentation/html/search/all_b.js | 5 + Documentation/html/search/all_b.js.meta | 7 + Documentation/html/search/all_c.js | 8 + Documentation/html/search/all_c.js.meta | 7 + Documentation/html/search/all_d.js | 8 + Documentation/html/search/all_d.js.meta | 7 + Documentation/html/search/all_e.js | 9 + Documentation/html/search/all_e.js.meta | 7 + Documentation/html/search/all_f.js | 7 + Documentation/html/search/all_f.js.meta | 7 + Documentation/html/search/classes_0.js | 4 + Documentation/html/search/classes_0.js.meta | 7 + Documentation/html/search/classes_1.js | 5 + Documentation/html/search/classes_1.js.meta | 7 + Documentation/html/search/classes_2.js | 4 + Documentation/html/search/classes_2.js.meta | 7 + Documentation/html/search/classes_3.js | 5 + Documentation/html/search/classes_3.js.meta | 7 + Documentation/html/search/classes_4.js | 4 + Documentation/html/search/classes_4.js.meta | 7 + Documentation/html/search/close.svg | 18 + Documentation/html/search/close.svg.meta | 53 + Documentation/html/search/enums_0.js | 4 + Documentation/html/search/enums_0.js.meta | 7 + Documentation/html/search/enums_1.js | 4 + Documentation/html/search/enums_1.js.meta | 7 + Documentation/html/search/enums_2.js | 4 + Documentation/html/search/enums_2.js.meta | 7 + Documentation/html/search/enumvalues_0.js | 4 + .../html/search/enumvalues_0.js.meta | 7 + Documentation/html/search/enumvalues_1.js | 4 + .../html/search/enumvalues_1.js.meta | 7 + Documentation/html/search/functions_0.js | 5 + Documentation/html/search/functions_0.js.meta | 7 + Documentation/html/search/functions_1.js | 6 + Documentation/html/search/functions_1.js.meta | 7 + Documentation/html/search/functions_2.js | 4 + Documentation/html/search/functions_2.js.meta | 7 + Documentation/html/search/functions_3.js | 7 + Documentation/html/search/functions_3.js.meta | 7 + Documentation/html/search/functions_4.js | 4 + Documentation/html/search/functions_4.js.meta | 7 + Documentation/html/search/functions_5.js | 4 + Documentation/html/search/functions_5.js.meta | 7 + Documentation/html/search/functions_6.js | 8 + Documentation/html/search/functions_6.js.meta | 7 + Documentation/html/search/functions_7.js | 6 + Documentation/html/search/functions_7.js.meta | 7 + Documentation/html/search/functions_8.js | 4 + Documentation/html/search/functions_8.js.meta | 7 + Documentation/html/search/functions_9.js | 7 + Documentation/html/search/functions_9.js.meta | 7 + Documentation/html/search/mag.svg | 24 + Documentation/html/search/mag.svg.meta | 53 + Documentation/html/search/mag_d.svg | 24 + Documentation/html/search/mag_d.svg.meta | 53 + Documentation/html/search/mag_sel.svg | 31 + Documentation/html/search/mag_sel.svg.meta | 53 + Documentation/html/search/mag_seld.svg | 31 + Documentation/html/search/mag_seld.svg.meta | 53 + Documentation/html/search/namespaces_0.js | 4 + .../html/search/namespaces_0.js.meta | 7 + Documentation/html/search/pages_0.js | 4 + Documentation/html/search/pages_0.js.meta | 7 + Documentation/html/search/pages_1.js | 4 + Documentation/html/search/pages_1.js.meta | 7 + Documentation/html/search/pages_2.js | 4 + Documentation/html/search/pages_2.js.meta | 7 + Documentation/html/search/pages_3.js | 5 + Documentation/html/search/pages_3.js.meta | 7 + Documentation/html/search/pages_4.js | 4 + Documentation/html/search/pages_4.js.meta | 7 + Documentation/html/search/pages_5.js | 4 + Documentation/html/search/pages_5.js.meta | 7 + Documentation/html/search/properties_0.js | 5 + .../html/search/properties_0.js.meta | 7 + Documentation/html/search/properties_1.js | 4 + .../html/search/properties_1.js.meta | 7 + Documentation/html/search/properties_2.js | 4 + .../html/search/properties_2.js.meta | 7 + Documentation/html/search/properties_3.js | 4 + .../html/search/properties_3.js.meta | 7 + Documentation/html/search/properties_4.js | 4 + .../html/search/properties_4.js.meta | 7 + Documentation/html/search/search.css | 291 ++ Documentation/html/search/search.css.meta | 7 + Documentation/html/search/search.js | 840 ++++ Documentation/html/search/search.js.meta | 7 + Documentation/html/search/searchdata.js | 39 + Documentation/html/search/searchdata.js.meta | 7 + Documentation/html/search/variables_0.js | 4 + Documentation/html/search/variables_0.js.meta | 7 + Documentation/html/search/variables_1.js | 5 + Documentation/html/search/variables_1.js.meta | 7 + Documentation/html/search/variables_2.js | 4 + Documentation/html/search/variables_2.js.meta | 7 + Documentation/html/search/variables_3.js | 5 + Documentation/html/search/variables_3.js.meta | 7 + Documentation/html/search/variables_4.js | 4 + Documentation/html/search/variables_4.js.meta | 7 + Documentation/html/search/variables_5.js | 6 + Documentation/html/search/variables_5.js.meta | 7 + Documentation/html/search/variables_6.js | 5 + Documentation/html/search/variables_6.js.meta | 7 + Documentation/html/search/variables_7.js | 4 + Documentation/html/search/variables_7.js.meta | 7 + Documentation/html/search/variables_8.js | 4 + Documentation/html/search/variables_8.js.meta | 7 + Documentation/html/splitbar.png | Bin 0 -> 282 bytes Documentation/html/splitbar.png.meta | 117 + Documentation/html/splitbard.png | Bin 0 -> 265 bytes Documentation/html/splitbard.png.meta | 117 + Documentation/html/sync_off.png | Bin 0 -> 824 bytes Documentation/html/sync_off.png.meta | 117 + Documentation/html/sync_on.png | Bin 0 -> 820 bytes Documentation/html/sync_on.png.meta | 117 + Documentation/html/tab_a.png | Bin 0 -> 120 bytes Documentation/html/tab_a.png.meta | 117 + Documentation/html/tab_ad.png | Bin 0 -> 117 bytes Documentation/html/tab_ad.png.meta | 117 + Documentation/html/tab_b.png | Bin 0 -> 149 bytes Documentation/html/tab_b.png.meta | 117 + Documentation/html/tab_bd.png | Bin 0 -> 135 bytes Documentation/html/tab_bd.png.meta | 117 + Documentation/html/tab_h.png | Bin 0 -> 147 bytes Documentation/html/tab_h.png.meta | 117 + Documentation/html/tab_hd.png | Bin 0 -> 142 bytes Documentation/html/tab_hd.png.meta | 117 + Documentation/html/tab_s.png | Bin 0 -> 166 bytes Documentation/html/tab_s.png.meta | 117 + Documentation/html/tab_sd.png | Bin 0 -> 151 bytes Documentation/html/tab_sd.png.meta | 117 + Documentation/html/tabs.css | 1 + Documentation/html/tabs.css.meta | 7 + {doxygen => Documentation}/images.meta | 0 .../images/PasserLifeLogoRight1_300.png | Bin 0 -> 10323 bytes .../images/PasserLifeLogoRight1_300.png.meta | 0 Editor/BrainPickerWindow.cs.meta | 11 +- Editor/Brain_Editor.cs.meta | 11 +- Editor/ClusterEditor.cs | 216 +- Editor/ClusterEditor.cs.meta | 11 +- Editor/ClusterViewer.cs | 92 +- Editor/ClusterViewer.cs.meta | 11 +- Editor/ConfigurationChecker.cs.meta | 11 +- Editor/Neuron_Drawer.cs | 83 + Editor/Neuron_Drawer.cs.meta | 11 + README.md | 3 + README.md.meta | 7 + Runtime/LinearAlgebra/.editorconfig | 19 - .../.gitea/workflows/unit_tests.yaml | 37 - Runtime/LinearAlgebra/.gitignore | 5 - .../LinearAlgebra/LinearAlgebra-csharp.sln | 30 - Runtime/LinearAlgebra/src/Angle.cs | 341 -- Runtime/LinearAlgebra/src/Decomposition.cs | 287 -- Runtime/LinearAlgebra/src/Direction.cs | 261 -- Runtime/LinearAlgebra/src/Float.cs | 41 - .../LinearAlgebra/src/LinearAlgebra.csproj | 14 - Runtime/LinearAlgebra/src/Matrix.cs | 689 ---- Runtime/LinearAlgebra/src/Quat32.cs | 87 - Runtime/LinearAlgebra/src/Quaternion.cs | 582 --- Runtime/LinearAlgebra/src/Spherical.cs | 279 -- Runtime/LinearAlgebra/src/SwingTwist.cs | 136 - Runtime/LinearAlgebra/src/Vector2Float.cs | 479 --- Runtime/LinearAlgebra/src/Vector2Int.cs | 185 - Runtime/LinearAlgebra/src/Vector3Float.cs | 402 -- Runtime/LinearAlgebra/src/Vector3Int.cs | 273 -- Runtime/LinearAlgebra/src/float16.cs | 322 -- Runtime/LinearAlgebra/test/AngleTest.cs | 501 --- Runtime/LinearAlgebra/test/DirectionTest.cs | 226 - .../test/LinearAlgebra_Test.csproj | 19 - Runtime/LinearAlgebra/test/QuaternionTest.cs | 185 - Runtime/LinearAlgebra/test/SphericalTest.cs | 271 -- Runtime/LinearAlgebra/test/SwingTwistTest.cs | 131 - .../LinearAlgebra/test/Vector2FloatTest.cs | 364 -- Runtime/LinearAlgebra/test/Vector2IntTest.cs | 270 -- .../LinearAlgebra/test/Vector3FloatTest.cs | 581 --- Runtime/LinearAlgebra/test/Vector3IntTest.cs | 349 -- Runtime/Scripts/Brain.cs | 2 +- Runtime/Scripts/Brain.cs.meta | 11 +- Runtime/Scripts/Core/Cluster.cs | 844 ++-- Runtime/Scripts/Core/Cluster.cs.meta | 11 +- Runtime/Scripts/Core/MemoryCell.cs | 2 +- Runtime/Scripts/Core/MemoryCell.cs.meta | 11 +- Runtime/Scripts/Core/Neuron.cs | 241 +- Runtime/Scripts/Core/Neuron.cs.meta | 11 +- Runtime/Scripts/Core/Nucleus.cs | 131 +- Runtime/Scripts/Core/Nucleus.cs.meta | 11 +- Runtime/Scripts/Core/Synapse.cs.meta | 11 +- .../ScriptableObjects/ClusterPrefab.cs | 218 +- doxygen/DoxyWarnLogfile.txt | 230 -- 371 files changed, 19707 insertions(+), 8453 deletions(-) create mode 100644 .gitea/workflows/copy_documentation.yml rename doxygen.meta => Documentation.meta (100%) create mode 100644 Documentation/DoxyWarnLogfile.txt rename {doxygen => Documentation}/DoxyWarnLogfile.txt.meta (100%) rename {doxygen => Documentation}/Doxyfile (100%) rename {doxygen => Documentation}/Doxyfile.meta (100%) rename {doxygen => Documentation}/DoxygenLayout.xml (100%) rename {doxygen => Documentation}/DoxygenLayout.xml.meta (100%) create mode 100644 Documentation/Installation.md create mode 100644 Documentation/Installation.md.meta create mode 100644 Documentation/ToC.md create mode 100644 Documentation/ToC.md.meta rename {doxygen => Documentation}/custom_doxygen.css (100%) rename {doxygen => Documentation}/custom_doxygen.css.meta (100%) rename LinearAlgebra.meta => Documentation/html.meta (77%) rename {doxygen/images => Documentation/html}/PasserLifeLogoRight1_300.png (100%) create mode 100644 Documentation/html/PasserLifeLogoRight1_300.png.meta create mode 100644 Documentation/html/annotated.html create mode 100644 Documentation/html/annotated.html.meta create mode 100644 Documentation/html/bc_s.png create mode 100644 Documentation/html/bc_s.png.meta create mode 100644 Documentation/html/bc_sd.png create mode 100644 Documentation/html/bc_sd.png.meta create mode 100644 Documentation/html/class_nano_brain_1_1_brain-members.html create mode 100644 Documentation/html/class_nano_brain_1_1_brain-members.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_brain.html create mode 100644 Documentation/html/class_nano_brain_1_1_brain.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_cluster-members.html create mode 100644 Documentation/html/class_nano_brain_1_1_cluster-members.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_cluster.html create mode 100644 Documentation/html/class_nano_brain_1_1_cluster.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_cluster.png create mode 100644 Documentation/html/class_nano_brain_1_1_cluster.png.meta create mode 100644 Documentation/html/class_nano_brain_1_1_cluster_prefab-members.html create mode 100644 Documentation/html/class_nano_brain_1_1_cluster_prefab-members.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_cluster_prefab.html create mode 100644 Documentation/html/class_nano_brain_1_1_cluster_prefab.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_memory_cell-members.html create mode 100644 Documentation/html/class_nano_brain_1_1_memory_cell-members.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_memory_cell.html create mode 100644 Documentation/html/class_nano_brain_1_1_memory_cell.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_memory_cell.png create mode 100644 Documentation/html/class_nano_brain_1_1_memory_cell.png.meta create mode 100644 Documentation/html/class_nano_brain_1_1_neuron-members.html create mode 100644 Documentation/html/class_nano_brain_1_1_neuron-members.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_neuron.html create mode 100644 Documentation/html/class_nano_brain_1_1_neuron.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_neuron.png create mode 100644 Documentation/html/class_nano_brain_1_1_neuron.png.meta create mode 100644 Documentation/html/class_nano_brain_1_1_nucleus-members.html create mode 100644 Documentation/html/class_nano_brain_1_1_nucleus-members.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_nucleus.html create mode 100644 Documentation/html/class_nano_brain_1_1_nucleus.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_nucleus.png create mode 100644 Documentation/html/class_nano_brain_1_1_nucleus.png.meta create mode 100644 Documentation/html/class_nano_brain_1_1_synapse-members.html create mode 100644 Documentation/html/class_nano_brain_1_1_synapse-members.html.meta create mode 100644 Documentation/html/class_nano_brain_1_1_synapse.html create mode 100644 Documentation/html/class_nano_brain_1_1_synapse.html.meta create mode 100644 Documentation/html/classes.html create mode 100644 Documentation/html/classes.html.meta create mode 100644 Documentation/html/closed.png create mode 100644 Documentation/html/closed.png.meta create mode 100644 Documentation/html/custom_doxygen.css rename Runtime/LinearAlgebra.meta => Documentation/html/custom_doxygen.css.meta (67%) create mode 100644 Documentation/html/dir_14eca4e58e6d71e3a9859288c1bd2735.html create mode 100644 Documentation/html/dir_14eca4e58e6d71e3a9859288c1bd2735.html.meta create mode 100644 Documentation/html/dir_4f6666a8f2ab10bc970eb7559668f031.html create mode 100644 Documentation/html/dir_4f6666a8f2ab10bc970eb7559668f031.html.meta create mode 100644 Documentation/html/dir_961f031cbd4067daa41f3038afdffb61.html create mode 100644 Documentation/html/dir_961f031cbd4067daa41f3038afdffb61.html.meta create mode 100644 Documentation/html/dir_d52cd4d528148a4237c9bd37fdf6f7e8.html create mode 100644 Documentation/html/dir_d52cd4d528148a4237c9bd37fdf6f7e8.html.meta create mode 100644 Documentation/html/dir_ff8b04b97203665bfd386b445c7d0b7c.html create mode 100644 Documentation/html/dir_ff8b04b97203665bfd386b445c7d0b7c.html.meta create mode 100644 Documentation/html/doc.svg create mode 100644 Documentation/html/doc.svg.meta create mode 100644 Documentation/html/docd.svg create mode 100644 Documentation/html/docd.svg.meta create mode 100644 Documentation/html/doxygen.css create mode 100644 Documentation/html/doxygen.css.meta create mode 100644 Documentation/html/doxygen.svg create mode 100644 Documentation/html/doxygen.svg.meta create mode 100644 Documentation/html/dynsections.js create mode 100644 Documentation/html/dynsections.js.meta create mode 100644 Documentation/html/folderclosed.svg create mode 100644 Documentation/html/folderclosed.svg.meta create mode 100644 Documentation/html/folderclosedd.svg create mode 100644 Documentation/html/folderclosedd.svg.meta create mode 100644 Documentation/html/folderopen.svg create mode 100644 Documentation/html/folderopen.svg.meta create mode 100644 Documentation/html/folderopend.svg create mode 100644 Documentation/html/folderopend.svg.meta create mode 100644 Documentation/html/functions.html create mode 100644 Documentation/html/functions.html.meta create mode 100644 Documentation/html/functions_enum.html create mode 100644 Documentation/html/functions_enum.html.meta create mode 100644 Documentation/html/functions_func.html create mode 100644 Documentation/html/functions_func.html.meta create mode 100644 Documentation/html/functions_prop.html create mode 100644 Documentation/html/functions_prop.html.meta create mode 100644 Documentation/html/functions_vars.html create mode 100644 Documentation/html/functions_vars.html.meta create mode 100644 Documentation/html/hierarchy.html create mode 100644 Documentation/html/hierarchy.html.meta create mode 100644 Documentation/html/index.html create mode 100644 Documentation/html/index.html.meta create mode 100644 Documentation/html/jquery.js create mode 100644 Documentation/html/jquery.js.meta create mode 100644 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 create mode 100644 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 create mode 100644 Documentation/html/md__installation.html create mode 100644 Documentation/html/md__installation.html.meta create mode 100644 Documentation/html/menu.js create mode 100644 Documentation/html/menu.js.meta create mode 100644 Documentation/html/menudata.js create mode 100644 Documentation/html/menudata.js.meta create mode 100644 Documentation/html/minus.svg create mode 100644 Documentation/html/minus.svg.meta create mode 100644 Documentation/html/minusd.svg create mode 100644 Documentation/html/minusd.svg.meta create mode 100644 Documentation/html/namespace_nano_brain.html create mode 100644 Documentation/html/namespace_nano_brain.html.meta create mode 100644 Documentation/html/nav_f.png create mode 100644 Documentation/html/nav_f.png.meta create mode 100644 Documentation/html/nav_fd.png create mode 100644 Documentation/html/nav_fd.png.meta create mode 100644 Documentation/html/nav_g.png create mode 100644 Documentation/html/nav_g.png.meta create mode 100644 Documentation/html/nav_h.png create mode 100644 Documentation/html/nav_h.png.meta create mode 100644 Documentation/html/nav_hd.png create mode 100644 Documentation/html/nav_hd.png.meta create mode 100644 Documentation/html/open.png create mode 100644 Documentation/html/open.png.meta create mode 100644 Documentation/html/pages.html create mode 100644 Documentation/html/pages.html.meta create mode 100644 Documentation/html/plus.svg create mode 100644 Documentation/html/plus.svg.meta create mode 100644 Documentation/html/plusd.svg create mode 100644 Documentation/html/plusd.svg.meta rename LinearAlgebra/src.meta => Documentation/html/rtf.meta (77%) create mode 100644 Documentation/html/rtf/PasserLifeLogoRight1_300.png create mode 100644 Documentation/html/rtf/PasserLifeLogoRight1_300.png.meta create mode 100644 Documentation/html/rtf/class_nano_brain_1_1_cluster.png create mode 100644 Documentation/html/rtf/class_nano_brain_1_1_cluster.png.meta create mode 100644 Documentation/html/rtf/class_nano_brain_1_1_memory_cell.png create mode 100644 Documentation/html/rtf/class_nano_brain_1_1_memory_cell.png.meta create mode 100644 Documentation/html/rtf/class_nano_brain_1_1_neuron.png create mode 100644 Documentation/html/rtf/class_nano_brain_1_1_neuron.png.meta create mode 100644 Documentation/html/rtf/class_nano_brain_1_1_nucleus.png create mode 100644 Documentation/html/rtf/class_nano_brain_1_1_nucleus.png.meta create mode 100644 Documentation/html/rtf/refman.rtf create mode 100644 Documentation/html/rtf/refman.rtf.meta rename LinearAlgebra/test.meta => Documentation/html/search.meta (77%) create mode 100644 Documentation/html/search/all_0.js create mode 100644 Documentation/html/search/all_0.js.meta create mode 100644 Documentation/html/search/all_1.js create mode 100644 Documentation/html/search/all_1.js.meta create mode 100644 Documentation/html/search/all_10.js create mode 100644 Documentation/html/search/all_10.js.meta create mode 100644 Documentation/html/search/all_11.js create mode 100644 Documentation/html/search/all_11.js.meta create mode 100644 Documentation/html/search/all_2.js create mode 100644 Documentation/html/search/all_2.js.meta create mode 100644 Documentation/html/search/all_3.js create mode 100644 Documentation/html/search/all_3.js.meta create mode 100644 Documentation/html/search/all_4.js create mode 100644 Documentation/html/search/all_4.js.meta create mode 100644 Documentation/html/search/all_5.js create mode 100644 Documentation/html/search/all_5.js.meta create mode 100644 Documentation/html/search/all_6.js create mode 100644 Documentation/html/search/all_6.js.meta create mode 100644 Documentation/html/search/all_7.js create mode 100644 Documentation/html/search/all_7.js.meta create mode 100644 Documentation/html/search/all_8.js create mode 100644 Documentation/html/search/all_8.js.meta create mode 100644 Documentation/html/search/all_9.js create mode 100644 Documentation/html/search/all_9.js.meta create mode 100644 Documentation/html/search/all_a.js create mode 100644 Documentation/html/search/all_a.js.meta create mode 100644 Documentation/html/search/all_b.js create mode 100644 Documentation/html/search/all_b.js.meta create mode 100644 Documentation/html/search/all_c.js create mode 100644 Documentation/html/search/all_c.js.meta create mode 100644 Documentation/html/search/all_d.js create mode 100644 Documentation/html/search/all_d.js.meta create mode 100644 Documentation/html/search/all_e.js create mode 100644 Documentation/html/search/all_e.js.meta create mode 100644 Documentation/html/search/all_f.js create mode 100644 Documentation/html/search/all_f.js.meta create mode 100644 Documentation/html/search/classes_0.js create mode 100644 Documentation/html/search/classes_0.js.meta create mode 100644 Documentation/html/search/classes_1.js create mode 100644 Documentation/html/search/classes_1.js.meta create mode 100644 Documentation/html/search/classes_2.js create mode 100644 Documentation/html/search/classes_2.js.meta create mode 100644 Documentation/html/search/classes_3.js create mode 100644 Documentation/html/search/classes_3.js.meta create mode 100644 Documentation/html/search/classes_4.js create mode 100644 Documentation/html/search/classes_4.js.meta create mode 100644 Documentation/html/search/close.svg create mode 100644 Documentation/html/search/close.svg.meta create mode 100644 Documentation/html/search/enums_0.js create mode 100644 Documentation/html/search/enums_0.js.meta create mode 100644 Documentation/html/search/enums_1.js create mode 100644 Documentation/html/search/enums_1.js.meta create mode 100644 Documentation/html/search/enums_2.js create mode 100644 Documentation/html/search/enums_2.js.meta create mode 100644 Documentation/html/search/enumvalues_0.js create mode 100644 Documentation/html/search/enumvalues_0.js.meta create mode 100644 Documentation/html/search/enumvalues_1.js create mode 100644 Documentation/html/search/enumvalues_1.js.meta create mode 100644 Documentation/html/search/functions_0.js create mode 100644 Documentation/html/search/functions_0.js.meta create mode 100644 Documentation/html/search/functions_1.js create mode 100644 Documentation/html/search/functions_1.js.meta create mode 100644 Documentation/html/search/functions_2.js create mode 100644 Documentation/html/search/functions_2.js.meta create mode 100644 Documentation/html/search/functions_3.js create mode 100644 Documentation/html/search/functions_3.js.meta create mode 100644 Documentation/html/search/functions_4.js create mode 100644 Documentation/html/search/functions_4.js.meta create mode 100644 Documentation/html/search/functions_5.js create mode 100644 Documentation/html/search/functions_5.js.meta create mode 100644 Documentation/html/search/functions_6.js create mode 100644 Documentation/html/search/functions_6.js.meta create mode 100644 Documentation/html/search/functions_7.js create mode 100644 Documentation/html/search/functions_7.js.meta create mode 100644 Documentation/html/search/functions_8.js create mode 100644 Documentation/html/search/functions_8.js.meta create mode 100644 Documentation/html/search/functions_9.js create mode 100644 Documentation/html/search/functions_9.js.meta create mode 100644 Documentation/html/search/mag.svg create mode 100644 Documentation/html/search/mag.svg.meta create mode 100644 Documentation/html/search/mag_d.svg create mode 100644 Documentation/html/search/mag_d.svg.meta create mode 100644 Documentation/html/search/mag_sel.svg create mode 100644 Documentation/html/search/mag_sel.svg.meta create mode 100644 Documentation/html/search/mag_seld.svg create mode 100644 Documentation/html/search/mag_seld.svg.meta create mode 100644 Documentation/html/search/namespaces_0.js create mode 100644 Documentation/html/search/namespaces_0.js.meta create mode 100644 Documentation/html/search/pages_0.js create mode 100644 Documentation/html/search/pages_0.js.meta create mode 100644 Documentation/html/search/pages_1.js create mode 100644 Documentation/html/search/pages_1.js.meta create mode 100644 Documentation/html/search/pages_2.js create mode 100644 Documentation/html/search/pages_2.js.meta create mode 100644 Documentation/html/search/pages_3.js create mode 100644 Documentation/html/search/pages_3.js.meta create mode 100644 Documentation/html/search/pages_4.js create mode 100644 Documentation/html/search/pages_4.js.meta create mode 100644 Documentation/html/search/pages_5.js create mode 100644 Documentation/html/search/pages_5.js.meta create mode 100644 Documentation/html/search/properties_0.js create mode 100644 Documentation/html/search/properties_0.js.meta create mode 100644 Documentation/html/search/properties_1.js create mode 100644 Documentation/html/search/properties_1.js.meta create mode 100644 Documentation/html/search/properties_2.js create mode 100644 Documentation/html/search/properties_2.js.meta create mode 100644 Documentation/html/search/properties_3.js create mode 100644 Documentation/html/search/properties_3.js.meta create mode 100644 Documentation/html/search/properties_4.js create mode 100644 Documentation/html/search/properties_4.js.meta create mode 100644 Documentation/html/search/search.css create mode 100644 Documentation/html/search/search.css.meta create mode 100644 Documentation/html/search/search.js create mode 100644 Documentation/html/search/search.js.meta create mode 100644 Documentation/html/search/searchdata.js create mode 100644 Documentation/html/search/searchdata.js.meta create mode 100644 Documentation/html/search/variables_0.js create mode 100644 Documentation/html/search/variables_0.js.meta create mode 100644 Documentation/html/search/variables_1.js create mode 100644 Documentation/html/search/variables_1.js.meta create mode 100644 Documentation/html/search/variables_2.js create mode 100644 Documentation/html/search/variables_2.js.meta create mode 100644 Documentation/html/search/variables_3.js create mode 100644 Documentation/html/search/variables_3.js.meta create mode 100644 Documentation/html/search/variables_4.js create mode 100644 Documentation/html/search/variables_4.js.meta create mode 100644 Documentation/html/search/variables_5.js create mode 100644 Documentation/html/search/variables_5.js.meta create mode 100644 Documentation/html/search/variables_6.js create mode 100644 Documentation/html/search/variables_6.js.meta create mode 100644 Documentation/html/search/variables_7.js create mode 100644 Documentation/html/search/variables_7.js.meta create mode 100644 Documentation/html/search/variables_8.js create mode 100644 Documentation/html/search/variables_8.js.meta create mode 100644 Documentation/html/splitbar.png create mode 100644 Documentation/html/splitbar.png.meta create mode 100644 Documentation/html/splitbard.png create mode 100644 Documentation/html/splitbard.png.meta create mode 100644 Documentation/html/sync_off.png create mode 100644 Documentation/html/sync_off.png.meta create mode 100644 Documentation/html/sync_on.png create mode 100644 Documentation/html/sync_on.png.meta create mode 100644 Documentation/html/tab_a.png create mode 100644 Documentation/html/tab_a.png.meta create mode 100644 Documentation/html/tab_ad.png create mode 100644 Documentation/html/tab_ad.png.meta create mode 100644 Documentation/html/tab_b.png create mode 100644 Documentation/html/tab_b.png.meta create mode 100644 Documentation/html/tab_bd.png create mode 100644 Documentation/html/tab_bd.png.meta create mode 100644 Documentation/html/tab_h.png create mode 100644 Documentation/html/tab_h.png.meta create mode 100644 Documentation/html/tab_hd.png create mode 100644 Documentation/html/tab_hd.png.meta create mode 100644 Documentation/html/tab_s.png create mode 100644 Documentation/html/tab_s.png.meta create mode 100644 Documentation/html/tab_sd.png create mode 100644 Documentation/html/tab_sd.png.meta create mode 100644 Documentation/html/tabs.css create mode 100644 Documentation/html/tabs.css.meta rename {doxygen => Documentation}/images.meta (100%) create mode 100644 Documentation/images/PasserLifeLogoRight1_300.png rename {doxygen => Documentation}/images/PasserLifeLogoRight1_300.png.meta (100%) create mode 100644 Editor/Neuron_Drawer.cs create mode 100644 Editor/Neuron_Drawer.cs.meta create mode 100644 README.md create mode 100644 README.md.meta delete mode 100644 Runtime/LinearAlgebra/.editorconfig delete mode 100644 Runtime/LinearAlgebra/.gitea/workflows/unit_tests.yaml delete mode 100644 Runtime/LinearAlgebra/.gitignore delete mode 100644 Runtime/LinearAlgebra/LinearAlgebra-csharp.sln delete mode 100644 Runtime/LinearAlgebra/src/Angle.cs delete mode 100644 Runtime/LinearAlgebra/src/Decomposition.cs delete mode 100644 Runtime/LinearAlgebra/src/Direction.cs delete mode 100644 Runtime/LinearAlgebra/src/Float.cs delete mode 100644 Runtime/LinearAlgebra/src/LinearAlgebra.csproj delete mode 100644 Runtime/LinearAlgebra/src/Matrix.cs delete mode 100644 Runtime/LinearAlgebra/src/Quat32.cs delete mode 100644 Runtime/LinearAlgebra/src/Quaternion.cs delete mode 100644 Runtime/LinearAlgebra/src/Spherical.cs delete mode 100644 Runtime/LinearAlgebra/src/SwingTwist.cs delete mode 100644 Runtime/LinearAlgebra/src/Vector2Float.cs delete mode 100644 Runtime/LinearAlgebra/src/Vector2Int.cs delete mode 100644 Runtime/LinearAlgebra/src/Vector3Float.cs delete mode 100644 Runtime/LinearAlgebra/src/Vector3Int.cs delete mode 100644 Runtime/LinearAlgebra/src/float16.cs delete mode 100644 Runtime/LinearAlgebra/test/AngleTest.cs delete mode 100644 Runtime/LinearAlgebra/test/DirectionTest.cs delete mode 100644 Runtime/LinearAlgebra/test/LinearAlgebra_Test.csproj delete mode 100644 Runtime/LinearAlgebra/test/QuaternionTest.cs delete mode 100644 Runtime/LinearAlgebra/test/SphericalTest.cs delete mode 100644 Runtime/LinearAlgebra/test/SwingTwistTest.cs delete mode 100644 Runtime/LinearAlgebra/test/Vector2FloatTest.cs delete mode 100644 Runtime/LinearAlgebra/test/Vector2IntTest.cs delete mode 100644 Runtime/LinearAlgebra/test/Vector3FloatTest.cs delete mode 100644 Runtime/LinearAlgebra/test/Vector3IntTest.cs delete mode 100644 doxygen/DoxyWarnLogfile.txt 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 77% rename from LinearAlgebra.meta rename to Documentation/html.meta index d18b73b..9a5d394 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 0000000000000000000000000000000000000000..927cda712c3f305c64b69f199b085b316d52a7e2 GIT binary patch literal 636 zcmV-?0)zdDP) zhGLps(4y24e9uVA;^{Q&@! zF^NRtx>BiRrBW$7o6SxDfHKlucG?qDUv)K{`gW(i`$19*- zuP^hf48wd21Ok6B_w@Vy3lXT*YU{5&a=BbvDwS#h)X{f=6#euBzQ8II!s05<)Z*=)XsgMJ{zVi5o+(+jfW*A;h!6bc0Z zpe%!O-!~eKXT#xehvf5l0HEv(3Z=pJ4-j}ya=F}k@s>iNci};u znN;}n{$jECBubslW|ze)D9pg)@d)|$XfzTRn2E(=OW>hSr*q?eo?`J}wGWw0W|?>K zQ!8;NcE{uK$JN?LA`v0p#wT|)8qFmZsi{diE$k^AqW0T(f`iFq@`3_Vsgy++4%-X& zJ_OFGKPwy#r*Jqs{u9SoJOTj9NHUo`b2^<09PZw9Iu*}Ob%;izdpO)V7M}wEZ2Dg; WajUwc_EAUx0000)a>zbcc`(S%_d_XmUZ_BtCorRdjN;yvFA*3R5Okw&;6?-| zC@#dLQDUOF8;DC$@INzlO!qr9^>M0->T^#0ryf9VG#co1I;hv{kR%E5c-#UsP1_8I z!_8zeQ8Z119jK~$+-kLEQngyW0^midRQlz1yUX+W{14;pCkn*+Iur^; zlF8)5#bWW&Qc$T>#Cn?-d_ez)!{NBjqW=Zua#^fyvf>UhchXt#aa+K%P5-eh%QyJL z8~XPR!??&6i$#+x`PuDuH>1%gWag32=XZI^)@Fmj;GUVY7wF_$uh%pB{r*KkE|-Ii zca;CLuIo2NEM+no02aH$R__)Hg|A$1N$GSNfW0RuK+|?Hn|l z&G+qg` + + + + + + +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
+
+
+
+
+ + +
+
+ +
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:
    +
  • /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Brain.cs
  • +
+
+ + + + 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
+
+
+
+
+ + +
+ +
+

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:
    +
  • /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Cluster.cs
  • +
+
+ + + + 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 0000000000000000000000000000000000000000..b808c356735d4a1a08bccaced3bd8305eefcb6db GIT binary patch literal 565 zcmV-50?Pe~P)W7Dir#LVva2S`&=)l0h|NsB9NT2)w000SeQchC<|NsC0|NsC0Hv*f~0005N zNkl5s`%)O+<81 z-+&I{PDG>?UOys|m!5Cd?*b}xa@wMA!fe;Sg-%{cDav!6gOyo*`MNh-b&~7HFly9t zT%zkE4~4NU?6x{vt?y1N!*JFz&Xh%K|3Luru7uF5-ptvX3Uq31}&x0Eb1_UQV^Lt*UEnyt>(XnD28>$6sI#zb1; zqx&U#sKUO@%Fc6*<|w`L)#DnScPSFTL(j|+t?GG&9%^}o9!~OKXxZVaRo*Lj@9?SL z)mb+W6;o6-y{`qA9qu1eW@ZaHnwj~aeij`<2qyXiG1g?^ + + + + + + +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
+
+
+
+
+ + +
+
+ +
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:
    +
  • /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/ScriptableObjects/ClusterPrefab.cs
  • +
+
+ + + + 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
+
+
+
+
+ + +
+ +
+

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:
    +
  • /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/MemoryCell.cs
  • +
+
+ + + + 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 0000000000000000000000000000000000000000..9fc1c667be7fd56b171e9058be92a24081656b7c GIT binary patch literal 942 zcmeAS@N?(olHy`uVBq!ia0vp^6M(pbgBeKL%TB5RQqloFA+G=b{|7Q(y?WK&-oD(z zK(jz%`k5C84jcfAZ}yn~2Pnr`666=m0OW&#In(Sb3=GVco-U3d6^w7^zCQO_frn+f z>#9Hh{A+}S4&0d&w$^T;a=4F>hMBP5+xR0AkNp%TJ+a#%;28zNXIh$eO-k{$uvaO~ zeBJ#c)M?TxpVpukK`#t{D*fYLC^Fk)Xa6tLBeAFB=Uu-v&HCjJJKxVCXFOLWaXr2L zb%m7ou3OWxH~+YmdCehc>QT8%H`(`A^Izq>xOt)U7wt2x9-C6Pu6)1UC)xkfm93|3 zqZU@%vM*G7$nI^X7Q?~2`lG@U>oexRKHWIK{8{e8O&`UoJQ|KJOXY8$Avi_62#hf&+2fZjX zv7VBbi6P-3k@(|(u2z9VehM8OZ<@I~J0f;W=;&}2+?A)jd&_@U zm+9N)WxwASKl?+)897&tyVITelkdJ{&lQ}=8GC4EK$ho{CGLN@c4hxOEi(Id(Q>~P zDJL3#=AKsYTKX)C1C(Z}NbXVn-#n$kz3u8FGuKu&|g2ZMKE%EA; zuQa94#cXc(>Obl9A~@{U*MHjf#&8+@o+hk g + + + + + + +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
+
+
+
+
+ + +
+ +
+

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:
    +
  • /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Neuron.cs
  • +
+
+ + + + 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 0000000000000000000000000000000000000000..49d8eae20f4c1c61710006a6ea11a02db094e6f7 GIT binary patch literal 953 zcmeAS@N?(olHy`uVBq!ia0vp^6M(pbgBeKL%TB5RQqloFA+G=b{|7Q(y?WK&-oD(z zK(jz%`k5C84jcfAZ}yn~2Pnr`666=m0OW&#In(Sb3=GUJo-U3d6^w7^zV3Uiz|+$1 z*!Ab1e~pmPfje{7ZHro{9PT5vd)rSYwZGjG$#*<#vBKouqV_AhCWRcX*5yME{Iu_lzo1n6%}IgG%PfMvqIEI7O0sq&XS(En;RUyOif}e52&W zJO}mjaW1zRe`+!_MDwvQOq1bY(6JO?h$vEE*zm-GA>m{r!+}Z6j18*nObp)03Vzi$ zI&mbbD|U3eQDzqs-1x*nNom?Mhwb^Tv-p}jUR=CYwy)zv5ch&7F-&{Ur9JQN(AgTb z@bv5{S@XZy9!-8Kzdrlp(*>FTR1zbe`Zs_>=6uer>1!kZsVsEs_K-a-cj+qop5^VY znqEY1UCh2J=%P~4@m=7c=|3OMJ*`7*MNa>z|4bK3o=PihO*K}?{V%lQ^#pllU#mCM z9iC3%NniGIq0q&%%Z&A8_8zY~?drn+|FrfLI zCgiw9f7nyIhHHw9_k!y?=Y3)}^YptSI)_o!KS-`GMA$7qIrH;NUdhK;}<}PqReVS7HLuy5T&@Ubhao^%{2dzj~ z6NlDk3*#AAF3~IFGnw?o;cc*Q!!Fk=m8-(PE{tLLy8Dmw0>gC95WR2Ht_GWd6VH(p z~Jq|I4REzls-Z7k?hlym#M;zxU@svcN4tjbjq#m+U{;Oo@yA SQ^W+!WDK6JelF{r5}E+ER;Vuk literal 0 HcmV?d00001 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
+
+
+
+
+ + +
+
+ +
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:
    +
  • /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Nucleus.cs
  • +
+
+ + + + 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 0000000000000000000000000000000000000000..1433a13eac26a3335d2b43c8a474867ff3b418b3 GIT binary patch literal 1319 zcmbW1Yfw{17=}-zGA_%1xMf=yCHo2cKF&9JcFQ*Dw*_6tW<)buq)x^orQDNTLYU-83R4E zJdf9(R&AfiNHI~@AC&Nk>mK(z_a)h>*6drrJL^fO@0*Wi^Mj*-g9AlIC6O}07P_Q1 zAK|p+DksI+{Hc+y`IB|M&krE?N;d;(?6MXs6U2b!F<6v=Gr1e(zM7_)uubunbn$r4 zm^VqRyMgGNbX_-+Rvj5Z<%(CazeO_W-ff0Q$gT05+7VfV^R9-IS^;~!5#jTT%u7a} zwz|s49Bao~XxGDh43Bb<1Z6-4;db%T6786L5iszkf1cqY?3Itt0nPmGU-n?KyZmp8 z+!66=ndW$BA$ZA;?5c$A5n45ZOSp(!Tux<%L<8XkB|@g$ zJ%LKsjF(w-j% z*os{)>c5sefG^b-G}1~mv6aTl2N(NK|JnA(`DYuXsJ^GAebS#$Ai4wt>xSO7gvcJf(cW1WA0}(lfu&;O`$c~ ziGbD;1)*Wli#hHS@|Ki=FtxdirE$4Cq#YKVN~7zp{vJE1^C_O1cR}Lg1`^5bYTsXt z9mAinm`|Ge=_2y2GSKW6!+g0a)oZ-{`HSjoE zT?u0supft6nxZet7>M{P*4c1VON&7DVM+mlDGv>by($!I5~Xp+#g + + + + + + +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
+
+
+
+
+ + +
+
+ +
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:
    +
  • /home/pascal/Development/Projects/Passer/NanoBrain/NanoBrain/Assets/NanoBrain-unitypackage/Runtime/Scripts/Core/Synapse.cs
  • +
+
+ + + + 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
+
+ + + + + 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 0000000000000000000000000000000000000000..7d8dac4b99d7c9ec982fb64d88cd5e05552fc4f3 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VE}kxqAr*{o=U(JwP~dQhfA>a& zFIIv@D^*ygJl^iB8-s`8W=<7u2VYk92{MeKcR#;gy6Zw*mbL58(_+8MtPTiwHDoiM X?-t>Yju$8dn#bVj>gTe~DWM4fTjnFZ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4154a8db441b3570d40140335851930793452362 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQof!pjv*C{Z|`p8Wl-c{KH%`o zm(f$9@nB|r(a)-d@(;P9zwwovd$`wp{Z<8IMWuvuoXI=|qQpk!Djy3`s%;4$j=d#Wzp$P!ry)04y literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..93a398f52094bb192dcf6a6384a22425228a4a09 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQhuH;jv*C{Z||PwJz&7Y6fh^I zXyfO?N4k6dSA|-JgV4Ur8rI_#S-jjDT*SZ$_NhROmYPeOcZmb--^jZ|- jhwhG=XX)R!*8hy_5@zMe4_);ZXflJRtDnm{r-UW|s!A_g literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!K1|%O$WD@{VR-P`7Ar*{o?>cfFFyLT0aMAuZ zm;BuePI{^*Esr<4ihtoOnEm1%yWgf&Ol9|K&oR^&|C<_i^l|IeerBO$-VV7b(_aBi OVeoYIb6Mw<&;$S#HzpMT literal 0 HcmV?d00001 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 77% rename from LinearAlgebra/src.meta rename to Documentation/html/rtf.meta index 6476da7..a910639 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 0000000000000000000000000000000000000000..7480553ab1bdec3bbcef46bae92a68325334b6f3 GIT binary patch literal 10323 zcmZ`R z-d#(?wZ^&koU`|@_Kj3mmB+>)$3Q|t!d6s}(L_Q*<^aF@Ls7ub)aJn+@E7_U1${Rp zBrf`Ye~`WNB|VXlXpj_Tq_w@%4>NqE2>Ks7y@Z%UZ(%$vy7hmF@nkgcG-T|N#|@+m z%D?|Dx;Zc695)#MzVARiXU<7Q6sMDbu@R($=}jb4LMW1C*dz;sbm4hkUdpdT4>LFl z4m#&HW_1i$dU`6HEq^%{;fdXZVPZxOl4N5LoP?92~ykL~vqa@oo%S z%;-$Bu=p_9@hbR0SFVj7t)e)jehAKlE~-(N#RLs3!j)vH&! zx+IEf&z?QYQHKh=5Ee$_6pr(Z`9|*;m^CE(Su3 z54hAvzkgeso9E6^?8>qw6O)ka?Cg*b5)zV-Nctj*YHH2~KQWJINgf{@gwjBzVO*)~ zgc$#+sN5j-raJ;2kx`#wQA_-qo}TXQm5t-KnWWO=)+g-k?QL*gE~%)PTQi`FYk0e@ zls~Nd{{4G!o2M3Uh11Qt!+m^x!9Lr+X?nUQY^dH#D8fk23Q9f5@@G2mnO1)0q+ zEciU!U1z;Ji)?EXKRmabL~bVT>W`x?EGV#Nde4`hp8k6@tq{Q(DO2NhY#bw>5}BKt znwpT1&=*qlEjM>#?MFy;bu})vgtix^RB%qt`c78BLobO*Rm&e;oMm(~W#!@7QeA3^ zcSYO6?d|P(@^MFd%k=WGGjntH{OwXSCue7G-Q4n)W1}{&DvVmbgC#BG%7=a7x5<3r z5!JuRD~~oSK@-&84f> zQ>jclZ8>gVsxk}FX3KX~2}HxCA|)q}rIyTWGOU`w*|~HsPL7R93Z37#rwA$JPl@|oAdUGuy>WNP z!objUS1wUjR*r6J5@~vzo}2rgo!vP<|M{lM$;k;B8M(N)_>34L4K@P&`*|i?bgbEl zkI(JJp;n>lWa*=@hzOpE`SZ)kbYXMMxc)y&4cswa9PI3(Z?_@@Qy9oV6%#P2#NT6g zSGBaO}zf6l|R_C~k|+~De6drGac} z@oL9X43%-`esopglZaULjwzl?ox#j1=!rta4ziB6u z|F{A=0y9UO4Ri(v8(XfwrGtY*XMSvoaR?0sdy6z7Jip={=ib4AnAcId3?12X`=q`Q zC?r_K?e~Dm@1331How&QACr@=Cu=`u(0X_rd!vW~^KC%&laE&k1?BEmTl9M#{kmTJ zfvS%gOtZee4lpJ>Jp3l(8Pe#|Nx*$FI(jHgkx9qcFCH^eC?G~g1}*+X7dU3@)Flu1UChWxb7IVQMs7aXhW%& zLz`dFK;g=oG^fJUU_#JgY z&^^eEG%A-IVmiST$`ZxIz+k(VM<3L^9*AM~gK>en@f&jKP1;q;6x5};(eu#Y{rmQm z5OA;6Cbtjs<~BAvhll@d8&LFn9n4po_hPKw5=Zx%yuW7bMPCzs=%)^VJb9w8r-wx$ z{AR5)$o~ex%gak9`Tm`X3RbW50H|yIHeZi7Z{Enr^neFsF|H4Id~ag1`tc*ym*w{S ze5>oTZBX)r+?AD;S%OaFgT`3>rvn2DQF+p^nZ?DMQK41H)29{swQ|MfIi;n4ewqYi zNccC$#9(KQ3q5}h&c)H)U7(3E9V-5UHg+@M;hOnni#nNkH7U%j}N!U z0Qgp0eF$t*6&L_i-~6fUkfFoV@ShFb+S-bbhv|FwE!5fsTyLk|ULFIkOE4j#rtWxm z{dR2~VAA~S$08j;}q)#^iC~Nt=Qc{XaOH0dzkdu*Rh`9AlPit*MHH+P+ z3;wg{kA0OSB_bSKsb3p@vym6!Xhri>VRmLF{+EWFlhdI*wg0!q4A8@Qq-pKo;YxKY z@eReq#Q}`PQHa1DA(l1FZzynaahcz1$;!%tRya!qbqz3Dto{L8mga(HM6?BnBI?NT?UGz@e@xnTqNH2Lo8C$o_B=|VMbgF1!NOCHC0o-@UiT zcY4+0baZrLV(CNWKPydES5^+CTLF{mZ^5e0srf9Syl2(Sgq${DnW`7roy>+wv^+uMfK_w?=0{cqgaEKpYQAkq&H4=@Ojsvp9` zQ5zDrq8&uqa6frpCA1 zQO$8VeSLDB3Fp7lT<}e-t*kg-H%|2STJ4NwC^1fqj&gExI&JpFXfvqOB|y;7P*=50 zO-&69zN(<)JTju8He_EN57@f6;9_E;N?@R(hP*1(S#I+qxk5vJ@!|#2r!sXGvA0_T zpqGm{^kI<0g<3T4HRoTA8lF!7{fDg~L=Y)MOH0d!=IG?~#FHHc`7h%IQE+xd1hn(% z-tO+_loVoW>VQ9U{NCSJI`sr> zF%FR9`$(3gBo`MBRI;S9lDQpmc9ttF0g(m`yt1-VV{h;lRL9iAPHB@E66dSqXp9@O59 zyr+jpGV3z}W>sx39RP4lE12Qy{ zb@laOVPXE~qe4-V3>5uARciQ}T3Q77_z|2qI5=EfTpjlpONoriTN_S}j_L97Jhl@w zi8&aUn9Qo_3U#V@WG~!VV9bp^=hoEJ)NG#^@m6bI_S_W3Fk|jZTBK46%Q@U33o_T~JZ4=sS^jbo;!(DAp@Avm zEWn<2J|O=w@x`|rOV;^c*UA?IJ8`E79C5aG%GY)S`+?X}|bp~yXk{Q3Sw&P%C=v$He( zTI+Vh=6M^0Kmsg!d}vm#YD#M>Dms zub)42yl&(HhzdYNKtMYU;!~_mPDCW@_(jC6K(q4Y%a`4t=&%J)UQppt^y5+pukGx} z{|bBh^eJddyxk_y&sSI8*}S5ne!m)BW%7rYmPAEFM8H?^5}ZBU-valc>n^6mkk}hd z!fn*7&C7)roLy4FcAe7G)5AbZ8zd&q$jv2nw1(f1L!HYczY^>`jE z!&YxzS8`w~PA@K)3=(a|(tS=hWI=V2h68h1v`Ydq5Lzy27-V~E>*F&aRo888%g#V# zaOD5wuwoYAWDqS3|CGY{;0BZht5!k$YjY>3HoIx2WUs717z0J7V1^iq@jEJwtamX`kFR@>@{Bv1ETs2qnEo`G?R01Ejp>p;KP8 z&@R_^tL^^4S)JL?1=C30orG|(f3+;VUa-jmwRefAcv{393IL+{6nm(uwib0LJweaP z7_rxGGAj*ZO-N6tIE#npA5T%e!{o3!ZoACP75to-SYtVepRaTD{rmS~twK3@c@wbl zFJ9b$6##qt2)HK*>CbbAISNrvm3F6;!}~y%)vK#3uqVmvy7*pk(BOCXe}4kM*y*y| z)wQwF8!grMab)A~?j(Icz@wVvy|(jlklEGwxFnkAG7N$a2?qW?9RwT<3faZQtO5e= zz{#BHi9n<;fKqf^;9D5ZtRn@%T%6=XW1-pem*S&*+}vs&%r{86vnMI!WpceQP^Do8 z@jcHvbRMQ=W@bi4K3*YN6BcV507XTWpAR)%olb0Se$lzj65T+T2$l`nGvFHthCnal zDSy||)%|q0*!cRWF?|9IV2P;j?htE|4B?#CuR7_$H^%pgI z91@-fpX1`?d)4Gz~ z9a7{M4O9?kME-e}HO?H~u_jDKKyZGsO^5c}J1;jUvjn-cp7xEV30cu*kByB<w7Rv3XuOIx6z<%KtjKtGk$O5%*$9ZRKm-G%{6DuLa#f~ZTT@e` zP)1qf=8@DsTWQka@UtQzO`Hb0zrRm+%KH=z&BoFaaDnE9CJQ0TZwiY3?yj!H#KbM) z9^f$n728c0U{i@*4J6R_xD7kdl!hD^s_@S%{+}A6-Dm8A~bp z+Q_KVxXl;9-`t#z`3?w90Z$D`>;uUwD?!LhLnFn253GLO_wRxN0xWGBQc_YXDj%o3 zopaP}t*xK#b{@CiRtya~Ak8Mj`dulHWswgl{1QJ1X=Wf*Sz|y@e23qbhTa9`>-mPP z92SAF@?`Iy1^}66bZqQX1|AL$4gl27`ax#iU>&JkMqhPZ5i?!-@@iWSy?hf3Pd1>ymap?b-|=-21U#U_RI_4Tc-uZtm3 zGPxkg132_IN#n=*8$#UD8Jf587}~%@H|f`6#FM`?9uKA{zOcg-RUTE##~f(RKpDgLLywXXtmY&9D0BV)s=nw!7MaB3sI zPPE{|VRiPiZ1^TAdK{`MD!*EN_y;Q|Iy*ZD1|odPhr%#PK%)fOt3reSo#^pO8-sHL zkQ}?aw%pv6AQ1<~4K`3GARusey^{rmq2ke3psw5B-`@avta#JObFjVbu{V{ENy4RG z{6W%k0Jfpb%*?!an9KL?@hAug0tX#!(Ju7brheMGHk23w&)6)+lwVu>>02Z86 zH&@#yDZzZz{n4C^Lk>BEAa3f!^Y0u6&G+#B&4s0Wd#de`5Sm6y+o<4GlWfK4>0FR8De1>&vT0zMNw z3L7Ale$->SK{TsJOF$UQy3{(2q>W289SVkChYh8nHhHdvu)Aiy&zt?FCh&@o! zs>wguW)(oj>kFbOCx&=qZ?ViTU&!3>p&EqnV(k(En^0P$Fqn%=7aO1Nz6#1*+t$ah zuqQEiQ*5*i^)fOt9C}rOV9OU5K@?-P-WB#DjkJx$pfxxo#KPRX=$kZ`eod(Dlz@%l`20Z!tAwhhu{&hW7rQG|bY)CE)UC8GPdU_Lkf5I|nzn%Ve%B7MY~6 zHK|Ck?lW&ODjGK1!P(3gpF+F@^0q-#eR@VLFE5`lTbNtpW$OMZ?-_8+2Ju!uT<{?LlzFd=45bV3{@Lx)|`Qd`9{q+A#k=%*2Lkju@*-4WB^ zfk`=|FKbFn9M$?74)BFVR8BtDfHqG_Dql~(L5hvCzp}cjC^QjPBBmV3bpyh(QQ>f< zNzM9Y1dP#c|2T1-O`m$4jTG#pg=NE&lqb({bN?CUJLhGBp zu}4vbOB4~AE!sSzdE8_0H^hvvEG8Eo>M9H}8Dua}5z0ZB!xp+|6BggS{zeLymJ%Ze z>$PUwD;qpR_iSRm`^ahpc@aj=5J7l-&)ghw#7({ilt|uU(J+Dr3Wl8j{xb-j&D^Q7 z;q!BWuZo4OG&zxI!7~?L3L_)Axw%o=PI9!NmcZv5TukH~>X679cDpeVv2iKONCGNy z(_h^!0Cd-jr`PYYjWaHS_-HiIO&zQRB9g!ib-!r+-a<8Q|7Rt&o@0yp zIU+w3$^6HcTQAG)Hd6BR{L7qh7+-^X;H148<_S|(Xzc}(d;xkGob5@@^K6&Z_D(!T z4i1JQ+E75+Sd5!NPjI3IRPve8N}Hn_+}S^lPM8-RHQ91hitInh!zLGqxF92a_6)TK z+j3*->D-g_xgLxhV_OG@+tYq(;7LKeBLZeJ!29g`$@$8O(^3FCeCXjVrMSD_sie8v z7Dgd83j+K?@sY(JKXOughk)NM_7ijS^Yc@)F$DoY9Ei=ghmyhQ)x5f~x|)}t|5L18 zdlyjMAcm;ZJ%%`v>Uj{a{Lof>R@dU~*7Q0NbwuE0b5D5iH4$I`wt; zFC#Pz9*%S56DAz+@D2zU;Q9#TdIrbFR6$^di<`x35#E~c+}w^X)SePoDi(l?_YFS3 z&X>m^{t{vwYKe67!BOLpW{*FB-#icIa~fws?#>sxnUj;_`(<7^dJzt0xoZ7Ac1SF! z8Rau^o3mKig6&{#V03CFMitkm_ItK>bybp|Uu%y^%aa%iG*ZWuZDI*X0`S^G8 z^+LSeuyteu3<$EugV7DBk&w`?|Gf)9&2RnjVza6>+*Ys7d}|L*~c~Y zNYvP11`dLBPcq9%EbKN*XfSXlJ$-%lZZ0%&$Syu`mm5vB>?f(-#*fSacGlL`KzWP? z%>o_=37fl0xsdv+R~}a5 z4j4v&1Y~}G-tY1V7#I~WL#7h*2J{3R!fv@7_o&eD0wMZ%CoDL>GAO?teCd6gbTnDrdcqn5svdUN3&q1VPVPP>^ z@v7_*U3 z{T8_TCh+WF)C0I?ZzsSM->Ebb{?Cb&($BnN(1SX`ji)#Op(i&24m2cTV-emzgk6A zb(qRt>;+jsP%sk5SK0)H+}zx7>}P_07YCU)Kw$x67AcdM^let!h?`abN{iJU6cl7X z+x$w5879md>{`W@-P+L1It&T`Tyu zdi2K+>3kR%djbTi?j!ZJb9N3ly8;i$M(qT6`XlkjSxm%E@;K1jAW_fA5brZHG%!F} zk@ZzI(WI_B!QlHH25W9?{8mtqh&cXPxe7)Q`W<42Z<=01q`~OSWL(RAcU23BMj$cb zg-?l8O?+b|nisTe2d5$f~N7@hP;dig*$g81zN4rR&d6^Hf- z0s(kJ(siTfd`D&W%J+-e+!#*x2^ioLbLg3Zu+IVc!p~ca@q!_BQY0P~ngbNpfv`42 z8epyj$jGlp^go9TZ-eP9c%|aV5e(8Rz#vugo{@9I z*`C=TP#z;Tj|OAK`ue|j*XM;QU*LYPG*dG5zB_&?EVR+qo&kqQG+g(;^IuSr7f&#W zci%g!%Eo?Pau^#YIpZM1API(Xt`z+| zALr@Nx_K!2TPQ;cu_9&8KrAZ$?y4#;uNydCkOKaD*QWRRB7!w^Ds9z+seJn9vI!D> zc$V%DxiaK%S;<|k^GWHTmr6WtOstrgvIyo-qeEMtX4Ru_i-Tit4*iLV`4CK@whP#u zLY<@~mrJ(mjLU?+7G@eUmGG;nz=k<94_t&eX39^(d-R+Y@z7eP z!nZ-5rZ3rh-UhbY{5boXt1D@C=x=v6SJCPX)jEtchw54OKD!L~<;rd*;g<-Bem_wN z8|t(_@>*W`=^^y=So7G_oik`O!`njljXZbwleYZ`pA=o3drYA4&g%YTtv2&rSg4(m z4N={3Q%LM!OJ?@Vrz20(;25%n%RaVpz**2rM`hjAytex+o|9)z)SC)&wH$XAN>9wnCA5o zDXEF6y3okA3{G!ix@uT&OAXh&_PMd#8 z@tqB8czCRo7Q9W@Mk?r${C{4dD}&Wk?UMaJZ`@r6NYz{RPt$yC18)f;DaxwKRKQJx F{|DE2^oRfe literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b808c356735d4a1a08bccaced3bd8305eefcb6db GIT binary patch literal 565 zcmV-50?Pe~P)W7Dir#LVva2S`&=)l0h|NsB9NT2)w000SeQchC<|NsC0|NsC0Hv*f~0005N zNkl5s`%)O+<81 z-+&I{PDG>?UOys|m!5Cd?*b}xa@wMA!fe;Sg-%{cDav!6gOyo*`MNh-b&~7HFly9t zT%zkE4~4NU?6x{vt?y1N!*JFz&Xh%K|3Luru7uF5-ptvX3Uq31}&x0Eb1_UQV^Lt*UEnyt>(XnD28>$6sI#zb1; zqx&U#sKUO@%Fc6*<|w`L)#DnScPSFTL(j|+t?GG&9%^}o9!~OKXxZVaRo*Lj@9?SL z)mb+W6;o6-y{`qA9qu1eW@ZaHnwj~aeij`<2qyXiG1g?^#9Hh{A+}S4&0d&w$^T;a=4F>hMBP5+xR0AkNp%TJ+a#%;28zNXIh$eO-k{$uvaO~ zeBJ#c)M?TxpVpukK`#t{D*fYLC^Fk)Xa6tLBeAFB=Uu-v&HCjJJKxVCXFOLWaXr2L zb%m7ou3OWxH~+YmdCehc>QT8%H`(`A^Izq>xOt)U7wt2x9-C6Pu6)1UC)xkfm93|3 zqZU@%vM*G7$nI^X7Q?~2`lG@U>oexRKHWIK{8{e8O&`UoJQ|KJOXY8$Avi_62#hf&+2fZjX zv7VBbi6P-3k@(|(u2z9VehM8OZ<@I~J0f;W=;&}2+?A)jd&_@U zm+9N)WxwASKl?+)897&tyVITelkdJ{&lQ}=8GC4EK$ho{CGLN@c4hxOEi(Id(Q>~P zDJL3#=AKsYTKX)C1C(Z}NbXVn-#n$kz3u8FGuKu&|g2ZMKE%EA; zuQa94#cXc(>Obl9A~@{U*MHjf#&8+@o+hk g<#vBKouqV_AhCWRcX*5yME{Iu_lzo1n6%}IgG%PfMvqIEI7O0sq&XS(En;RUyOif}e52&W zJO}mjaW1zRe`+!_MDwvQOq1bY(6JO?h$vEE*zm-GA>m{r!+}Z6j18*nObp)03Vzi$ zI&mbbD|U3eQDzqs-1x*nNom?Mhwb^Tv-p}jUR=CYwy)zv5ch&7F-&{Ur9JQN(AgTb z@bv5{S@XZy9!-8Kzdrlp(*>FTR1zbe`Zs_>=6uer>1!kZsVsEs_K-a-cj+qop5^VY znqEY1UCh2J=%P~4@m=7c=|3OMJ*`7*MNa>z|4bK3o=PihO*K}?{V%lQ^#pllU#mCM z9iC3%NniGIq0q&%%Z&A8_8zY~?drn+|FrfLI zCgiw9f7nyIhHHw9_k!y?=Y3)}^YptSI)_o!KS-`GMA$7qIrH;NUdhK;}<}PqReVS7HLuy5T&@Ubhao^%{2dzj~ z6NlDk3*#AAF3~IFGnw?o;cc*Q!!Fk=m8-(PE{tLLy8Dmw0>gC95WR2Ht_GWd6VH(p z~Jq|I4REzls-Z7k?hlym#M;zxU@svcN4tjbjq#m+U{;Oo@yA SQ^W+!WDK6JelF{r5}E+ER;Vuk literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1433a13eac26a3335d2b43c8a474867ff3b418b3 GIT binary patch literal 1319 zcmbW1Yfw{17=}-zGA_%1xMf=yCHo2cKF&9JcFQ*Dw*_6tW<)buq)x^orQDNTLYU-83R4E zJdf9(R&AfiNHI~@AC&Nk>mK(z_a)h>*6drrJL^fO@0*Wi^Mj*-g9AlIC6O}07P_Q1 zAK|p+DksI+{Hc+y`IB|M&krE?N;d;(?6MXs6U2b!F<6v=Gr1e(zM7_)uubunbn$r4 zm^VqRyMgGNbX_-+Rvj5Z<%(CazeO_W-ff0Q$gT05+7VfV^R9-IS^;~!5#jTT%u7a} zwz|s49Bao~XxGDh43Bb<1Z6-4;db%T6786L5iszkf1cqY?3Itt0nPmGU-n?KyZmp8 z+!66=ndW$BA$ZA;?5c$A5n45ZOSp(!Tux<%L<8XkB|@g$ zJ%LKsjF(w-j% z*os{)>c5sefG^b-G}1~mv6aTl2N(NK|JnA(`DYuXsJ^GAebS#$Ai4wt>xSO7gvcJf(cW1WA0}(lfu&;O`$c~ ziGbD;1)*Wli#hHS@|Ki=FtxdirE$4Cq#YKVN~7zp{vJE1^C_O1cR}Lg1`^5bYTsXt z9mAinm`|Ge=_2y2GSKW6!+g0a)oZ-{`HSjoE zT?u0supft6nxZet7>M{P*4c1VON&7DVM+mlDGv>by($!I5~Xp+#g {\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 77% rename from LinearAlgebra/test.meta rename to Documentation/html/search.meta index 7b069c9..d7cc1d3 100644 --- a/LinearAlgebra/test.meta +++ b/Documentation/html/search.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9b84f664459d02b90894e460de42c219 +guid: 7a30cca37cad05ccf90f9d9f0537d338 folderAsset: yes DefaultImporter: externalObjects: {} 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; e-{AmhX=Jf@VhhPiD4GOiz; zcRywnUC`Ll$Sd-o>+3=W-UUqj5(`XT7ERB)UpDFUyAP*t|6|+dt@(PF-f5%rpDp?h z8`Lm9nXIBPiBx3galCL(_5JVip`lkxV{dOOjrG4AGBxPezWd+zX3l!O%kKZ{>GPgf pez!SazCHJIhLC_K8R-87{yTf@e9voK&Ifvy!PC{xWt~$(695x~V|f4o literal 0 HcmV?d00001 diff --git a/Documentation/html/splitbar.png.meta b/Documentation/html/splitbar.png.meta new file mode 100644 index 0000000..549ae70 --- /dev/null +++ b/Documentation/html/splitbar.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: e85ea107c00aa2857800f71453860bed +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/splitbard.png b/Documentation/html/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..078a6016357fce7c1354b3b4a9dc33e88a794b0f GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@Vh8*`ZgMOZI3 zo8RDQ^5tC7*dXQMxw64;#qI2q)BbR6m~-axA9}sSz|ZX@AWRd)1MeW zy9&AmwgieKinvM;!@L+jA@}yY^UwdqufP8H{`>4w3z@v_w_ks?lIwr}{rCN_@4su~ oWA&!L7p)T~&Oju~FP^VuIxVNlE%qkV2n!CN78?;SpcOqIf4>i+=%}9071pEpCcLwha_i{q0=#{!j5t+!ddJg6b5Y zM?4Z|0QSKvu8MwfT|BYgbOY9US-dO zZ+;Bm5a`Rk5Z}xZ+!Ch%?8?f@02~z+6#+Q$i95oj0Rkck6jYbXMPFavf32;p0FG*F zYl+2T6c-l**u}(I4G^_Yjo0gCXlRH~DCFMS+5&L2xw%Pmb2G!k!&FvQ0@x)qK-l_A zAP``5bd-jM27rChk&KLtP+wmU6x65&2$@$cEiELINvf*!o9~py#zrEM2+?TNklQRh zJ+!yC=dR1k%Sj{>w6*D`&o5mKa6((Xy}b+$4pLH50_1C5T^-?Y*!ZK4&Mew_Q&SU= zuO5%bc!_vCzGi-G4dBvNMMVX`o+c(HcE)WP34oo?=lg9<72kCzlarHlbac?&txGsx z*4EZoUtc#?mGwI?{il3)V*#bp&(P082|tq*5tkef$0Xy*5*B{p%>Fr>9w2 zSpf>_oQ@zUjrY1~t#@?z0|NuBuC6jSr|$qzNEbj?R~J)LQ^qs`*j&^A+R!AIOHjE? z=yvN=Wi~c89220fxb5w2GMNm3-5Wiu%mAmwM{yM35Tvsk_#ZRbeG%6H4$0rzx&1_Y zDs*{iJ_qJ)(sVfVN5li&djJQZo9ni7D}e zb+_a3lei?#i@!9tiR$b@q5*&CX(irfJ2mDT!0vyUi>NUe>C5l{0000F_#va9;C=_rI)&wWv!QmB?sLFtFi9$%+8pZFp6!xzC1rNnMvMf=AHL_ z-m7PRejeZ`Ux}C)5LZN-@QJ^~ns_OmiQfU-Q~|hX72k@qc?>v0&s{RF|0{kLKZ-v9 zN4O=3i-+O@zzO)p4KX2ZiO2SfUcesTh+jUUb9)PjN8W)5NF>7E-X4I%&dv_Ky}iuL%+S)(0^laC z38H`_LZJ||v$J${bpaeppCp^j(%IPwP${7aBK9+VeSKsy83F-)@Bg>%?rvhS7>Pu} z5Rbkvj({dOYrV9wu`#Bmrl_s01p8frO>(o0<@I($$_8*4BVJ0RfjG3fu zX=%y$bLGpOo0~I^cXxMLUS4K(bro>LnwEt^WrFqfb#l3!G0%g+pzETt=D$AO;^HD3 z8yf(X3i<>(JiqFK1stKnFgZEN=H@1ag5HPo#gB}Pu&}UT3?G1tuQh=lXpuWCP>yQo z^_FC)sto3oTFs3_6aJ&Sm3U!xYK%8PrT+lGHK=%)lwnT*0000klVg2=WT&kP%mU=OCz5} zJ${Fq&Xjq(4m2ki)P)&HD>cpZELU%swqk|qmC5V}h=w0jf7+x2#T Rl7Qwgc)I$ztaD0e0svF%CN%&6 literal 0 HcmV?d00001 diff --git a/Documentation/html/tab_ad.png.meta b/Documentation/html/tab_ad.png.meta new file mode 100644 index 0000000..48ab45d --- /dev/null +++ b/Documentation/html/tab_ad.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 1349c78b8a0f35066b36965e60f5629c +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/tab_b.png b/Documentation/html/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..055273a5d1ae6a3f8f295f39dc05dd0b054d7097 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QZb$`jv*C{Z}0BrWL1=Kd3ay) z;DK*Etj_U24yEa)m!HimvX(e^e2e09nTYJfo`?5lXX~D`v^|ReDe*?JdSVvc27WXO3;nFm1~a{pG!zf>=CSbzy4ZOz*X*&uxwYa jm*NfQi_e+YxGm@JrXN`60gsmQgcnZ^H> wOo=l*#;xS^-gZh*J>w70?Aqf3OmmC*pPP%klE2<{0cZ<@r>mdKI;Vst0GtvwE&u=k literal 0 HcmV?d00001 diff --git a/Documentation/html/tab_h.png.meta b/Documentation/html/tab_h.png.meta new file mode 100644 index 0000000..6b8db80 --- /dev/null +++ b/Documentation/html/tab_h.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 27ca5a7c78903c731bc290365641f63a +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/tab_hd.png b/Documentation/html/tab_hd.png new file mode 100644 index 0000000000000000000000000000000000000000..c0d7a0e296773e67aa258bfa6df5b7eb373bc026 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|_=jF(~r5UVP#z zaOBvzTk?t>-i7~9ORC*9+1y&a--|i))`Gww%I(^piuEgQ5_hPeo rT~wBe7<|@enD4~#e#td0%jfL9UpbXO|E}l)TEO7x>gTe~DWM4fXB;!r literal 0 HcmV?d00001 diff --git a/Documentation/html/tab_hd.png.meta b/Documentation/html/tab_hd.png.meta new file mode 100644 index 0000000..91e9fff --- /dev/null +++ b/Documentation/html/tab_hd.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 64af34948dd43e6619d81ac4c5476b79 +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/tab_s.png b/Documentation/html/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..cdff2fba9b527d9c261c49eec56ccfa3e7a3187b GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qn{Wkjv*C{Z|~mhJgUIJ8Zh(r zG^KSaT6vvZl=W=^Ce!ch6hCeEM$9w7Pr36s)**1{+1~bIzUP&XEcha_6MGu3RRw!FdT}bUSUj(95imGbr?K>ZPL#sOy?c}Y Q0xf3nboFyt=akR{04kF|M*si- literal 0 HcmV?d00001 diff --git a/Documentation/html/tab_s.png.meta b/Documentation/html/tab_s.png.meta new file mode 100644 index 0000000..0c6f2c9 --- /dev/null +++ b/Documentation/html/tab_s.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 62d3171cd55208db9bafd0df0156d39d +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/tab_sd.png b/Documentation/html/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..f07790c811efbb6418d78042ddca88beacd8833c GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QgNOxjv*C{Z|~mbbP!}8WPReYPho*{k1Yul;()((stWd)c*HS6}N2;@bD#*^ARM{fLC1Q^lU| z1?LV%aVMWyx^>@_pb0@v9E|5Im0KDNzXf>Jf11O-!F0d)8K6xJp00i_>zopr0PPPp AKL7v# literal 0 HcmV?d00001 diff --git a/Documentation/html/tab_sd.png.meta b/Documentation/html/tab_sd.png.meta new file mode 100644 index 0000000..62840d5 --- /dev/null +++ b/Documentation/html/tab_sd.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: c1bede191be9bfd258777bfb640909d8 +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/tabs.css b/Documentation/html/tabs.css new file mode 100644 index 0000000..b70e9b0 --- /dev/null +++ b/Documentation/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>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 0000000000000000000000000000000000000000..7480553ab1bdec3bbcef46bae92a68325334b6f3 GIT binary patch literal 10323 zcmZ`R z-d#(?wZ^&koU`|@_Kj3mmB+>)$3Q|t!d6s}(L_Q*<^aF@Ls7ub)aJn+@E7_U1${Rp zBrf`Ye~`WNB|VXlXpj_Tq_w@%4>NqE2>Ks7y@Z%UZ(%$vy7hmF@nkgcG-T|N#|@+m z%D?|Dx;Zc695)#MzVARiXU<7Q6sMDbu@R($=}jb4LMW1C*dz;sbm4hkUdpdT4>LFl z4m#&HW_1i$dU`6HEq^%{;fdXZVPZxOl4N5LoP?92~ykL~vqa@oo%S z%;-$Bu=p_9@hbR0SFVj7t)e)jehAKlE~-(N#RLs3!j)vH&! zx+IEf&z?QYQHKh=5Ee$_6pr(Z`9|*;m^CE(Su3 z54hAvzkgeso9E6^?8>qw6O)ka?Cg*b5)zV-Nctj*YHH2~KQWJINgf{@gwjBzVO*)~ zgc$#+sN5j-raJ;2kx`#wQA_-qo}TXQm5t-KnWWO=)+g-k?QL*gE~%)PTQi`FYk0e@ zls~Nd{{4G!o2M3Uh11Qt!+m^x!9Lr+X?nUQY^dH#D8fk23Q9f5@@G2mnO1)0q+ zEciU!U1z;Ji)?EXKRmabL~bVT>W`x?EGV#Nde4`hp8k6@tq{Q(DO2NhY#bw>5}BKt znwpT1&=*qlEjM>#?MFy;bu})vgtix^RB%qt`c78BLobO*Rm&e;oMm(~W#!@7QeA3^ zcSYO6?d|P(@^MFd%k=WGGjntH{OwXSCue7G-Q4n)W1}{&DvVmbgC#BG%7=a7x5<3r z5!JuRD~~oSK@-&84f> zQ>jclZ8>gVsxk}FX3KX~2}HxCA|)q}rIyTWGOU`w*|~HsPL7R93Z37#rwA$JPl@|oAdUGuy>WNP z!objUS1wUjR*r6J5@~vzo}2rgo!vP<|M{lM$;k;B8M(N)_>34L4K@P&`*|i?bgbEl zkI(JJp;n>lWa*=@hzOpE`SZ)kbYXMMxc)y&4cswa9PI3(Z?_@@Qy9oV6%#P2#NT6g zSGBaO}zf6l|R_C~k|+~De6drGac} z@oL9X43%-`esopglZaULjwzl?ox#j1=!rta4ziB6u z|F{A=0y9UO4Ri(v8(XfwrGtY*XMSvoaR?0sdy6z7Jip={=ib4AnAcId3?12X`=q`Q zC?r_K?e~Dm@1331How&QACr@=Cu=`u(0X_rd!vW~^KC%&laE&k1?BEmTl9M#{kmTJ zfvS%gOtZee4lpJ>Jp3l(8Pe#|Nx*$FI(jHgkx9qcFCH^eC?G~g1}*+X7dU3@)Flu1UChWxb7IVQMs7aXhW%& zLz`dFK;g=oG^fJUU_#JgY z&^^eEG%A-IVmiST$`ZxIz+k(VM<3L^9*AM~gK>en@f&jKP1;q;6x5};(eu#Y{rmQm z5OA;6Cbtjs<~BAvhll@d8&LFn9n4po_hPKw5=Zx%yuW7bMPCzs=%)^VJb9w8r-wx$ z{AR5)$o~ex%gak9`Tm`X3RbW50H|yIHeZi7Z{Enr^neFsF|H4Id~ag1`tc*ym*w{S ze5>oTZBX)r+?AD;S%OaFgT`3>rvn2DQF+p^nZ?DMQK41H)29{swQ|MfIi;n4ewqYi zNccC$#9(KQ3q5}h&c)H)U7(3E9V-5UHg+@M;hOnni#nNkH7U%j}N!U z0Qgp0eF$t*6&L_i-~6fUkfFoV@ShFb+S-bbhv|FwE!5fsTyLk|ULFIkOE4j#rtWxm z{dR2~VAA~S$08j;}q)#^iC~Nt=Qc{XaOH0dzkdu*Rh`9AlPit*MHH+P+ z3;wg{kA0OSB_bSKsb3p@vym6!Xhri>VRmLF{+EWFlhdI*wg0!q4A8@Qq-pKo;YxKY z@eReq#Q}`PQHa1DA(l1FZzynaahcz1$;!%tRya!qbqz3Dto{L8mga(HM6?BnBI?NT?UGz@e@xnTqNH2Lo8C$o_B=|VMbgF1!NOCHC0o-@UiT zcY4+0baZrLV(CNWKPydES5^+CTLF{mZ^5e0srf9Syl2(Sgq${DnW`7roy>+wv^+uMfK_w?=0{cqgaEKpYQAkq&H4=@Ojsvp9` zQ5zDrq8&uqa6frpCA1 zQO$8VeSLDB3Fp7lT<}e-t*kg-H%|2STJ4NwC^1fqj&gExI&JpFXfvqOB|y;7P*=50 zO-&69zN(<)JTju8He_EN57@f6;9_E;N?@R(hP*1(S#I+qxk5vJ@!|#2r!sXGvA0_T zpqGm{^kI<0g<3T4HRoTA8lF!7{fDg~L=Y)MOH0d!=IG?~#FHHc`7h%IQE+xd1hn(% z-tO+_loVoW>VQ9U{NCSJI`sr> zF%FR9`$(3gBo`MBRI;S9lDQpmc9ttF0g(m`yt1-VV{h;lRL9iAPHB@E66dSqXp9@O59 zyr+jpGV3z}W>sx39RP4lE12Qy{ zb@laOVPXE~qe4-V3>5uARciQ}T3Q77_z|2qI5=EfTpjlpONoriTN_S}j_L97Jhl@w zi8&aUn9Qo_3U#V@WG~!VV9bp^=hoEJ)NG#^@m6bI_S_W3Fk|jZTBK46%Q@U33o_T~JZ4=sS^jbo;!(DAp@Avm zEWn<2J|O=w@x`|rOV;^c*UA?IJ8`E79C5aG%GY)S`+?X}|bp~yXk{Q3Sw&P%C=v$He( zTI+Vh=6M^0Kmsg!d}vm#YD#M>Dms zub)42yl&(HhzdYNKtMYU;!~_mPDCW@_(jC6K(q4Y%a`4t=&%J)UQppt^y5+pukGx} z{|bBh^eJddyxk_y&sSI8*}S5ne!m)BW%7rYmPAEFM8H?^5}ZBU-valc>n^6mkk}hd z!fn*7&C7)roLy4FcAe7G)5AbZ8zd&q$jv2nw1(f1L!HYczY^>`jE z!&YxzS8`w~PA@K)3=(a|(tS=hWI=V2h68h1v`Ydq5Lzy27-V~E>*F&aRo888%g#V# zaOD5wuwoYAWDqS3|CGY{;0BZht5!k$YjY>3HoIx2WUs717z0J7V1^iq@jEJwtamX`kFR@>@{Bv1ETs2qnEo`G?R01Ejp>p;KP8 z&@R_^tL^^4S)JL?1=C30orG|(f3+;VUa-jmwRefAcv{393IL+{6nm(uwib0LJweaP z7_rxGGAj*ZO-N6tIE#npA5T%e!{o3!ZoACP75to-SYtVepRaTD{rmS~twK3@c@wbl zFJ9b$6##qt2)HK*>CbbAISNrvm3F6;!}~y%)vK#3uqVmvy7*pk(BOCXe}4kM*y*y| z)wQwF8!grMab)A~?j(Icz@wVvy|(jlklEGwxFnkAG7N$a2?qW?9RwT<3faZQtO5e= zz{#BHi9n<;fKqf^;9D5ZtRn@%T%6=XW1-pem*S&*+}vs&%r{86vnMI!WpceQP^Do8 z@jcHvbRMQ=W@bi4K3*YN6BcV507XTWpAR)%olb0Se$lzj65T+T2$l`nGvFHthCnal zDSy||)%|q0*!cRWF?|9IV2P;j?htE|4B?#CuR7_$H^%pgI z91@-fpX1`?d)4Gz~ z9a7{M4O9?kME-e}HO?H~u_jDKKyZGsO^5c}J1;jUvjn-cp7xEV30cu*kByB<w7Rv3XuOIx6z<%KtjKtGk$O5%*$9ZRKm-G%{6DuLa#f~ZTT@e` zP)1qf=8@DsTWQka@UtQzO`Hb0zrRm+%KH=z&BoFaaDnE9CJQ0TZwiY3?yj!H#KbM) z9^f$n728c0U{i@*4J6R_xD7kdl!hD^s_@S%{+}A6-Dm8A~bp z+Q_KVxXl;9-`t#z`3?w90Z$D`>;uUwD?!LhLnFn253GLO_wRxN0xWGBQc_YXDj%o3 zopaP}t*xK#b{@CiRtya~Ak8Mj`dulHWswgl{1QJ1X=Wf*Sz|y@e23qbhTa9`>-mPP z92SAF@?`Iy1^}66bZqQX1|AL$4gl27`ax#iU>&JkMqhPZ5i?!-@@iWSy?hf3Pd1>ymap?b-|=-21U#U_RI_4Tc-uZtm3 zGPxkg132_IN#n=*8$#UD8Jf587}~%@H|f`6#FM`?9uKA{zOcg-RUTE##~f(RKpDgLLywXXtmY&9D0BV)s=nw!7MaB3sI zPPE{|VRiPiZ1^TAdK{`MD!*EN_y;Q|Iy*ZD1|odPhr%#PK%)fOt3reSo#^pO8-sHL zkQ}?aw%pv6AQ1<~4K`3GARusey^{rmq2ke3psw5B-`@avta#JObFjVbu{V{ENy4RG z{6W%k0Jfpb%*?!an9KL?@hAug0tX#!(Ju7brheMGHk23w&)6)+lwVu>>02Z86 zH&@#yDZzZz{n4C^Lk>BEAa3f!^Y0u6&G+#B&4s0Wd#de`5Sm6y+o<4GlWfK4>0FR8De1>&vT0zMNw z3L7Ale$->SK{TsJOF$UQy3{(2q>W289SVkChYh8nHhHdvu)Aiy&zt?FCh&@o! zs>wguW)(oj>kFbOCx&=qZ?ViTU&!3>p&EqnV(k(En^0P$Fqn%=7aO1Nz6#1*+t$ah zuqQEiQ*5*i^)fOt9C}rOV9OU5K@?-P-WB#DjkJx$pfxxo#KPRX=$kZ`eod(Dlz@%l`20Z!tAwhhu{&hW7rQG|bY)CE)UC8GPdU_Lkf5I|nzn%Ve%B7MY~6 zHK|Ck?lW&ODjGK1!P(3gpF+F@^0q-#eR@VLFE5`lTbNtpW$OMZ?-_8+2Ju!uT<{?LlzFd=45bV3{@Lx)|`Qd`9{q+A#k=%*2Lkju@*-4WB^ zfk`=|FKbFn9M$?74)BFVR8BtDfHqG_Dql~(L5hvCzp}cjC^QjPBBmV3bpyh(QQ>f< zNzM9Y1dP#c|2T1-O`m$4jTG#pg=NE&lqb({bN?CUJLhGBp zu}4vbOB4~AE!sSzdE8_0H^hvvEG8Eo>M9H}8Dua}5z0ZB!xp+|6BggS{zeLymJ%Ze z>$PUwD;qpR_iSRm`^ahpc@aj=5J7l-&)ghw#7({ilt|uU(J+Dr3Wl8j{xb-j&D^Q7 z;q!BWuZo4OG&zxI!7~?L3L_)Axw%o=PI9!NmcZv5TukH~>X679cDpeVv2iKONCGNy z(_h^!0Cd-jr`PYYjWaHS_-HiIO&zQRB9g!ib-!r+-a<8Q|7Rt&o@0yp zIU+w3$^6HcTQAG)Hd6BR{L7qh7+-^X;H148<_S|(Xzc}(d;xkGob5@@^K6&Z_D(!T z4i1JQ+E75+Sd5!NPjI3IRPve8N}Hn_+}S^lPM8-RHQ91hitInh!zLGqxF92a_6)TK z+j3*->D-g_xgLxhV_OG@+tYq(;7LKeBLZeJ!29g`$@$8O(^3FCeCXjVrMSD_sie8v z7Dgd83j+K?@sY(JKXOughk)NM_7ijS^Yc@)F$DoY9Ei=ghmyhQ)x5f~x|)}t|5L18 zdlyjMAcm;ZJ%%`v>Uj{a{Lof>R@dU~*7Q0NbwuE0b5D5iH4$I`wt; zFC#Pz9*%S56DAz+@D2zU;Q9#TdIrbFR6$^di<`x35#E~c+}w^X)SePoDi(l?_YFS3 z&X>m^{t{vwYKe67!BOLpW{*FB-#icIa~fws?#>sxnUj;_`(<7^dJzt0xoZ7Ac1SF! z8Rau^o3mKig6&{#V03CFMitkm_ItK>bybp|Uu%y^%aa%iG*ZWuZDI*X0`S^G8 z^+LSeuyteu3<$EugV7DBk&w`?|Gf)9&2RnjVza6>+*Ys7d}|L*~c~Y zNYvP11`dLBPcq9%EbKN*XfSXlJ$-%lZZ0%&$Syu`mm5vB>?f(-#*fSacGlL`KzWP? z%>o_=37fl0xsdv+R~}a5 z4j4v&1Y~}G-tY1V7#I~WL#7h*2J{3R!fv@7_o&eD0wMZ%CoDL>GAO?teCd6gbTnDrdcqn5svdUN3&q1VPVPP>^ z@v7_*U3 z{T8_TCh+WF)C0I?ZzsSM->Ebb{?Cb&($BnN(1SX`ji)#Op(i&24m2cTV-emzgk6A zb(qRt>;+jsP%sk5SK0)H+}zx7>}P_07YCU)Kw$x67AcdM^let!h?`abN{iJU6cl7X z+x$w5879md>{`W@-P+L1It&T`Tyu zdi2K+>3kR%djbTi?j!ZJb9N3ly8;i$M(qT6`XlkjSxm%E@;K1jAW_fA5brZHG%!F} zk@ZzI(WI_B!QlHH25W9?{8mtqh&cXPxe7)Q`W<42Z<=01q`~OSWL(RAcU23BMj$cb zg-?l8O?+b|nisTe2d5$f~N7@hP;dig*$g81zN4rR&d6^Hf- z0s(kJ(siTfd`D&W%J+-e+!#*x2^ioLbLg3Zu+IVc!p~ca@q!_BQY0P~ngbNpfv`42 z8epyj$jGlp^go9TZ-eP9c%|aV5e(8Rz#vugo{@9I z*`C=TP#z;Tj|OAK`ue|j*XM;QU*LYPG*dG5zB_&?EVR+qo&kqQG+g(;^IuSr7f&#W zci%g!%Eo?Pau^#YIpZM1API(Xt`z+| zALr@Nx_K!2TPQ;cu_9&8KrAZ$?y4#;uNydCkOKaD*QWRRB7!w^Ds9z+seJn9vI!D> zc$V%DxiaK%S;<|k^GWHTmr6WtOstrgvIyo-qeEMtX4Ru_i-Tit4*iLV`4CK@whP#u zLY<@~mrJ(mjLU?+7G@eUmGG;nz=k<94_t&eX39^(d-R+Y@z7eP z!nZ-5rZ3rh-UhbY{5boXt1D@C=x=v6SJCPX)jEtchw54OKD!L~<;rd*;g<-Bem_wN z8|t(_@>*W`=^^y=So7G_oik`O!`njljXZbwleYZ`pA=o3drYA4&g%YTtv2&rSg4(m z4N={3Q%LM!OJ?@Vrz20(;25%n%RaVpz**2rM`hjAytex+o|9)z)SC)&wH$XAN>9wnCA5o zDXEF6y3okA3{G!ix@uT&OAXh&_PMd#8 z@tqB8czCRo7Q9W@Mk?r${C{4dD}&Wk?UMaJZ`@r6NYz{RPt$yC18)f;DaxwKRKQJx F{|DE2^oRfe literal 0 HcmV?d00001 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/BrainPickerWindow.cs.meta b/Editor/BrainPickerWindow.cs.meta index b2de114..1468869 100644 --- a/Editor/BrainPickerWindow.cs.meta +++ b/Editor/BrainPickerWindow.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: 9197e2d322d23b5798ab4aef729815b0 \ No newline at end of file +guid: 9197e2d322d23b5798ab4aef729815b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Brain_Editor.cs.meta b/Editor/Brain_Editor.cs.meta index eaf830b..c91bea9 100644 --- a/Editor/Brain_Editor.cs.meta +++ b/Editor/Brain_Editor.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: f05072314d39990639a2dbf99f322664 \ No newline at end of file +guid: f05072314d39990639a2dbf99f322664 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/ClusterEditor.cs b/Editor/ClusterEditor.cs index 725b27d..0c4b623 100644 --- a/Editor/ClusterEditor.cs +++ b/Editor/ClusterEditor.cs @@ -64,22 +64,24 @@ namespace NanoBrain { public class GraphEditor : GraphView { protected ClusterPrefab prefab; - protected Nucleus currentPrefabNucleus; + //protected Nucleus currentPrefabNucleus; protected override Nucleus currentNucleus { get => base.currentNucleus; set { base.currentNucleus = value; - this.currentPrefabNucleus = value != null ? this.prefab.GetNucleus(value.name) : null; + // this.currentPrefabNucleus = value != null ? this.prefab.GetNucleus(value.name) : null; } } - public GraphEditor(ClusterPrefab prefab) : base(prefab.output.parent) { + public GraphEditor(ClusterPrefab prefab) : base(prefab.cluster.defaultOutput.parent) { this.prefab = prefab; // In a Prefab editor, no instance exists but we need it for the ClusterViewer. // So we create a temporary instance - this.currentCluster = new(prefab); + //this.currentCluster = new(prefab); + this.currentCluster = prefab.cluster; + this.currentCluster.Refresh(); } public void SetGraph(GameObject gameObject, VisualElement inspectorContainer) { @@ -87,7 +89,7 @@ namespace NanoBrain { if (Application.isPlaying == false) this.serializedBrain = new SerializedObject(this.prefab); - this.selectedOutput = this.currentCluster.outputs[0]; + this.selectedOutput = this.currentCluster.defaultOutput; this.currentNucleus = this.selectedOutput; //this.currentCluster = this.currentNucleus.parent; Rebuild(inspectorContainer); @@ -120,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.nuclei) { - nucleus.Initialize(); - } + // foreach (Nucleus nucleus in this.prefab.cluster.nuclei) { + // nucleus.Initialize(); + // } this.inspectorIMGUIContainer = new IMGUIContainer(() => InspectorHandler(so)); @@ -163,29 +165,10 @@ namespace NanoBrain { GUILayout.Label(nucleusType, headerStyle); // Nucleus name - Cluster cluster = this.currentPrefabNucleus as Cluster; - if (cluster != null) { - EditorGUILayout.BeginHorizontal(); - if (GUILayout.Button(this.currentNucleus.parent.name)) - OnClusterClick(cluster); - EditorGUI.BeginDisabledGroup(true); - EditorGUILayout.TextField(this.currentNucleus.name, boldTextFieldStyle); - EditorGUI.EndDisabledGroup(); - if (GUILayout.Button("Reimport")) - ReimportCluster(cluster); - EditorGUILayout.EndHorizontal(); - } - else { - string newName = EditorGUILayout.TextField(this.currentNucleus.name, boldTextFieldStyle); - if (newName != this.currentNucleus.name) { - Nucleus prefabNucleus = this.prefab.GetNucleus(this.currentNucleus.name); - prefabNucleus.name = newName; - // This changes it in the temporary cluster instance - this.currentNucleus.name = newName; - this.prefab.RefreshOutputs(); - // outputsPopup.choices = this.prefab.outputs.Select(output => output.name).ToList(); - anythingChanged = true; - } + string newName = EditorGUILayout.TextField(this.currentNucleus.name, boldTextFieldStyle); + if (newName != this.currentNucleus.name) { + this.currentNucleus.name = newName; + anythingChanged = true; } // Current output value @@ -204,7 +187,7 @@ namespace NanoBrain { if (this.currentNucleus is MemoryCell memory) MemoryCellInspector(memory, ref anythingChanged); // Cluster - else if (cluster != null) + else if (this.currentNucleus is Cluster cluster) ClusterInspector(cluster, ref anythingChanged); // Other else @@ -230,10 +213,8 @@ namespace NanoBrain { bool connecting = GUILayout.Button("Add Output Neuron"); if (connecting) { - Nucleus newOutput = new Neuron(this.prefab, "New Output"); - // Regenerate the temporary clsuter instance - // See also the constructor - this.currentCluster = new(this.prefab); + Nucleus newOutput = new Neuron(this.currentCluster, "New Output"); + this.currentCluster.Refresh(); this.currentNucleus = newOutput; this.selectedOutput = this.currentNucleus; } @@ -249,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; } @@ -268,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) { @@ -281,9 +262,9 @@ namespace NanoBrain { if (breakOnWake && this.currentNucleus is Neuron currentNeuron) { if (currentNeuron.isSleeping == false) Debug.Break(); + // trace = EditorGUILayout.Toggle("Trace", trace); + // currentNeuron.trace = trace; } - trace = EditorGUILayout.Toggle("Trace", trace); - this.currentNucleus.trace = trace; } protected void SynapsesInspector(ref bool anythingChanged) { @@ -293,31 +274,30 @@ namespace NanoBrain { Neuron.CombinatorType newCombinator = (Neuron.CombinatorType)EditorGUILayout.EnumPopup("Combinator", neuron2.combinator); anythingChanged |= newCombinator != neuron2.combinator; neuron2.combinator = newCombinator; - } - EditorGUIUtility.wideMode = true; - float previousLabelWidth = EditorGUIUtility.labelWidth; - EditorGUIUtility.labelWidth = 100; + EditorGUIUtility.wideMode = true; + float previousLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 100; - Vector3 newBias = EditorGUILayout.Vector3Field("Bias", this.currentNucleus.bias); - if (newBias != this.currentPrefabNucleus.bias) { - anythingChanged |= newBias != this.currentNucleus.bias; - this.currentPrefabNucleus.bias = newBias; - this.currentNucleus.bias = newBias; + Vector3 newBias = EditorGUILayout.Vector3Field("Bias", neuron2.bias); + if (newBias != neuron2.bias) { + anythingChanged |= newBias != neuron2.bias; + neuron2.bias = newBias; + } + EditorGUIUtility.labelWidth = previousLabelWidth; } - EditorGUIUtility.labelWidth = previousLabelWidth; Nucleus[] array = null; int elementIx = -1; - if (this.currentPrefabNucleus.synapses.Count > 0) { - Synapse[] synapses = this.currentPrefabNucleus.synapses.ToArray(); + if (this.currentNucleus is Neuron currentNeuron && currentNeuron.synapses.Count > 0) { + Synapse[] synapses = currentNeuron.synapses.ToArray(); foreach (Synapse synapse in synapses) { if (synapse.neuron == null) continue; if (array != null) { if (synapse.neuron.parent is Cluster iCluster && elementIx > 0) { - int thisElementIx = Cluster.GetNucleusIndex(iCluster.clusterNuclei, synapse.neuron); + int thisElementIx = Cluster.GetNucleusIndex(iCluster.nuclei, synapse.neuron); if (thisElementIx == elementIx) continue; else @@ -330,9 +310,9 @@ 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.clusterNuclei, synapse.neuron); + elementIx = Cluster.GetNucleusIndex(iCluster.nuclei, synapse.neuron); } } @@ -348,21 +328,19 @@ namespace NanoBrain { else { EditorGUILayout.BeginHorizontal(); - if (synapse.neuron.clusterPrefab != this.currentNucleus.clusterPrefab) { + if (synapse.neuron.parent != this.currentNucleus.parent) { // If it is a different cluster GUIStyle labelStyle = new(GUI.skin.label); float labelWidth = 200; - if (synapse.neuron.clusterPrefab != null) { - labelWidth = labelStyle.CalcSize(new GUIContent($"{synapse.neuron.clusterPrefab.name}.")).x; - GUILayout.Label($"{synapse.neuron.clusterPrefab.name}", GUILayout.Width(labelWidth)); + if (synapse.neuron.parent != null) { + labelWidth = labelStyle.CalcSize(new GUIContent($"{synapse.neuron.parent.name}.")).x; + GUILayout.Label($"{synapse.neuron.parent.name}", GUILayout.Width(labelWidth)); } - string[] options = synapse.neuron.clusterPrefab.nuclei.Select(n => n.name).ToArray(); + string[] options = synapse.neuron.parent.nuclei.Select(n => n.name).ToArray(); int selectedIndex = System.Array.IndexOf(options, synapse.neuron.name); int newIndex = EditorGUILayout.Popup(selectedIndex, options); if (newIndex != selectedIndex) { - // Nucleus selectedNucleus = synapse.neuron.parent.clusterNuclei[newIndex]; - // Neuron newNeuron = selectedNucleus as Neuron; - Neuron newNeuron = synapse.neuron.clusterPrefab.nuclei[newIndex] as Neuron; + Neuron newNeuron = synapse.neuron.parent.nuclei[newIndex] as Neuron; ChangeSynapse(synapse, newNeuron); } } @@ -370,13 +348,12 @@ namespace NanoBrain { GUILayout.Label(synapse.neuron.name); bool disconnecting = GUILayout.Button("Disconnect", GUILayout.Width(80)); - if (disconnecting && synapse.neuron is Neuron synapseNeuron) { - synapseNeuron.RemoveReceiver(this.currentNucleus); - this.prefab.GarbageCollection(); + if (disconnecting) { + synapse.neuron.RemoveReceiver(this.currentNucleus); + this.currentCluster.Refresh(); anythingChanged = true; } EditorGUILayout.EndHorizontal(); - } EditorGUI.indentLevel++; @@ -443,13 +420,14 @@ namespace NanoBrain { } protected virtual void AddNeuronInput(Nucleus nucleus) { - Neuron newNeuroid = new(this.prefab, "New neuron"); - newNeuroid.AddReceiver(nucleus); - this.currentNucleus = newNeuroid; + Neuron newNeuron = new(this.currentCluster, "New Neuron"); + //Neuron newNeuroid = new(this.prefab.cluster, "New neuron"); + newNeuron.AddReceiver(nucleus); + this.currentNucleus = newNeuron; } protected virtual void AddMemoryCellInput(Nucleus nucleus) { - MemoryCell newMemory = new(this.prefab, "New memory cell"); + MemoryCell newMemory = new(this.prefab.cluster, "New memory cell"); newMemory.AddReceiver(nucleus); this.currentNucleus = newMemory; } @@ -458,34 +436,34 @@ namespace NanoBrain { ClusterPickerWindow.ShowPicker(brain => OnClusterPicked(nucleus, brain), "Select Cluster"); } private void OnClusterPicked(Nucleus nucleus, ClusterPrefab selectedPrefab) { - Cluster subclusterInstance = new(selectedPrefab, this.prefab); + Cluster subclusterInstance = new(selectedPrefab, this.currentCluster); 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 @@ -493,11 +471,12 @@ namespace NanoBrain { if (cluster == null) return false; - IEnumerable synapseNuclei = this.currentNucleus.synapses + Neuron currentNeuron = this.currentNucleus as Neuron; + IEnumerable synapseNuclei = currentNeuron.synapses .Where(synapse => synapse.neuron != null) .Select(synapse => synapse.neuron); - IEnumerable nuclei = cluster.nuclei + IEnumerable nuclei = cluster.cluster.nuclei .Except(synapseNuclei); IEnumerable nucleiNames = nuclei .Select(n => { @@ -513,10 +492,13 @@ 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; } @@ -537,10 +519,10 @@ namespace NanoBrain { // this.prefab.nuclei.Remove(nucleus); // Neuron.Delete(nucleus); - this.prefab.RefreshOutputs(); + this.prefab.cluster.RefreshOutputs(); - this.currentNucleus = this.prefab.output; + this.currentNucleus = this.prefab.cluster.defaultOutput; this.selectedOutput = this.currentNucleus; } @@ -558,11 +540,6 @@ namespace NanoBrain { AddInput(selectedType, this.currentNucleus); } return connecting; - // if (selectedType == Nucleus.Type.None) - // return false; - - // AddInput(selectedType, this.currentNucleus); - // return true; } protected virtual void ChangeSynapse(Synapse synapse, Neuron newNucleus) { @@ -596,8 +573,8 @@ namespace NanoBrain { // } // else { // it is a neuron in a subcluster - synapseNeuron.RemoveReceiver(this.currentPrefabNucleus); - newNucleus.AddReceiver(this.currentPrefabNucleus); + synapseNeuron.RemoveReceiver(this.currentNucleus); + newNucleus.AddReceiver(this.currentNucleus); // } } else { @@ -606,19 +583,6 @@ namespace NanoBrain { } } - protected virtual void DisconnectNucleus(Neuron nucleus) { - if (this.currentNucleus.clusterPrefab == null) - return; - string[] names = this.currentNucleus.synapses.Select(synapse => synapse.neuron.name).ToArray(); - int selectedIndex = -1; - selectedIndex = EditorGUILayout.Popup("Disconnect from", selectedIndex, names); - if (selectedIndex >= 0 && selectedIndex < this.currentNucleus.clusterPrefab.nuclei.Count) { - Synapse synapse = this.currentNucleus.synapses[selectedIndex]; - Neuron synapseNeuron = synapse.neuron as Neuron; - synapseNeuron.RemoveReceiver(this.currentNucleus); - } - } - #endregion Synapses #endregion Inspector diff --git a/Editor/ClusterEditor.cs.meta b/Editor/ClusterEditor.cs.meta index a1a18f5..a933254 100644 --- a/Editor/ClusterEditor.cs.meta +++ b/Editor/ClusterEditor.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: 1fc1fb7db9f7ad54a87d31313e7f457d \ No newline at end of file +guid: 1fc1fb7db9f7ad54a87d31313e7f457d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/ClusterViewer.cs b/Editor/ClusterViewer.cs index 5f11269..b6e006a 100644 --- a/Editor/ClusterViewer.cs +++ b/Editor/ClusterViewer.cs @@ -106,10 +106,12 @@ namespace NanoBrain { public void SetGraph(GameObject gameObject) { this.gameObject = gameObject; + if (this.currentCluster == null) + return; 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(); } @@ -128,7 +130,7 @@ namespace NanoBrain { } public void OnIMGUI() { - if (Application.isPlaying == false) + if (Application.isPlaying == false && serializedBrain != null) serializedBrain.Update(); Handles.BeginGUI(); @@ -211,7 +213,8 @@ namespace NanoBrain { } private void DescendGraph(Dag.Node receiver, ref int ix, Dag dag) { - foreach (Synapse synapse in receiver.nucleus.synapses) { + Neuron receiverNeuron = receiver.nucleus as Neuron; + foreach (Synapse synapse in receiverNeuron.synapses) { Nucleus nucleus = synapse.neuron; if (nucleus.parent != null && nucleus.parent != currentNucleus.parent) { nucleus = nucleus.parent; @@ -267,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 @@ -276,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 @@ -384,6 +387,9 @@ namespace NanoBrain { } protected void DrawSynapses(Nucleus nucleus, Vector3 parentPos, float size) { + if (nucleus is not Neuron neuron) + return; + if (this.selectedSynapseNeuron != null) { DrawClusterSynapses(this.selectedSynapseNeuron, parentPos, size); return; @@ -396,7 +402,7 @@ namespace NanoBrain { float maxValue = 0; int neuronCount = 0; List drawnNeuronNames = new(); - foreach (Synapse synapse in nucleus.synapses) { + foreach (Synapse synapse in neuron.synapses) { if (synapse.neuron == null) continue; @@ -423,7 +429,7 @@ namespace NanoBrain { int row = 0; //List drawnNeurons = new(); drawnNeuronNames = new(); - foreach (Synapse synapse in nucleus.synapses) { + foreach (Synapse synapse in neuron.synapses) { if (synapse.neuron is null) continue; @@ -453,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) @@ -472,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); @@ -482,14 +488,15 @@ namespace NanoBrain { maxValue = 1; float brightness = siblingNeuron.outputMagnitude / maxValue; color = new Color(brightness, brightness, brightness, 1f); - } DrawNucleus(siblingNeuron, position, size, color); + } + DrawNucleus(siblingNeuron, position, size, color); GUIStyle style = new(EditorStyles.label) { alignment = TextAnchor.UpperCenter, normal = { textColor = Color.white }, fontStyle = FontStyle.Bold, }; Vector3 labelPos = position - Vector3.down * (size + 5); // below neuron - string name = $"{sibling.baseName}.{nucleus.name}"; + string name = $"{sibling.baseName}\n{nucleus.name}"; Handles.Label(labelPos, name, style); row++; } @@ -497,6 +504,9 @@ namespace NanoBrain { } protected void DrawOutputs(Vector2 parentPos, float size) { + if (this.currentCluster == null) + return; + // Determine the maximum value in this layer // This is used to 'scale' the output value colors of the nuclei float maxValue = 0; @@ -603,18 +613,12 @@ namespace NanoBrain { if (nucleus.parent != null && currentNucleus != null && nucleus.parent != currentNucleus.parent && nucleus.parent is Cluster parentCluster1) { // This neuron is part of another cluster parentCluster1.name ??= ""; - string baseName = ""; int colonPos = parentCluster1.name.IndexOf(":"); + string baseName; if (colonPos > 0 && colonPos < parentCluster1.name.Length - 2) - baseName = parentCluster1.name[..colonPos] + "."; + baseName = parentCluster1.name[..colonPos] + "\n"; else - baseName = parentCluster1.name + "."; - // if (colonPos > 0 && colonPos < parentCluster1.name.Length - 2) { - // // if it is an array, we should not show the :0 of the first element - // //baseName = baseName[..colonPos]; - // Handles.Label(labelPos, baseName + nucleus.name, style); - // } - // else + baseName = parentCluster1.name + "\n"; Handles.Label(labelPos, baseName + nucleus.name, style); } else { @@ -686,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; } } @@ -849,22 +853,34 @@ namespace NanoBrain { void OnSceneGUI(SceneView sceneView) { if (this.gameObject != null) { - // if (this.currentNucleus is IReceptor receptor) { - // foreach (Nucleus nucleus in receptor.nucleiArray) { - // if (nucleus is Neuron neuron) { - // Vector3 worldVector = this.gameObject.transform.TransformVector(neuron.outputValue); - // Handles.color = Color.yellow; - // Handles.DrawLine(this.gameObject.transform.position, this.gameObject.transform.position + worldVector); - // } - // } - // } - // else { - if (this.currentNucleus is Neuron currentNeuron) { - Vector3 worldVector = this.gameObject.transform.TransformVector(currentNeuron.outputValue); - Handles.color = Color.yellow; - Handles.DrawLine(this.gameObject.transform.position, this.gameObject.transform.position + worldVector); + + Handles.color = Color.yellow; + if (this.selectedSynapseNeuron != null) { + 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); + } + // if (this.currentNucleus is Cluster cluster) { + // foreach (Cluster sibling in cluster.siblingClusters) { + + // } + // } + // // if (this.currentNucleus is IReceptor receptor) { + // // foreach (Nucleus nucleus in receptor.nucleiArray) { + // // if (nucleus is Neuron neuron) { + // // Vector3 worldVector = this.gameObject.transform.TransformVector(neuron.outputValue); + // // Handles.color = Color.yellow; + // // Handles.DrawLine(this.gameObject.transform.position, this.gameObject.transform.position + worldVector); + // // } + // // } + } + else { + if (this.currentNucleus is Neuron currentNeuron) { + Vector3 worldVector = this.gameObject.transform.TransformVector(currentNeuron.outputValue); + Handles.DrawLine(this.gameObject.transform.position, this.gameObject.transform.position + worldVector); + } } - // } } } diff --git a/Editor/ClusterViewer.cs.meta b/Editor/ClusterViewer.cs.meta index ac68b91..7859dec 100644 --- a/Editor/ClusterViewer.cs.meta +++ b/Editor/ClusterViewer.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: 4fe58945c76d153edacc220597474ad2 \ No newline at end of file +guid: 4fe58945c76d153edacc220597474ad2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/ConfigurationChecker.cs.meta b/Editor/ConfigurationChecker.cs.meta index b8bea95..68e2048 100644 --- a/Editor/ConfigurationChecker.cs.meta +++ b/Editor/ConfigurationChecker.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: c7539a20f7894542ca347730cd8417b1 \ No newline at end of file +guid: c7539a20f7894542ca347730cd8417b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Neuron_Drawer.cs b/Editor/Neuron_Drawer.cs new file mode 100644 index 0000000..6cb226c --- /dev/null +++ b/Editor/Neuron_Drawer.cs @@ -0,0 +1,83 @@ +using UnityEngine; +using UnityEditor; +using Unity.Mathematics; +using System; +using System.Reflection; +using System.Collections; + +namespace NanoBrain { + [CustomPropertyDrawer(typeof(Neuron))] + class Neuron_Drawer : PropertyDrawer { + public static void Insepctor(SerializedObject serializedObject, string propertyName ) { + EditorGUILayout.PropertyField(serializedObject.FindProperty(propertyName)); + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { + // Draw foldout + properties + label = EditorGUI.BeginProperty(position, label, property); + + // Begin indent block + int indent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + + object instance = GetTargetObjectOfProperty(property); + + float lineHeight = EditorGUIUtility.singleLineHeight; + Rect r = new(position.x, position.y, position.width, lineHeight); + if (instance != null) { + FieldInfo field = typeof(Neuron).GetField("_outputValue", BindingFlags.NonPublic | BindingFlags.Instance); + if (field != null) { + float3 val = (float3)field.GetValue(instance); + EditorGUI.Vector3Field(r, $"Neuron: {label}", val); + } + } + + EditorGUI.indentLevel = indent; + EditorGUI.EndProperty(); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { + // height for 1 line + return (EditorGUIUtility.singleLineHeight * 1) + (EditorGUIUtility.standardVerticalSpacing * 0); + } + + public static object GetTargetObjectOfProperty(SerializedProperty prop) { + var path = prop.propertyPath.Replace(".Array.data[", "["); + object obj = prop.serializedObject.targetObject; + var elements = path.Split('.'); + foreach (var element in elements) { + if (element.Contains("[")) { + var elementName = element.Substring(0, element.IndexOf("[")); + var index = Convert.ToInt32(element.Substring(element.IndexOf("[")).Replace("[", "").Replace("]", "")); + obj = GetValue_Imp(obj, elementName, index); + } + else { + obj = GetValue_Imp(obj, element); + } + } + return obj; + } + + static object GetValue_Imp(object source, string name) { + if (source == null) + return null; + + Type t = source.GetType(); + FieldInfo f = t.GetField(name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + if (f != null) + return f.GetValue(source); + PropertyInfo p = t.GetProperty(name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + return p?.GetValue(source, null); + } + static object GetValue_Imp(object source, string name, int index) { + if (GetValue_Imp(source, name) is not IEnumerable enumerable) + return null; + IEnumerator en = enumerable.GetEnumerator(); + for (int i = 0; i <= index; i++) { + if (!en.MoveNext()) + return null; + } + return en.Current; + } + } +} \ No newline at end of file diff --git a/Editor/Neuron_Drawer.cs.meta b/Editor/Neuron_Drawer.cs.meta new file mode 100644 index 0000000..b3a4b00 --- /dev/null +++ b/Editor/Neuron_Drawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa0e340763ca6299e93d514b271ae38d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: 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 b28b9d9..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/Brain.cs b/Runtime/Scripts/Brain.cs index acb28f3..afffba0 100644 --- a/Runtime/Scripts/Brain.cs +++ b/Runtime/Scripts/Brain.cs @@ -45,7 +45,7 @@ namespace NanoBrain { /// The name of the Neuron for which the weights are updated /// The new Synapse weight public static void UpdateWeight(Cluster brain, string name, float weight) { - Nucleus root = brain.defaultOutput; + Neuron root = brain.defaultOutput; foreach (Synapse synapse in root.synapses) { if (synapse.neuron.name == name) { if (synapse.weight != weight) { diff --git a/Runtime/Scripts/Brain.cs.meta b/Runtime/Scripts/Brain.cs.meta index 1666c60..fc8b1c9 100644 --- a/Runtime/Scripts/Brain.cs.meta +++ b/Runtime/Scripts/Brain.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: 92f34a5e4027a1dc39efd8ce63cf6aba \ No newline at end of file +guid: 92f34a5e4027a1dc39efd8ce63cf6aba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/Core/Cluster.cs b/Runtime/Scripts/Core/Cluster.cs index 87366f3..8779e03 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 clusterNuclei = new(); + 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 @@ -58,10 +79,10 @@ namespace NanoBrain { this.name = prefab.name; this.parent = parent; - this.parent?.clusterNuclei.Add(this); + this.parent?.nuclei.Add(this); ClonePrefab(); - _ = this.inputs; - this.sortedNuclei = TopologicalSort(this.clusterNuclei); + // _ = this.inputs; + //this.sortedNuclei = TopologicalSort(this.nuclei); } /// @@ -72,14 +93,12 @@ namespace NanoBrain { public Cluster(ClusterPrefab prefab, ClusterPrefab parent = null) { this.prefab = prefab; this.name = prefab.name; - this.clusterPrefab = parent; - - if (this.clusterPrefab != null) - this.clusterPrefab.nuclei.Add(this); + if (parent != null) + this.parent = parent.cluster; ClonePrefab(); - _ = this.inputs; - this.sortedNuclei = TopologicalSort(this.clusterNuclei); + // _ = this.inputs; + //this.sortedNuclei = TopologicalSort(this.nuclei); } /// @@ -88,15 +107,13 @@ namespace NanoBrain { /// Strange that this does not take any parameters or return values. /// Where which the clone be found??? private void ClonePrefab() { - Nucleus[] prefabNuclei = this.prefab.nuclei.ToArray(); + Nucleus[] prefabNuclei = this.prefab.cluster.nuclei.ToArray(); // first clone the nuclei without their connections foreach (Nucleus nucleus in prefabNuclei) { nucleus.ShallowCloneTo(this); } - Nucleus[] clonedNuclei = this.clusterNuclei.ToArray(); - // foreach (Nucleus n in clonedNuclei) - // n.name += "(c)"; + Nucleus[] clonedNuclei = this.nuclei.ToArray(); // Now clone the connections for (int nucleusIx = 0; nucleusIx < prefabNuclei.Length; nucleusIx++) { @@ -110,10 +127,10 @@ namespace NanoBrain { foreach (Synapse prefabSynapse in prefabNeuron.synapses) { Neuron synapseNeuron = prefabSynapse.neuron; - if (synapseNeuron.clusterPrefab != null && synapseNeuron.clusterPrefab != this.prefab) { + if (synapseNeuron.parent.prefab != null && synapseNeuron.parent.prefab != this.prefab) { // Neuron is in another cluster, find the cloned cluster first - ClusterPrefab prefabCluster = synapseNeuron.clusterPrefab; - Cluster clonedCluster = this.clusterNuclei.Find(n => n.name == prefabCluster.name) as Cluster; + Cluster prefabCluster = synapseNeuron.parent; + Cluster clonedCluster = this.nuclei.Find(n => n.name == prefabCluster.name) as Cluster; if (clonedCluster == null) continue; @@ -122,7 +139,7 @@ namespace NanoBrain { if (neuronIx < 0) // Could not find the neuron in the prefab cluster continue; - if (clonedCluster.clusterNuclei[neuronIx] is not Neuron clonedSender) + if (clonedCluster.nuclei[neuronIx] is not Neuron clonedSender) // Could not find the neuron in the cloned cluster continue; @@ -130,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) @@ -141,28 +158,6 @@ namespace NanoBrain { // Debug.Log($"Add synapse {clonedSender.name} -> {clonedNeuron.name}"); } } - - // // Copy the receivers, which will also create the synapses - // foreach (Nucleus receiver in prefabNeuron.receivers.ToArray()) { - // int ix = GetNucleusIndex(prefabNuclei, receiver); - // if (ix < 0) - // continue; - - // if (clonedNuclei[ix] is not Nucleus clonedReceiver) - // continue; - - // // Find the synapse for the weight - // float weight = 1; - // foreach (Synapse synapse in receiver.synapses) { - // // Find the weight for this synapse - // if (synapse.neuron == prefabNucleus) { - // weight = synapse.weight; - // break; - // } - // } - - // clonedNeuron.AddReceiver(clonedReceiver, weight); - // } } if (Application.isPlaying) { @@ -179,7 +174,7 @@ namespace NanoBrain { Debug.Log($"create {clonedCluster.prefab.name} sibling"); Cluster sibling = new(clonedCluster.prefab, this) { name = $"{clonedCluster.baseName}: {instanceIx}", - clusterPrefab = this.clusterPrefab, + parent = this.parent, instanceCount = this.instanceCount, }; siblings.Add(sibling); @@ -187,226 +182,104 @@ 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 + foreach (Nucleus clonedNucleus in clonedNuclei) { + if (clonedNucleus is not Cluster) + clonedNucleus.UpdateStateIsolated(); } } - /* - for (int nucleusIx = 0; nucleusIx < clonedNuclei.Length; nucleusIx++) { - Nucleus prefabNucleus = prefabNuclei[nucleusIx]; - if (prefabNucleus is not Cluster prefabCluster) - continue; - - if (prefabCluster.instanceCount <= 1) - continue; - - Cluster clonedNucleus = clonedNuclei[nucleusIx] as Cluster; - if (prefabCluster == prefabCluster.siblingClusters[0]) { - // We clone the array only for the first entry - //NucleusArray clonedArray = new(prefabReceptor.nucleiArray.Length); - Cluster[] clonedArray = new Cluster[prefabCluster.siblingClusters.Length]; - int arrayIx = 0; - foreach (Cluster prefabArrayNucleus in prefabCluster.siblingClusters) { - int arrayNucleusIx = GetNucleusIndex(prefabNuclei, prefabArrayNucleus); - if (arrayNucleusIx >= 0) { - Cluster clonedArrayNucleus = clonedNuclei[arrayNucleusIx] as Cluster; - clonedArray[arrayIx] = clonedArrayNucleus; - } - else { - Debug.LogError($" Could not find prefab nucleus {prefabNucleus.name} in the clones"); - } - arrayIx++; - } - clonedNucleus.siblingClusters = clonedArray; - } - else { - // The others will refer to the array created for the first nucleus in the array - int firstNucleusIx = GetNucleusIndex(prefabNuclei, prefabCluster.siblingClusters[0]); - Cluster clonedFirstNucleus = clonedNuclei[firstNucleusIx] as Cluster; - clonedNucleus.siblingClusters = clonedFirstNucleus.siblingClusters; - } - } } - /* - // Collect the subclusters - List subClusters = new(); - foreach (Nucleus nucleus in prefabNuclei) { - foreach (Synapse synapse in nucleus.synapses) { - Nucleus synapseNucleus = synapse.neuron; - Cluster subCluster = synapseNucleus.parent; - if (subCluster is null || - synapseNucleus.clusterPrefab == this.clusterPrefab) { + // /// + // /// 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 - continue; - } - // if (synapseNucleus is not Cluster subCluster) - // continue; - if (subClusters.Contains(subCluster)) - continue; - subClusters.Add(subCluster); - } - } - // Create the subcluster instances - foreach (Cluster subCluster in subClusters) { - for (int ix = 0; ix < subCluster.instanceCount; ix++) { - // create the new instance - Cluster clusterInstance = new(subCluster.prefab); - // connect it - foreach ((Neuron sender, Nucleus receiver) in subCluster.CollectConnections()) { - int receiverIx = GetNucleusIndex(prefabNuclei, receiver); - if (receiverIx < 0) - continue; + // // 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]++; + // } + // } - if (clonedNuclei[receiverIx] is not Nucleus clonedReceiver) - continue; + // 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? - // Find the synapse for the weight - float weight = 1; - foreach (Synapse synapse in receiver.synapses) { - // Find the weight for this synapse - if (synapse.neuron == sender) { - weight = synapse.weight; - break; - } - } + // List sortedOrder = new(); + // while (queue.Count > 0) { + // Nucleus current = queue.Dequeue(); + // sortedOrder.Add(current); // Process the node - if (clusterInstance.GetNucleus(sender.name) is not Neuron clonedSender) - 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); + // } + // } + // } - clonedSender.AddReceiver(clonedReceiver, weight); - } - } - } - */ + // // Check for cycles in the graph + // if (sortedOrder.Count != nodes.Count) + // throw new InvalidOperationException("Graph is not a DAG; a cycle exists."); - // foreach (Nucleus nucleus in this.clusterNuclei) { - // if (nucleus is Cluster clonedSubCluster) - // RestoreAllExternalReceivers(clonedSubCluster, this.prefab, this); - // } - } + // return sortedOrder; + // } - private void CloneSynapses(Neuron prefabNeuron, Neuron clonedNeuron) { - foreach (Synapse prefabSynapse in prefabNeuron.synapses) { - Neuron synapseNeuron = prefabSynapse.neuron; - if (synapseNeuron.clusterPrefab != null && synapseNeuron.clusterPrefab != this.prefab) { - // Neuron is in another cluster, find the cloned cluster first - ClusterPrefab prefabCluster = synapseNeuron.clusterPrefab; - Cluster clonedCluster = this.clusterNuclei.Find(n => n.name == prefabCluster.name) as Cluster; - if (clonedCluster == null) - continue; - // Now find the neuron in that cloned cluster - int neuronIx = GetNucleusIndex(prefabCluster.nuclei, prefabSynapse.neuron.name); - if (neuronIx < 0) - // Could not find the neuron in the prefab cluster - continue; - if (clonedCluster.clusterNuclei[neuronIx] is not Neuron clonedSender) - // Could not find the neuron in the cloned cluster - continue; + // public override Nucleus Clone(ClusterPrefab parent) { + // Cluster clone = new(this.prefab, parent); - clonedSender.AddReceiver(clonedNeuron, prefabSynapse.weight); - //Debug.Log($"Add synapse {clonedCluster.name}.{clonedSender.name} -> {clonedNeuron.name} [{clonedSender.receivers.Count}]"); - } - else { - Neuron clonedSender = this.clusterNuclei.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}"); - } - } + // 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; - /// - /// 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 + // clonedOutput.AddReceiver(receiver); + // } + // } + // } - // 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]++; - } - } - - 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; - } - - 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.clusterNuclei) { - if (nucleus is Neuron output) { - foreach (Nucleus receiver in output.receivers) { - int ix = GetNucleusIndex(this.clusterNuclei, output); - Debug.Log($"{output.name} -> {receiver.name}: {ix}"); - if (ix < 0) - continue; - - if (clone.clusterNuclei[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) { name = this.name, - clusterPrefab = this.clusterPrefab, + parent = this.parent, instanceCount = this.instanceCount, }; // Somehow siblingClusters should be cloned too. Believe I do this in ClonePrefab right now. @@ -416,23 +289,26 @@ namespace NanoBrain { private static void CopyAllExternalReceivers(Cluster sourceCluster, Cluster sibling, ClusterPrefab prefabParent, Cluster clonedParent) { - for (int nucleusIx = 0; nucleusIx < sourceCluster.clusterNuclei.Count; nucleusIx++) { - Nucleus sourceNucleus = sourceCluster.clusterNuclei[nucleusIx]; + for (int nucleusIx = 0; nucleusIx < sourceCluster.nuclei.Count; nucleusIx++) { + Nucleus sourceNucleus = sourceCluster.nuclei[nucleusIx]; if (sourceNucleus is not Neuron sourceNeuron) continue; - if (sibling.clusterNuclei[nucleusIx] is not Neuron clonedNeuron) + if (sibling.nuclei[nucleusIx] is not Neuron clonedNeuron) continue; // copy the receivers (and thus synapses) from the source to the sibling foreach (Nucleus receiver in sourceNeuron.receivers) { - int ix = GetNucleusIndex(clonedParent.clusterNuclei, receiver); - if (ix < 0 || ix >= clonedParent.clusterNuclei.Count) + if (receiver is not Neuron receiverNeuron) + continue; + + int ix = GetNucleusIndex(clonedParent.nuclei, receiver); + if (ix < 0 || ix >= clonedParent.nuclei.Count) continue; // Find the synapse for the weight float weight = 1; - foreach (Synapse synapse in receiver.synapses) { + foreach (Synapse synapse in receiverNeuron.synapses) { // Find the weight for this synapse if (synapse.neuron == sourceNucleus) { weight = synapse.weight; @@ -447,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) { @@ -466,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) { @@ -477,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) @@ -508,65 +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; - } - } - - // Otherwise find longest unused cluster - 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) { @@ -578,60 +441,68 @@ 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 { + + // 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 (this._inputs == null) { - this._inputs = new(); - foreach (Nucleus nucleus in this.clusterNuclei) { - // inputs have no synapses - if (nucleus.synapses.Count == 0) - this._inputs.Add(nucleus); - } - ComputeOrders(); + if (_computeOrders == null || _computeOrders.Count == 0) { + _computeOrders = new(); + foreach (Nucleus nucleus in this.nuclei) + _computeOrders[nucleus] = TopologicalSort2(nucleus); } - return this._inputs; + return _computeOrders; } } - - public Dictionary> computeOrders = new(); - private void ComputeOrders() { - foreach (Nucleus nucleus in this.clusterNuclei) { - // if (nucleus is Cluster cluster) { - // List synapses = this.CollectSynapsesTo(cluster); - // foreach (Synapse synapse in synapses) { - // computeOrders[synapse.neuron] = TopologicalSort2(synapse.neuron); - // Debug.Log($"{this.baseName}: Order for {cluster.baseName}.{synapse.neuron.name}"); - // } - // // List receivers = cluster.CollectReceivers(); - // // foreach (Nucleus receiver in receivers) - // // computeOrders[receiver] = TopologicalSort2(receiver); - // } - // else { - computeOrders[nucleus] = TopologicalSort2(nucleus); - Debug.Log($"{this.baseName} Order for {nucleus.name}"); - // } - } + /// + /// Refresh the order in which neurons should be computed + /// + public void RefreshComputeOrders() { + this._computeOrders = null; } private List TopologicalSort2(Nucleus startNode) { @@ -696,19 +567,31 @@ 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.clusterNuclei.Count > 0) - return this.clusterNuclei[0] as Neuron; + if (this.nuclei.Count > 0) + return this.nuclei[0] as Neuron; 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) { + if (this._outputs == null || this._outputs.Count == 0) { this._outputs = new(); - foreach (Nucleus nucleus in this.clusterNuclei) { + foreach (Nucleus nucleus in this.nuclei) { if (nucleus is Neuron neuron && neuron.receivers.Count == 0) this._outputs.Add(neuron); } @@ -716,12 +599,21 @@ 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.clusterNuclei) { + foreach (Nucleus receptor in this.nuclei) { if (receptor is Nucleus nucleus) if (nucleus.name == nucleusName) { foundNucleus = nucleus; @@ -732,12 +624,17 @@ 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) { string clusterName = nucleusName[..dotPosition]; string clusterName0 = clusterName + ": 0"; - foreach (Nucleus nucleus in this.clusterNuclei) { + foreach (Nucleus nucleus in this.nuclei) { if (nucleus is Cluster cluster) { if (cluster.name == clusterName || cluster.name == clusterName0) { string subNucleusName = nucleusName[(dotPosition + 1)..]; @@ -749,9 +646,9 @@ namespace NanoBrain { } else { string nucleusName0 = nucleusName + ": 0"; - foreach (Nucleus nucleus in this.clusterNuclei) { - if (nucleus is Cluster) { //IReceptor receptor) { - if (nucleus.name == nucleusName | nucleus.name == nucleusName0) + foreach (Nucleus nucleus in this.nuclei) { + if (nucleus is Cluster) { + if (nucleus.name == nucleusName || nucleus.name == nucleusName0) return nucleus; } else if (nucleus.name == nucleusName) @@ -761,17 +658,89 @@ 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) + return neuron; + } + 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.instances == null || this.instances.Length <= 1) + return this.GetNeuron(neuronName); + + // See if we are already using a cluster for thingId + if (thingClusters.TryGetValue(thingId, out Cluster cluster)) + return cluster.GetNeuron(neuronName); + + // Find the cluster with the lowest value neuron + Neuron lowestNeuron = null; + foreach (Cluster sibling in this.instances) { + Neuron neuron = sibling.GetNeuron(neuronName); + if (lowestNeuron == null || neuron.outputMagnitude < lowestNeuron.outputMagnitude) + lowestNeuron = neuron; + } + Cluster selectedCluster = lowestNeuron.parent; + RemoveThingCluster(selectedCluster); + selectedCluster.name = baseName + ": " + thingName; + thingClusters[thingId] = selectedCluster; + return lowestNeuron; + /* + // 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; + + Cluster cluster = GetThingCluster(thingId, thingName); + Neuron neuron = cluster?.GetNeuron(neuronName); + 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.clusterNuclei.Contains(nucleus) == false) { + if (this.nuclei.Contains(nucleus) == false) { // Try to find the nucleus by name if (TryGetNucleus(nucleus.name, out nucleus) == false) return false; } Neuron.Delete(nucleus); - int nucleusIx = this.clusterNuclei.IndexOf(nucleus); - this.clusterNuclei.Remove(nucleus); - this.prefab.nuclei.RemoveAt(nucleusIx); + //int nucleusIx = this.nuclei.IndexOf(nucleus); + this.nuclei.Remove(nucleus); + //this.prefab.cluster.nuclei.RemoveAt(nucleusIx); RefreshOutputs(); return true; @@ -779,9 +748,14 @@ 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.clusterNuclei) { + foreach (Nucleus outputNucleus in this.nuclei) { if (outputNucleus is not Neuron output) continue; @@ -789,7 +763,7 @@ namespace NanoBrain { foreach (Nucleus receiver in output.receivers) { // Debug.Log($"output {receiver.name}"); // Only add receivers outside this cluster - if (receiver.clusterPrefab != this.prefab) { + if (receiver.parent.prefab != this.prefab) { if (removeDuplicates == false || receivers.Contains(receiver) == false) // Debug.Log($" YES"); receivers.Add(receiver); @@ -799,28 +773,38 @@ 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.clusterNuclei) { - 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.clusterPrefab != 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(); - foreach (Nucleus nucleus in this.clusterNuclei) { + foreach (Nucleus nucleus in this.nuclei) { if (nucleus is not Neuron neuron) continue; - foreach (Synapse synapse in nucleus.synapses) { + foreach (Synapse synapse in neuron.synapses) { if (synapse.neuron.parent == otherCluster) collectedSynapses.Add(synapse); } @@ -828,36 +812,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.clusterNuclei) { - 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.clusterPrefab != 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}"); - Synapse synapse = receiver.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... @@ -867,41 +858,50 @@ namespace NanoBrain { } List computeOrder = this.computeOrders[startNucleus]; - //if (startNucleus.trace) - Debug.Log($"Update from {startNucleus.name}"); foreach (Nucleus nucleus in computeOrder) { if (nucleus is not Cluster) { nucleus.UpdateStateIsolated(); - //if (startNucleus.trace && nucleus is Neuron neuron) - Debug.Log($" {nucleus.name}"); if (nucleus is Neuron neuron) { foreach (Nucleus receiver in neuron.receivers) { if (receiver.parent != this) { - Debug.Log($" External: {receiver.parent.name}.{receiver.name}"); + //Debug.Log($" External: {receiver.parent.name}.{receiver.name}"); receiver.parent.UpdateFromNucleus(receiver); } } } } } - - // continue in parent - //this.parent?.UpdateFromNucleus(this); - - UpdateNuclei(); + //UpdateNuclei(); } + /// \copydoc NanoBrain::Nucleus::UpdateStateIsolated public override void UpdateStateIsolated() { throw new Exception("Cluster should not be updated!"); } - public override void UpdateNuclei() { - foreach (Nucleus nucleus in this.clusterNuclei) - nucleus.UpdateNuclei(); - } + // Don't think this does anything anymore... + // public override void UpdateNuclei() { + // foreach (Nucleus nucleus in this.nuclei) + // nucleus.UpdateNuclei(); + // } #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) { + // if (nucleus is not Neuron neuron) + // continue; + nucleus.parent = this; + } + RefreshOutputs(); + RefreshComputeOrders(); + } + } } \ No newline at end of file diff --git a/Runtime/Scripts/Core/Cluster.cs.meta b/Runtime/Scripts/Core/Cluster.cs.meta index a10caff..c77fea0 100644 --- a/Runtime/Scripts/Core/Cluster.cs.meta +++ b/Runtime/Scripts/Core/Cluster.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: f13cdc4a175a9f379a00317ae68d8bea \ No newline at end of file +guid: f13cdc4a175a9f379a00317ae68d8bea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/Core/MemoryCell.cs b/Runtime/Scripts/Core/MemoryCell.cs index 7f9fe6e..e959e16 100644 --- a/Runtime/Scripts/Core/MemoryCell.cs +++ b/Runtime/Scripts/Core/MemoryCell.cs @@ -12,7 +12,7 @@ namespace NanoBrain { [Serializable] public class MemoryCell : Neuron { - public MemoryCell(ClusterPrefab cluster, string name) : base(cluster, name) { } + // public MemoryCell(ClusterPrefab cluster, string name) : base(cluster, name) { } public MemoryCell(Cluster parent, string name) : base(parent, name) { } public bool staticMemory = false; diff --git a/Runtime/Scripts/Core/MemoryCell.cs.meta b/Runtime/Scripts/Core/MemoryCell.cs.meta index ef74aba..24dc14d 100644 --- a/Runtime/Scripts/Core/MemoryCell.cs.meta +++ b/Runtime/Scripts/Core/MemoryCell.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: 29633aa3fe5cd9dcc8d886051f45d4d8 \ No newline at end of file +guid: 29633aa3fe5cd9dcc8d886051f45d4d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/Core/Neuron.cs b/Runtime/Scripts/Core/Neuron.cs index a4bbed8..a4927d8 100644 --- a/Runtime/Scripts/Core/Neuron.cs +++ b/Runtime/Scripts/Core/Neuron.cs @@ -23,26 +23,91 @@ namespace NanoBrain { public Neuron(Cluster parent, string name) { this.parent = parent; this.name = name; - this.parent?.clusterNuclei.Add(this); + this.parent?.nuclei.Add(this); } /// /// Create a new Neuron in a Cluster Prefab /// /// The Cluster Preafb in which the new Neuron should be created /// The name of the new Neuron - public Neuron(ClusterPrefab prefab, string name) { - this.clusterPrefab = prefab; - this.name = name; - if (this.clusterPrefab != null) { - this.clusterPrefab.nuclei.Add(this); - this.clusterPrefab.RefreshOutputs(); - } - else - Debug.LogError("No prefab when adding neuron to prefab"); - } + // public Neuron(ClusterPrefab prefab, string name) { + // this.clusterPrefab = prefab; + // this.name = name; + // if (this.clusterPrefab != null) { + // this.clusterPrefab.cluster.nuclei.Add(this); + // this.clusterPrefab.cluster.RefreshOutputs(); + // } + // else + // Debug.LogError("No prefab when adding neuron to prefab"); + // } #region Serialization + /// + /// 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 + public Vector3 bias = Vector3.zero; + + #region Synapses + + [SerializeField] + private List _synapses = new(); + /// + /// The synapses of the nucleus + /// + public List synapses => _synapses; + + /// + /// Add a new synapse to this nuclues + /// + /// The nucleus from which the signals may originate + /// The weight applied to the input. Default value = 1 + /// The created Synapse + /// This will add a new input to this nucleus with the given weight. + public Synapse AddSynapse(Neuron sendingNucleus, float weight = 1) { + Synapse synapse = new(sendingNucleus, weight); + this.synapses.Add(synapse); + return synapse; + } + + // public Synapse AddSynapse(ClusterPrefab clusterPrefab, string neuronName, float weight = 1) { + + // } + + /// + /// Find a synapse + /// + /// The sender of the input to the Synapse + /// The found Synapse or null when the sender has no synapse to this nucleus. + public Synapse GetSynapse(Nucleus sender) { + foreach (Synapse synapse in this.synapses) + if (synapse.neuron == sender) + return synapse; + return null; + } + + /// + /// Remove a synapse from a Nucleus + /// + /// Remote the synapse connecting to this Nucleus + public void RemoveSynapse(Nucleus sendingNucleus) { + this.synapses.RemoveAll(synapse => synapse.neuron == sendingNucleus); + } + + #endregion Synapses + + /// + /// Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus + /// + /// + public virtual void SetBias(Vector3 inputValue) { + this.bias = inputValue; + this.lastUpdate = Time.time; + this.parent?.UpdateFromNucleus(this); + } + /// /// The type of combinators /// @@ -52,8 +117,6 @@ namespace NanoBrain { Sum, /// Multiply the weighted values Product, - /// Take the maximum of all the weighted values - Max, } /// /// The type of combinator used for this Neuron @@ -211,16 +274,11 @@ namespace NanoBrain { public float outputSqrMagnitude => _outputValue.sqrMagnitude; #endif - public bool isFiring { - get { - SleepCheck(); - return this.outputMagnitude > 0.5f; - } - } + public bool isFiring => this.outputMagnitude > 0.5f; public Action WhenFiring; - - public virtual bool isSleeping => Time.time - this.lastUpdate > this.timeToSleep; //this.outputMagnitude == 0; + public bool persistOutput = false; + public virtual bool isSleeping => !persistOutput && (Time.time - this.lastUpdate > this.timeToSleep); public void SleepCheck() { if (this.isSleeping) { #if UNITY_MATHEMATICS @@ -231,34 +289,41 @@ namespace NanoBrain { } } - [NonSerialized] + /// + /// Toggle for printing debugging trace data + /// + //public bool trace = false; + + //[NonSerialized] public float lastUpdate = 0; public readonly float timeToSleep = 1f; /// \copydoc NanoBrain::Nucleus::ShallowCloneTo public override Nucleus ShallowCloneTo(Cluster newParent) { - Neuron clone = new(newParent, this.name); + Neuron clone = new(newParent, this.name) { + // prefabNucleus = this + }; CloneFields(clone); return clone; } - /// \copydoc NanoBrain::Nucleus::Clone - public override Nucleus Clone(ClusterPrefab prefab) { - Neuron clone = new(prefab, 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.clusterPrefab = this.clusterPrefab; clone.bias = this.bias; + clone.persistOutput = this.persistOutput; clone.combinator = this.combinator; clone.curve = this.curve; clone.curvePreset = this.curvePreset; @@ -268,8 +333,8 @@ namespace NanoBrain { public static void Delete(Nucleus nucleus) { if (nucleus == null) return; - if (nucleus.synapses != null) { - foreach (Synapse synapse in nucleus.synapses) { + if (nucleus is Neuron neuron) { + foreach (Synapse synapse in neuron.synapses) { if (synapse.neuron is Neuron synapse_nucleus) { if (synapse_nucleus.receivers.Count > 1) { // there is another nucleus feeding into this input nucleus @@ -281,45 +346,43 @@ namespace NanoBrain { } } } - } - if (nucleus is Neuron neuron) { foreach (Nucleus receiver in neuron.receivers) { - if (receiver != null && receiver.synapses != null) - receiver.synapses.RemoveAll(s => s.neuron == nucleus); + if (receiver is not Neuron receiverNeuron) + continue; + if (receiver != null && receiverNeuron.synapses != null) + receiverNeuron.synapses.RemoveAll(s => s.neuron == nucleus); } } else if (nucleus is Cluster cluster) { // remove all receivers for this cluster - foreach (Nucleus clusterNucleus in cluster.clusterNuclei) { + foreach (Nucleus clusterNucleus in cluster.nuclei) { if (clusterNucleus is Neuron output) { foreach (Nucleus receiver in output.receivers) { - receiver.synapses.RemoveAll(s => s.neuron == output); + if (receiver is not Neuron receiverNeuron) + continue; + receiverNeuron.synapses.RemoveAll(s => s.neuron == output); } } } } - if (nucleus.clusterPrefab != null) { - nucleus.clusterPrefab.nuclei.RemoveAll(n => n == nucleus); - nucleus.clusterPrefab.RefreshOutputs(); - nucleus.clusterPrefab.GarbageCollection(); + if (nucleus.parent.prefab != null) { + nucleus.parent.prefab.cluster.nuclei.RemoveAll(n => n == nucleus); + nucleus.parent.prefab.cluster.RefreshOutputs(); + nucleus.parent.prefab.GarbageCollection(); } } public override void UpdateStateIsolated() { - CheckSleepingSynapses(); var result = Combinator(); - this.outputValue = Activator(result); + this.outputValue = ApplyActivator(result); this.lastUpdate = Time.time; } protected void CheckSleepingSynapses() { - foreach (Synapse synapse in this.synapses) { - if (synapse.isSleeping) { - synapse.neuron.outputValue = Vector3.zero; - } - } + foreach (Synapse synapse in this.synapses) + synapse.neuron.SleepCheck(); } #region Combinator @@ -329,42 +392,27 @@ namespace NanoBrain { protected Func Combinator => combinator switch { CombinatorType.Sum => CombinatorSum, CombinatorType.Product => CombinatorProduct, - CombinatorType.Max => CombinatorMax, _ => CombinatorSum }; public float3 CombinatorSum() { float3 sum = this.bias; - foreach (Synapse synapse in this.synapses) + foreach (Synapse synapse in this.synapses) { + synapse.neuron.SleepCheck(); sum += synapse.weight * synapse.neuron.outputValue; + } return sum; } public float3 CombinatorProduct() { float3 product = this.bias; foreach (Synapse synapse in this.synapses) { + synapse.neuron.SleepCheck(); product *= synapse.weight * synapse.neuron.outputValue; } return product; } - public float3 CombinatorMax() { - float3 max = this.bias; - float maxLength = length(max); - - //Applying the weight factors - foreach (Synapse synapse in this.synapses) { - float3 input = synapse.weight * synapse.neuron.outputValue; - - float inputLength = length(input); - if (inputLength > maxLength) { - max = input; - maxLength = inputLength; - } - } - return max; - } - #else protected Func Combinator => combinator switch { @@ -413,6 +461,20 @@ namespace NanoBrain { #if UNITY_MATHEMATICS + // This does not allocate memory and seems faster than the solution below + float3 ApplyActivator(float3 x) { + switch (curvePreset) { + case ActivationType.Linear: return ActivatorLinear(x); + case ActivationType.Sqrt: return ActivatorSqrt(x); + case ActivationType.Power: return ActivatorPower(x); + case ActivationType.Reciprocal: return ActivatorReciprocal(x); + case ActivationType.Tanh: return ActivatorTanh(x); + case ActivationType.Binary: return ActivatorBinary(x); + case ActivationType.Normalized: return ActivatorNormalized(x); + default: return ActivatorCustom(x); + } + } + public Func Activator => this.curvePreset switch { ActivationType.Linear => ActivatorLinear, ActivationType.Sqrt => ActivatorSqrt, @@ -524,25 +586,40 @@ namespace NanoBrain { } public virtual void AddReceiver(Nucleus receiverToAdd, float weight = 1) { - this._receivers.Add(receiverToAdd); - receiverToAdd.AddSynapse(this, weight); + if (receiverToAdd is not Neuron receiverNeuron) + return; + this._receivers.Add(receiverNeuron); + receiverNeuron.AddSynapse(this, weight); //Debug.Log($"Add synapse {this.clusterPrefab.name}.{this.name} -> {receiverToAdd.name} --- [{this.receivers.Count}]"); } public virtual void RemoveReceiver(Nucleus receiverToRemove) { - this._receivers.RemoveAll(receiver => receiver == receiverToRemove); - receiverToRemove.synapses.RemoveAll(synapse => synapse.neuron == this); + if (receiverToRemove is not Neuron receiverNeuron) + return; + this._receivers.RemoveAll(receiver => receiver == receiverNeuron); + receiverNeuron.synapses.RemoveAll(synapse => synapse.neuron == this); + + // Nucleus prefabReceiver = receiverToRemove.prefabNucleus; + // if (this.prefabNucleus is Neuron prefabNeuron && prefabReceiver != null) { + // prefabNeuron.receivers.RemoveAll(receiver => receiver == prefabReceiver); + // prefabReceiver.synapses.RemoveAll(synapse => synapse.neuron == prefabNeuron); + // } } #endregion Receivers - public override void ProcessStimulus(Vector3 inputValue) { - ; + /// + /// Process an external stimulus + /// + /// The value of the stimulus + /// The id of the thing causing the stimulus + /// The name of the thing causing the stimulus + public virtual void ProcessStimulus(Vector3 inputValue) { this.lastUpdate = Time.time; this.bias = inputValue; - this.parent.UpdateFromNucleus(this); + this.parent?.UpdateFromNucleus(this); } } diff --git a/Runtime/Scripts/Core/Neuron.cs.meta b/Runtime/Scripts/Core/Neuron.cs.meta index e520090..37266c0 100644 --- a/Runtime/Scripts/Core/Neuron.cs.meta +++ b/Runtime/Scripts/Core/Neuron.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: 750748f3f0e7d472fbf88ab02987074c \ No newline at end of file +guid: 750748f3f0e7d472fbf88ab02987074c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/Core/Nucleus.cs b/Runtime/Scripts/Core/Nucleus.cs index 314fee3..4864165 100644 --- a/Runtime/Scripts/Core/Nucleus.cs +++ b/Runtime/Scripts/Core/Nucleus.cs @@ -17,11 +17,15 @@ public abstract class Nucleus { /// public string name; + // [NonSerialized] + // public Nucleus prefabNucleus; + /// /// The cluster prefab in which the nucleus is located /// - [SerializeReference] - public ClusterPrefab clusterPrefab; + // [SerializeReference] + // public ClusterPrefab clusterPrefab; + /// /// The cluster instance in which the nucleus is located /// @@ -31,7 +35,7 @@ public abstract class Nucleus { /// /// Toggle for printing debugging trace data /// - public bool trace = false; + //public bool trace = false; /// /// Function to make a partial clone of this nucleus @@ -44,7 +48,7 @@ public abstract class Nucleus { /// /// /// - public abstract Nucleus Clone(ClusterPrefab prefab); + // public abstract Nucleus Clone(ClusterPrefab prefab); /// /// The types of Nucleus @@ -59,62 +63,62 @@ public abstract class Nucleus { //ClusterArray, } - public virtual void Initialize() {} + // public virtual void Initialize() {} - #region Synapses + // #region Synapses - /// - /// The bias of the nucleus - /// - /// The bias which a value which is always added to the combined value of the nucleus - /// It does not have a synapse and therefore no weight of source nucleus - public Vector3 bias = Vector3.zero; + // /// + // /// The bias of the nucleus + // /// + // /// The bias which a value which is always added to the combined value of the nucleus + // /// It does not have a synapse and therefore no weight of source nucleus + // //public Vector3 bias = Vector3.zero; - [SerializeField] - private List _synapses = new(); - /// - /// The synapses of the nucleus - /// - public List synapses => _synapses; + // [SerializeField] + // private List _synapses = new(); + // /// + // /// The synapses of the nucleus + // /// + // public List synapses => _synapses; - /// - /// Add a new synapse to this nuclues - /// - /// The nucleus from which the signals may originate - /// The weight applied to the input. Default value = 1 - /// The created Synapse - /// This will add a new input to this nucleus with the given weight. - public Synapse AddSynapse(Neuron sendingNucleus, float weight = 1) { - Synapse synapse = new(sendingNucleus, weight); - this.synapses.Add(synapse); - return synapse; - } + // /// + // /// Add a new synapse to this nuclues + // /// + // /// The nucleus from which the signals may originate + // /// The weight applied to the input. Default value = 1 + // /// The created Synapse + // /// This will add a new input to this nucleus with the given weight. + // public Synapse AddSynapse(Neuron sendingNucleus, float weight = 1) { + // Synapse synapse = new(sendingNucleus, weight); + // this.synapses.Add(synapse); + // return synapse; + // } - // public Synapse AddSynapse(ClusterPrefab clusterPrefab, string neuronName, float weight = 1) { + // // public Synapse AddSynapse(ClusterPrefab clusterPrefab, string neuronName, float weight = 1) { - // } + // // } - /// - /// Find a synapse - /// - /// The sender of the input to the Synapse - /// The found Synapse or null when the sender has no synapse to this nucleus. - public Synapse GetSynapse(Nucleus sender) { - foreach (Synapse synapse in this.synapses) - if (synapse.neuron == sender) - return synapse; - return null; - } + // /// + // /// Find a synapse + // /// + // /// The sender of the input to the Synapse + // /// The found Synapse or null when the sender has no synapse to this nucleus. + // public Synapse GetSynapse(Nucleus sender) { + // foreach (Synapse synapse in this.synapses) + // if (synapse.neuron == sender) + // return synapse; + // return null; + // } - /// - /// Remove a synapse from a Nucleus - /// - /// Remote the synapse connecting to this Nucleus - public void RemoveSynapse(Nucleus sendingNucleus) { - this.synapses.RemoveAll(synapse => synapse.neuron == sendingNucleus); - } + // /// + // /// Remove a synapse from a Nucleus + // /// + // /// Remote the synapse connecting to this Nucleus + // public void RemoveSynapse(Nucleus sendingNucleus) { + // this.synapses.RemoveAll(synapse => synapse.neuron == sendingNucleus); + // } - #endregion Synapses + // #endregion Synapses #region Update @@ -129,23 +133,14 @@ public abstract class Nucleus { public virtual void UpdateNuclei() { } - /// - /// Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus - /// - /// - public virtual void SetBias(Vector3 inputValue) { - this.bias = inputValue; - this.parent.UpdateFromNucleus(this); - } - - /// - /// Process an external stimulus - /// - /// The value of the stimulus - /// The id of the thing causing the stimulus - /// The name of the thing causing the stimulus - public virtual void ProcessStimulus(Vector3 inputValue) { //, int thingId = 0, string thingName = "") { - } + // /// + // /// Set the bias, recalculate the output and update all Nuclei receiving from this Nucleus + // /// + // /// + // public virtual void SetBias(Vector3 inputValue) { + // this.bias = inputValue; + // this.parent.UpdateFromNucleus(this); + // } #endregion Update diff --git a/Runtime/Scripts/Core/Nucleus.cs.meta b/Runtime/Scripts/Core/Nucleus.cs.meta index 08b3cf8..0868066 100644 --- a/Runtime/Scripts/Core/Nucleus.cs.meta +++ b/Runtime/Scripts/Core/Nucleus.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: 4310eea6ab77628b085387a226c1c386 \ No newline at end of file +guid: 4310eea6ab77628b085387a226c1c386 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/Core/Synapse.cs.meta b/Runtime/Scripts/Core/Synapse.cs.meta index e62612c..7c45e30 100644 --- a/Runtime/Scripts/Core/Synapse.cs.meta +++ b/Runtime/Scripts/Core/Synapse.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: 334a58eafccd60cbdb32f719e9e861c6 \ No newline at end of file +guid: 334a58eafccd60cbdb32f719e9e861c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Scripts/ScriptableObjects/ClusterPrefab.cs b/Runtime/Scripts/ScriptableObjects/ClusterPrefab.cs index 2920733..c00f234 100644 --- a/Runtime/Scripts/ScriptableObjects/ClusterPrefab.cs +++ b/Runtime/Scripts/ScriptableObjects/ClusterPrefab.cs @@ -8,134 +8,146 @@ namespace NanoBrain { /// [CreateAssetMenu(menuName = "Passer/Cluster")] public class ClusterPrefab : ScriptableObject { - /// The nuclei in this cluster - [SerializeReference] - // This list should not include any clusters... - public List nuclei = new(); - /// - /// The output of this cluster - /// - /// This only returens the first(default) nucleus. Use outputs[0] instead - public virtual Nucleus output => this.nuclei[0] as Nucleus; + public Cluster cluster; + /* + /// The nuclei in this cluster + [SerializeReference] + // This list should not include any clusters... + public List nuclei = new(); - /// - /// The nuclei in this cluster which are meant for receiving signals from outside the cluster - /// - /// This is currently the nuclei which do not have any incoming synapse - public List _inputs = null; - public virtual List inputs { - get { - if (this._inputs == null) { - this._inputs = new(); - foreach (Nucleus receptor in this.nuclei) { - if (receptor is Nucleus nucleus) { - // inputs have no incoming synapses yet. - if (nucleus.synapses.Count == 0) - this._inputs.Add(nucleus); + /// + /// The output of this cluster + /// + /// This only returens the first(default) nucleus. Use outputs[0] instead + public virtual Nucleus output => this.nuclei[0] as Nucleus; + + /// + /// The nuclei in this cluster which are meant for receiving signals from outside the cluster + /// + /// This is currently the nuclei which do not have any incoming synapse + public List _inputs = null; + public virtual List inputs { + get { + if (this._inputs == null) { + this._inputs = new(); + foreach (Nucleus receptor in this.nuclei) { + if (receptor is Nucleus nucleus) { + // inputs have no incoming synapses yet. + if (nucleus.synapses.Count == 0) + this._inputs.Add(nucleus); + } + } } + return this._inputs; } } - return this._inputs; - } - } - /// - /// The nuclei in this cluster which are meant for sending signals onward - /// - private List _outputs = null; - public List outputs { - get { - if (this._outputs == null) - RefreshOutputs(); - return this._outputs; - } - } - /// - /// Redetermine the outpus in the cluster - /// - public void RefreshOutputs() { - this._outputs = new(); - foreach (Nucleus nucleus in this.nuclei) { - if (nucleus is Neuron neuron && neuron.receivers.Count == 0) - this._outputs.Add(nucleus); - } - } - + /// + /// The nuclei in this cluster which are meant for sending signals onward + /// + private List _outputs = null; + public List outputs { + get { + if (this._outputs == null) + RefreshOutputs(); + return this._outputs; + } + } + /// + /// Redetermine the outpus in the cluster + /// + public void RefreshOutputs() { + this._outputs = new(); + foreach (Nucleus nucleus in this.nuclei) { + if (nucleus is Neuron neuron && neuron.receivers.Count == 0) + this._outputs.Add(nucleus); + } + } + */ /// /// Retrieve a nucleus in this cluster /// /// The name of the nucleus /// The Nucleus with the given name or null if no such Nucleus could be found public Nucleus GetNucleus(string nucleusName) { - foreach (Nucleus nucleus in this.nuclei) { - if (nucleus.name == nucleusName) - return nucleus; - } - return null; + return cluster.GetNucleus(nucleusName); + // foreach (Nucleus nucleus in this.nuclei) { + // if (nucleus.name == nucleusName) + // return nucleus; + // } + // return null; } // Call this function to ensure that there is at least one nucleus // This is an invariant and should be ensured before the nucleus is used // because output requires it. public void EnsureInitialization() { - nuclei ??= new List(); - if (nuclei.Count == 0) - new Neuron(this, "Output"); // Every cluster should have at least 1 neuron + this.cluster.prefab = this; + this.cluster.name = this.name; + this.cluster.nuclei ??= new List(); + if (this.cluster.nuclei.Count <= 0) + new Neuron(this.cluster, "Output"); // Every cluster should have at least 1 neuron + this.cluster.instanceCount = 1; + // nuclei ??= new List(); + // if (nuclei.Count == 0) + // new Neuron(this, "Output"); // Every cluster should have at least 1 neuron } public void GarbageCollection() { - HashSet visitedNuclei = new(); - foreach (Nucleus output in this.outputs) - MarkNuclei(visitedNuclei, output); - //Debug.Log($"Garbage collection found {visitedNuclei.Count} Nuclei"); - this.nuclei.RemoveAll(nucleus => visitedNuclei.Contains(nucleus) == false); + // HashSet visitedNuclei = new(); + // foreach (Nucleus output in this.outputs) + // MarkNuclei(visitedNuclei, output); + // //Debug.Log($"Garbage collection found {visitedNuclei.Count} Nuclei"); + // this.nuclei.RemoveAll(nucleus => visitedNuclei.Contains(nucleus) == false); } - public void MarkNuclei(HashSet visitedNuclei, Nucleus nucleus) { - if (nucleus is null) - return; + // public void MarkNuclei(HashSet visitedNuclei, Nucleus nucleus) { + // if (nucleus is null) + // return; - if (nucleus.parent != null && nucleus.parent.prefab != this) - visitedNuclei.Add(nucleus.parent); - else - visitedNuclei.Add(nucleus); - if (nucleus.synapses != null) { - HashSet visitedSynapses = new(); - foreach (Synapse synapse in nucleus.synapses) { - if (synapse != null && synapse.neuron != null) { - visitedSynapses.Add(synapse); - if (synapse.neuron is Nucleus synapse_nucleus) - MarkNuclei(visitedNuclei, synapse_nucleus); - } - } - nucleus.synapses.RemoveAll(synapse => visitedSynapses.Contains(synapse) == false); - } - if (nucleus is Neuron neuron && neuron.receivers != null) { - HashSet visitedReceivers = new(); - foreach (Nucleus receiver in neuron.receivers) { - if (receiver != null && receiver != null) { - visitedReceivers.Add(receiver); - visitedNuclei.Add(receiver); - } - } - neuron.receivers.RemoveAll(receiver => visitedReceivers.Contains(receiver) == false); - } - } + // if (nucleus.parent != null && nucleus.parent.prefab != this) + // visitedNuclei.Add(nucleus.parent); + // else + // visitedNuclei.Add(nucleus); + // if (nucleus is Neuron neuron) { + // if (neuron.synapses != null) { + // HashSet visitedSynapses = new(); + // foreach (Synapse synapse in neuron.synapses) { + // if (synapse != null && synapse.neuron != null) { + // visitedSynapses.Add(synapse); + // if (synapse.neuron is Nucleus synapse_nucleus) + // MarkNuclei(visitedNuclei, synapse_nucleus); + // } + // } + // neuron.synapses.RemoveAll(synapse => visitedSynapses.Contains(synapse) == false); + // } + // if (neuron.receivers != null) { + // HashSet visitedReceivers = new(); + // foreach (Nucleus receiver in neuron.receivers) { + // if (receiver != null && receiver != null) { + // visitedReceivers.Add(receiver); + // visitedNuclei.Add(receiver); + // } + // } + // neuron.receivers.RemoveAll(receiver => visitedReceivers.Contains(receiver) == false); + // } + // } + // } - public virtual void UpdateNuclei() { - foreach (Nucleus nucleus in this.nuclei) - nucleus.UpdateNuclei(); - } + // public virtual void UpdateNuclei() { + // foreach (Nucleus nucleus in this.nuclei) + // nucleus.UpdateNuclei(); + // } - public int GetNucleusIndex(Nucleus receiver) { - int ix = 0; - foreach (Nucleus nucleus in this.nuclei) { - if (receiver == nucleus) - return ix; - ix++; - } - return -1; - } + // public int GetNucleusIndex(Nucleus receiver) { + // int ix = 0; + // foreach (Nucleus nucleus in this.nuclei) { + // if (receiver == nucleus) + // return ix; + // ix++; + // } + // return -1; + // } } } 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.