├── readme ├── .gdignore ├── banner.png ├── screenshot_1.png ├── screenshot_2.png └── screenshot_3.png ├── test ├── .gdignore └── tileset.png ├── cursor.gd ├── assets ├── sprites │ ├── grid.png │ ├── icon.ico │ ├── icon.png │ ├── logo.png │ ├── cursor.png │ ├── object.png │ ├── grid.png.import │ ├── icon.png.import │ ├── logo.png.import │ ├── object.png.import │ └── cursor.png.import └── firacode │ ├── firacode_medium.ttf │ └── OFL.txt ├── .gitignore ├── cursor.tscn ├── info.gd ├── tile_button.tscn ├── LICENSE ├── layer.tscn ├── object_item.tscn ├── README.md ├── project.godot ├── node.gd ├── object.tscn └── node.tscn /readme/.gdignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/.gdignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cursor.gd: -------------------------------------------------------------------------------- 1 | extends Sprite 2 | 3 | var offset_pos: Vector2 4 | -------------------------------------------------------------------------------- /readme/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/readme/banner.png -------------------------------------------------------------------------------- /test/tileset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/test/tileset.png -------------------------------------------------------------------------------- /assets/sprites/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/assets/sprites/grid.png -------------------------------------------------------------------------------- /assets/sprites/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/assets/sprites/icon.ico -------------------------------------------------------------------------------- /assets/sprites/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/assets/sprites/icon.png -------------------------------------------------------------------------------- /assets/sprites/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/assets/sprites/logo.png -------------------------------------------------------------------------------- /readme/screenshot_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/readme/screenshot_1.png -------------------------------------------------------------------------------- /readme/screenshot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/readme/screenshot_2.png -------------------------------------------------------------------------------- /readme/screenshot_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/readme/screenshot_3.png -------------------------------------------------------------------------------- /assets/sprites/cursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/assets/sprites/cursor.png -------------------------------------------------------------------------------- /assets/sprites/object.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/assets/sprites/object.png -------------------------------------------------------------------------------- /assets/firacode/firacode_medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arcaneenergy/tilemap-level-editor/HEAD/assets/firacode/firacode_medium.ttf -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Godot-specific ignores 3 | .import/ 4 | export.cfg 5 | export_presets.cfg 6 | 7 | # Mono-specific ignores 8 | .mono/ 9 | data_*/ 10 | -------------------------------------------------------------------------------- /cursor.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=2] 2 | 3 | [ext_resource path="res://assets/sprites/cursor.png" type="Texture" id=1] 4 | [ext_resource path="res://cursor.gd" type="Script" id=2] 5 | 6 | [node name="Cursor" type="Sprite"] 7 | scale = Vector2( 4, 4 ) 8 | texture = ExtResource( 1 ) 9 | script = ExtResource( 2 ) 10 | -------------------------------------------------------------------------------- /info.gd: -------------------------------------------------------------------------------- 1 | extends WindowDialog 2 | 3 | func _on_ButtonGithub_pressed() -> void: 4 | OS.shell_open("https://github.com/arcaneenergy/tilemap-level-editor") 5 | 6 | func _on_ButtonYouTube_pressed() -> void: 7 | OS.shell_open("https://www.youtube.com/c/ArcaneEnergy") 8 | 9 | func _on_ButtonWebsite_pressed() -> void: 10 | OS.shell_open("https://arcaneenergy.github.io/") 11 | -------------------------------------------------------------------------------- /tile_button.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene format=2] 2 | 3 | [node name="TileButton" type="TextureButton"] 4 | margin_right = 64.0 5 | margin_bottom = 64.0 6 | rect_min_size = Vector2( 64, 64 ) 7 | focus_mode = 0 8 | input_pass_on_modal_close_click = false 9 | expand = true 10 | 11 | [node name="LabelSelect" type="Label" parent="."] 12 | visible = false 13 | margin_left = -4.0 14 | margin_top = -4.0 15 | margin_right = 36.0 16 | margin_bottom = 18.0 17 | input_pass_on_modal_close_click = false 18 | text = "X" 19 | 20 | [node name="LabelIndex" type="Label" parent="."] 21 | anchor_left = 1.0 22 | anchor_right = 1.0 23 | margin_left = -36.0 24 | margin_top = -4.0 25 | margin_right = 4.0 26 | margin_bottom = 18.0 27 | input_pass_on_modal_close_click = false 28 | align = 2 29 | -------------------------------------------------------------------------------- /assets/sprites/grid.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/grid.png-d8f6e3f14599d8a5bb4b96e2954f4f80.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/sprites/grid.png" 13 | dest_files=[ "res://.import/grid.png-d8f6e3f14599d8a5bb4b96e2954f4f80.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=1 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=true 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/sprites/icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/icon.png-9a25435582839ca3cd8bb514b597c2d9.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/sprites/icon.png" 13 | dest_files=[ "res://.import/icon.png-9a25435582839ca3cd8bb514b597c2d9.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=true 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=true 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/sprites/logo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/logo.png-ec0d5908606a38766100cfc93f0dfde6.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/sprites/logo.png" 13 | dest_files=[ "res://.import/logo.png-ec0d5908606a38766100cfc93f0dfde6.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=true 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=true 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/sprites/object.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/object.png-86e49038374a2cef1b8a041d9d8154d7.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/sprites/object.png" 13 | dest_files=[ "res://.import/object.png-86e49038374a2cef1b8a041d9d8154d7.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=true 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=true 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /assets/sprites/cursor.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="StreamTexture" 5 | path="res://.import/cursor.png-f958121cca9f8744a9c081f3fbf5a2dc.stex" 6 | metadata={ 7 | "vram_texture": false 8 | } 9 | 10 | [deps] 11 | 12 | source_file="res://assets/sprites/cursor.png" 13 | dest_files=[ "res://.import/cursor.png-f958121cca9f8744a9c081f3fbf5a2dc.stex" ] 14 | 15 | [params] 16 | 17 | compress/mode=0 18 | compress/lossy_quality=0.7 19 | compress/hdr_mode=0 20 | compress/bptc_ldr=0 21 | compress/normal_map=0 22 | flags/repeat=0 23 | flags/filter=false 24 | flags/mipmaps=false 25 | flags/anisotropic=false 26 | flags/srgb=2 27 | process/fix_alpha_border=true 28 | process/premult_alpha=false 29 | process/HDR_as_SRGB=false 30 | process/invert_color=false 31 | process/normal_map_invert_y=false 32 | stream=false 33 | size_limit=0 34 | detect_3d=true 35 | svg/scale=1.0 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 arcaneenergy 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 | -------------------------------------------------------------------------------- /layer.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene format=2] 2 | 3 | [node name="Layer" type="Panel"] 4 | margin_right = 256.0 5 | margin_bottom = 64.0 6 | rect_min_size = Vector2( 0, 64 ) 7 | input_pass_on_modal_close_click = false 8 | size_flags_horizontal = 3 9 | 10 | [node name="LabelIndex" type="Label" parent="."] 11 | margin_left = 4.0 12 | margin_top = 4.0 13 | margin_right = 45.0 14 | margin_bottom = 18.0 15 | input_pass_on_modal_close_click = false 16 | 17 | [node name="MarginContainer" type="MarginContainer" parent="."] 18 | anchor_right = 1.0 19 | anchor_bottom = 1.0 20 | margin_bottom = -32.0 21 | input_pass_on_modal_close_click = false 22 | custom_constants/margin_right = 16 23 | custom_constants/margin_top = 16 24 | custom_constants/margin_left = 16 25 | custom_constants/margin_bottom = 16 26 | 27 | [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] 28 | margin_left = 16.0 29 | margin_top = 16.0 30 | margin_right = 240.0 31 | margin_bottom = 48.0 32 | custom_constants/separation = 16 33 | 34 | [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] 35 | margin_right = 224.0 36 | margin_bottom = 32.0 37 | input_pass_on_modal_close_click = false 38 | 39 | [node name="CheckBox" type="CheckBox" parent="MarginContainer/VBoxContainer/HBoxContainer"] 40 | margin_right = 32.0 41 | margin_bottom = 32.0 42 | rect_min_size = Vector2( 32, 0 ) 43 | focus_mode = 0 44 | input_pass_on_modal_close_click = false 45 | 46 | [node name="Name" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"] 47 | margin_left = 36.0 48 | margin_right = 116.0 49 | margin_bottom = 32.0 50 | focus_mode = 1 51 | input_pass_on_modal_close_click = false 52 | size_flags_horizontal = 3 53 | size_flags_vertical = 3 54 | caret_blink = true 55 | caret_blink_speed = 0.5 56 | 57 | [node name="ButtonUp" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer"] 58 | margin_left = 120.0 59 | margin_right = 152.0 60 | margin_bottom = 32.0 61 | rect_min_size = Vector2( 32, 32 ) 62 | focus_mode = 0 63 | input_pass_on_modal_close_click = false 64 | text = "↑" 65 | 66 | [node name="ButtonDown" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer"] 67 | margin_left = 156.0 68 | margin_right = 188.0 69 | margin_bottom = 32.0 70 | rect_min_size = Vector2( 32, 32 ) 71 | focus_mode = 0 72 | input_pass_on_modal_close_click = false 73 | text = "↓" 74 | 75 | [node name="ButtonDelete" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer"] 76 | self_modulate = Color( 1, 0, 0, 1 ) 77 | margin_left = 192.0 78 | margin_right = 224.0 79 | margin_bottom = 32.0 80 | rect_min_size = Vector2( 32, 32 ) 81 | focus_mode = 0 82 | input_pass_on_modal_close_click = false 83 | text = "X" 84 | -------------------------------------------------------------------------------- /object_item.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene format=2] 2 | 3 | [node name="Object" type="Panel"] 4 | margin_right = 256.0 5 | margin_bottom = 64.0 6 | rect_min_size = Vector2( 0, 112 ) 7 | input_pass_on_modal_close_click = false 8 | size_flags_horizontal = 3 9 | 10 | [node name="MarginContainer" type="MarginContainer" parent="."] 11 | anchor_right = 1.0 12 | anchor_bottom = 1.0 13 | margin_bottom = -32.0 14 | input_pass_on_modal_close_click = false 15 | custom_constants/margin_right = 16 16 | custom_constants/margin_top = 16 17 | custom_constants/margin_left = 16 18 | custom_constants/margin_bottom = 16 19 | 20 | [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] 21 | margin_left = 16.0 22 | margin_top = 16.0 23 | margin_right = 240.0 24 | margin_bottom = 96.0 25 | custom_constants/separation = 16 26 | 27 | [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] 28 | margin_right = 224.0 29 | margin_bottom = 32.0 30 | input_pass_on_modal_close_click = false 31 | custom_constants/separation = 16 32 | 33 | [node name="Key" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"] 34 | margin_right = 176.0 35 | margin_bottom = 32.0 36 | focus_mode = 1 37 | input_pass_on_modal_close_click = false 38 | size_flags_horizontal = 3 39 | size_flags_vertical = 3 40 | placeholder_text = "key" 41 | caret_blink = true 42 | caret_blink_speed = 0.5 43 | 44 | [node name="ButtonDelete" type="Button" parent="MarginContainer/VBoxContainer/HBoxContainer"] 45 | self_modulate = Color( 1, 0, 0, 1 ) 46 | margin_left = 192.0 47 | margin_right = 224.0 48 | margin_bottom = 32.0 49 | rect_min_size = Vector2( 32, 32 ) 50 | focus_mode = 0 51 | input_pass_on_modal_close_click = false 52 | text = "X" 53 | 54 | [node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] 55 | margin_top = 48.0 56 | margin_right = 224.0 57 | margin_bottom = 80.0 58 | rect_min_size = Vector2( 0, 32 ) 59 | input_pass_on_modal_close_click = false 60 | custom_constants/separation = 16 61 | 62 | [node name="PosX" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer2"] 63 | margin_right = 104.0 64 | margin_bottom = 32.0 65 | focus_mode = 1 66 | input_pass_on_modal_close_click = false 67 | size_flags_horizontal = 3 68 | size_flags_vertical = 3 69 | placeholder_text = "position x" 70 | caret_blink = true 71 | caret_blink_speed = 0.5 72 | 73 | [node name="PosY" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer2"] 74 | margin_left = 120.0 75 | margin_right = 224.0 76 | margin_bottom = 32.0 77 | focus_mode = 1 78 | input_pass_on_modal_close_click = false 79 | size_flags_horizontal = 3 80 | size_flags_vertical = 3 81 | placeholder_text = "position y" 82 | caret_blink = true 83 | caret_blink_speed = 0.5 84 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tilemap Level Editor (Archived) 2 | 3 | ![Banner](readme/banner.png) 4 | 5 | Simple level editor for Godot with JSON export functionality. Made with Godot. 6 | 7 | [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/E1E5CVWWE) 8 | 9 | - [Github Project](https://github.com/arcaneenergy/tilemap-level-editor) 10 | - [YouTube](https://www.youtube.com/c/ArcaneEnergy) 11 | - [Website](https://arcaneenergy.github.io/) 12 | 13 | 14 | --- 15 | 16 | ## Download 17 | 18 | Download the exported program on itch.io. 19 | 20 | [**itch.io download link**](https://arcaneenergy.itch.io/tilemap-level-editor) 21 | 22 | ## Video 23 | [](https://youtu.be/01ktb-9E6J0) 24 | 25 | ## Use case 26 | 27 | This is currently used in a personal project. It's used to load in JSON files into Godot to recreate the levels at runtime. The exported JSON file contains all levels and individual cells. This makes it easy to recreate the level in Godot. 28 | 29 | Alternatively, you can use this program to easily create levels in the editor. 30 | 31 | ## Controls 32 | 33 | Placement: 34 | - Left click: Place tile (if selected) 35 | - Right click: Delete tile 36 | 37 | Other: 38 | - TAB: Toggle GUI 39 | - SHIFT + Scroll up: Increase brush size 40 | - SHIFT + Scroll down: Decrease brush size 41 | 42 | Camera: 43 | - Middle mouse drag: Drag camera around 44 | - W / ↑: Move camera up 45 | - S / ↓: Move camera down 46 | - A / ←: Move camera left 47 | - D / →: Move camera right 48 | - Mouse scroll up: Zoom in 49 | - Mouse scroll down: Zoom out 50 | 51 | ## UI Overview 52 | 53 | Create new layers with the `+ New Layer` button. This brings up a dialog box for selecting an image file. After selecting a file, the new layer appears in the list. 54 | 55 | Switch between layers by pressing the arrow to the left of the layer. This will open the tileset on the left. Use the up and down arrow keys to move layers. 56 | 57 | ![Screenshot 1](readme/screenshot_1.png) 58 | 59 | Select a tile and start drawing. 60 | 61 | ![Screenshot 2](readme/screenshot_2.png) 62 | 63 | Change the size and shape of the cursor using the buttons in the lower right corner. 64 | 65 | ![Screenshot 3](readme/screenshot_3.png) 66 | 67 | ## Exported JSON file 68 | 69 | The exported JSON file might look like this: 70 | 71 | ```json 72 | { 73 | "layers": [ 74 | { 75 | "texture_path": "C:/tilemap-level-editor/test/tileset.png", 76 | "cells": [ 77 | [ 78 | 4, 79 | -5, 80 | -3 81 | ], 82 | ] 83 | } 84 | ], 85 | "objects": [ 86 | { 87 | "key": "player", 88 | "position": [ 89 | 2, 90 | 4 91 | ] 92 | } 93 | ] 94 | } 95 | ``` 96 | 97 | Each cell contains an ID, an x and a y position. The ID is used to identify which cell in the tileset it refers to. 98 | 99 | ## Problems 100 | 101 | - [ ] Currently the program only supports tiles of 16x16 size. The spritesheet needs to be divisible by 16 (16, 32, 48, 64 etc.) 102 | - [ ] Exported texture paths are absolute. 103 | 104 | Godot_v3.5-rc2 105 | -------------------------------------------------------------------------------- /assets/firacode/OFL.txt: -------------------------------------------------------------------------------- 1 | Copyright 2014-2020 The Fira Code Project Authors (https://github.com/tonsky/FiraCode) 2 | 3 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 4 | This license is copied below, and is also available with a FAQ at: 5 | http://scripts.sil.org/OFL 6 | 7 | 8 | ----------------------------------------------------------- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | ----------------------------------------------------------- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide 14 | development of collaborative font projects, to support the font creation 15 | efforts of academic and linguistic communities, and to provide a free and 16 | open framework in which fonts may be shared and improved in partnership 17 | with others. 18 | 19 | The OFL allows the licensed fonts to be used, studied, modified and 20 | redistributed freely as long as they are not sold by themselves. The 21 | fonts, including any derivative works, can be bundled, embedded, 22 | redistributed and/or sold with any software provided that any reserved 23 | names are not used by derivative works. The fonts and derivatives, 24 | however, cannot be released under any other type of license. The 25 | requirement for fonts to remain under this license does not apply 26 | to any document created using the fonts or their derivatives. 27 | 28 | DEFINITIONS 29 | "Font Software" refers to the set of files released by the Copyright 30 | Holder(s) under this license and clearly marked as such. This may 31 | include source files, build scripts and documentation. 32 | 33 | "Reserved Font Name" refers to any names specified as such after the 34 | copyright statement(s). 35 | 36 | "Original Version" refers to the collection of Font Software components as 37 | distributed by the Copyright Holder(s). 38 | 39 | "Modified Version" refers to any derivative made by adding to, deleting, 40 | or substituting -- in part or in whole -- any of the components of the 41 | Original Version, by changing formats or by porting the Font Software to a 42 | new environment. 43 | 44 | "Author" refers to any designer, engineer, programmer, technical 45 | writer or other person who contributed to the Font Software. 46 | 47 | PERMISSION & CONDITIONS 48 | Permission is hereby granted, free of charge, to any person obtaining 49 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 50 | redistribute, and sell modified and unmodified copies of the Font 51 | Software, subject to the following conditions: 52 | 53 | 1) Neither the Font Software nor any of its individual components, 54 | in Original or Modified Versions, may be sold by itself. 55 | 56 | 2) Original or Modified Versions of the Font Software may be bundled, 57 | redistributed and/or sold with any software, provided that each copy 58 | contains the above copyright notice and this license. These can be 59 | included either as stand-alone text files, human-readable headers or 60 | in the appropriate machine-readable metadata fields within text or 61 | binary files as long as those fields can be easily viewed by the user. 62 | 63 | 3) No Modified Version of the Font Software may use the Reserved Font 64 | Name(s) unless explicit written permission is granted by the corresponding 65 | Copyright Holder. This restriction only applies to the primary font name as 66 | presented to the users. 67 | 68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 69 | Software shall not be used to promote, endorse or advertise any 70 | Modified Version, except to acknowledge the contribution(s) of the 71 | Copyright Holder(s) and the Author(s) or with their explicit written 72 | permission. 73 | 74 | 5) The Font Software, modified or unmodified, in part or in whole, 75 | must be distributed entirely under this license, and must not be 76 | distributed under any other license. The requirement for fonts to 77 | remain under this license does not apply to any document created 78 | using the Font Software. 79 | 80 | TERMINATION 81 | This license becomes null and void if any of the above conditions are 82 | not met. 83 | 84 | DISCLAIMER 85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 93 | OTHER DEALINGS IN THE FONT SOFTWARE. 94 | -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=4 10 | 11 | [application] 12 | 13 | config/name="Tilemap Level Editor" 14 | run/main_scene="res://node.tscn" 15 | boot_splash/show_image=false 16 | config/icon="res://assets/sprites/icon.png" 17 | config/windows_native_icon="res://assets/sprites/icon.ico" 18 | 19 | [display] 20 | 21 | window/size/width=1280 22 | window/size/height=720 23 | window/stretch/mode="2d" 24 | window/stretch/aspect="expand" 25 | 26 | [gui] 27 | 28 | common/drop_mouse_on_gui_input_disabled=true 29 | 30 | [input] 31 | 32 | place={ 33 | "deadzone": 0.5, 34 | "events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) 35 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":32,"unicode":0,"echo":false,"script":null) 36 | ] 37 | } 38 | delete={ 39 | "deadzone": 0.5, 40 | "events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null) 41 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777220,"unicode":0,"echo":false,"script":null) 42 | ] 43 | } 44 | toggle_gui={ 45 | "deadzone": 0.5, 46 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777218,"unicode":0,"echo":false,"script":null) 47 | ] 48 | } 49 | move_up={ 50 | "deadzone": 0.5, 51 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777232,"unicode":0,"echo":false,"script":null) 52 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":87,"unicode":0,"echo":false,"script":null) 53 | ] 54 | } 55 | move_right={ 56 | "deadzone": 0.5, 57 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777233,"unicode":0,"echo":false,"script":null) 58 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":68,"unicode":0,"echo":false,"script":null) 59 | ] 60 | } 61 | move_down={ 62 | "deadzone": 0.5, 63 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777234,"unicode":0,"echo":false,"script":null) 64 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":83,"unicode":0,"echo":false,"script":null) 65 | ] 66 | } 67 | move_left={ 68 | "deadzone": 0.5, 69 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777231,"unicode":0,"echo":false,"script":null) 70 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":65,"unicode":0,"echo":false,"script":null) 71 | ] 72 | } 73 | drag={ 74 | "deadzone": 0.5, 75 | "events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":3,"pressed":false,"doubleclick":false,"script":null) 76 | ] 77 | } 78 | zoom_in={ 79 | "deadzone": 0.5, 80 | "events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":4,"pressed":false,"doubleclick":false,"script":null) 81 | ] 82 | } 83 | zoom_out={ 84 | "deadzone": 0.5, 85 | "events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":5,"pressed":false,"doubleclick":false,"script":null) 86 | ] 87 | } 88 | shift={ 89 | "deadzone": 0.5, 90 | "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777237,"unicode":0,"echo":false,"script":null) 91 | ] 92 | } 93 | 94 | [physics] 95 | 96 | common/enable_pause_aware_picking=true 97 | -------------------------------------------------------------------------------- /node.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | onready var _camera: Camera2D = $"%Camera2D" 4 | onready var _tm_container: Node2D = $"%Tilemaps" 5 | onready var _cl: CanvasLayer = $CanvasLayer 6 | onready var _ts_container: Control = $"%TilesetContainer" 7 | onready var _layer_container: Control = $"%Layers" 8 | onready var _objects_list: Control = $"%ObjectsList" 9 | onready var _objects_container: Node2D = $"%Objects" 10 | onready var _fd_import: FileDialog = $"%FileDialogImportJson" 11 | onready var _fd_export: FileDialog = $"%FileDialogExportJson" 12 | onready var _fd_new_layer: FileDialog = $"%FileDialogNewLayer" 13 | onready var _grid: Sprite = $Grid 14 | onready var _lbl_position: Label = $"%LabelPosition" 15 | onready var _btn_circle: Button = $"%ShapeContainer/ButtonCircle" 16 | onready var _btn_square: Button = $"%ShapeContainer/ButtonSquare" 17 | onready var _hslider_size: HSlider = $"%HSliderSize" 18 | onready var _hslider_size_lbl: Label = $"%HSliderSize/Label" 19 | onready var _cursor_container: Node2D = $CursorContainer 20 | onready var _window_dialog_info: WindowDialog = $"%WindowDialogInfo" 21 | 22 | enum BrushShape { CIRCLE, SQUARE } 23 | 24 | var _initial_drag_pos: Vector2 25 | var _current_layer := -1 26 | var _selected_tile := -1 27 | var _current_shape := 0 28 | var _current_size := 1 29 | var _cursors := [] 30 | 31 | const CAMERA_MOVE_SPEED := 100 32 | const CURSOR := preload("res://cursor.tscn") 33 | const TILE_BTN := preload("res://tile_button.tscn") 34 | const LAYER := preload("res://layer.tscn") 35 | const OBJECT_ITEM := preload("res://object_item.tscn") 36 | const OBJECT := preload("res://object.tscn") 37 | 38 | func _ready() -> void: 39 | _set_new_cursor_shape() 40 | 41 | func _process(delta: float) -> void: 42 | if Input.is_action_pressed("move_up"): 43 | _camera.position.y -= CAMERA_MOVE_SPEED * _camera.zoom.x * delta 44 | if Input.is_action_pressed("move_down"): 45 | _camera.position.y += CAMERA_MOVE_SPEED * _camera.zoom.x * delta 46 | if Input.is_action_pressed("move_left"): 47 | _camera.position.x -= CAMERA_MOVE_SPEED * _camera.zoom.x * delta 48 | if Input.is_action_pressed("move_right"): 49 | _camera.position.x += CAMERA_MOVE_SPEED * _camera.zoom.x * delta 50 | if Input.is_action_pressed("drag"): 51 | _camera.position += _initial_drag_pos - get_global_mouse_position() 52 | 53 | func _unhandled_input(event: InputEvent) -> void: 54 | if Input.is_action_just_pressed("drag"): 55 | _initial_drag_pos = get_global_mouse_position() 56 | if Input.is_action_just_pressed("toggle_gui"): 57 | _cl.visible = !_cl.visible 58 | 59 | var shift_pressed := Input.is_action_pressed("shift") 60 | 61 | if Input.is_action_just_pressed("zoom_in"): 62 | if shift_pressed: 63 | _hslider_size.value = clamp(_current_size + 1, 1, 8) 64 | else: 65 | _camera.zoom = Vector2.ONE * clamp(_camera.zoom.x - 0.05, 0.01, 4.0) 66 | if Input.is_action_just_pressed("zoom_out"): 67 | if shift_pressed: 68 | _hslider_size.value = clamp(_current_size - 1, 1, 8) 69 | else: 70 | _camera.zoom = Vector2.ONE * clamp(_camera.zoom.x + 0.05, 0.01, 4.0) 71 | 72 | var mouse_pos = get_global_mouse_position() / 64 73 | var place_pos := Vector2(floor(mouse_pos.x), floor(mouse_pos.y)) 74 | for c in _cursors: 75 | c.position = place_pos * 64 + Vector2.ONE * 32 + c.offset_pos 76 | _lbl_position.text = "%s\n%d" % [place_pos, _selected_tile] 77 | 78 | if _current_layer == -1: return 79 | 80 | if Input.is_action_pressed("place"): 81 | for i in _cursors: 82 | _layer_container.get_child(_current_layer).get_meta("tm").set_cellv( 83 | Vector2(floor(i.position.x / 64), floor(i.position.y / 64)), 84 | _selected_tile) 85 | 86 | if Input.is_action_pressed("delete"): 87 | for i in _cursors: 88 | _layer_container.get_child(_current_layer).get_meta("tm").set_cellv( 89 | Vector2(floor(i.position.x / 64), floor(i.position.y / 64)), 90 | -1) 91 | 92 | func _on_ButtonNewLayer_pressed() -> void: 93 | _fd_new_layer.popup() 94 | 95 | func _on_ButtonNewObject_pressed() -> void: 96 | _create_object() 97 | 98 | func _on_Layer_toggled(button_pressed: bool, layer: Control) -> void: 99 | _clear_ts_container() 100 | _set_selection(-1) 101 | 102 | for i in _layer_container.get_children(): 103 | i.get_node("MarginContainer/VBoxContainer/HBoxContainer/CheckBox").set_pressed_no_signal(false) 104 | i.self_modulate = Color.white 105 | 106 | if button_pressed: 107 | layer.get_node("MarginContainer/VBoxContainer/HBoxContainer/CheckBox").set_pressed_no_signal(true) 108 | layer.self_modulate = Color.blue 109 | else: 110 | return 111 | 112 | var img_tex := layer.get_meta("tex") as ImageTexture 113 | var idx := 0 114 | for x in range(img_tex.get_width() / 16): 115 | for y in range(img_tex.get_height() / 16): 116 | var btn := TILE_BTN.instance() 117 | btn.connect("pressed", self, "_on_TileButton_pressed", [idx]) 118 | btn.get_node("LabelIndex").text = str(idx) 119 | var at := AtlasTexture.new() 120 | at.atlas = img_tex 121 | at.region = Rect2(x * 16, y * 16, 16, 16) 122 | btn.texture_normal = at 123 | _ts_container.add_child(btn) 124 | idx += 1 125 | 126 | _current_layer = layer.get_index() 127 | # _update_cell_size() 128 | 129 | func _set_selection(idx: int) -> void: 130 | if _selected_tile != -1: 131 | _ts_container.get_child(_selected_tile).get_node("LabelSelect").visible = false 132 | 133 | _selected_tile = idx 134 | 135 | if idx != -1: 136 | _ts_container.get_child(idx).get_node("LabelSelect").visible = true 137 | 138 | func _on_TileButton_pressed(idx: int) -> void: 139 | _set_selection(idx) 140 | 141 | func _on_TileDisplaySizeVSlider_value_changed(value: float) -> void: 142 | for i in _ts_container.get_children(): 143 | i.rect_min_size = Vector2.ONE * int(value) 144 | _ts_container.set("custom_constants/vseparation", value / 8.0) 145 | _ts_container.set("custom_constants/hseparation", value / 8.0) 146 | 147 | func _on_Layer_moved_up(layer: Control) -> void: 148 | if layer.get_index() - 1 >= 0: 149 | var new_idx := layer.get_index() - 1 150 | _layer_container.move_child(layer, new_idx) 151 | _tm_container.move_child(layer.get_meta("tm"), new_idx) 152 | _update_layers() 153 | 154 | func _on_Layer_moved_down(layer: Control) -> void: 155 | if layer.get_index() + 1 < _layer_container.get_child_count(): 156 | var new_idx := layer.get_index() + 1 157 | _layer_container.move_child(layer, new_idx) 158 | _tm_container.move_child(layer.get_meta("tm"), new_idx) 159 | _update_layers() 160 | 161 | func _update_layers() -> void: 162 | var i := 0 163 | for l in _layer_container.get_children(): 164 | l.get_node("LabelIndex").text = str(i) 165 | i += 1 166 | 167 | l.get_node("MarginContainer/VBoxContainer/HBoxContainer/ButtonUp").disabled = false 168 | l.get_node("MarginContainer/VBoxContainer/HBoxContainer/ButtonDown").disabled = false 169 | 170 | _layer_container.get_child(0).get_node("MarginContainer/VBoxContainer/HBoxContainer/ButtonUp").disabled = true 171 | _layer_container.get_child(_layer_container.get_child_count() - 1).get_node("MarginContainer/VBoxContainer/HBoxContainer/ButtonDown").disabled = true 172 | 173 | func _clear_ts_container() -> void: 174 | for i in _ts_container.get_children(): 175 | i.queue_free() 176 | 177 | func _on_Layer_deleted(layer: Control) -> void: 178 | _clear_ts_container() 179 | layer.get_meta("tm").queue_free() 180 | # _layer_container.remove_child(layer) 181 | layer.queue_free() 182 | _update_layers() 183 | _current_layer = -1 184 | _set_selection(-1) 185 | 186 | func _on_ButtonImport_pressed() -> void: 187 | _fd_import.popup() 188 | 189 | func _on_ButtonExport_pressed() -> void: 190 | _fd_export.popup() 191 | _fd_export.current_file = "level.json" 192 | 193 | func _on_FileDialogImportJson_file_selected(path: String) -> void: 194 | var file := File.new() 195 | file.open(path, File.READ) 196 | var text := file.get_as_text() 197 | 198 | var json_result := JSON.parse(text) 199 | if json_result.error == OK: 200 | for p in json_result.result["layers"]: 201 | var layer := _create_layer(p["texture_path"]) 202 | var tm := layer.get_meta("tm") as TileMap 203 | for c in p["cells"]: 204 | tm.set_cell(c[1], c[2], c[0]) 205 | for p in json_result.result["objects"]: 206 | _create_object(p) 207 | 208 | file.close() 209 | 210 | func _on_FileDialogExportJson_file_selected(path: String) -> void: 211 | var file := File.new() 212 | file.open(path, File.WRITE) 213 | 214 | var data := { 215 | "layers": [], 216 | "objects": {}, 217 | } 218 | for idx in range(_layer_container.get_child_count()): 219 | var lay = _layer_container.get_child(idx) 220 | var tm := lay.get_meta("tm") as TileMap 221 | var a := [] 222 | for c in tm.get_used_cells(): 223 | a.push_back([tm.get_cellv(c), c.x, c.y]) 224 | data["layers"].push_back(a) 225 | for obj_item in _objects_list.get_children(): 226 | data["objects"][obj_item.get_node("MarginContainer/VBoxContainer/HBoxContainer/Key").text] = { 227 | "position": [ 228 | int(obj_item.get_node("MarginContainer/VBoxContainer/HBoxContainer2/PosX").text), 229 | int(obj_item.get_node("MarginContainer/VBoxContainer/HBoxContainer2/PosY").text), 230 | ], 231 | } 232 | 233 | file.store_string(JSON.print(data)) 234 | file.close() 235 | 236 | func _on_FileDialogNewLayer_file_selected(path: String) -> void: 237 | _create_layer(path) 238 | 239 | func _create_layer(path: String) -> Control: 240 | var layer := LAYER.instance() as Control 241 | layer.set_meta("path", path) 242 | var hbox := layer.get_node("MarginContainer/VBoxContainer/HBoxContainer") 243 | hbox.get_node("CheckBox").connect("toggled", self, "_on_Layer_toggled", [layer]) 244 | hbox.get_node("Name").text = path.get_file() 245 | hbox.get_node("ButtonUp").connect("pressed", self, "_on_Layer_moved_up", [layer]) 246 | hbox.get_node("ButtonDown").connect("pressed", self, "_on_Layer_moved_down", [layer]) 247 | hbox.get_node("ButtonDelete").connect("pressed", self, "_on_Layer_deleted", [layer]) 248 | # hbox.get_node("HSliderSize").connect("value_changed", self, "_on_HSliderSize_value_changed", [layer]) 249 | 250 | _layer_container.add_child(layer) 251 | _update_layers() 252 | 253 | var file := File.new() 254 | file.open(path, File.READ) 255 | var buffer := file.get_buffer(file.get_len()) 256 | var img := Image.new() 257 | var data 258 | if path.ends_with(".png"): 259 | data = img.load_png_from_buffer(buffer) 260 | elif path.ends_with(".jpg") or path.ends_with(".jpeg"): 261 | data = img.load_jpg_from_buffer(buffer) 262 | var img_tex := ImageTexture.new() 263 | img_tex.create_from_image(img, 1 | 2) 264 | file.close() 265 | 266 | var tm := TileMap.new() 267 | tm.cell_size = Vector2(16, 16) 268 | 269 | var ts := TileSet.new() 270 | var idx := 0 271 | for x in range(img_tex.get_width() / 16): 272 | for y in range(img_tex.get_height() / 16): 273 | var at := AtlasTexture.new() 274 | at.atlas = img_tex 275 | at.region = Rect2(x * 16, y * 16, 16, 16) 276 | ts.create_tile(idx) 277 | ts.tile_set_texture(idx, at) 278 | idx += 1 279 | 280 | tm.tile_set = ts 281 | 282 | tm.scale = Vector2.ONE * 4 283 | _tm_container.add_child(tm) 284 | 285 | layer.set_meta("tex", img_tex) 286 | layer.set_meta("tex_path", path) 287 | layer.set_meta("tm", tm) 288 | # layer.set_meta("size", size) 289 | 290 | hbox.get_node("CheckBox").emit_signal("toggled", true) 291 | # _update_cell_size() 292 | return layer 293 | 294 | #func _on_HSliderSize_value_changed(value: float, layer: Control) -> void: 295 | # layer.get_node("MarginContainer/VBoxContainer/HBoxContainer2/HSliderSize/Label").text = str(value) 296 | # _layers[layer.get_meta("path")]["size"] = int(value) 297 | # _update_cell_size() 298 | 299 | #func _update_cell_size() -> void: 300 | # var tm: TileMap = _layers[_current_layer]["tm"] 301 | # var size: int = _layers[_current_layer]["size"] 302 | ## tm.cell_size = Vector2(size, size) 303 | # print(size) 304 | ## tm.tile_set. 305 | ## tm.scale = Vector2.ONE * size / 4 306 | # _grid.scale = Vector2.ONE * (size / 16) 307 | 308 | 309 | func _on_ButtonCircle_toggled(button_pressed: bool) -> void: 310 | _btn_circle.set_pressed_no_signal(true) 311 | _btn_square.set_pressed_no_signal(false) 312 | _current_shape = BrushShape.CIRCLE 313 | _set_new_cursor_shape() 314 | 315 | func _on_ButtonSquare_toggled(button_pressed: bool) -> void: 316 | _btn_circle.set_pressed_no_signal(false) 317 | _btn_square.set_pressed_no_signal(true) 318 | _current_shape = BrushShape.SQUARE 319 | _set_new_cursor_shape() 320 | 321 | func _on_HSliderSize_value_changed(value: float) -> void: 322 | _hslider_size_lbl.text = "%dx" % int(value) 323 | _current_size = int(value) 324 | _set_new_cursor_shape() 325 | 326 | func _set_new_cursor_shape() -> void: 327 | for i in _cursor_container.get_children(): 328 | i.queue_free() 329 | _cursors.clear() 330 | 331 | match _current_shape: 332 | BrushShape.CIRCLE: 333 | var half_size := int(floor(_current_size * 0.5)) 334 | for x in range(-half_size, half_size + 1): 335 | for y in range(-half_size, half_size + 1): 336 | if pow(x, 2) + pow(y, 2) <= pow(half_size, 2): 337 | var c: Sprite = CURSOR.instance() 338 | c.offset_pos = 16 * 4 * Vector2(x, y) 339 | _cursor_container.add_child(c) 340 | _cursors.push_back(c) 341 | BrushShape.SQUARE: 342 | var half_size := int(floor(_current_size * 0.5)) 343 | for x in range(-half_size, half_size + 1): 344 | for y in range(-half_size, half_size + 1): 345 | var c: Sprite = CURSOR.instance() 346 | c.offset_pos = 16 * 4 * Vector2(x, y) 347 | _cursor_container.add_child(c) 348 | _cursors.push_back(c) 349 | _: 350 | pass 351 | 352 | func _on_ButtonInfo_pressed() -> void: 353 | _window_dialog_info.popup() 354 | 355 | func _on_ButtonLayers_pressed() -> void: 356 | _layer_container.get_parent().visible = true 357 | _objects_list.get_parent().visible = false 358 | $"%ButtonLayers".set_pressed_no_signal(true) 359 | $"%ButtonObjects".set_pressed_no_signal(false) 360 | 361 | func _on_ButtoObjects_pressed() -> void: 362 | _layer_container.get_parent().visible = false 363 | _objects_list.get_parent().visible = true 364 | $"%ButtonLayers".set_pressed_no_signal(false) 365 | $"%ButtonObjects".set_pressed_no_signal(true) 366 | 367 | func _on_Object_text_changed(text: String, obj_item: Control) -> void: 368 | _update_obj(obj_item) 369 | 370 | func _on_Object_deleted(obj_item: Control) -> void: 371 | obj_item.get_meta("obj").queue_free() 372 | obj_item.queue_free() 373 | 374 | func _on_Object_pos_x_changed(text: String, obj_item: Control) -> void: 375 | _update_obj(obj_item) 376 | 377 | func _on_Object_pos_y_changed(text: String, obj_item: Control) -> void: 378 | _update_obj(obj_item) 379 | 380 | func _update_obj(obj_item: Control) -> void: 381 | var obj := obj_item.get_meta("obj") as Node2D 382 | obj.get_node("Label").text = obj_item.get_node("MarginContainer/VBoxContainer/HBoxContainer/Key").text 383 | obj.position = Vector2( 384 | 64 * int(obj_item.get_node("MarginContainer/VBoxContainer/HBoxContainer2/PosX").text), 385 | 64 * int(obj_item.get_node("MarginContainer/VBoxContainer/HBoxContainer2/PosY").text)) 386 | 387 | func _create_object(data := {}) -> void: 388 | var obj_item := OBJECT_ITEM.instance() as Control 389 | var vbox := obj_item.get_node("MarginContainer/VBoxContainer") 390 | 391 | var key := vbox.get_node("HBoxContainer/Key") 392 | var pos_x := vbox.get_node("HBoxContainer2/PosX") 393 | var pos_y := vbox.get_node("HBoxContainer2/PosY") 394 | 395 | if data: 396 | key.text = data["key"] 397 | pos_x.text = str(data["position"][0]) 398 | pos_y.text = str(data["position"][1]) 399 | 400 | key.connect("text_changed", self, "_on_Object_text_changed", [obj_item]) 401 | vbox.get_node("HBoxContainer/ButtonDelete").connect("pressed", self, "_on_Object_deleted", [obj_item]) 402 | pos_x.connect("text_changed", self, "_on_Object_pos_x_changed", [obj_item]) 403 | pos_y.connect("text_changed", self, "_on_Object_pos_y_changed", [obj_item]) 404 | _objects_list.add_child(obj_item) 405 | 406 | var obj := OBJECT.instance() as Node2D 407 | _objects_container.add_child(obj) 408 | 409 | obj_item.set_meta("obj", obj) 410 | 411 | _update_obj(obj_item) 412 | -------------------------------------------------------------------------------- /object.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=6 format=2] 2 | 3 | [ext_resource path="res://assets/sprites/object.png" type="Texture" id=1] 4 | [ext_resource path="res://assets/firacode/firacode_medium.ttf" type="DynamicFontData" id=2] 5 | 6 | [sub_resource type="DynamicFont" id=2] 7 | use_mipmaps = true 8 | use_filter = true 9 | font_data = ExtResource( 2 ) 10 | 11 | [sub_resource type="StyleBoxFlat" id=4] 12 | bg_color = Color( 0.129412, 0.156863, 0.215686, 1 ) 13 | border_width_left = 4 14 | border_width_top = 4 15 | border_width_right = 4 16 | border_width_bottom = 4 17 | border_color = Color( 0.290196, 0.333333, 0.423529, 1 ) 18 | corner_radius_top_left = 16 19 | corner_radius_top_right = 16 20 | corner_radius_bottom_right = 16 21 | corner_radius_bottom_left = 16 22 | 23 | [sub_resource type="Theme" id=3] 24 | default_font = SubResource( 2 ) 25 | Button/colors/font_color = Color( 1, 1, 1, 1 ) 26 | Button/colors/font_color_disabled = Color( 0.560784, 0.560784, 0.560784, 1 ) 27 | Button/colors/font_color_focus = Color( 1, 1, 1, 1 ) 28 | Button/colors/font_color_hover = Color( 0.886275, 0.886275, 0.886275, 1 ) 29 | Button/colors/font_color_pressed = Color( 0.352941, 0.352941, 0.352941, 1 ) 30 | Button/constants/hseparation = 0 31 | Button/fonts/font = SubResource( 2 ) 32 | Button/styles/disabled = null 33 | Button/styles/focus = null 34 | Button/styles/hover = null 35 | Button/styles/normal = null 36 | Button/styles/pressed = null 37 | CheckBox/colors/font_color = Color( 1, 1, 1, 1 ) 38 | CheckBox/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 39 | CheckBox/colors/font_color_focus = Color( 0, 0, 0, 1 ) 40 | CheckBox/colors/font_color_hover = Color( 0, 0, 0, 1 ) 41 | CheckBox/colors/font_color_hover_pressed = Color( 0, 0, 0, 1 ) 42 | CheckBox/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 43 | CheckBox/constants/check_vadjust = 0 44 | CheckBox/constants/hseparation = 0 45 | CheckBox/fonts/font = SubResource( 2 ) 46 | CheckBox/icons/checked = null 47 | CheckBox/icons/checked_disabled = null 48 | CheckBox/icons/radio_checked = null 49 | CheckBox/icons/radio_checked_disabled = null 50 | CheckBox/icons/radio_unchecked = null 51 | CheckBox/icons/radio_unchecked_disabled = null 52 | CheckBox/icons/unchecked = null 53 | CheckBox/icons/unchecked_disabled = null 54 | CheckBox/styles/disabled = null 55 | CheckBox/styles/focus = null 56 | CheckBox/styles/hover = null 57 | CheckBox/styles/hover_pressed = null 58 | CheckBox/styles/normal = null 59 | CheckBox/styles/pressed = null 60 | CheckButton/colors/font_color = Color( 1, 1, 1, 1 ) 61 | CheckButton/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 62 | CheckButton/colors/font_color_focus = Color( 0, 0, 0, 1 ) 63 | CheckButton/colors/font_color_hover = Color( 0, 0, 0, 1 ) 64 | CheckButton/colors/font_color_hover_pressed = Color( 0, 0, 0, 1 ) 65 | CheckButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 66 | CheckButton/constants/check_vadjust = 0 67 | CheckButton/constants/hseparation = 0 68 | CheckButton/fonts/font = SubResource( 2 ) 69 | CheckButton/icons/off = null 70 | CheckButton/icons/off_disabled = null 71 | CheckButton/icons/on = null 72 | CheckButton/icons/on_disabled = null 73 | CheckButton/styles/disabled = null 74 | CheckButton/styles/focus = null 75 | CheckButton/styles/hover = null 76 | CheckButton/styles/hover_pressed = null 77 | CheckButton/styles/normal = null 78 | CheckButton/styles/pressed = null 79 | ColorPicker/constants/h_width = 0 80 | ColorPicker/constants/label_width = 0 81 | ColorPicker/constants/margin = 0 82 | ColorPicker/constants/sv_height = 0 83 | ColorPicker/constants/sv_width = 0 84 | ColorPicker/icons/add_preset = null 85 | ColorPicker/icons/color_hue = null 86 | ColorPicker/icons/color_sample = null 87 | ColorPicker/icons/overbright_indicator = null 88 | ColorPicker/icons/preset_bg = null 89 | ColorPicker/icons/screen_picker = null 90 | ColorPickerButton/colors/font_color = Color( 0, 0, 0, 1 ) 91 | ColorPickerButton/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 92 | ColorPickerButton/colors/font_color_focus = Color( 0, 0, 0, 1 ) 93 | ColorPickerButton/colors/font_color_hover = Color( 0, 0, 0, 1 ) 94 | ColorPickerButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 95 | ColorPickerButton/constants/hseparation = 0 96 | ColorPickerButton/fonts/font = SubResource( 2 ) 97 | ColorPickerButton/icons/bg = null 98 | ColorPickerButton/styles/disabled = null 99 | ColorPickerButton/styles/focus = null 100 | ColorPickerButton/styles/hover = null 101 | ColorPickerButton/styles/normal = null 102 | ColorPickerButton/styles/pressed = null 103 | ColorPresetButton/icons/overbright_indicator = null 104 | ColorPresetButton/icons/preset_bg_icon = null 105 | ColorPresetButton/styles/preset_fg = null 106 | Dialogs/constants/button_margin = 0 107 | Dialogs/constants/margin = 0 108 | FileDialog/colors/file_icon_modulate = Color( 1, 1, 1, 1 ) 109 | FileDialog/colors/files_disabled = Color( 0.952941, 0.952941, 0.952941, 1 ) 110 | FileDialog/colors/folder_icon_modulate = Color( 1, 1, 1, 1 ) 111 | FileDialog/icons/file = null 112 | FileDialog/icons/folder = null 113 | FileDialog/icons/parent_folder = null 114 | FileDialog/icons/reload = null 115 | FileDialog/icons/toggle_hidden = null 116 | Fonts/fonts/large = SubResource( 2 ) 117 | Fonts/fonts/normal = SubResource( 2 ) 118 | GraphEdit/colors/activity = Color( 0, 0, 0, 1 ) 119 | GraphEdit/colors/grid_major = Color( 0, 0, 0, 1 ) 120 | GraphEdit/colors/grid_minor = Color( 0, 0, 0, 1 ) 121 | GraphEdit/colors/selection_fill = Color( 0, 0, 0, 1 ) 122 | GraphEdit/colors/selection_stroke = Color( 0, 0, 0, 1 ) 123 | GraphEdit/constants/bezier_len_neg = 0 124 | GraphEdit/constants/bezier_len_pos = 0 125 | GraphEdit/constants/port_grab_distance_horizontal = 0 126 | GraphEdit/constants/port_grab_distance_vertical = 0 127 | GraphEdit/icons/minimap = null 128 | GraphEdit/icons/minus = null 129 | GraphEdit/icons/more = null 130 | GraphEdit/icons/reset = null 131 | GraphEdit/icons/snap = null 132 | GraphEdit/styles/bg = null 133 | GraphEditMinimap/colors/resizer_color = Color( 0, 0, 0, 1 ) 134 | GraphEditMinimap/icons/resizer = null 135 | GraphEditMinimap/styles/bg = null 136 | GraphEditMinimap/styles/camera = null 137 | GraphEditMinimap/styles/node = null 138 | GraphNode/colors/close_color = Color( 0, 0, 0, 1 ) 139 | GraphNode/colors/resizer_color = Color( 0, 0, 0, 1 ) 140 | GraphNode/colors/title_color = Color( 0, 0, 0, 1 ) 141 | GraphNode/constants/close_offset = 0 142 | GraphNode/constants/port_offset = 0 143 | GraphNode/constants/separation = 0 144 | GraphNode/constants/title_offset = 0 145 | GraphNode/fonts/title_font = SubResource( 2 ) 146 | GraphNode/icons/close = null 147 | GraphNode/icons/port = null 148 | GraphNode/icons/resizer = null 149 | GraphNode/styles/breakpoint = null 150 | GraphNode/styles/comment = null 151 | GraphNode/styles/commentfocus = null 152 | GraphNode/styles/defaultfocus = null 153 | GraphNode/styles/defaultframe = null 154 | GraphNode/styles/frame = null 155 | GraphNode/styles/position = null 156 | GraphNode/styles/selectedframe = null 157 | GridContainer/constants/hseparation = 0 158 | GridContainer/constants/vseparation = 0 159 | HBoxContainer/constants/separation = 0 160 | HFlowContainer/constants/hseparation = 0 161 | HFlowContainer/constants/vseparation = 0 162 | HScrollBar/icons/decrement = null 163 | HScrollBar/icons/decrement_highlight = null 164 | HScrollBar/icons/decrement_pressed = null 165 | HScrollBar/icons/increment = null 166 | HScrollBar/icons/increment_highlight = null 167 | HScrollBar/icons/increment_pressed = null 168 | HScrollBar/styles/grabber = null 169 | HScrollBar/styles/grabber_highlight = null 170 | HScrollBar/styles/grabber_pressed = null 171 | HScrollBar/styles/scroll = null 172 | HScrollBar/styles/scroll_focus = null 173 | HSeparator/constants/separation = 0 174 | HSeparator/styles/separator = null 175 | HSlider/icons/grabber = null 176 | HSlider/icons/grabber_disabled = null 177 | HSlider/icons/grabber_highlight = null 178 | HSlider/icons/tick = null 179 | HSlider/styles/grabber_area = null 180 | HSlider/styles/grabber_area_highlight = null 181 | HSlider/styles/slider = null 182 | HSplitContainer/constants/autohide = 0 183 | HSplitContainer/constants/separation = 0 184 | HSplitContainer/icons/grabber = null 185 | HSplitContainer/styles/bg = null 186 | Icons/icons/close = null 187 | ItemList/colors/font_color = Color( 1, 1, 1, 1 ) 188 | ItemList/colors/font_color_selected = Color( 0, 0, 0, 1 ) 189 | ItemList/colors/guide_color = Color( 0, 0, 0, 1 ) 190 | ItemList/constants/hseparation = 0 191 | ItemList/constants/icon_margin = 0 192 | ItemList/constants/line_separation = 0 193 | ItemList/constants/vseparation = 0 194 | ItemList/fonts/font = SubResource( 2 ) 195 | ItemList/styles/bg = null 196 | ItemList/styles/bg_focus = null 197 | ItemList/styles/cursor = null 198 | ItemList/styles/cursor_unfocused = null 199 | ItemList/styles/selected = null 200 | ItemList/styles/selected_focus = null 201 | Label/colors/font_color = Color( 1, 1, 1, 1 ) 202 | Label/colors/font_color_shadow = Color( 0, 0, 0, 1 ) 203 | Label/colors/font_outline_modulate = Color( 0, 0, 0, 1 ) 204 | Label/constants/line_spacing = 0 205 | Label/constants/shadow_as_outline = 0 206 | Label/constants/shadow_offset_x = 0 207 | Label/constants/shadow_offset_y = 0 208 | Label/fonts/font = SubResource( 2 ) 209 | Label/styles/normal = null 210 | LineEdit/colors/clear_button_color = Color( 1, 1, 1, 1 ) 211 | LineEdit/colors/clear_button_color_pressed = Color( 0, 0, 0, 1 ) 212 | LineEdit/colors/cursor_color = Color( 1, 1, 1, 1 ) 213 | LineEdit/colors/font_color = Color( 1, 1, 1, 1 ) 214 | LineEdit/colors/font_color_selected = Color( 1, 1, 1, 1 ) 215 | LineEdit/colors/font_color_uneditable = Color( 0, 0, 0, 1 ) 216 | LineEdit/colors/selection_color = Color( 0.721569, 0.592157, 0.329412, 1 ) 217 | LineEdit/constants/minimum_spaces = 0 218 | LineEdit/fonts/font = SubResource( 2 ) 219 | LineEdit/icons/clear = null 220 | LineEdit/styles/focus = null 221 | LineEdit/styles/normal = null 222 | LineEdit/styles/read_only = null 223 | LinkButton/colors/font_color = Color( 0, 0, 0, 1 ) 224 | LinkButton/colors/font_color_focus = Color( 0, 0, 0, 1 ) 225 | LinkButton/colors/font_color_hover = Color( 0, 0, 0, 1 ) 226 | LinkButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 227 | LinkButton/constants/underline_spacing = 0 228 | LinkButton/fonts/font = SubResource( 2 ) 229 | LinkButton/styles/focus = null 230 | MarginContainer/constants/margin_bottom = 0 231 | MarginContainer/constants/margin_left = 0 232 | MarginContainer/constants/margin_right = 0 233 | MarginContainer/constants/margin_top = 0 234 | MenuButton/colors/font_color = Color( 0, 0, 0, 1 ) 235 | MenuButton/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 236 | MenuButton/colors/font_color_focus = Color( 0, 0, 0, 1 ) 237 | MenuButton/colors/font_color_hover = Color( 0, 0, 0, 1 ) 238 | MenuButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 239 | MenuButton/constants/hseparation = 0 240 | MenuButton/fonts/font = SubResource( 2 ) 241 | MenuButton/styles/disabled = null 242 | MenuButton/styles/focus = null 243 | MenuButton/styles/hover = null 244 | MenuButton/styles/normal = null 245 | MenuButton/styles/pressed = null 246 | OptionButton/colors/font_color = Color( 1, 1, 1, 1 ) 247 | OptionButton/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 248 | OptionButton/colors/font_color_focus = Color( 1, 1, 1, 1 ) 249 | OptionButton/colors/font_color_hover = Color( 1, 1, 1, 1 ) 250 | OptionButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 251 | OptionButton/constants/arrow_margin = 0 252 | OptionButton/constants/hseparation = 0 253 | OptionButton/fonts/font = SubResource( 2 ) 254 | OptionButton/icons/arrow = null 255 | OptionButton/styles/disabled = null 256 | OptionButton/styles/focus = null 257 | OptionButton/styles/hover = null 258 | OptionButton/styles/normal = null 259 | OptionButton/styles/pressed = null 260 | Panel/styles/panel = SubResource( 4 ) 261 | PanelContainer/styles/panel = null 262 | PopupDialog/styles/panel = null 263 | PopupMenu/colors/font_color = Color( 0, 0, 0, 1 ) 264 | PopupMenu/colors/font_color_accel = Color( 0, 0, 0, 1 ) 265 | PopupMenu/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 266 | PopupMenu/colors/font_color_hover = Color( 0, 0, 0, 1 ) 267 | PopupMenu/colors/font_color_separator = Color( 0, 0, 0, 1 ) 268 | PopupMenu/constants/hseparation = 0 269 | PopupMenu/constants/vseparation = 0 270 | PopupMenu/fonts/font = SubResource( 2 ) 271 | PopupMenu/fonts/font_separator = SubResource( 2 ) 272 | PopupMenu/icons/checked = null 273 | PopupMenu/icons/radio_checked = null 274 | PopupMenu/icons/radio_unchecked = null 275 | PopupMenu/icons/submenu = null 276 | PopupMenu/icons/unchecked = null 277 | PopupMenu/styles/hover = null 278 | PopupMenu/styles/labeled_separator_left = null 279 | PopupMenu/styles/labeled_separator_right = null 280 | PopupMenu/styles/panel = null 281 | PopupMenu/styles/panel_disabled = null 282 | PopupMenu/styles/separator = null 283 | PopupPanel/styles/panel = null 284 | ProgressBar/colors/font_color = Color( 0, 0, 0, 1 ) 285 | ProgressBar/colors/font_color_shadow = Color( 0, 0, 0, 1 ) 286 | ProgressBar/fonts/font = SubResource( 2 ) 287 | ProgressBar/styles/bg = null 288 | ProgressBar/styles/fg = null 289 | RichTextLabel/colors/default_color = Color( 1, 1, 1, 1 ) 290 | RichTextLabel/colors/font_color_selected = Color( 0, 0, 0, 1 ) 291 | RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 1 ) 292 | RichTextLabel/colors/selection_color = Color( 0, 0, 0, 1 ) 293 | RichTextLabel/constants/line_separation = 0 294 | RichTextLabel/constants/shadow_as_outline = 0 295 | RichTextLabel/constants/shadow_offset_x = 0 296 | RichTextLabel/constants/shadow_offset_y = 0 297 | RichTextLabel/constants/table_hseparation = 0 298 | RichTextLabel/constants/table_vseparation = 0 299 | RichTextLabel/fonts/bold_font = SubResource( 2 ) 300 | RichTextLabel/fonts/bold_italics_font = SubResource( 2 ) 301 | RichTextLabel/fonts/italics_font = SubResource( 2 ) 302 | RichTextLabel/fonts/mono_font = SubResource( 2 ) 303 | RichTextLabel/fonts/normal_font = SubResource( 2 ) 304 | RichTextLabel/styles/focus = null 305 | RichTextLabel/styles/normal = null 306 | ScrollContainer/styles/bg = null 307 | SpinBox/icons/updown = null 308 | TabContainer/colors/font_color_bg = Color( 0, 0, 0, 1 ) 309 | TabContainer/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 310 | TabContainer/colors/font_color_fg = Color( 0, 0, 0, 1 ) 311 | TabContainer/constants/hseparation = 0 312 | TabContainer/constants/label_valign_bg = 0 313 | TabContainer/constants/label_valign_fg = 0 314 | TabContainer/constants/side_margin = 0 315 | TabContainer/constants/top_margin = 0 316 | TabContainer/fonts/font = SubResource( 2 ) 317 | TabContainer/icons/decrement = null 318 | TabContainer/icons/decrement_highlight = null 319 | TabContainer/icons/increment = null 320 | TabContainer/icons/increment_highlight = null 321 | TabContainer/icons/menu = null 322 | TabContainer/icons/menu_highlight = null 323 | TabContainer/styles/panel = null 324 | TabContainer/styles/tab_bg = null 325 | TabContainer/styles/tab_disabled = null 326 | TabContainer/styles/tab_fg = null 327 | Tabs/colors/font_color_bg = Color( 0, 0, 0, 1 ) 328 | Tabs/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 329 | Tabs/colors/font_color_fg = Color( 0, 0, 0, 1 ) 330 | Tabs/constants/hseparation = 0 331 | Tabs/constants/label_valign_bg = 0 332 | Tabs/constants/label_valign_fg = 0 333 | Tabs/constants/top_margin = 0 334 | Tabs/fonts/font = SubResource( 2 ) 335 | Tabs/icons/close = null 336 | Tabs/icons/decrement = null 337 | Tabs/icons/decrement_highlight = null 338 | Tabs/icons/increment = null 339 | Tabs/icons/increment_highlight = null 340 | Tabs/styles/button = null 341 | Tabs/styles/button_pressed = null 342 | Tabs/styles/tab_bg = null 343 | Tabs/styles/tab_disabled = null 344 | Tabs/styles/tab_fg = null 345 | TextEdit/colors/background_color = Color( 0, 0, 0, 1 ) 346 | TextEdit/colors/bookmark_color = Color( 0, 0, 0, 1 ) 347 | TextEdit/colors/brace_mismatch_color = Color( 0, 0, 0, 1 ) 348 | TextEdit/colors/breakpoint_color = Color( 0, 0, 0, 1 ) 349 | TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 ) 350 | TextEdit/colors/caret_color = Color( 0, 0, 0, 1 ) 351 | TextEdit/colors/code_folding_color = Color( 0, 0, 0, 1 ) 352 | TextEdit/colors/completion_background_color = Color( 0, 0, 0, 1 ) 353 | TextEdit/colors/completion_existing_color = Color( 0, 0, 0, 1 ) 354 | TextEdit/colors/completion_font_color = Color( 0, 0, 0, 1 ) 355 | TextEdit/colors/completion_scroll_color = Color( 0, 0, 0, 1 ) 356 | TextEdit/colors/completion_selected_color = Color( 0, 0, 0, 1 ) 357 | TextEdit/colors/current_line_color = Color( 0, 0, 0, 1 ) 358 | TextEdit/colors/executing_line_color = Color( 0, 0, 0, 1 ) 359 | TextEdit/colors/font_color = Color( 0, 0, 0, 1 ) 360 | TextEdit/colors/font_color_readonly = Color( 0, 0, 0, 1 ) 361 | TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 ) 362 | TextEdit/colors/function_color = Color( 0, 0, 0, 1 ) 363 | TextEdit/colors/line_number_color = Color( 0, 0, 0, 1 ) 364 | TextEdit/colors/mark_color = Color( 0, 0, 0, 1 ) 365 | TextEdit/colors/member_variable_color = Color( 0, 0, 0, 1 ) 366 | TextEdit/colors/number_color = Color( 0, 0, 0, 1 ) 367 | TextEdit/colors/safe_line_number_color = Color( 0, 0, 0, 1 ) 368 | TextEdit/colors/selection_color = Color( 0, 0, 0, 1 ) 369 | TextEdit/colors/symbol_color = Color( 0, 0, 0, 1 ) 370 | TextEdit/colors/word_highlighted_color = Color( 0, 0, 0, 1 ) 371 | TextEdit/constants/completion_lines = 0 372 | TextEdit/constants/completion_max_width = 0 373 | TextEdit/constants/completion_scroll_width = 0 374 | TextEdit/constants/line_spacing = 0 375 | TextEdit/fonts/font = SubResource( 2 ) 376 | TextEdit/icons/fold = null 377 | TextEdit/icons/folded = null 378 | TextEdit/icons/space = null 379 | TextEdit/icons/tab = null 380 | TextEdit/styles/completion = null 381 | TextEdit/styles/focus = null 382 | TextEdit/styles/normal = null 383 | TextEdit/styles/read_only = null 384 | ToolButton/colors/font_color = Color( 1, 1, 1, 1 ) 385 | ToolButton/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 386 | ToolButton/colors/font_color_focus = Color( 0, 0, 0, 1 ) 387 | ToolButton/colors/font_color_hover = Color( 0, 0, 0, 1 ) 388 | ToolButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 389 | ToolButton/constants/hseparation = 0 390 | ToolButton/fonts/font = SubResource( 2 ) 391 | ToolButton/styles/disabled = null 392 | ToolButton/styles/focus = null 393 | ToolButton/styles/hover = null 394 | ToolButton/styles/normal = null 395 | ToolButton/styles/pressed = null 396 | TooltipLabel/colors/font_color = Color( 0, 0, 0, 1 ) 397 | TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 1 ) 398 | TooltipLabel/constants/shadow_offset_x = 0 399 | TooltipLabel/constants/shadow_offset_y = 0 400 | TooltipLabel/fonts/font = SubResource( 2 ) 401 | TooltipPanel/styles/panel = null 402 | Tree/colors/custom_button_font_highlight = Color( 0, 0, 0, 1 ) 403 | Tree/colors/drop_position_color = Color( 0, 0, 0, 1 ) 404 | Tree/colors/font_color = Color( 1, 1, 1, 1 ) 405 | Tree/colors/font_color_selected = Color( 1, 1, 1, 1 ) 406 | Tree/colors/guide_color = Color( 0, 0, 0, 1 ) 407 | Tree/colors/relationship_line_color = Color( 0, 0, 0, 1 ) 408 | Tree/colors/title_button_color = Color( 0, 0, 0, 1 ) 409 | Tree/constants/button_margin = 0 410 | Tree/constants/draw_guides = 0 411 | Tree/constants/draw_relationship_lines = 0 412 | Tree/constants/hseparation = 0 413 | Tree/constants/item_margin = 0 414 | Tree/constants/scroll_border = 0 415 | Tree/constants/scroll_speed = 0 416 | Tree/constants/vseparation = 0 417 | Tree/fonts/font = SubResource( 2 ) 418 | Tree/fonts/title_button_font = SubResource( 2 ) 419 | Tree/icons/arrow = null 420 | Tree/icons/arrow_collapsed = null 421 | Tree/icons/checked = null 422 | Tree/icons/select_arrow = null 423 | Tree/icons/unchecked = null 424 | Tree/icons/updown = null 425 | Tree/styles/bg = null 426 | Tree/styles/bg_focus = null 427 | Tree/styles/button_pressed = null 428 | Tree/styles/cursor = null 429 | Tree/styles/cursor_unfocused = null 430 | Tree/styles/custom_button = null 431 | Tree/styles/custom_button_hover = null 432 | Tree/styles/custom_button_pressed = null 433 | Tree/styles/selected = null 434 | Tree/styles/selected_focus = null 435 | Tree/styles/title_button_hover = null 436 | Tree/styles/title_button_normal = null 437 | Tree/styles/title_button_pressed = null 438 | VBoxContainer/constants/separation = 0 439 | VFlowContainer/constants/hseparation = 0 440 | VFlowContainer/constants/vseparation = 0 441 | VScrollBar/icons/decrement = null 442 | VScrollBar/icons/decrement_highlight = null 443 | VScrollBar/icons/decrement_pressed = null 444 | VScrollBar/icons/increment = null 445 | VScrollBar/icons/increment_highlight = null 446 | VScrollBar/icons/increment_pressed = null 447 | VScrollBar/styles/grabber = null 448 | VScrollBar/styles/grabber_highlight = null 449 | VScrollBar/styles/grabber_pressed = null 450 | VScrollBar/styles/scroll = null 451 | VScrollBar/styles/scroll_focus = null 452 | VSeparator/constants/separation = 0 453 | VSeparator/styles/separator = null 454 | VSlider/icons/grabber = null 455 | VSlider/icons/grabber_disabled = null 456 | VSlider/icons/grabber_highlight = null 457 | VSlider/icons/tick = null 458 | VSlider/styles/grabber_area = null 459 | VSlider/styles/grabber_area_highlight = null 460 | VSlider/styles/slider = null 461 | VSplitContainer/constants/autohide = 0 462 | VSplitContainer/constants/separation = 0 463 | VSplitContainer/icons/grabber = null 464 | VSplitContainer/styles/bg = null 465 | WindowDialog/colors/title_color = Color( 1, 1, 1, 1 ) 466 | WindowDialog/constants/close_h_ofs = 0 467 | WindowDialog/constants/close_v_ofs = 0 468 | WindowDialog/constants/scaleborder_size = 0 469 | WindowDialog/constants/title_height = 0 470 | WindowDialog/fonts/title_font = SubResource( 2 ) 471 | WindowDialog/icons/close = null 472 | WindowDialog/icons/close_highlight = null 473 | WindowDialog/styles/panel = SubResource( 4 ) 474 | 475 | [node name="Object" type="Node2D"] 476 | 477 | [node name="Sprite" type="Sprite" parent="."] 478 | scale = Vector2( 0.075, 0.075 ) 479 | texture = ExtResource( 1 ) 480 | offset = Vector2( 400, 300 ) 481 | 482 | [node name="Label" type="Label" parent="."] 483 | anchor_left = 0.5 484 | anchor_top = 0.5 485 | anchor_right = 0.5 486 | anchor_bottom = 0.5 487 | margin_left = -52.0 488 | margin_top = 36.0 489 | margin_right = 112.0 490 | margin_bottom = 60.0 491 | rect_scale = Vector2( 0.5, 0.5 ) 492 | rect_pivot_offset = Vector2( 82, 12 ) 493 | input_pass_on_modal_close_click = false 494 | theme = SubResource( 3 ) 495 | align = 1 496 | valign = 1 497 | -------------------------------------------------------------------------------- /node.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=11 format=2] 2 | 3 | [ext_resource path="res://node.gd" type="Script" id=1] 4 | [ext_resource path="res://assets/sprites/grid.png" type="Texture" id=2] 5 | [ext_resource path="res://assets/firacode/firacode_medium.ttf" type="DynamicFontData" id=3] 6 | [ext_resource path="res://assets/sprites/logo.png" type="Texture" id=4] 7 | [ext_resource path="res://info.gd" type="Script" id=5] 8 | 9 | [sub_resource type="Gradient" id=5] 10 | colors = PoolColorArray( 0.392975, 0.482475, 0.636719, 1, 0.293976, 0.33181, 0.445313, 1 ) 11 | 12 | [sub_resource type="GradientTexture2D" id=6] 13 | gradient = SubResource( 5 ) 14 | fill = 1 15 | fill_from = Vector2( 0.5, 0.5 ) 16 | fill_to = Vector2( 1, 0.5 ) 17 | 18 | [sub_resource type="DynamicFont" id=2] 19 | use_mipmaps = true 20 | use_filter = true 21 | font_data = ExtResource( 3 ) 22 | 23 | [sub_resource type="StyleBoxFlat" id=4] 24 | bg_color = Color( 0.129412, 0.156863, 0.215686, 1 ) 25 | border_width_left = 4 26 | border_width_top = 4 27 | border_width_right = 4 28 | border_width_bottom = 4 29 | border_color = Color( 0.290196, 0.333333, 0.423529, 1 ) 30 | corner_radius_top_left = 16 31 | corner_radius_top_right = 16 32 | corner_radius_bottom_right = 16 33 | corner_radius_bottom_left = 16 34 | 35 | [sub_resource type="Theme" id=3] 36 | default_font = SubResource( 2 ) 37 | Button/colors/font_color = Color( 1, 1, 1, 1 ) 38 | Button/colors/font_color_disabled = Color( 0.560784, 0.560784, 0.560784, 1 ) 39 | Button/colors/font_color_focus = Color( 1, 1, 1, 1 ) 40 | Button/colors/font_color_hover = Color( 0.886275, 0.886275, 0.886275, 1 ) 41 | Button/colors/font_color_pressed = Color( 0.352941, 0.352941, 0.352941, 1 ) 42 | Button/constants/hseparation = 0 43 | Button/fonts/font = SubResource( 2 ) 44 | Button/styles/disabled = null 45 | Button/styles/focus = null 46 | Button/styles/hover = null 47 | Button/styles/normal = null 48 | Button/styles/pressed = null 49 | CheckBox/colors/font_color = Color( 1, 1, 1, 1 ) 50 | CheckBox/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 51 | CheckBox/colors/font_color_focus = Color( 0, 0, 0, 1 ) 52 | CheckBox/colors/font_color_hover = Color( 0, 0, 0, 1 ) 53 | CheckBox/colors/font_color_hover_pressed = Color( 0, 0, 0, 1 ) 54 | CheckBox/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 55 | CheckBox/constants/check_vadjust = 0 56 | CheckBox/constants/hseparation = 0 57 | CheckBox/fonts/font = SubResource( 2 ) 58 | CheckBox/icons/checked = null 59 | CheckBox/icons/checked_disabled = null 60 | CheckBox/icons/radio_checked = null 61 | CheckBox/icons/radio_checked_disabled = null 62 | CheckBox/icons/radio_unchecked = null 63 | CheckBox/icons/radio_unchecked_disabled = null 64 | CheckBox/icons/unchecked = null 65 | CheckBox/icons/unchecked_disabled = null 66 | CheckBox/styles/disabled = null 67 | CheckBox/styles/focus = null 68 | CheckBox/styles/hover = null 69 | CheckBox/styles/hover_pressed = null 70 | CheckBox/styles/normal = null 71 | CheckBox/styles/pressed = null 72 | CheckButton/colors/font_color = Color( 1, 1, 1, 1 ) 73 | CheckButton/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 74 | CheckButton/colors/font_color_focus = Color( 0, 0, 0, 1 ) 75 | CheckButton/colors/font_color_hover = Color( 0, 0, 0, 1 ) 76 | CheckButton/colors/font_color_hover_pressed = Color( 0, 0, 0, 1 ) 77 | CheckButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 78 | CheckButton/constants/check_vadjust = 0 79 | CheckButton/constants/hseparation = 0 80 | CheckButton/fonts/font = SubResource( 2 ) 81 | CheckButton/icons/off = null 82 | CheckButton/icons/off_disabled = null 83 | CheckButton/icons/on = null 84 | CheckButton/icons/on_disabled = null 85 | CheckButton/styles/disabled = null 86 | CheckButton/styles/focus = null 87 | CheckButton/styles/hover = null 88 | CheckButton/styles/hover_pressed = null 89 | CheckButton/styles/normal = null 90 | CheckButton/styles/pressed = null 91 | ColorPicker/constants/h_width = 0 92 | ColorPicker/constants/label_width = 0 93 | ColorPicker/constants/margin = 0 94 | ColorPicker/constants/sv_height = 0 95 | ColorPicker/constants/sv_width = 0 96 | ColorPicker/icons/add_preset = null 97 | ColorPicker/icons/color_hue = null 98 | ColorPicker/icons/color_sample = null 99 | ColorPicker/icons/overbright_indicator = null 100 | ColorPicker/icons/preset_bg = null 101 | ColorPicker/icons/screen_picker = null 102 | ColorPickerButton/colors/font_color = Color( 0, 0, 0, 1 ) 103 | ColorPickerButton/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 104 | ColorPickerButton/colors/font_color_focus = Color( 0, 0, 0, 1 ) 105 | ColorPickerButton/colors/font_color_hover = Color( 0, 0, 0, 1 ) 106 | ColorPickerButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 107 | ColorPickerButton/constants/hseparation = 0 108 | ColorPickerButton/fonts/font = SubResource( 2 ) 109 | ColorPickerButton/icons/bg = null 110 | ColorPickerButton/styles/disabled = null 111 | ColorPickerButton/styles/focus = null 112 | ColorPickerButton/styles/hover = null 113 | ColorPickerButton/styles/normal = null 114 | ColorPickerButton/styles/pressed = null 115 | ColorPresetButton/icons/overbright_indicator = null 116 | ColorPresetButton/icons/preset_bg_icon = null 117 | ColorPresetButton/styles/preset_fg = null 118 | Dialogs/constants/button_margin = 0 119 | Dialogs/constants/margin = 0 120 | FileDialog/colors/file_icon_modulate = Color( 1, 1, 1, 1 ) 121 | FileDialog/colors/files_disabled = Color( 0.952941, 0.952941, 0.952941, 1 ) 122 | FileDialog/colors/folder_icon_modulate = Color( 1, 1, 1, 1 ) 123 | FileDialog/icons/file = null 124 | FileDialog/icons/folder = null 125 | FileDialog/icons/parent_folder = null 126 | FileDialog/icons/reload = null 127 | FileDialog/icons/toggle_hidden = null 128 | Fonts/fonts/large = SubResource( 2 ) 129 | Fonts/fonts/normal = SubResource( 2 ) 130 | GraphEdit/colors/activity = Color( 0, 0, 0, 1 ) 131 | GraphEdit/colors/grid_major = Color( 0, 0, 0, 1 ) 132 | GraphEdit/colors/grid_minor = Color( 0, 0, 0, 1 ) 133 | GraphEdit/colors/selection_fill = Color( 0, 0, 0, 1 ) 134 | GraphEdit/colors/selection_stroke = Color( 0, 0, 0, 1 ) 135 | GraphEdit/constants/bezier_len_neg = 0 136 | GraphEdit/constants/bezier_len_pos = 0 137 | GraphEdit/constants/port_grab_distance_horizontal = 0 138 | GraphEdit/constants/port_grab_distance_vertical = 0 139 | GraphEdit/icons/minimap = null 140 | GraphEdit/icons/minus = null 141 | GraphEdit/icons/more = null 142 | GraphEdit/icons/reset = null 143 | GraphEdit/icons/snap = null 144 | GraphEdit/styles/bg = null 145 | GraphEditMinimap/colors/resizer_color = Color( 0, 0, 0, 1 ) 146 | GraphEditMinimap/icons/resizer = null 147 | GraphEditMinimap/styles/bg = null 148 | GraphEditMinimap/styles/camera = null 149 | GraphEditMinimap/styles/node = null 150 | GraphNode/colors/close_color = Color( 0, 0, 0, 1 ) 151 | GraphNode/colors/resizer_color = Color( 0, 0, 0, 1 ) 152 | GraphNode/colors/title_color = Color( 0, 0, 0, 1 ) 153 | GraphNode/constants/close_offset = 0 154 | GraphNode/constants/port_offset = 0 155 | GraphNode/constants/separation = 0 156 | GraphNode/constants/title_offset = 0 157 | GraphNode/fonts/title_font = SubResource( 2 ) 158 | GraphNode/icons/close = null 159 | GraphNode/icons/port = null 160 | GraphNode/icons/resizer = null 161 | GraphNode/styles/breakpoint = null 162 | GraphNode/styles/comment = null 163 | GraphNode/styles/commentfocus = null 164 | GraphNode/styles/defaultfocus = null 165 | GraphNode/styles/defaultframe = null 166 | GraphNode/styles/frame = null 167 | GraphNode/styles/position = null 168 | GraphNode/styles/selectedframe = null 169 | GridContainer/constants/hseparation = 0 170 | GridContainer/constants/vseparation = 0 171 | HBoxContainer/constants/separation = 0 172 | HFlowContainer/constants/hseparation = 0 173 | HFlowContainer/constants/vseparation = 0 174 | HScrollBar/icons/decrement = null 175 | HScrollBar/icons/decrement_highlight = null 176 | HScrollBar/icons/decrement_pressed = null 177 | HScrollBar/icons/increment = null 178 | HScrollBar/icons/increment_highlight = null 179 | HScrollBar/icons/increment_pressed = null 180 | HScrollBar/styles/grabber = null 181 | HScrollBar/styles/grabber_highlight = null 182 | HScrollBar/styles/grabber_pressed = null 183 | HScrollBar/styles/scroll = null 184 | HScrollBar/styles/scroll_focus = null 185 | HSeparator/constants/separation = 0 186 | HSeparator/styles/separator = null 187 | HSlider/icons/grabber = null 188 | HSlider/icons/grabber_disabled = null 189 | HSlider/icons/grabber_highlight = null 190 | HSlider/icons/tick = null 191 | HSlider/styles/grabber_area = null 192 | HSlider/styles/grabber_area_highlight = null 193 | HSlider/styles/slider = null 194 | HSplitContainer/constants/autohide = 0 195 | HSplitContainer/constants/separation = 0 196 | HSplitContainer/icons/grabber = null 197 | HSplitContainer/styles/bg = null 198 | Icons/icons/close = null 199 | ItemList/colors/font_color = Color( 1, 1, 1, 1 ) 200 | ItemList/colors/font_color_selected = Color( 0, 0, 0, 1 ) 201 | ItemList/colors/guide_color = Color( 0, 0, 0, 1 ) 202 | ItemList/constants/hseparation = 0 203 | ItemList/constants/icon_margin = 0 204 | ItemList/constants/line_separation = 0 205 | ItemList/constants/vseparation = 0 206 | ItemList/fonts/font = SubResource( 2 ) 207 | ItemList/styles/bg = null 208 | ItemList/styles/bg_focus = null 209 | ItemList/styles/cursor = null 210 | ItemList/styles/cursor_unfocused = null 211 | ItemList/styles/selected = null 212 | ItemList/styles/selected_focus = null 213 | Label/colors/font_color = Color( 1, 1, 1, 1 ) 214 | Label/colors/font_color_shadow = Color( 0, 0, 0, 1 ) 215 | Label/colors/font_outline_modulate = Color( 0, 0, 0, 1 ) 216 | Label/constants/line_spacing = 0 217 | Label/constants/shadow_as_outline = 0 218 | Label/constants/shadow_offset_x = 0 219 | Label/constants/shadow_offset_y = 0 220 | Label/fonts/font = SubResource( 2 ) 221 | Label/styles/normal = null 222 | LineEdit/colors/clear_button_color = Color( 1, 1, 1, 1 ) 223 | LineEdit/colors/clear_button_color_pressed = Color( 0, 0, 0, 1 ) 224 | LineEdit/colors/cursor_color = Color( 1, 1, 1, 1 ) 225 | LineEdit/colors/font_color = Color( 1, 1, 1, 1 ) 226 | LineEdit/colors/font_color_selected = Color( 1, 1, 1, 1 ) 227 | LineEdit/colors/font_color_uneditable = Color( 0, 0, 0, 1 ) 228 | LineEdit/colors/selection_color = Color( 0.721569, 0.592157, 0.329412, 1 ) 229 | LineEdit/constants/minimum_spaces = 0 230 | LineEdit/fonts/font = SubResource( 2 ) 231 | LineEdit/icons/clear = null 232 | LineEdit/styles/focus = null 233 | LineEdit/styles/normal = null 234 | LineEdit/styles/read_only = null 235 | LinkButton/colors/font_color = Color( 0, 0, 0, 1 ) 236 | LinkButton/colors/font_color_focus = Color( 0, 0, 0, 1 ) 237 | LinkButton/colors/font_color_hover = Color( 0, 0, 0, 1 ) 238 | LinkButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 239 | LinkButton/constants/underline_spacing = 0 240 | LinkButton/fonts/font = SubResource( 2 ) 241 | LinkButton/styles/focus = null 242 | MarginContainer/constants/margin_bottom = 0 243 | MarginContainer/constants/margin_left = 0 244 | MarginContainer/constants/margin_right = 0 245 | MarginContainer/constants/margin_top = 0 246 | MenuButton/colors/font_color = Color( 0, 0, 0, 1 ) 247 | MenuButton/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 248 | MenuButton/colors/font_color_focus = Color( 0, 0, 0, 1 ) 249 | MenuButton/colors/font_color_hover = Color( 0, 0, 0, 1 ) 250 | MenuButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 251 | MenuButton/constants/hseparation = 0 252 | MenuButton/fonts/font = SubResource( 2 ) 253 | MenuButton/styles/disabled = null 254 | MenuButton/styles/focus = null 255 | MenuButton/styles/hover = null 256 | MenuButton/styles/normal = null 257 | MenuButton/styles/pressed = null 258 | OptionButton/colors/font_color = Color( 1, 1, 1, 1 ) 259 | OptionButton/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 260 | OptionButton/colors/font_color_focus = Color( 1, 1, 1, 1 ) 261 | OptionButton/colors/font_color_hover = Color( 1, 1, 1, 1 ) 262 | OptionButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 263 | OptionButton/constants/arrow_margin = 0 264 | OptionButton/constants/hseparation = 0 265 | OptionButton/fonts/font = SubResource( 2 ) 266 | OptionButton/icons/arrow = null 267 | OptionButton/styles/disabled = null 268 | OptionButton/styles/focus = null 269 | OptionButton/styles/hover = null 270 | OptionButton/styles/normal = null 271 | OptionButton/styles/pressed = null 272 | Panel/styles/panel = SubResource( 4 ) 273 | PanelContainer/styles/panel = null 274 | PopupDialog/styles/panel = null 275 | PopupMenu/colors/font_color = Color( 0, 0, 0, 1 ) 276 | PopupMenu/colors/font_color_accel = Color( 0, 0, 0, 1 ) 277 | PopupMenu/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 278 | PopupMenu/colors/font_color_hover = Color( 0, 0, 0, 1 ) 279 | PopupMenu/colors/font_color_separator = Color( 0, 0, 0, 1 ) 280 | PopupMenu/constants/hseparation = 0 281 | PopupMenu/constants/vseparation = 0 282 | PopupMenu/fonts/font = SubResource( 2 ) 283 | PopupMenu/fonts/font_separator = SubResource( 2 ) 284 | PopupMenu/icons/checked = null 285 | PopupMenu/icons/radio_checked = null 286 | PopupMenu/icons/radio_unchecked = null 287 | PopupMenu/icons/submenu = null 288 | PopupMenu/icons/unchecked = null 289 | PopupMenu/styles/hover = null 290 | PopupMenu/styles/labeled_separator_left = null 291 | PopupMenu/styles/labeled_separator_right = null 292 | PopupMenu/styles/panel = null 293 | PopupMenu/styles/panel_disabled = null 294 | PopupMenu/styles/separator = null 295 | PopupPanel/styles/panel = null 296 | ProgressBar/colors/font_color = Color( 0, 0, 0, 1 ) 297 | ProgressBar/colors/font_color_shadow = Color( 0, 0, 0, 1 ) 298 | ProgressBar/fonts/font = SubResource( 2 ) 299 | ProgressBar/styles/bg = null 300 | ProgressBar/styles/fg = null 301 | RichTextLabel/colors/default_color = Color( 1, 1, 1, 1 ) 302 | RichTextLabel/colors/font_color_selected = Color( 0, 0, 0, 1 ) 303 | RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 1 ) 304 | RichTextLabel/colors/selection_color = Color( 0, 0, 0, 1 ) 305 | RichTextLabel/constants/line_separation = 0 306 | RichTextLabel/constants/shadow_as_outline = 0 307 | RichTextLabel/constants/shadow_offset_x = 0 308 | RichTextLabel/constants/shadow_offset_y = 0 309 | RichTextLabel/constants/table_hseparation = 0 310 | RichTextLabel/constants/table_vseparation = 0 311 | RichTextLabel/fonts/bold_font = SubResource( 2 ) 312 | RichTextLabel/fonts/bold_italics_font = SubResource( 2 ) 313 | RichTextLabel/fonts/italics_font = SubResource( 2 ) 314 | RichTextLabel/fonts/mono_font = SubResource( 2 ) 315 | RichTextLabel/fonts/normal_font = SubResource( 2 ) 316 | RichTextLabel/styles/focus = null 317 | RichTextLabel/styles/normal = null 318 | ScrollContainer/styles/bg = null 319 | SpinBox/icons/updown = null 320 | TabContainer/colors/font_color_bg = Color( 0, 0, 0, 1 ) 321 | TabContainer/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 322 | TabContainer/colors/font_color_fg = Color( 0, 0, 0, 1 ) 323 | TabContainer/constants/hseparation = 0 324 | TabContainer/constants/label_valign_bg = 0 325 | TabContainer/constants/label_valign_fg = 0 326 | TabContainer/constants/side_margin = 0 327 | TabContainer/constants/top_margin = 0 328 | TabContainer/fonts/font = SubResource( 2 ) 329 | TabContainer/icons/decrement = null 330 | TabContainer/icons/decrement_highlight = null 331 | TabContainer/icons/increment = null 332 | TabContainer/icons/increment_highlight = null 333 | TabContainer/icons/menu = null 334 | TabContainer/icons/menu_highlight = null 335 | TabContainer/styles/panel = null 336 | TabContainer/styles/tab_bg = null 337 | TabContainer/styles/tab_disabled = null 338 | TabContainer/styles/tab_fg = null 339 | Tabs/colors/font_color_bg = Color( 0, 0, 0, 1 ) 340 | Tabs/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 341 | Tabs/colors/font_color_fg = Color( 0, 0, 0, 1 ) 342 | Tabs/constants/hseparation = 0 343 | Tabs/constants/label_valign_bg = 0 344 | Tabs/constants/label_valign_fg = 0 345 | Tabs/constants/top_margin = 0 346 | Tabs/fonts/font = SubResource( 2 ) 347 | Tabs/icons/close = null 348 | Tabs/icons/decrement = null 349 | Tabs/icons/decrement_highlight = null 350 | Tabs/icons/increment = null 351 | Tabs/icons/increment_highlight = null 352 | Tabs/styles/button = null 353 | Tabs/styles/button_pressed = null 354 | Tabs/styles/tab_bg = null 355 | Tabs/styles/tab_disabled = null 356 | Tabs/styles/tab_fg = null 357 | TextEdit/colors/background_color = Color( 0, 0, 0, 1 ) 358 | TextEdit/colors/bookmark_color = Color( 0, 0, 0, 1 ) 359 | TextEdit/colors/brace_mismatch_color = Color( 0, 0, 0, 1 ) 360 | TextEdit/colors/breakpoint_color = Color( 0, 0, 0, 1 ) 361 | TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 ) 362 | TextEdit/colors/caret_color = Color( 0, 0, 0, 1 ) 363 | TextEdit/colors/code_folding_color = Color( 0, 0, 0, 1 ) 364 | TextEdit/colors/completion_background_color = Color( 0, 0, 0, 1 ) 365 | TextEdit/colors/completion_existing_color = Color( 0, 0, 0, 1 ) 366 | TextEdit/colors/completion_font_color = Color( 0, 0, 0, 1 ) 367 | TextEdit/colors/completion_scroll_color = Color( 0, 0, 0, 1 ) 368 | TextEdit/colors/completion_selected_color = Color( 0, 0, 0, 1 ) 369 | TextEdit/colors/current_line_color = Color( 0, 0, 0, 1 ) 370 | TextEdit/colors/executing_line_color = Color( 0, 0, 0, 1 ) 371 | TextEdit/colors/font_color = Color( 0, 0, 0, 1 ) 372 | TextEdit/colors/font_color_readonly = Color( 0, 0, 0, 1 ) 373 | TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 ) 374 | TextEdit/colors/function_color = Color( 0, 0, 0, 1 ) 375 | TextEdit/colors/line_number_color = Color( 0, 0, 0, 1 ) 376 | TextEdit/colors/mark_color = Color( 0, 0, 0, 1 ) 377 | TextEdit/colors/member_variable_color = Color( 0, 0, 0, 1 ) 378 | TextEdit/colors/number_color = Color( 0, 0, 0, 1 ) 379 | TextEdit/colors/safe_line_number_color = Color( 0, 0, 0, 1 ) 380 | TextEdit/colors/selection_color = Color( 0, 0, 0, 1 ) 381 | TextEdit/colors/symbol_color = Color( 0, 0, 0, 1 ) 382 | TextEdit/colors/word_highlighted_color = Color( 0, 0, 0, 1 ) 383 | TextEdit/constants/completion_lines = 0 384 | TextEdit/constants/completion_max_width = 0 385 | TextEdit/constants/completion_scroll_width = 0 386 | TextEdit/constants/line_spacing = 0 387 | TextEdit/fonts/font = SubResource( 2 ) 388 | TextEdit/icons/fold = null 389 | TextEdit/icons/folded = null 390 | TextEdit/icons/space = null 391 | TextEdit/icons/tab = null 392 | TextEdit/styles/completion = null 393 | TextEdit/styles/focus = null 394 | TextEdit/styles/normal = null 395 | TextEdit/styles/read_only = null 396 | ToolButton/colors/font_color = Color( 1, 1, 1, 1 ) 397 | ToolButton/colors/font_color_disabled = Color( 0, 0, 0, 1 ) 398 | ToolButton/colors/font_color_focus = Color( 0, 0, 0, 1 ) 399 | ToolButton/colors/font_color_hover = Color( 0, 0, 0, 1 ) 400 | ToolButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) 401 | ToolButton/constants/hseparation = 0 402 | ToolButton/fonts/font = SubResource( 2 ) 403 | ToolButton/styles/disabled = null 404 | ToolButton/styles/focus = null 405 | ToolButton/styles/hover = null 406 | ToolButton/styles/normal = null 407 | ToolButton/styles/pressed = null 408 | TooltipLabel/colors/font_color = Color( 0, 0, 0, 1 ) 409 | TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 1 ) 410 | TooltipLabel/constants/shadow_offset_x = 0 411 | TooltipLabel/constants/shadow_offset_y = 0 412 | TooltipLabel/fonts/font = SubResource( 2 ) 413 | TooltipPanel/styles/panel = null 414 | Tree/colors/custom_button_font_highlight = Color( 0, 0, 0, 1 ) 415 | Tree/colors/drop_position_color = Color( 0, 0, 0, 1 ) 416 | Tree/colors/font_color = Color( 1, 1, 1, 1 ) 417 | Tree/colors/font_color_selected = Color( 1, 1, 1, 1 ) 418 | Tree/colors/guide_color = Color( 0, 0, 0, 1 ) 419 | Tree/colors/relationship_line_color = Color( 0, 0, 0, 1 ) 420 | Tree/colors/title_button_color = Color( 0, 0, 0, 1 ) 421 | Tree/constants/button_margin = 0 422 | Tree/constants/draw_guides = 0 423 | Tree/constants/draw_relationship_lines = 0 424 | Tree/constants/hseparation = 0 425 | Tree/constants/item_margin = 0 426 | Tree/constants/scroll_border = 0 427 | Tree/constants/scroll_speed = 0 428 | Tree/constants/vseparation = 0 429 | Tree/fonts/font = SubResource( 2 ) 430 | Tree/fonts/title_button_font = SubResource( 2 ) 431 | Tree/icons/arrow = null 432 | Tree/icons/arrow_collapsed = null 433 | Tree/icons/checked = null 434 | Tree/icons/select_arrow = null 435 | Tree/icons/unchecked = null 436 | Tree/icons/updown = null 437 | Tree/styles/bg = null 438 | Tree/styles/bg_focus = null 439 | Tree/styles/button_pressed = null 440 | Tree/styles/cursor = null 441 | Tree/styles/cursor_unfocused = null 442 | Tree/styles/custom_button = null 443 | Tree/styles/custom_button_hover = null 444 | Tree/styles/custom_button_pressed = null 445 | Tree/styles/selected = null 446 | Tree/styles/selected_focus = null 447 | Tree/styles/title_button_hover = null 448 | Tree/styles/title_button_normal = null 449 | Tree/styles/title_button_pressed = null 450 | VBoxContainer/constants/separation = 0 451 | VFlowContainer/constants/hseparation = 0 452 | VFlowContainer/constants/vseparation = 0 453 | VScrollBar/icons/decrement = null 454 | VScrollBar/icons/decrement_highlight = null 455 | VScrollBar/icons/decrement_pressed = null 456 | VScrollBar/icons/increment = null 457 | VScrollBar/icons/increment_highlight = null 458 | VScrollBar/icons/increment_pressed = null 459 | VScrollBar/styles/grabber = null 460 | VScrollBar/styles/grabber_highlight = null 461 | VScrollBar/styles/grabber_pressed = null 462 | VScrollBar/styles/scroll = null 463 | VScrollBar/styles/scroll_focus = null 464 | VSeparator/constants/separation = 0 465 | VSeparator/styles/separator = null 466 | VSlider/icons/grabber = null 467 | VSlider/icons/grabber_disabled = null 468 | VSlider/icons/grabber_highlight = null 469 | VSlider/icons/tick = null 470 | VSlider/styles/grabber_area = null 471 | VSlider/styles/grabber_area_highlight = null 472 | VSlider/styles/slider = null 473 | VSplitContainer/constants/autohide = 0 474 | VSplitContainer/constants/separation = 0 475 | VSplitContainer/icons/grabber = null 476 | VSplitContainer/styles/bg = null 477 | WindowDialog/colors/title_color = Color( 1, 1, 1, 1 ) 478 | WindowDialog/constants/close_h_ofs = 0 479 | WindowDialog/constants/close_v_ofs = 0 480 | WindowDialog/constants/scaleborder_size = 0 481 | WindowDialog/constants/title_height = 0 482 | WindowDialog/fonts/title_font = SubResource( 2 ) 483 | WindowDialog/icons/close = null 484 | WindowDialog/icons/close_highlight = null 485 | WindowDialog/styles/panel = SubResource( 4 ) 486 | 487 | [node name="Node" type="Node2D"] 488 | script = ExtResource( 1 ) 489 | __meta__ = { 490 | "_edit_lock_": true 491 | } 492 | 493 | [node name="Background" type="CanvasLayer" parent="."] 494 | layer = -1 495 | 496 | [node name="TextureRect" type="TextureRect" parent="Background"] 497 | anchor_right = 1.0 498 | anchor_bottom = 1.0 499 | mouse_filter = 2 500 | input_pass_on_modal_close_click = false 501 | texture = SubResource( 6 ) 502 | expand = true 503 | 504 | [node name="Grid" type="Sprite" parent="."] 505 | self_modulate = Color( 1, 1, 1, 0.25098 ) 506 | scale = Vector2( 4, 4 ) 507 | texture = ExtResource( 2 ) 508 | region_enabled = true 509 | region_rect = Rect2( 0, 0, 64000, 64000 ) 510 | 511 | [node name="Camera2D" type="Camera2D" parent="."] 512 | unique_name_in_owner = true 513 | current = true 514 | 515 | [node name="Tilemaps" type="Node2D" parent="."] 516 | unique_name_in_owner = true 517 | __meta__ = { 518 | "_edit_lock_": true 519 | } 520 | 521 | [node name="Objects" type="Node2D" parent="."] 522 | unique_name_in_owner = true 523 | __meta__ = { 524 | "_edit_lock_": true 525 | } 526 | 527 | [node name="CursorContainer" type="Node2D" parent="."] 528 | 529 | [node name="CanvasLayer" type="CanvasLayer" parent="."] 530 | 531 | [node name="Control" type="Control" parent="CanvasLayer"] 532 | anchor_right = 1.0 533 | anchor_bottom = 1.0 534 | mouse_filter = 2 535 | input_pass_on_modal_close_click = false 536 | theme = SubResource( 3 ) 537 | __meta__ = { 538 | "_edit_lock_": true 539 | } 540 | 541 | [node name="Panel" type="Panel" parent="CanvasLayer/Control"] 542 | anchor_top = 1.0 543 | anchor_right = 1.0 544 | anchor_bottom = 1.0 545 | margin_top = -247.0 546 | input_pass_on_modal_close_click = false 547 | 548 | [node name="MarginContainer" type="MarginContainer" parent="CanvasLayer/Control/Panel"] 549 | anchor_right = 1.0 550 | anchor_bottom = 1.0 551 | input_pass_on_modal_close_click = false 552 | custom_constants/margin_right = 16 553 | custom_constants/margin_top = 16 554 | custom_constants/margin_left = 16 555 | custom_constants/margin_bottom = 16 556 | 557 | [node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/Control/Panel/MarginContainer"] 558 | margin_left = 16.0 559 | margin_top = 16.0 560 | margin_right = 1264.0 561 | margin_bottom = 231.0 562 | input_pass_on_modal_close_click = false 563 | custom_constants/separation = 16 564 | 565 | [node name="ScrollContainer" type="ScrollContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer"] 566 | margin_right = 576.0 567 | margin_bottom = 215.0 568 | input_pass_on_modal_close_click = false 569 | size_flags_horizontal = 3 570 | 571 | [node name="TilesetContainer" type="HFlowContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/ScrollContainer"] 572 | unique_name_in_owner = true 573 | margin_right = 576.0 574 | input_pass_on_modal_close_click = false 575 | size_flags_horizontal = 3 576 | custom_constants/vseparation = 16 577 | custom_constants/hseparation = 16 578 | 579 | [node name="TileDisplaySizeVSlider" type="VSlider" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer"] 580 | margin_left = 592.0 581 | margin_right = 608.0 582 | margin_bottom = 215.0 583 | focus_mode = 0 584 | input_pass_on_modal_close_click = false 585 | min_value = 16.0 586 | max_value = 128.0 587 | step = 4.0 588 | value = 16.0 589 | rounded = true 590 | 591 | [node name="VSeparator" type="VSeparator" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer"] 592 | margin_left = 624.0 593 | margin_right = 624.0 594 | margin_bottom = 215.0 595 | input_pass_on_modal_close_click = false 596 | 597 | [node name="VBoxContainer3" type="VBoxContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer"] 598 | margin_left = 640.0 599 | margin_right = 960.0 600 | margin_bottom = 215.0 601 | rect_min_size = Vector2( 320, 0 ) 602 | input_pass_on_modal_close_click = false 603 | custom_constants/separation = 16 604 | 605 | [node name="ScrollContainer" type="ScrollContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3"] 606 | margin_right = 320.0 607 | margin_bottom = 171.0 608 | input_pass_on_modal_close_click = false 609 | size_flags_vertical = 3 610 | 611 | [node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/ScrollContainer"] 612 | margin_right = 320.0 613 | margin_bottom = 44.0 614 | size_flags_horizontal = 3 615 | 616 | [node name="LayerHolder" type="VBoxContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/ScrollContainer/VBoxContainer"] 617 | margin_right = 320.0 618 | margin_bottom = 44.0 619 | size_flags_horizontal = 3 620 | custom_constants/separation = 16 621 | 622 | [node name="Layers" type="VBoxContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/ScrollContainer/VBoxContainer/LayerHolder"] 623 | unique_name_in_owner = true 624 | margin_right = 320.0 625 | input_pass_on_modal_close_click = false 626 | size_flags_horizontal = 3 627 | custom_constants/separation = 16 628 | 629 | [node name="ButtonNewLayer" type="Button" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/ScrollContainer/VBoxContainer/LayerHolder"] 630 | margin_top = 16.0 631 | margin_right = 320.0 632 | margin_bottom = 44.0 633 | focus_mode = 0 634 | input_pass_on_modal_close_click = false 635 | size_flags_horizontal = 3 636 | text = "+ New Layer" 637 | 638 | [node name="ObjectHolder" type="VBoxContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/ScrollContainer/VBoxContainer"] 639 | visible = false 640 | margin_top = 28.0 641 | margin_right = 320.0 642 | margin_bottom = 56.0 643 | custom_constants/separation = 16 644 | 645 | [node name="ObjectsList" type="VBoxContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/ScrollContainer/VBoxContainer/ObjectHolder"] 646 | unique_name_in_owner = true 647 | margin_top = -28.0 648 | margin_right = 320.0 649 | input_pass_on_modal_close_click = false 650 | size_flags_horizontal = 3 651 | custom_constants/separation = 16 652 | 653 | [node name="ButtonNewObject" type="Button" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/ScrollContainer/VBoxContainer/ObjectHolder"] 654 | unique_name_in_owner = true 655 | margin_right = 320.0 656 | margin_bottom = 28.0 657 | focus_mode = 0 658 | input_pass_on_modal_close_click = false 659 | size_flags_horizontal = 3 660 | text = "+ Object" 661 | 662 | [node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3"] 663 | margin_top = 187.0 664 | margin_right = 320.0 665 | margin_bottom = 215.0 666 | custom_constants/separation = 16 667 | 668 | [node name="ButtonLayers" type="Button" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/HBoxContainer"] 669 | unique_name_in_owner = true 670 | margin_right = 152.0 671 | margin_bottom = 28.0 672 | focus_mode = 0 673 | input_pass_on_modal_close_click = false 674 | size_flags_horizontal = 3 675 | toggle_mode = true 676 | pressed = true 677 | text = "Layers" 678 | 679 | [node name="ButtonObjects" type="Button" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/HBoxContainer"] 680 | unique_name_in_owner = true 681 | margin_left = 168.0 682 | margin_right = 320.0 683 | margin_bottom = 28.0 684 | focus_mode = 0 685 | input_pass_on_modal_close_click = false 686 | size_flags_horizontal = 3 687 | toggle_mode = true 688 | text = "Objects" 689 | 690 | [node name="VSeparator2" type="VSeparator" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer"] 691 | margin_left = 976.0 692 | margin_right = 976.0 693 | margin_bottom = 215.0 694 | input_pass_on_modal_close_click = false 695 | 696 | [node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer"] 697 | margin_left = 992.0 698 | margin_right = 1248.0 699 | margin_bottom = 215.0 700 | rect_min_size = Vector2( 256, 0 ) 701 | input_pass_on_modal_close_click = false 702 | custom_constants/separation = 16 703 | 704 | [node name="ButtonImport" type="Button" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer"] 705 | margin_right = 256.0 706 | margin_bottom = 28.0 707 | focus_mode = 0 708 | input_pass_on_modal_close_click = false 709 | text = "Import .json" 710 | 711 | [node name="ButtonExport" type="Button" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer"] 712 | margin_top = 44.0 713 | margin_right = 256.0 714 | margin_bottom = 72.0 715 | focus_mode = 0 716 | input_pass_on_modal_close_click = false 717 | text = "Export .json" 718 | 719 | [node name="HSeparator" type="HSeparator" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer"] 720 | margin_top = 88.0 721 | margin_right = 256.0 722 | margin_bottom = 95.0 723 | size_flags_vertical = 3 724 | 725 | [node name="ShapeContainer" type="HBoxContainer" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer"] 726 | unique_name_in_owner = true 727 | margin_top = 111.0 728 | margin_right = 256.0 729 | margin_bottom = 139.0 730 | custom_constants/separation = 16 731 | 732 | [node name="ButtonCircle" type="Button" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer/ShapeContainer"] 733 | margin_right = 120.0 734 | margin_bottom = 28.0 735 | focus_mode = 0 736 | input_pass_on_modal_close_click = false 737 | size_flags_horizontal = 3 738 | size_flags_vertical = 3 739 | toggle_mode = true 740 | pressed = true 741 | text = "●" 742 | 743 | [node name="ButtonSquare" type="Button" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer/ShapeContainer"] 744 | margin_left = 136.0 745 | margin_right = 256.0 746 | margin_bottom = 28.0 747 | focus_mode = 0 748 | input_pass_on_modal_close_click = false 749 | size_flags_horizontal = 3 750 | size_flags_vertical = 3 751 | toggle_mode = true 752 | text = "■" 753 | 754 | [node name="HSliderSize" type="HSlider" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer"] 755 | unique_name_in_owner = true 756 | margin_top = 155.0 757 | margin_right = 256.0 758 | margin_bottom = 171.0 759 | focus_mode = 0 760 | input_pass_on_modal_close_click = false 761 | min_value = 1.0 762 | max_value = 8.0 763 | value = 1.0 764 | rounded = true 765 | 766 | [node name="Label" type="Label" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer/HSliderSize"] 767 | anchor_right = 1.0 768 | anchor_bottom = 1.0 769 | input_pass_on_modal_close_click = false 770 | text = "1" 771 | align = 1 772 | valign = 1 773 | 774 | [node name="ButtonInfo" type="Button" parent="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer"] 775 | margin_top = 187.0 776 | margin_right = 256.0 777 | margin_bottom = 215.0 778 | focus_mode = 0 779 | input_pass_on_modal_close_click = false 780 | text = "Info" 781 | 782 | [node name="FileDialogImportJson" type="FileDialog" parent="CanvasLayer/Control"] 783 | unique_name_in_owner = true 784 | anchor_left = 0.5 785 | anchor_top = 0.5 786 | anchor_right = 0.5 787 | anchor_bottom = 0.5 788 | margin_left = -358.0 789 | margin_top = -181.0 790 | margin_right = 358.0 791 | margin_bottom = 181.0 792 | input_pass_on_modal_close_click = false 793 | window_title = "Datei öffnen" 794 | resizable = true 795 | mode = 0 796 | access = 2 797 | filters = PoolStringArray( "*.json" ) 798 | show_hidden_files = true 799 | 800 | [node name="FileDialogExportJson" type="FileDialog" parent="CanvasLayer/Control"] 801 | unique_name_in_owner = true 802 | anchor_left = 0.5 803 | anchor_top = 0.5 804 | anchor_right = 0.5 805 | anchor_bottom = 0.5 806 | margin_left = -358.0 807 | margin_top = -181.0 808 | margin_right = 358.0 809 | margin_bottom = 181.0 810 | input_pass_on_modal_close_click = false 811 | window_title = "Datei speichern" 812 | resizable = true 813 | access = 2 814 | filters = PoolStringArray( "*.json" ) 815 | show_hidden_files = true 816 | 817 | [node name="FileDialogNewLayer" type="FileDialog" parent="CanvasLayer/Control"] 818 | unique_name_in_owner = true 819 | anchor_left = 0.5 820 | anchor_top = 0.5 821 | anchor_right = 0.5 822 | anchor_bottom = 0.5 823 | margin_left = -358.0 824 | margin_top = -181.0 825 | margin_right = 358.0 826 | margin_bottom = 181.0 827 | input_pass_on_modal_close_click = false 828 | window_title = "Datei öffnen" 829 | resizable = true 830 | mode = 0 831 | access = 2 832 | filters = PoolStringArray( "*.png", "*.jpg", "*.jpeg" ) 833 | show_hidden_files = true 834 | 835 | [node name="WindowDialogInfo" type="WindowDialog" parent="CanvasLayer/Control"] 836 | unique_name_in_owner = true 837 | anchor_left = 0.5 838 | anchor_top = 0.5 839 | anchor_right = 0.5 840 | anchor_bottom = 0.5 841 | margin_left = -417.0 842 | margin_top = -216.0 843 | margin_right = 417.0 844 | margin_bottom = 216.0 845 | window_title = "Info" 846 | resizable = true 847 | script = ExtResource( 5 ) 848 | 849 | [node name="MarginContainer" type="MarginContainer" parent="CanvasLayer/Control/WindowDialogInfo"] 850 | anchor_right = 1.0 851 | anchor_bottom = 1.0 852 | custom_constants/margin_right = 16 853 | custom_constants/margin_top = 16 854 | custom_constants/margin_left = 16 855 | custom_constants/margin_bottom = 16 856 | 857 | [node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer"] 858 | margin_left = 16.0 859 | margin_top = 16.0 860 | margin_right = 818.0 861 | margin_bottom = 416.0 862 | custom_constants/separation = 16 863 | alignment = 1 864 | 865 | [node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer"] 866 | margin_top = 34.0 867 | margin_right = 802.0 868 | margin_bottom = 98.0 869 | custom_constants/separation = 16 870 | alignment = 1 871 | 872 | [node name="TextureRect" type="TextureRect" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer"] 873 | margin_left = 296.0 874 | margin_right = 360.0 875 | margin_bottom = 64.0 876 | rect_min_size = Vector2( 64, 64 ) 877 | texture = ExtResource( 4 ) 878 | expand = true 879 | stretch_mode = 6 880 | 881 | [node name="Label" type="Label" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer"] 882 | margin_left = 376.0 883 | margin_top = 21.0 884 | margin_right = 506.0 885 | margin_bottom = 43.0 886 | text = "Arcane Energy" 887 | align = 1 888 | valign = 1 889 | 890 | [node name="HSeparator" type="HSeparator" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer"] 891 | margin_top = 114.0 892 | margin_right = 802.0 893 | margin_bottom = 114.0 894 | 895 | [node name="HBoxContainer3" type="HBoxContainer" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer"] 896 | margin_top = 130.0 897 | margin_right = 802.0 898 | margin_bottom = 306.0 899 | custom_constants/separation = 16 900 | 901 | [node name="RichTextLabel" type="RichTextLabel" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer3"] 902 | margin_right = 385.0 903 | margin_bottom = 176.0 904 | mouse_filter = 2 905 | input_pass_on_modal_close_click = false 906 | size_flags_horizontal = 3 907 | bbcode_enabled = true 908 | bbcode_text = "[center] 909 | Tilemap Level Editor 910 | 911 | MIT License 912 | Copyright (c) 2022 arcaneenergy 913 | 914 | Contact: arcane.energy.help@gmail.com 915 | [/center]" 916 | text = " 917 | Tilemap Level Editor 918 | 919 | MIT License 920 | Copyright (c) 2022 arcaneenergy 921 | 922 | Contact: arcane.energy.help@gmail.com 923 | " 924 | fit_content_height = true 925 | 926 | [node name="VSeparator" type="VSeparator" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer3"] 927 | margin_left = 401.0 928 | margin_right = 401.0 929 | margin_bottom = 176.0 930 | mouse_filter = 2 931 | input_pass_on_modal_close_click = false 932 | 933 | [node name="RichTextLabel2" type="RichTextLabel" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer3"] 934 | margin_left = 417.0 935 | margin_right = 802.0 936 | margin_bottom = 176.0 937 | mouse_filter = 2 938 | input_pass_on_modal_close_click = false 939 | size_flags_horizontal = 3 940 | bbcode_enabled = true 941 | bbcode_text = "Left click: Place tile (if selected) 942 | Right click: Delete tile 943 | TAB: Toggle GUI 944 | SHIFT + Scroll up/down: Increase/Decrease brush size 945 | Middle mouse drag: Drag camera around 946 | W/A/S/D/↑/↓/←/→: Move camera 947 | Mouse scroll up/down: Zoom in/out" 948 | text = "Left click: Place tile (if selected) 949 | Right click: Delete tile 950 | TAB: Toggle GUI 951 | SHIFT + Scroll up/down: Increase/Decrease brush size 952 | Middle mouse drag: Drag camera around 953 | W/A/S/D/↑/↓/←/→: Move camera 954 | Mouse scroll up/down: Zoom in/out" 955 | fit_content_height = true 956 | 957 | [node name="HSeparator2" type="HSeparator" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer"] 958 | margin_top = 322.0 959 | margin_right = 802.0 960 | margin_bottom = 322.0 961 | 962 | [node name="HBoxContainer2" type="HBoxContainer" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer"] 963 | margin_top = 338.0 964 | margin_right = 802.0 965 | margin_bottom = 366.0 966 | custom_constants/separation = 16 967 | alignment = 1 968 | 969 | [node name="ButtonGithub" type="Button" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer2"] 970 | margin_left = 156.0 971 | margin_right = 358.0 972 | margin_bottom = 28.0 973 | size_flags_horizontal = 4 974 | text = "GitHub Project Page" 975 | 976 | [node name="ButtonYouTube" type="Button" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer2"] 977 | margin_left = 374.0 978 | margin_right = 502.0 979 | margin_bottom = 28.0 980 | rect_min_size = Vector2( 128, 0 ) 981 | text = "YouTube" 982 | 983 | [node name="ButtonWebsite" type="Button" parent="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer2"] 984 | margin_left = 518.0 985 | margin_right = 646.0 986 | margin_bottom = 28.0 987 | rect_min_size = Vector2( 128, 0 ) 988 | text = "Website" 989 | 990 | [node name="LabelPosition" type="Label" parent="CanvasLayer/Control"] 991 | unique_name_in_owner = true 992 | anchor_left = 1.0 993 | anchor_right = 1.0 994 | margin_left = -227.0 995 | margin_top = 8.0 996 | margin_right = -8.0 997 | margin_bottom = 89.0 998 | input_pass_on_modal_close_click = false 999 | align = 2 1000 | autowrap = true 1001 | 1002 | [connection signal="value_changed" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/TileDisplaySizeVSlider" to="." method="_on_TileDisplaySizeVSlider_value_changed"] 1003 | [connection signal="pressed" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/ScrollContainer/VBoxContainer/LayerHolder/ButtonNewLayer" to="." method="_on_ButtonNewLayer_pressed"] 1004 | [connection signal="pressed" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/ScrollContainer/VBoxContainer/ObjectHolder/ButtonNewObject" to="." method="_on_ButtonNewObject_pressed"] 1005 | [connection signal="pressed" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/HBoxContainer/ButtonLayers" to="." method="_on_ButtonLayers_pressed"] 1006 | [connection signal="pressed" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer3/HBoxContainer/ButtonObjects" to="." method="_on_ButtoObjects_pressed"] 1007 | [connection signal="pressed" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer/ButtonImport" to="." method="_on_ButtonImport_pressed"] 1008 | [connection signal="pressed" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer/ButtonExport" to="." method="_on_ButtonExport_pressed"] 1009 | [connection signal="toggled" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer/ShapeContainer/ButtonCircle" to="." method="_on_ButtonCircle_toggled"] 1010 | [connection signal="toggled" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer/ShapeContainer/ButtonSquare" to="." method="_on_ButtonSquare_toggled"] 1011 | [connection signal="value_changed" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer/HSliderSize" to="." method="_on_HSliderSize_value_changed"] 1012 | [connection signal="pressed" from="CanvasLayer/Control/Panel/MarginContainer/HBoxContainer/VBoxContainer/ButtonInfo" to="." method="_on_ButtonInfo_pressed"] 1013 | [connection signal="file_selected" from="CanvasLayer/Control/FileDialogImportJson" to="." method="_on_FileDialogImportJson_file_selected"] 1014 | [connection signal="file_selected" from="CanvasLayer/Control/FileDialogExportJson" to="." method="_on_FileDialogExportJson_file_selected"] 1015 | [connection signal="file_selected" from="CanvasLayer/Control/FileDialogNewLayer" to="." method="_on_FileDialogNewLayer_file_selected"] 1016 | [connection signal="pressed" from="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer2/ButtonGithub" to="CanvasLayer/Control/WindowDialogInfo" method="_on_ButtonGithub_pressed"] 1017 | [connection signal="pressed" from="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer2/ButtonYouTube" to="CanvasLayer/Control/WindowDialogInfo" method="_on_ButtonYouTube_pressed"] 1018 | [connection signal="pressed" from="CanvasLayer/Control/WindowDialogInfo/MarginContainer/VBoxContainer/HBoxContainer2/ButtonWebsite" to="CanvasLayer/Control/WindowDialogInfo" method="_on_ButtonWebsite_pressed"] 1019 | --------------------------------------------------------------------------------