└── addons └── tree_maps ├── todo.txt ├── plugin.gd.uid ├── nodes ├── tree_map.gd.uid ├── tree_map_node.gd.uid ├── TreeMap.svg.import ├── TreeMapNode.svg.import ├── TreeMapNode.svg ├── TreeMap.svg ├── tree_map_node.gd └── tree_map.gd ├── icons ├── arrow.png ├── icons.kra ├── icons.png ├── arrow_filled.png ├── editor │ ├── TileUnchecked.svg │ ├── Lock.svg │ ├── Unlock.svg │ ├── EditorPathSmoothHandle.svg │ ├── TileChecked.svg │ ├── EditAddRemove.svg │ ├── BoneMapperHandleSelected.svg │ ├── CurveCreate.svg │ ├── CurveEdit.svg │ ├── CurveDelete.svg │ ├── Lock.svg.import │ ├── Unlock.svg.import │ ├── CurveEdit.svg.import │ ├── CurveCreate.svg.import │ ├── CurveDelete.svg.import │ ├── TileChecked.svg.import │ ├── EditAddRemove.svg.import │ ├── TileUnchecked.svg.import │ ├── EditorPathSmoothHandle.svg.import │ └── BoneMapperHandleSelected.svg.import ├── icons_atlas.tres ├── arrow.png.import ├── icons.png.import └── arrow_filled.png.import ├── plugin.cfg ├── icon.svg ├── icon.svg.import ├── buttons └── editor_tool_button.tscn ├── LICENSE.txt ├── node.tscn2058105126.tmp ├── example.tscn ├── README.md └── plugin.gd /addons/tree_maps/todo.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/plugin.gd.uid: -------------------------------------------------------------------------------- 1 | uid://hfh3532ig52 2 | -------------------------------------------------------------------------------- /addons/tree_maps/nodes/tree_map.gd.uid: -------------------------------------------------------------------------------- 1 | uid://d2m0hkeep073t 2 | -------------------------------------------------------------------------------- /addons/tree_maps/nodes/tree_map_node.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cn4fi27bjgvjq 2 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToxicStarfall/tree-maps-addon/HEAD/addons/tree_maps/icons/arrow.png -------------------------------------------------------------------------------- /addons/tree_maps/icons/icons.kra: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToxicStarfall/tree-maps-addon/HEAD/addons/tree_maps/icons/icons.kra -------------------------------------------------------------------------------- /addons/tree_maps/icons/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToxicStarfall/tree-maps-addon/HEAD/addons/tree_maps/icons/icons.png -------------------------------------------------------------------------------- /addons/tree_maps/icons/arrow_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ToxicStarfall/tree-maps-addon/HEAD/addons/tree_maps/icons/arrow_filled.png -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/TileUnchecked.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/Lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/Unlock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/EditorPathSmoothHandle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/TileChecked.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/EditAddRemove.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/plugin.cfg: -------------------------------------------------------------------------------- 1 | [plugin] 2 | 3 | name="Tree Maps - Graphs and Skill Trees" 4 | description="Tree Maps provides useful nodes and functionality to help create graphical maps of tree-like node structures." 5 | author="ToxicStarfall" 6 | version="1.1" 7 | script="plugin.gd" 8 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/BoneMapperHandleSelected.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/icons_atlas.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://da0wo7pqgegga"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://q6dukgm6v3yv" path="res://addons/tree_maps/icons/icons.png" id="1_e4qyu"] 4 | 5 | [resource] 6 | atlas = ExtResource("1_e4qyu") 7 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/CurveCreate.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/CurveEdit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/CurveDelete.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/arrow.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bxh7dktvo38v3" 6 | path="res://.godot/imported/arrow.png-b02acd572faab1cfebed78d85a062ed0.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/arrow.png" 14 | dest_files=["res://.godot/imported/arrow.png-b02acd572faab1cfebed78d85a062ed0.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/icons.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://q6dukgm6v3yv" 6 | path="res://.godot/imported/icons.png-911985b397013ce7cacb794cd60d8c02.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/icons.png" 14 | dest_files=["res://.godot/imported/icons.png-911985b397013ce7cacb794cd60d8c02.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/arrow_filled.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://pf8oexgghvpw" 6 | path="res://.godot/imported/arrow_filled.png-41833e01422ece1f0d1af0648511ccc6.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/arrow_filled.png" 14 | dest_files=["res://.godot/imported/arrow_filled.png-41833e01422ece1f0d1af0648511ccc6.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/tree_maps/icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /addons/tree_maps/icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bmelguaiquwek" 6 | path="res://.godot/imported/icon.svg-4a7087432761558cacb6f6b392a6c424.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icon.svg" 14 | dest_files=["res://.godot/imported/icon.svg-4a7087432761558cacb6f6b392a6c424.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/nodes/TreeMap.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bn217q4ua4td1" 6 | path="res://.godot/imported/TreeMap.svg-3670b200f2c7823acf9f9d677d77544b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/nodes/TreeMap.svg" 14 | dest_files=["res://.godot/imported/TreeMap.svg-3670b200f2c7823acf9f9d677d77544b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/Lock.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://d03crxes6h32y" 6 | path="res://.godot/imported/Lock.svg-96bf81c05bcc1db6af2ba18061f820ae.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/editor/Lock.svg" 14 | dest_files=["res://.godot/imported/Lock.svg-96bf81c05bcc1db6af2ba18061f820ae.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/Unlock.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cnulx1xe6rkgs" 6 | path="res://.godot/imported/Unlock.svg-284fee95106f1f4de50b170f4a04ab36.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/editor/Unlock.svg" 14 | dest_files=["res://.godot/imported/Unlock.svg-284fee95106f1f4de50b170f4a04ab36.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/nodes/TreeMapNode.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dyn6parc3ur5i" 6 | path="res://.godot/imported/TreeMapNode.svg-6ab533c8c7893d9fda8c8b5a3ff3d05e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/nodes/TreeMapNode.svg" 14 | dest_files=["res://.godot/imported/TreeMapNode.svg-6ab533c8c7893d9fda8c8b5a3ff3d05e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/CurveEdit.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://kwhdwj61pjwr" 6 | path="res://.godot/imported/CurveEdit.svg-49256e74c35862776da13f974217cf9a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/editor/CurveEdit.svg" 14 | dest_files=["res://.godot/imported/CurveEdit.svg-49256e74c35862776da13f974217cf9a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/CurveCreate.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c2li8il5nmute" 6 | path="res://.godot/imported/CurveCreate.svg-da7679e3286300768832b4d1d9a382e4.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/editor/CurveCreate.svg" 14 | dest_files=["res://.godot/imported/CurveCreate.svg-da7679e3286300768832b4d1d9a382e4.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/CurveDelete.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cy2fsjwjvrt88" 6 | path="res://.godot/imported/CurveDelete.svg-c0fcd6f1effd0b550b8dffe772a1ac21.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/editor/CurveDelete.svg" 14 | dest_files=["res://.godot/imported/CurveDelete.svg-c0fcd6f1effd0b550b8dffe772a1ac21.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/TileChecked.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://hii138rirhow" 6 | path="res://.godot/imported/TileChecked.svg-72ec8b294b468d57b25125f13cea8157.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/editor/TileChecked.svg" 14 | dest_files=["res://.godot/imported/TileChecked.svg-72ec8b294b468d57b25125f13cea8157.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/EditAddRemove.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://h4bsdvdsrxrw" 6 | path="res://.godot/imported/EditAddRemove.svg-d689346f1ab7bee26368484656a0c18a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/editor/EditAddRemove.svg" 14 | dest_files=["res://.godot/imported/EditAddRemove.svg-d689346f1ab7bee26368484656a0c18a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/TileUnchecked.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://yy33ukacqxo0" 6 | path="res://.godot/imported/TileUnchecked.svg-7c4e2ebff160c8c4c32c4f31421954f6.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/editor/TileUnchecked.svg" 14 | dest_files=["res://.godot/imported/TileUnchecked.svg-7c4e2ebff160c8c4c32c4f31421954f6.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/EditorPathSmoothHandle.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cf6khdesbkgyr" 6 | path="res://.godot/imported/EditorPathSmoothHandle.svg-c1a9c7adae2b62efcff74ec615355894.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/editor/EditorPathSmoothHandle.svg" 14 | dest_files=["res://.godot/imported/EditorPathSmoothHandle.svg-c1a9c7adae2b62efcff74ec615355894.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/icons/editor/BoneMapperHandleSelected.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://d0c1okq1p4l81" 6 | path="res://.godot/imported/BoneMapperHandleSelected.svg-463f08a410f55171f724ba90f9ad6088.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/tree_maps/icons/editor/BoneMapperHandleSelected.svg" 14 | dest_files=["res://.godot/imported/BoneMapperHandleSelected.svg-463f08a410f55171f724ba90f9ad6088.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/tree_maps/buttons/editor_tool_button.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://c3pssfeg4hawj"] 2 | 3 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xg628"] 4 | bg_color = Color(0.23, 0.23, 0.23, 1) 5 | border_width_left = 2 6 | border_width_top = 2 7 | border_width_right = 2 8 | border_width_bottom = 2 9 | border_color = Color(0.439216, 0.729412, 0.980392, 1) 10 | 11 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_w5nyu"] 12 | bg_color = Color(0.23, 0.23, 0.23, 1) 13 | 14 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_d8l5m"] 15 | bg_color = Color(0.180392, 0.180392, 0.180392, 1) 16 | border_width_left = 2 17 | border_width_top = 2 18 | border_width_right = 2 19 | border_width_bottom = 2 20 | border_color = Color(0.439216, 0.729412, 0.980392, 1) 21 | 22 | [node name="EditorToolButton" type="Button"] 23 | offset_right = 8.0 24 | offset_bottom = 8.0 25 | size_flags_vertical = 3 26 | theme_override_styles/hover_pressed = SubResource("StyleBoxFlat_xg628") 27 | theme_override_styles/hover = SubResource("StyleBoxFlat_w5nyu") 28 | theme_override_styles/pressed = SubResource("StyleBoxFlat_d8l5m") 29 | toggle_mode = true 30 | icon_alignment = 1 31 | -------------------------------------------------------------------------------- /addons/tree_maps/LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 ToxicStarfall 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /addons/tree_maps/nodes/TreeMapNode.svg: -------------------------------------------------------------------------------- 1 | 2 | 50 | -------------------------------------------------------------------------------- /addons/tree_maps/nodes/TreeMap.svg: -------------------------------------------------------------------------------- 1 | 2 | 39 | -------------------------------------------------------------------------------- /addons/tree_maps/node.tscn2058105126.tmp: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3 uid="uid://ctluay8kkm6b8"] 2 | 3 | [ext_resource type="Script" uid="uid://d2m0hkeep073t" path="res://addons/new_folder/tree_map.gd" id="2_112p8"] 4 | [ext_resource type="Script" uid="uid://cn4fi27bjgvjq" path="res://addons/new_folder/tree_map_node.gd" id="3_112p8"] 5 | 6 | [sub_resource type="Gradient" id="Gradient_e2u21"] 7 | 8 | [sub_resource type="Curve2D" id="Curve2D_nxiqb"] 9 | _data = { 10 | "points": PackedVector2Array(0, 0, 0, 0, 155, 45, 21, -109, -21, 109, 281, 128, 0, 0, 0, 0, 486, 270, 0, 0, 0, 0, 669, 335) 11 | } 12 | point_count = 4 13 | 14 | [node name="Node" type="Node"] 15 | 16 | [node name="Line2D" type="Line2D" parent="."] 17 | visible = false 18 | position = Vector2(237, -27) 19 | points = PackedVector2Array(37, 29, 323, 91, 276, 286) 20 | gradient = SubResource("Gradient_e2u21") 21 | 22 | [node name="Path2D" type="Path2D" parent="."] 23 | visible = false 24 | position = Vector2(237, -27) 25 | curve = SubResource("Curve2D_nxiqb") 26 | 27 | [node name="NodeTree" type="Node2D" parent="."] 28 | script = ExtResource("2_112p8") 29 | nodes = Array[Vector2]([Vector2(48, 48), Vector2(96, 288), Vector2(432, 56), Vector2(440, 304)]) 30 | 31 | [node name="NodeTreeItem" type="Node2D" parent="NodeTree"] 32 | position = Vector2(48, 48) 33 | script = ExtResource("3_112p8") 34 | outputs = Array[int]([2, 3, 1]) 35 | metadata/_custom_type_script = "uid://cn4fi27bjgvjq" 36 | 37 | [node name="NodeTreeItem2" type="Node2D" parent="NodeTree"] 38 | position = Vector2(96, 216) 39 | script = ExtResource("3_112p8") 40 | editing_state = 1 41 | editing_connections = true 42 | outputs = Array[int]([3]) 43 | inputs = Array[int]([0]) 44 | metadata/_custom_type_script = "uid://cn4fi27bjgvjq" 45 | 46 | [node name="NodeTreeItem3" type="Node2D" parent="NodeTree"] 47 | position = Vector2(432, 56) 48 | script = ExtResource("3_112p8") 49 | outputs = Array[int]([3]) 50 | inputs = Array[int]([0]) 51 | metadata/_custom_type_script = "uid://cn4fi27bjgvjq" 52 | 53 | [node name="NodeTreeItem4" type="Node2D" parent="NodeTree"] 54 | position = Vector2(504, 216) 55 | script = ExtResource("3_112p8") 56 | editing_state = 1 57 | editing_connections = true 58 | inputs = Array[int]([0, 1, 2]) 59 | metadata/_custom_type_script = "uid://cn4fi27bjgvjq" 60 | -------------------------------------------------------------------------------- /addons/tree_maps/example.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=3 uid="uid://ctluay8kkm6b8"] 2 | 3 | [ext_resource type="Script" uid="uid://d2m0hkeep073t" path="res://addons/tree_maps/nodes/tree_map.gd" id="1_pml1y"] 4 | [ext_resource type="Script" uid="uid://cn4fi27bjgvjq" path="res://addons/tree_maps/nodes/tree_map_node.gd" id="2_rkpsp"] 5 | [ext_resource type="Texture2D" uid="uid://bxh7dktvo38v3" path="res://addons/tree_maps/icons/arrow.png" id="3_b1hr1"] 6 | 7 | [node name="Node" type="Node"] 8 | 9 | [node name="TreeMap" type="Node2D" parent="."] 10 | script = ExtResource("1_pml1y") 11 | nodes = Array[Vector2]([Vector2(0, 192), Vector2(192, 192), Vector2(384, 24), Vector2(200, 24), Vector2(496, 192), Vector2(632, 24), Vector2(192, 272), Vector2(400, 272)]) 12 | 13 | [node name="TreeMapNode" type="Node2D" parent="TreeMap"] 14 | position = Vector2(0, 192) 15 | script = ExtResource("2_rkpsp") 16 | outputs = Array[int]([3]) 17 | inputs = Array[int]([1]) 18 | metadata/_custom_type_script = "uid://cn4fi27bjgvjq" 19 | 20 | [node name="TreeMapNode2" type="Node2D" parent="TreeMap"] 21 | position = Vector2(192, 192) 22 | script = ExtResource("2_rkpsp") 23 | outputs = Array[int]([0]) 24 | inputs = Array[int]([3, 2]) 25 | line_color = Color(1, 0, 0, 1) 26 | metadata/_custom_type_script = "uid://cn4fi27bjgvjq" 27 | 28 | [node name="TreeMapNode3" type="Node2D" parent="TreeMap"] 29 | position = Vector2(384, 24) 30 | script = ExtResource("2_rkpsp") 31 | outputs = Array[int]([1, 4]) 32 | inputs = Array[int]([3]) 33 | line_color = Color(0.0833333, 1, 0, 1) 34 | metadata/_custom_type_script = "uid://cn4fi27bjgvjq" 35 | 36 | [node name="TreeMapNode4" type="Node2D" parent="TreeMap"] 37 | position = Vector2(192, 24) 38 | script = ExtResource("2_rkpsp") 39 | outputs = Array[int]([1, 2]) 40 | inputs = Array[int]([0]) 41 | line_color = Color(1, 0.8, 0, 1) 42 | metadata/_custom_type_script = "uid://cn4fi27bjgvjq" 43 | 44 | [node name="TreeMapNode5" type="Node2D" parent="TreeMap"] 45 | position = Vector2(496, 192) 46 | script = ExtResource("2_rkpsp") 47 | outputs = Array[int]([5]) 48 | inputs = Array[int]([2]) 49 | line_color = Color(0, 0.6, 1, 1) 50 | 51 | [node name="TreeMapNode6" type="Node2D" parent="TreeMap"] 52 | position = Vector2(632, 24) 53 | script = ExtResource("2_rkpsp") 54 | inputs = Array[int]([4]) 55 | 56 | [node name="TreeMapNode7" type="Node2D" parent="TreeMap"] 57 | position = Vector2(192, 272) 58 | script = ExtResource("2_rkpsp") 59 | inputs = Array[int]([7]) 60 | node_color = Color(1, 0.466667, 0, 1) 61 | 62 | [node name="TreeMapNode8" type="Node2D" parent="TreeMap"] 63 | position = Vector2(400, 272) 64 | script = ExtResource("2_rkpsp") 65 | outputs = Array[int]([6]) 66 | node_color = Color(1, 0, 1, 1) 67 | line_color = Color(0, 0.533333, 1, 1) 68 | arrow_color = Color(1, 0, 0, 1) 69 | arrow_texture = ExtResource("3_b1hr1") 70 | -------------------------------------------------------------------------------- /addons/tree_maps/nodes/tree_map_node.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name TreeMapNode 3 | extends Node2D 4 | 5 | signal moved 6 | #signal connections_edited 7 | 8 | 9 | @export var outputs: Array[int] = [] 10 | @export var inputs: Array[int] = [] 11 | 12 | @export var locked: bool = false 13 | #@export_category("Customization") 14 | #@export var data: Resource 15 | 16 | 17 | @export_category("Overrides") 18 | # Defaults are overidden by TreeMap parent. 19 | # Default Properties - fallback if parent properties do not exist. 20 | #var default_node_color = Color.WHITE 21 | #var default_line_color = Color.WHITE 22 | #var default_arrow_color = Color.WHITE 23 | #var default_arrow_texture = preload("res://addons/tree_maps/icons/arrow_filled.png") 24 | 25 | # Inherited TreeMap Properties 26 | var parent_node_color: Color 27 | var parent_line_color: Color 28 | var parent_arrow_color: Color 29 | var parent_arrow_texture: Texture2D 30 | # Inheritance only 31 | var parent_node_size: float 32 | var parent_node_shape: String 33 | var parent_node_texture: Texture2D 34 | var parent_line_thickness: float 35 | var parent_line_texture: Texture2D 36 | 37 | # Internal Usage Properties 38 | #var internal_line_color = default_line_color 39 | 40 | # Editable Override Properties 41 | @export_group("Nodes") 42 | @export var node_color: Color = Color.WHITE 43 | @export_group("Lines") 44 | @export var line_color: Color = Color.WHITE 45 | #@export var line_thickness: float = 10.0 46 | @export_group("Arrows") 47 | @export var arrow_color: Color = Color.WHITE ## Modulates default texture color 48 | @export var arrow_texture: Texture2D = preload("res://addons/tree_maps/icons/arrow_filled.png") 49 | 50 | var override_properties = [] 51 | 52 | 53 | func _setup(): 54 | #print("setup") 55 | # If no override property is specified, then use inherited property. 56 | #if !line_color: 57 | #internal_line_color = parent_line_color 58 | # If no inherited property is specified, then use Default property. 59 | #if !parent_line_color: 60 | #internal_line_color = default_line_color 61 | pass 62 | 63 | 64 | func _enter_tree() -> void: 65 | if Engine.is_editor_hint(): 66 | set_notify_transform(true) 67 | EditorInterface.get_inspector().property_edited.connect( _on_property_edited ) 68 | _setup() 69 | 70 | 71 | func _exit_tree() -> void: 72 | if Engine.is_editor_hint(): 73 | EditorInterface.get_inspector().property_edited.disconnect( _on_property_edited ) 74 | 75 | 76 | func _draw() -> void: 77 | _draw_connection() 78 | _draw_node() 79 | 80 | 81 | func _draw_connection(): 82 | for i in outputs: 83 | draw_set_transform(Vector2(0,0), 0) # Reset drawing position 84 | var target_pos = get_parent().get_child(i).global_position 85 | draw_line(Vector2(0,0) , target_pos - self.global_position, line_color, parent_line_thickness) 86 | 87 | var arrow_texture = arrow_texture 88 | var arrow_pos = (target_pos - self.position) / 2 # Get half-way point between nodes 89 | var arrow_ang = (target_pos - position).angle() # Get angle pointing towards next connecting node 90 | draw_set_transform(arrow_pos, arrow_ang) # Set draw offset to arrow position to make it the center rotating point 91 | draw_texture(arrow_texture, -arrow_texture.get_size() / 2, arrow_color) 92 | 93 | 94 | func _draw_node(): 95 | draw_set_transform(Vector2(0,0), 0) 96 | if parent_node_texture: 97 | var texture_offset = -(parent_node_texture.get_size() / 2) 98 | draw_texture(parent_node_texture, texture_offset, node_color) 99 | else: 100 | draw_circle(Vector2(0,0), parent_node_size / 2, node_color, true) 101 | #draw_colored_polygon() 102 | 103 | 104 | func _notification(what) -> void: 105 | if what == NOTIFICATION_TRANSFORM_CHANGED: 106 | moved.emit(self) 107 | 108 | 109 | func _property_can_revert(property: StringName) -> bool: 110 | match property: 111 | "line_color", "node_color", "arrow_color", "arrow_texture": 112 | return true 113 | return false 114 | 115 | 116 | func _property_get_revert(property: StringName) -> Variant: 117 | #match property: 118 | #"line_color": 119 | #return parent_line_color 120 | if get(property): 121 | # Return parent inherited proeprty if available, othewise return fallback defaults 122 | var parent_prop = get("parent_" + property) 123 | if parent_prop: return parent_prop 124 | else: return get("default_" + property) 125 | return 126 | 127 | 128 | # 129 | func _on_property_edited(property: String): 130 | if EditorInterface.get_inspector().get_edited_object() == self: 131 | match property: 132 | "line_color", "node_color", "arrow_color", "arrow_texture": 133 | apply_properties() 134 | 135 | 136 | # Update properties 137 | func apply_properties(): 138 | # If override property is equal to inherited property, update using inherited properties 139 | #if line_color == parent_line_color: internal_line_color = parent_line_color 140 | # Otherwise use override properties 141 | #else: internal_line_color = line_color 142 | if line_color == parent_line_color: line_color = parent_line_color 143 | if node_color == parent_node_color: node_color = parent_node_color 144 | if arrow_color == parent_arrow_color: arrow_color = parent_arrow_color 145 | if arrow_texture == parent_arrow_texture: arrow_texture = parent_arrow_texture 146 | queue_redraw() 147 | 148 | 149 | func toggle_lock(): 150 | pass 151 | 152 | 153 | ## Adds a idx for node connections. 154 | func add_connection(idx: int, connection_array: Array[int]): 155 | connection_array.append(idx) 156 | queue_redraw() 157 | 158 | 159 | ## Removes idx from node's connection_array 160 | func remove_connection(idx: int, connection_array: Array[int]): 161 | connection_array.erase(idx) 162 | queue_redraw() 163 | 164 | 165 | func swap_connection(idx, old_array, new_array): 166 | old_array.erase(idx) 167 | new_array.append(idx) 168 | 169 | 170 | # Returns true/false if the Input/Output array has int value of "idx" 171 | func has_connection(idx: int, connection_array: Array[int]): 172 | return connection_array.has(idx) 173 | 174 | 175 | func extend(): 176 | pass 177 | -------------------------------------------------------------------------------- /addons/tree_maps/README.md: -------------------------------------------------------------------------------- 1 | 2 |
6 | Tree Maps provides useful nodes and functionality to help create graphical maps of tree-like node structures.
7 |
8 | Perfect for skill trees, technology trees, and or dungeon maps.
9 |
14 | Godot Asset Library - 15 | Releases 16 |
17 | 18 | # 19 | 20 |