Compare commits

..

163 Commits

Author SHA1 Message Date
d86aa13668 Remove keybind from the delete file option. 2022-07-15 14:14:59 +02:00
cdd7a73813 Don't skip empty lines when saving a file. 2022-07-15 14:13:02 +02:00
3eac800771 Types part3. 2022-07-15 13:03:40 +02:00
a01c7c4bca Types part 2. 2022-07-15 12:54:03 +02:00
c382671951 Type information part1. 2022-07-15 12:30:34 +02:00
1e3d5e5129 Add line to the license. 2022-07-15 11:23:23 +02:00
22696e97f3 Reworked LastOpenedFiles, now it uses EditorSettings. 2022-07-15 11:16:30 +02:00
5d1ca70aef LastOpenFiles is a reference now. 2022-07-15 10:20:59 +02:00
da0b10d43f Fix errors. 2022-07-15 00:50:40 +02:00
3a1729556c Remove IconLoader from everu class except the plugin. 2022-07-15 00:45:12 +02:00
b2c0d912a1 Remove unneeded file. 2022-07-15 00:43:13 +02:00
67453db87e Remove icons from the file list. 2022-07-15 00:41:49 +02:00
6fde633b1a Fix the search and replace menus. 2022-07-15 00:39:28 +02:00
4b839233a3 Fix file list's anchors. 2022-07-15 00:29:39 +02:00
d59fc6dc4a Fix file menu options. 2022-07-15 00:19:48 +02:00
93571afa5c Fix some of the remaining issues. 2022-07-15 00:08:19 +02:00
95042c4be3 Now FileEditor also creates all controls programatically. 2022-07-14 23:56:03 +02:00
aff11eb551 Show map by default. 2022-07-14 20:52:45 +02:00
0bae4a44e7 Removed version form the UI. 2022-07-14 20:48:51 +02:00
bd0b210214 Removed the csv editor. 2022-07-14 20:39:11 +02:00
8e2a330557 VanillaEditor now creates it's scene programatically. 2022-07-14 20:01:51 +02:00
e9012ccca8 Now the preview script allocates it's own node structure. Also added back the csv preview option. 2022-07-14 16:24:43 +02:00
e8f962494f Removed the howto images. 2022-07-14 14:55:56 +02:00
9fc8f92e0f Merge the read only button to the scenes that use it. 2022-07-14 14:41:11 +02:00
2056a7a200 Remove translation support from the csv editor. 2022-07-14 12:20:11 +02:00
73d09eecda Removed fonts. 2022-07-14 12:11:58 +02:00
c24f1e962e Removed the ini editor. 2022-07-14 11:08:58 +02:00
2c8822942f Removed disabled options. 2022-07-14 10:23:53 +02:00
61ae5a3fcc Remove gdignore file. 2022-07-14 10:02:52 +02:00
def32e76f5 Create pandemonium project. 2022-07-14 10:02:01 +02:00
Nicolò Santilio
9e3f20dda2
Update README.md 2021-10-12 09:00:02 +02:00
Nicolò Santilio
8c85e39aaa
Merge pull request #45 from fenix-hub/dev
compatibility update 3.3
2021-04-25 13:38:35 +02:00
Nicolò Santilio
2218bcc2db compatibility update 3.3 2021-04-25 13:37:27 +02:00
Nicolò Santilio
04c6ddf189
Merge pull request #43 from fenix-hub/dev
Update 1.9.0
2021-02-14 18:17:50 +01:00
Nicolò Santilio
863a59fa6d updated version 2021-02-14 18:17:11 +01:00
Nicolò Santilio
35a95a9290 updated version 2021-02-14 18:16:26 +01:00
Nicolò Santilio
b43fbad07e Merge branch 'master' of https://github.com/fenix-hub/godot-engine.file-editor into dev 2021-02-14 18:13:38 +01:00
Nicolò Santilio
d31245b724 rebase 2021-02-14 18:09:54 +01:00
Nicolò Santilio
9bbb52d413 fix editor bug 2021-02-14 18:06:56 +01:00
Nicolò Santilio
e10f5327d8 add csv editor for txt files 2021-01-27 19:52:32 +01:00
Nicolò Santilio
c8eaf9ecd2
Merge pull request #40 from fenix-hub/dev
Dev
2020-12-31 12:55:09 +01:00
Nicolò Santilio
10a5b7d829
Update CSVEditor.gd 2020-12-31 12:54:51 +01:00
Nicolò Santilio
b14474bdbf
Update plugin.cfg 2020-12-31 12:54:34 +01:00
Nicolò Santilio
2b94ed4077
Update README.md 2020-12-31 12:54:19 +01:00
Nicolò Santilio
b42bf6c6d2
Merge pull request #39 from fenix-hub/master
rebase
2020-12-31 12:53:56 +01:00
Nicolò Santilio
48fd4ddb80
Update README.md 2020-11-17 18:47:02 +01:00
Nicolò Santilio
cc0afa07bd
Update README.md 2020-11-17 18:46:20 +01:00
Nicolò Santilio
0038e85263
Update README.md 2020-11-17 18:45:53 +01:00
Nicolò Santilio
a46cd7d06e
Merge pull request #38 from fenix-hub/dev
Dev
2020-11-02 10:03:16 +01:00
Nicolò Santilio
25484a876d
Update VERSION.md 2020-11-02 09:36:24 +01:00
Nicolò Santilio
1f483d5752
Update VERSION.md 2020-11-02 09:35:38 +01:00
Nicolò Santilio
138c813c30
Merge pull request #37 from fenix-hub/dev
Fixed bug found on Discord + Suggestion select all checkbox
2020-11-01 19:01:52 +01:00
Nicolò Santilio
27aa6b14d1
Update README.md 2020-11-01 19:00:02 +01:00
Nicolò Santilio
2edb487de5
Add files via upload 2020-11-01 18:59:48 +01:00
Nicolò Santilio
7e33700be5
Add files via upload 2020-11-01 18:59:26 +01:00
Nicolò Santilio
05e800aebb
Add files via upload 2020-11-01 18:58:54 +01:00
Nicolò Santilio
cb08651f2f
fixed bug found on Discord 2020-11-01 18:29:00 +01:00
Nicolò Santilio
3124761ecd
Merge pull request #36 from fenix-hub/dev
Add files via upload
2020-11-01 01:58:04 +01:00
Nicolò Santilio
7e4e14eb0a
Add files via upload 2020-11-01 01:44:16 +01:00
Nicolò Santilio
6927573f52
Merge pull request #35 from fenix-hub/dev
Dev
2020-10-29 12:46:52 +01:00
Nicolò Santilio
ca4e18b0fd
Update README.md 2020-10-29 12:43:36 +01:00
Nicolò Santilio
ab7a387635
Delete Preview.tscn.tmp 2020-10-29 12:43:03 +01:00
Nicolò Santilio
8a3bf3ed4e
Delete FileEditor.tscn.tmp 2020-10-29 12:42:56 +01:00
Nicolò Santilio
a3192ce30b
Delete CsvEditor.tscn 2020-10-29 12:42:46 +01:00
Nicolò Santilio
2cc8ce778f
Delete CsvEditor.gd 2020-10-29 12:42:34 +01:00
Nicolò Santilio
584452e118
Delete CsvEditor.gd 2020-10-29 12:42:14 +01:00
Nicolò Santilio
194bd77103
Merge pull request #34 from fenix-hub/dev
Dev
2020-10-28 21:21:52 +01:00
Nicolò Santilio
eb550d7719
Update README.md 2020-10-28 21:20:50 +01:00
Nicolò Santilio
0912aaec00
Automatic translations implemented, CSV Editor fix 2020-10-28 21:20:10 +01:00
Nicolò Santilio
a796516fb5
Update README.md 2020-10-25 00:57:44 +02:00
Nicolò Santilio
a9d0a1e1c2
CSVEditor refactoring 2020-10-25 00:57:16 +02:00
Nicolò Santilio
a8acc28251
Update README.md 2020-10-25 00:49:51 +02:00
Nicolò Santilio
6331dd695b
Merge pull request #30 from fenix-hub/dev
Update to 1.7.8
2020-10-18 18:29:35 +02:00
Nicolò Santilio
c9250fa989
bugfix error for project launch
- `editor_plugin` var available only inside function
- plugin loaded only when in editor
2020-10-18 18:29:04 +02:00
Nicolò Santilio
ddea73e0a7
update cfg to 1.7.8 2020-10-18 18:27:22 +02:00
Nicolò Santilio
51b8fcf44c
Merge pull request #29 from fenix-hub/master
Rebase
2020-10-18 18:26:34 +02:00
Nicolò Santilio
e0e64260fe Update issue templates 2020-10-13 17:59:36 +02:00
Nicolò Santilio
3bd1b7b5ad
Merge pull request #27 from fenix-hub/dev
Update for #25
2020-10-13 17:21:39 +02:00
Nicolò Santilio
cb7508ba47
Delete VERSION.md 2020-10-13 17:18:23 +02:00
Nicolò Santilio
6d709e6c73
Delete TODO.md 2020-10-13 17:18:15 +02:00
Nicolò Santilio
bc97f46b78
Delete README.md 2020-10-13 17:18:08 +02:00
Nicolò Santilio
75aaedf56b
Update version to 1.7.7 2020-10-13 17:17:55 +02:00
Nicolò Santilio
c1242cb160
Update file for #25 2020-10-13 17:17:22 +02:00
Nicolò Santilio
f21b83321f
Merge pull request #26 from ShalokShalom/patch-1
Correct spelling
2020-10-13 08:51:37 +02:00
ShalokShalom
6f483547f1
Correct spelling
Nice project, dude!
2020-10-13 08:33:20 +02:00
Nicolò Santilio
3c2ee96410
Merge pull request #24 from fenix-hub/dev
Dev
2020-10-12 18:24:40 +02:00
Nicolò Santilio
8454bf5f63
updated plugin and godot version 2020-10-12 18:23:23 +02:00
Nicolò Santilio
851409ec61
Update README.md 2020-10-12 18:23:08 +02:00
Nicolò Santilio
6c5e673a88
Delete TODO.md 2020-10-12 18:22:35 +02:00
Nicolò Santilio
da8814f090
Delete README.md 2020-10-12 18:22:27 +02:00
Nicolò Santilio
b770696bc4
Delete VERSION.md 2020-10-12 18:22:19 +02:00
Nicolò Santilio
a120ddc8f5
updated version to 1.7.6 2020-10-12 18:22:04 +02:00
Nicolò Santilio
1cb324a674
add custom font menu 2020-10-12 18:21:10 +02:00
Nicolò Santilio
5965161df7
add scripts for custom font 2020-10-12 18:18:45 +02:00
Nicolò Santilio
a636be4115
Delete VanillaEditor.gd 2020-10-12 18:18:16 +02:00
Nicolò Santilio
d1432dfd4f
Delete Preview.gd 2020-10-12 18:18:10 +02:00
Nicolò Santilio
07c53928d3
Delete LastOpenedFiles.gd 2020-10-12 18:18:03 +02:00
Nicolò Santilio
a326ff9de9
Delete IniVisualEditor.gd 2020-10-12 18:17:57 +02:00
Nicolò Santilio
faccdcaf50
Delete IconLoader.gd 2020-10-12 18:17:50 +02:00
Nicolò Santilio
40a1c7f2ec
Delete FileScene.gd 2020-10-12 18:17:45 +02:00
Nicolò Santilio
1674456fbc
Delete FileEditorButton.gd 2020-10-12 18:17:39 +02:00
Nicolò Santilio
5022ddf3a2
Delete FileEditor.gd 2020-10-12 18:17:32 +02:00
Nicolò Santilio
3a9cf072fb
Delete CsvEditor.gd 2020-10-12 18:17:24 +02:00
Nicolò Santilio
3785e44ad4
Delete file-editor.gd 2020-10-12 18:17:18 +02:00
Nicolò Santilio
d4309adfad
Add scripts for custom font feature 2020-10-12 18:14:08 +02:00
Nicolò Santilio
6076b056de
Add scenes and scripts for custom font feature 2020-10-12 18:13:53 +02:00
Nicolò Santilio
5097c16a98
add settings icon 2020-10-12 18:09:54 +02:00
Nicolò Santilio
d0d9f66f65
Update README.md 2020-09-04 19:45:37 +02:00
Nicolò Santilio
29b3ccff4c
Merge pull request #22 from fenix-hub/v1.7.4
V1.7.4
2020-09-04 19:44:59 +02:00
Nicolò Santilio
709858b6cf Minor bug fix update 2020-09-04 19:44:12 +02:00
Nicolò Santilio
0aa9ffbc11 2020-09-04 19:42:41 +02:00
Nicolò Santilio
59ac66641d 2020-09-04 19:42:06 +02:00
Nicolò Santilio
7175a8385e Minor fix update 2020-09-04 19:40:54 +02:00
Nicolò Santilio
276cc70dbc
Add files via upload
fixed csv and ini visual editors
2020-06-19 19:35:00 +02:00
Nicolò Santilio
031b8a1430
Delete IniEditor.tscn 2020-06-19 19:34:26 +02:00
Nicolò Santilio
c9f9744af9
Add files via upload 2020-06-19 19:33:51 +02:00
Nicolò Santilio
365e0c0b18
Add files via upload 2020-06-19 19:29:44 +02:00
Nicolò Santilio
e9dce7ad11
Merge pull request #18 from aaronfranke/formatting-gitignore
Format files using a script and update gitignore
2020-06-06 11:27:30 +02:00
Aaron Franke
8ba98e17d6
Update gitignore 2020-06-05 19:49:44 -04:00
Aaron Franke
96b564bb17
Format files using a script
Remove carriage return characters and remove trailing space characters
2020-06-04 20:40:07 -04:00
Nicolò Santilio
eab4d09281
Update README.md 2020-06-03 23:40:54 +02:00
Nicolò Santilio
7d7e27567b
Update FileEditor.gd 2020-06-03 23:40:32 +02:00
Nicolò Santilio
59ff3a1d6a
Update README.md 2020-06-03 11:37:21 +02:00
Nicolò Santilio
61792868ee
Update README.md 2020-06-03 11:36:58 +02:00
Nicolò Santilio
2515e39c2a
Update README.md 2020-06-03 11:36:08 +02:00
Nicolò Santilio
69505abcd0
Update README.md 2020-06-03 11:35:38 +02:00
fenix-hub
8a7e8d195c
Merge pull request #17 from fenix-hub/add-license-1
Create LICENSE
2020-05-20 21:59:48 +02:00
fenix-hub
699f6a8920
Create LICENSE 2020-05-20 21:59:35 +02:00
fenix-hub
c960869ed8
Merge pull request #16 from fenix-hub/v1.7.3
Update 1.7.3
2020-05-15 10:30:17 +02:00
fenix-hub
b5eea64718
Update 1.7.3 2020-05-15 10:29:28 +02:00
fenix-hub
b8e6179f94
Update README.md 2020-05-05 23:07:42 +02:00
fenix-hub
6f88735e93
Merge pull request #15 from fenix-hub/1.7.3
Add files via upload
2020-05-05 23:07:25 +02:00
fenix-hub
ff3dd2db0e
Add files via upload 2020-05-05 23:06:53 +02:00
fenix-hub
7170ae4d20
Merge pull request #12 from fenix-hub/v1.7.1
V1.7.1
2020-03-20 19:28:49 +01:00
fenix-hub
ee76a8eb8b
Add files via upload 2020-03-17 19:18:28 +01:00
fenix-hub
461796c5a9
Update README.md 2020-03-17 18:16:02 +01:00
fenix-hub
492201b2d4
Update README.md 2020-03-17 18:14:17 +01:00
fenix-hub
cbdccd2a52
Add files via upload 2020-03-17 18:13:08 +01:00
fenix-hub
11f1f443d4
Add files via upload 2020-03-17 18:11:08 +01:00
fenix-hub
6e4fcbb81c
Merge pull request #11 from fenix-hub/v1.7.0
V1.7.0
2020-01-21 16:26:04 +01:00
fenix-hub
281c76aa18
Add files via upload 2020-01-21 16:22:18 +01:00
fenix-hub
fad007a20f
Update .gitignore 2020-01-21 16:20:42 +01:00
fenix-hub
ebafc83344
Update README.md 2020-01-21 16:16:45 +01:00
fenix-hub
69364806ec
Update README.md 2019-11-21 04:44:17 +01:00
fenix-hub
bba286d7c8
Update README.md 2019-11-21 04:44:04 +01:00
fenix-hub
f35b82f323
Update README.md 2019-11-21 04:42:10 +01:00
fenix-hub
93888656bb
Delete lastopenedfiles.lastcfg 2019-11-20 19:44:57 +01:00
fenix-hub
5b8002d2c3
Update VERSION.md 2019-11-16 15:03:56 +01:00
fenix-hub
7c0c14b2d5
Update .gitignore 2019-10-20 20:36:24 +02:00
fenix-hub
c4b6bcf664
Create .gitignore 2019-10-20 20:35:14 +02:00
fenix-hub
0820d9e6c1
Update sample.html 2019-10-20 02:15:47 +02:00
fenix-hub
6abbe3ec08
Merge pull request #9 from fenix-hub/v1.6.4
V1.6.4
2019-10-18 01:25:33 +02:00
fenix-hub
4f176a09be
Update VERSION.md 2019-10-18 01:24:33 +02:00
fenix-hub
b6390b3ae2
Update VERSION.md 2019-10-18 01:24:05 +02:00
fenix-hub
0675c67673
Update VERSION.md 2019-10-18 01:23:39 +02:00
fenix-hub
1b033859ef
Add files via upload 2019-10-18 01:22:28 +02:00
fenix-hub
44171b6378
Update v1.6..4 2019-10-18 01:22:11 +02:00
fenix-hub
360a8b961b
Merge pull request #8 from fenix-hub/v1.6.0
V1.6.0
2019-10-11 21:57:15 +02:00
fenix-hub
b7b871a6ff
Update README.md 2019-10-11 21:55:34 +02:00
fenix-hub
fc71a261c2
Add files via upload 2019-10-11 21:55:18 +02:00
fenix-hub
fa75cc6968
Delete VERSION.md 2019-10-11 21:55:01 +02:00
fenix-hub
909d2a670d
Delete README.md 2019-10-11 21:54:54 +02:00
fenix-hub
cfcfd35303
Add files via upload 2019-10-11 21:53:20 +02:00
60 changed files with 1483 additions and 2007 deletions

32
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,32 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]"
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. Windows]
- Godot Engine Version [e.g. 3.2.3rc6]
- Plugin Version [e.g. v1.7.0]
**Additional context**
Add any other context about the problem here.

View File

@ -0,0 +1,17 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[FEATURE]"
labels: enhancement
assignees: ''
---
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe an implementation suggestion**
A clear and concise description of any implementation method you'd like to suggest. It may be technical or just theoretical.
**Additional context**
Add any other context or screenshots about the feature request here.

26
.gitignore vendored Normal file
View File

@ -0,0 +1,26 @@
# Godot-specific ignores
.import/
scn/
.import
default_env.tres
icon.png
icon.png.import
project.godot
# Imported translations (automatically generated from CSV files)
*.translation
# Mono-specific ignores
.mono/
data_*/
mono_crash.*.json
# System/tool-specific ignores
.directory
*~
# Plugin specific ignores
icons.pngs/
fonts/
file.samples/
icon.png

22
LICENSE Normal file
View File

@ -0,0 +1,22 @@
MIT License
Copyright (c) 2020 fenix-hub
Copyright (c) 2022 Péter Magyar
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

3
Node2D.tscn Normal file
View File

@ -0,0 +1,3 @@
[gd_scene format=2]
[node name="Node2D" type="Node2D"]

View File

@ -1,16 +1,21 @@
Check my **[Discord](https://discord.gg/KnJGY9S)** to stay updated on this repository. <p align="right">
*(Recommended since the AssetLibrary is not automatically updated)* <a href="https://discord.gg/KnJGY9S">
<img src="https://github.com/fenix-hub/ColoredBadges/blob/master/svg/social/discord.svg" alt="react" style="vertical-align:top; margin:6px 4px">
</a>
</p>
This plugin is now supported in [Godot Extended Libraries Discord](https://discord.gg/JNrcucg), check out the [Godot Extended Libraries Project](https://github.com/godot-extended-libraries)! This plugin is now supported in [Godot Extended Library Discord](https://discord.gg/JNrcucg), check out the [Godot Extended Library Project](https://github.com/godot-extended-libraries)!
# Godot Text Editor <img src="addons/file-editor/icon.png" width="64" height="64" align="left">
# Godot File Editor
A little plugin to easy-way manage your text files inside your project folder. A little plugin to easy-way manage your text files inside your project folder.
Author: *"Nicolo (fenix) Santilio"* Author: *"Nicolo (fenix) Santilio"*
Version: *1.4.3* Version: *1.9.2*
Godot Version: *3.1.1-stable* Godot Version: *3.3.4*
**This repository was pushed directly from Godot Engine Editor thanks to [GitHub Integration](https://github.com/fenix-hub/godot-engine.github-integration)!** **This repository was pushed directly from Godot Engine Editor thanks to this [GitHub Integration](https://github.com/fenix-hub/godot-engine.github-integration)!**
## What is this? ## What is this?
This is a little plugin I've made to easily edit text files in your project folder. This is a little plugin I've made to easily edit text files in your project folder.
@ -21,7 +26,8 @@ When opening / creating a file, the editor will open and you will be able to edi
You can just *Save* the file, or *Save file As* a new file (if it is a new file but also to make some copies). You can just *Save* the file, or *Save file As* a new file (if it is a new file but also to make some copies).
You will also be able to see some informations about the file you are editing (time and date of last edit) and you can set your editor to *Read Only* if you don't want to make changes but still read the content of the file. You will also be able to see some informations about the file you are editing (time and date of last edit) and you can set your editor to *Read Only* if you don't want to make changes but still read the content of the file.
Multiple files can be opened in different tabs. Multiple files can be opened in different tabs.
![preview1](https://i.imgur.com/mlh1rOX.png)![preview2](https://i.imgur.com/od5nQff.png) ![preview_0](https://imgur.com/X3lA49e.png) ![preview_1](https://imgur.com/qYcRbWM.png)
![preview1](https://i.imgur.com/BbZzKzD.png)![preview2](https://i.imgur.com/asggk4f.png) ![preview3](https://i.imgur.com/omReRZr.png)
## How do I install it? ## How do I install it?
**Manual** **Manual**
@ -49,15 +55,16 @@ You can find this plugin in the AssetLib of Godot Engine Editor. Just download i
+ "*.html ; HyperText Markup Language" + "*.html ; HyperText Markup Language"
+ "*.cfg ; Configuration File" + "*.cfg ; Configuration File"
+ "*.ini ; Initialization File (same as .cfg Configuration File)" + "*.ini ; Initialization File (same as .cfg Configuration File)"
+ "*.csv ; Comma-separated values File"
+ "*.res ; Resource File"
#### Current version #### Current version
To check all the features included in the current version, please read the [VERSION file](./VERSION.md) To check all the features that are included in the current version, please read the [VERSION file](./VERSION.md)
#### Upcoming features #### Upcoming features
To check all the features I'm currently working on, please read the ["To Do" Column](https://github.com/fenix-hub/godot-engine.text-editor/projects/1#column-6702439) To check all the features I'm currently working on, please read the [TODO file](./TODO.md)
# Disclaimer # Disclaimer
This addon was built for a **personal use** intention. It was released as an open source plugin in the hope that it could be useful to the Godot Engine Community. This addon was built for the intention of my **personal use**. It was released as an open source plugin in the hope that it could be useful to the Godot Engine Community.
As a "work in progress" project, there is *no warranty* for any eventual issue and bug that may broke your project. As a "work in progress" project, there is *no warranty* for any eventual issue and bug that may broke your project.
I don't assume any responsibility for possible corruptions of your project files. It is always advisable to keep a copy of your files and check any changes. I don't assume any responsibility for possible corruptions of your project files. It is always advisable to keep a copy of your files and check any changes.

View File

@ -1,87 +0,0 @@
**version 0.0.1**
*added*
- Plugin Created
-----------------------
**version 0.1.1**
*added*
- "Create new File" option
- "Open File" option
- "Delete File" option
- "Save File" option
- "Save File As.." option
-----------------------
**version 0.1.2**
*fixed*
- Repository Installation, folder order
-----------------------
**version 0.2.5**
*removed*
- Old layout
*added*
- New Layout
- Last modified time and date
- Tabs
-----------------------
**version 0.3.1**
*added*
- Version check
- Preview support
- Context menu in editor
- BBCode converter
- Light Mardkwon converter (DEMO)
-----------------------
**version 1.2.1**
*removed*
- Old layout, the plugin won't appear in docs
- Icons file extensions, plugin size reduced
- Old Mardkwon preview method
*added*
- More supported files
1. "*.dat ; Data File",
2. "*.xml ; XML File",
3. "*.sql ; SQL database file",
4. "*.json ; JavaScript Object Notation File",
5. "*.html ; HyperText Markup Language
- New Markdown preview method ( Markdown -> BBCode converter)
- New HTML preview method ( HTML -> BBCode converter)
- New Plugin Layout: a new ButtonTool "File" in you TopBar will appear
- Error check
- Message popups for closing unsaved files
-----------------------
**version 1.4.3**
*removed*
- Old layout
*added*
- More supported files:
1. "*.cfg ; Configuration File",
2. "*.ini ; Initialization File (same as .cfg Configuration File)",
- Added some sample files
- Memorize system of last opened files
- Added *Editor* button , you can now choose which editor to use:
1. Vanilla Editor (simple text editor)
2. Cfg/Ini Editor (table editor for Cfg/Ini files)
Editors are automatically updated, so if you update a cfg/ini file in the Vanilla Editor it will be updated in the Cfg/Ini Editor, and viceversa
- Added editor shorcuts:
1. *Ctrl + N* (new file)
2. *Ctrl + O* (open file)
3. *Ctrl + Alt + C* (close file)
4. *Ctrl + S* (save file)
5. *Ctrl + Alt + S* (save file as...)
6. *Ctrl + D* (delete file)
7. *Ctrl + 1* (Vanilla Editor)
8. *Ctrl + 3* (Cfg/Ini Editor)

View File

@ -1,63 +0,0 @@
Check my **[Discord](https://discord.gg/KnJGY9S)** to stay updated on this repository.
*(Recommended since the AssetLibrary is not automatically updated)*
This plugin is now supported in [Godot Extended Library Discord](https://discord.gg/JNrcucg), check out the [Godot Extended Library Project](https://github.com/godot-extended-libraries)!
# Godot Text Editor
A little plugin to easy-way manage your text files inside your project folder.
Author: *"Nicolo (fenix) Santilio"*
Version: *1.4.3*
Godot Version: *3.1.1-stable*
**This repository was pushed directly from Godot Engine Editor thanks to [GitHub Integration](https://github.com/fenix-hub/godot-engine.github-integration)!**
## What is this?
This is a little plugin I've made to easily edit text files in your project folder.
## How does it work?
You can open an existing file, create a new file and delete a file.
When opening / creating a file, the editor will open and you will be able to edit it and save it.
You can just *Save* the file, or *Save file As* a new file (if it is a new file but also to make some copies).
You will also be able to see some informations about the file you are editing (time and date of last edit) and you can set your editor to *Read Only* if you don't want to make changes but still read the content of the file.
Multiple files can be opened in different tabs.
![preview1](https://i.imgur.com/mlh1rOX.png)![preview2](https://i.imgur.com/od5nQff.png)
## How do I install it?
**Manual**
Just download this whole repository and put it in your `res://addons` folder inside the project you want to work on.
Then, go to `Project > Plugins > "File Editor" > Status > Activate`.
**Automatic**
You can find this plugin in the AssetLib of Godot Engine Editor. Just download it from there and everything should be fine!
(Remember to activate this plugin)
## Supported formats
+ "*.txt ; Plain Text File",
+ "*.rtf ; Rich Text Format File",
+ "*.log ; Log File",
+ "*.md ; MD File",
+ "*.doc ; WordPad Document",
+ "*.doc ; Microsoft Word Document",
+ "*.docm ; Word Open XML Macro-Enabled Document",
+ "*.docx ; Microsoft Word Open XML Document",
+ "*.bbs ; Bulletin Board System Text",
+ "*.dat ; Data File",
+ "*.xml ; XML File",
+ "*.sql ; SQL database file",
+ "*.json ; JavaScript Object Notation File",
+ "*.html ; HyperText Markup Language"
+ "*.cfg ; Configuration File"
+ "*.ini ; Initialization File (same as .cfg Configuration File)"
#### Current version
To check all the features included in the current version, please read the [VERSION file](./VERSION.md)
#### Upcoming features
To check all the features I'm currently working on, please read the [TODO file](./TODO.md)
# Disclaimer
This addon was built for a **personal use** intention. It was released as an open source plugin in the hope that it could be useful to the Godot Engine Community.
As a "work in progress" project, there is *no warranty* for any eventual issue and bug that may broke your project.
I don't assume any responsibility for possible corruptions of your project files. It is always advisable to keep a copy of your files and check any changes.

View File

@ -1,87 +0,0 @@
**version 0.0.1**
*added*
- Plugin Created
-----------------------
**version 0.1.1**
*added*
- "Create new File" option
- "Open File" option
- "Delete File" option
- "Save File" option
- "Save File As.." option
-----------------------
**version 0.1.2**
*fixed*
- Repository Installation, folder order
-----------------------
**version 0.2.5**
*removed*
- Old layout
*added*
- New Layout
- Last modified time and date
- Tabs
-----------------------
**version 0.3.1**
*added*
- Version check
- Preview support
- Context menu in editor
- BBCode converter
- Light Mardkwon converter (DEMO)
-----------------------
**version 1.2.1**
*removed*
- Old layout, the plugin won't appear in docs
- Icons file extensions, plugin size reduced
- Old Mardkwon preview method
*added*
- More supported files
1. "*.dat ; Data File",
2. "*.xml ; XML File",
3. "*.sql ; SQL database file",
4. "*.json ; JavaScript Object Notation File",
5. "*.html ; HyperText Markup Language
- New Markdown preview method ( Markdown -> BBCode converter)
- New HTML preview method ( HTML -> BBCode converter)
- New Plugin Layout: a new ButtonTool "File" in you TopBar will appear
- Error check
- Message popups for closing unsaved files
-----------------------
**version 1.4.3**
*removed*
- Old layout
*added*
- More supported files:
1. "*.cfg ; Configuration File",
2. "*.ini ; Initialization File (same as .cfg Configuration File)",
- Added some sample files
- Memorize system of last opened files
- Added *Editor* button , you can now choose which editor to use:
1. Vanilla Editor (simple text editor)
2. Cfg/Ini Editor (table editor for Cfg/Ini files)
Editors are automatically updated, so if you update a cfg/ini file in the Vanilla Editor it will be updated in the Cfg/Ini Editor, and viceversa
- Added editor shorcuts:
1. *Ctrl + N* (new file)
2. *Ctrl + O* (open file)
3. *Ctrl + Alt + C* (close file)
4. *Ctrl + S* (save file)
5. *Ctrl + Alt + S* (save file as...)
6. *Ctrl + D* (delete file)
7. *Ctrl + 1* (Vanilla Editor)
8. *Ctrl + 3* (Cfg/Ini Editor)

View File

@ -1,63 +0,0 @@
Check my **[Discord](https://discord.gg/KnJGY9S)** to stay updated on this repository.
*(Recommended since the AssetLibrary is not automatically updated)*
This plugin is now supported in [Godot Extended Library Discord](https://discord.gg/JNrcucg), check out the [Godot Extended Library Project](https://github.com/godot-extended-libraries)!
# Godot Text Editor
A little plugin to easy-way manage your text files inside your project folder.
Author: *"Nicolo (fenix) Santilio"*
Version: *1.4.3*
Godot Version: *3.1.1-stable*
**This repository was pushed directly from Godot Engine Editor thanks to [GitHub Integration](https://github.com/fenix-hub/godot-engine.github-integration)!**
## What is this?
This is a little plugin I've made to easily edit text files in your project folder.
## How does it work?
You can open an existing file, create a new file and delete a file.
When opening / creating a file, the editor will open and you will be able to edit it and save it.
You can just *Save* the file, or *Save file As* a new file (if it is a new file but also to make some copies).
You will also be able to see some informations about the file you are editing (time and date of last edit) and you can set your editor to *Read Only* if you don't want to make changes but still read the content of the file.
Multiple files can be opened in different tabs.
![preview1](https://i.imgur.com/mlh1rOX.png)![preview2](https://i.imgur.com/od5nQff.png)
## How do I install it?
**Manual**
Just download this whole repository and put it in your `res://addons` folder inside the project you want to work on.
Then, go to `Project > Plugins > "File Editor" > Status > Activate`.
**Automatic**
You can find this plugin in the AssetLib of Godot Engine Editor. Just download it from there and everything should be fine!
(Remember to activate this plugin)
## Supported formats
+ "*.txt ; Plain Text File",
+ "*.rtf ; Rich Text Format File",
+ "*.log ; Log File",
+ "*.md ; MD File",
+ "*.doc ; WordPad Document",
+ "*.doc ; Microsoft Word Document",
+ "*.docm ; Word Open XML Macro-Enabled Document",
+ "*.docx ; Microsoft Word Open XML Document",
+ "*.bbs ; Bulletin Board System Text",
+ "*.dat ; Data File",
+ "*.xml ; XML File",
+ "*.sql ; SQL database file",
+ "*.json ; JavaScript Object Notation File",
+ "*.html ; HyperText Markup Language"
+ "*.cfg ; Configuration File"
+ "*.ini ; Initialization File (same as .cfg Configuration File)"
#### Current version
To check all the features included in the current version, please read the [VERSION file](./VERSION.md)
#### Upcoming features
To check all the features I'm currently working on, please read the [TODO file](./TODO.md)
# Disclaimer
This addon was built for a **personal use** intention. It was released as an open source plugin in the hope that it could be useful to the Godot Engine Community.
As a "work in progress" project, there is *no warranty* for any eventual issue and bug that may broke your project.
I don't assume any responsibility for possible corruptions of your project files. It is always advisable to keep a copy of your files and check any changes.

View File

@ -1,4 +0,0 @@
### to do (v-0.x.x)
- Popup dialog when closing a tab if there is new content
- Module for markdown support/conversion

View File

@ -1,87 +0,0 @@
**version 0.0.1**
*added*
- Plugin Created
-----------------------
**version 0.1.1**
*added*
- "Create new File" option
- "Open File" option
- "Delete File" option
- "Save File" option
- "Save File As.." option
-----------------------
**version 0.1.2**
*fixed*
- Repository Installation, folder order
-----------------------
**version 0.2.5**
*removed*
- Old layout
*added*
- New Layout
- Last modified time and date
- Tabs
-----------------------
**version 0.3.1**
*added*
- Version check
- Preview support
- Context menu in editor
- BBCode converter
- Light Mardkwon converter (DEMO)
-----------------------
**version 1.2.1**
*removed*
- Old layout, the plugin won't appear in docs
- Icons file extensions, plugin size reduced
- Old Mardkwon preview method
*added*
- More supported files
1. "*.dat ; Data File",
2. "*.xml ; XML File",
3. "*.sql ; SQL database file",
4. "*.json ; JavaScript Object Notation File",
5. "*.html ; HyperText Markup Language
- New Markdown preview method ( Markdown -> BBCode converter)
- New HTML preview method ( HTML -> BBCode converter)
- New Plugin Layout: a new ButtonTool "File" in you TopBar will appear
- Error check
- Message popups for closing unsaved files
-----------------------
**version 1.4.3**
*removed*
- Old layout
*added*
- More supported files:
1. "*.cfg ; Configuration File",
2. "*.ini ; Initialization File (same as .cfg Configuration File)",
- Added some sample files
- Memorize system of last opened files
- Added *Editor* button , you can now choose which editor to use:
1. Vanilla Editor (simple text editor)
2. Cfg/Ini Editor (table editor for Cfg/Ini files)
Editors are automatically updated, so if you update a cfg/ini file in the Vanilla Editor it will be updated in the Cfg/Ini Editor, and viceversa
- Added editor shorcuts:
1. *Ctrl + N* (new file)
2. *Ctrl + O* (open file)
3. *Ctrl + Alt + C* (close file)
4. *Ctrl + S* (save file)
5. *Ctrl + Alt + S* (save file as...)
6. *Ctrl + D* (delete file)
7. *Ctrl + 1* (Vanilla Editor)
8. *Ctrl + 3* (Cfg/Ini Editor)

View File

@ -4,5 +4,13 @@
[s]strikethrough text[/s] [s]strikethrough text[/s]
[url]https://en.wikipedia.org[/url] [url]https://en.wikipedia.org[/url]
[url=https://en.wikipedia.org]English Wikipedia[/url] [url=https://en.wikipedia.org]English Wikipedia[/url]
[img]res://addons/file-editor/icon.png[/img]
[code]monospaced text[/code] [code]monospaced text[/code]
left [center]center[/center] [right]right[/right] left [center]center[/center] [right]right[/right]
[center][wave amp=50 freq=10]oooooondaaaaaaaaa[/wave][/center]
[center][tornado amp=50 freq=10 radius=5]tornaaaaaadoooooo[/tornado][/center]
[center][shake rate=15 level=10]scossa[/shake][/center]
[center][fade start=4 length=14]Effetto fantasmaaaaaa[/fade][/center]
[center][rainbow freq=4 sat=10 val=100]Arcobaleno![/rainbow][/center]
[center][pulse freq=6.0 height=5.0][pulse color=#00FFAA freq=2.0]Questo è un codice custom![/pulse][/pulse][/center]
*Some md text in bb file*

View File

@ -1,19 +1,9 @@
[Locale] ; last modified 1 April 2001 by John Doe
Language="en" [owner]
[Version] name="John Doe"
Major="2" organization="Acme Widgets Inc."
Minor="1" [database]
Micro="3" ; use IP address in case network name resolution is not working
[Directories] server="192.0.2.62"
TempDir="C:\Users\Jon\AppData\Local\Audacity\SessionData" port="143"
[AudioIO] file="payroll.dat"
RecordingDevice="Microphone (Blue Snowball)"
Host="MME"
PlaybackDevice="Speakers / Headphones (Realtek)"
EffectsPreviewLen="6"
CutPreviewBeforeLen="2"
CutPreviewAfterLen="1"
SeekShortPeriod="1"
SeekLongPeriod="15"
Duplex="1"
SWPlaythrough="0"

View File

@ -0,0 +1,19 @@
COLUMN 1; ;COLUMN2;COLUMN3;COLUMN5;COLUMN6;;;;;;;;;
this is a; ;csv file with empty spaces; ;-;NEW COLUMN;;;;;;;;;
anyway,;they are stored in; ;the file;-;F;;;;;;;;;
this;is a ;new;line;-;F;;;;;;;;;
line 5;and column 5;where created;with the editor;-;F;;;;;;;;;
-;-;-;-;-;F;;;;;;;;;
res;res;res;;F;e;;;;;;;;;
awew;aweawe;ewaewa;wwwwwwwwiiiiiiiii ;F;F;;;;;;;;;
ciao;ciao;;;F;F;;;;;;;;;
ciao;ciao;ciao;ciao;ciao;F;;;;;;;;;
NON;NE;VOGLIO;SAPERE;NIENTE;;;;;;;;;;
UFFA;UFFA;UFFA;NUFFA;;REFFA;;;;;;;;;
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;YES
1 COLUMN 1 COLUMN2 COLUMN3 COLUMN5 COLUMN6
2 this is a csv file with empty spaces - NEW COLUMN
3 anyway, they are stored in the file - F
4 this is a new line - F
5 line 5 and column 5 where created with the editor - F
6 - - - - - F
7 res res res F e
8 awew aweawe ewaewa wwwwwwwwiiiiiiiii F F
9 ciao ciao F F
10 ciao ciao ciao ciao ciao F
11 NON NE VOGLIO SAPERE NIENTE
12 UFFA UFFA UFFA NUFFA REFFA
13
14
15
16
17
18
19 YES

View File

@ -0,0 +1,3 @@
[remap]
importer="keep"

View File

@ -1,7 +1,9 @@
<b>bolded text</b>, <b>bolded text</b>
<i>italicized text</i>, <i>italicized text</i>
<ins>underlined text</ins> <ins>insnderlined text</ins>
<del>strikethrough text</del> <del>deltrikethroinsgh text</del>
<a href="https://en.wikipedia.org">English Wikipedia</a> <a>httpdel://en.wikipedia.org</a>
<img src="res://addons/file-editor/icon.png"/> <img src="res://addondel/file-editor/icon.png"/>
<a href=https://en.wikipedia.org>Englidelh Wikipedia</a>
<pre>monodelpaced text</pre>
left <center>center</center> <right>right</right>

View File

@ -1,10 +1,9 @@
; last modified 1 April 2001 by John Doe
[owner] [owner]
name="John Doe" name="John Doe"
organization="Acme Widgets Inc." organization="Acme Widgets Inc."
[database] [database]
; use IP address in case network name resolution is not working
server="192.0.2.62" server="192.0.2.62"
port="143" port="143"
file="payroll.dat" file="payroll.dat"
[qqqq]
ewe="qq"

View File

@ -1,11 +1,16 @@
*italic* **bolded text**
**bold** *italicized text*
`monospace` ***bolded and italicized***
~~strikethrough~~ ~~strikethrough~~
__underline__
> This is a quote
`this is some code`
[link](http://example.com) [link](http://example.com)
![image](res://addons/file-editor/icon.png) ![image](res://addons/file-editor/icon.png)
Shopping list: # header 1
- apples ## header 2
- oranges ### header 3
- pears #### header 5
##### header 6
###### header7

View File

@ -0,0 +1 @@
This is a simple text file.

View File

@ -0,0 +1,9 @@
keys;en;it;da;de;ja;es
HELLO;"""Hello!""";"""Ciao!""";"""Hej!""";"""Hallo!""";"""こんにちは!""";"""¡Hola!"""
BYE;"""Bye bye!""";"""Ciao ciao!""";"""Hej hej!""";"""Tschüss!""";"""バイバイ!""";"""¡Adiós!"""
GOODMORNING;"""Gooedmorning!""";"""Buongiorno!""";"""Gooedmorning!""";"""Guten Morgen!""";"""グーエドモーニング!""";"""¡Buen día!"""
CONFIRM;"""Confirm this action""";"""Conferma questa azione""";"""Bekræft denne handling""";"""Bestätigen Sie diese Aktion""";"""このアクションを確認します""";"""Confirma esta acción"""
CANCEL;"""Cancel this action""";"""Annulla questa azione""";"""Annuller denne handling""";"""Brechen Sie diese Aktion ab""";"""このアクションをキャンセルします""";"""Cancelar esta acción"""
YES;"""Yes, please""";"""Sì grazie""";"""Ja tak""";"""Ja bitte""";"""はい、お願いします""";"""Sí por favor"""
NO;"""No, thanks""";"""No grazie""";"""Nej tak""";"""Nein Danke""";"""結構です""";"""No, gracias"""
q;ds;q;q;q;w;q
1 keys en it da de ja es
2 HELLO "Hello!" "Ciao!" "Hej!" "Hallo!" "こんにちは!" "¡Hola!"
3 BYE "Bye bye!" "Ciao ciao!" "Hej hej!" "Tschüss!" "バイバイ!" "¡Adiós!"
4 GOODMORNING "Gooedmorning!" "Buongiorno!" "Gooedmorning!" "Guten Morgen!" "グーエドモーニング!" "¡Buen día!"
5 CONFIRM "Confirm this action" "Conferma questa azione" "Bekræft denne handling" "Bestätigen Sie diese Aktion" "このアクションを確認します" "Confirma esta acción"
6 CANCEL "Cancel this action" "Annulla questa azione" "Annuller denne handling" "Brechen Sie diese Aktion ab" "このアクションをキャンセルします" "Cancelar esta acción"
7 YES "Yes, please" "Sì grazie" "Ja tak" "Ja bitte" "はい、お願いします" "Sí por favor"
8 NO "No, thanks" "No grazie" "Nej tak" "Nein Danke" "結構です" "No, gracias"
9 q ds q q q w q

View File

@ -0,0 +1,3 @@
[remap]
importer="keep"

Binary file not shown.

View File

@ -28,6 +28,7 @@ process/fix_alpha_border=true
process/premult_alpha=false process/premult_alpha=false
process/HDR_as_SRGB=false process/HDR_as_SRGB=false
process/invert_color=false process/invert_color=false
process/normal_map_invert_y=false
stream=false stream=false
size_limit=0 size_limit=0
detect_3d=true detect_3d=true

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

View File

@ -1,4 +1,8 @@
[Opened] [Opened]
VERSION.md="res://addons/file-editor/VERSION.md" translation.csv="res://addons/file-editor/file.samples/translation.csv"
README.md="res://addons/file-editor/README.md" sample.bbs="res://addons/file-editor/file.samples/sample.bbs"
sample.cfg="res://addons/file-editor/file.samples/sample.cfg"
sample.ini="res://addons/file-editor/file.samples/sample.ini"
README.md="res://README.md"
VERSION.md="res://VERSION.md"

View File

@ -3,5 +3,5 @@
name="File Editor" name="File Editor"
description="An internal file editor to view and edit text files in your project folder." description="An internal file editor to view and edit text files in your project folder."
author="Nicolo 'fenix' Santilio" author="Nicolo 'fenix' Santilio"
version="1.4.3" version="1.9.0"
script="scripts/file-editor.gd" script="scripts/file-editor.gd"

View File

@ -1,11 +1,8 @@
[gd_scene load_steps=20 format=2] [gd_scene load_steps=15 format=2]
[ext_resource path="res://addons/file-editor/scripts/FileEditor.gd" type="Script" id=1] [ext_resource path="res://addons/file-editor/scripts/FileEditor.gd" type="Script" id=1]
[ext_resource path="res://addons/file-editor/fonts/Roboto-Black.ttf" type="DynamicFontData" id=2]
[ext_resource path="res://addons/file-editor/scenes/VanillaEditor.tscn" type="PackedScene" id=3]
[ext_resource path="res://addons/file-editor/scenes/IniEditor.tscn" type="PackedScene" id=4]
[sub_resource type="Image" id=16] [sub_resource type="Image" id=41]
data = { data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8", "format": "RGBA8",
@ -14,41 +11,11 @@ data = {
"width": 16 "width": 16
} }
[sub_resource type="ImageTexture" id=3] [sub_resource type="ImageTexture" id=30]
image = SubResource( 16 ) image = SubResource( 41 )
size = Vector2( 16, 16 ) size = Vector2( 16, 16 )
[sub_resource type="Image" id=17] [sub_resource type="Image" id=42]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 239, 224, 224, 224, 239, 224, 224, 224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 80, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=5]
image = SubResource( 17 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=18]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 80, 224, 224, 224, 206, 224, 224, 224, 238, 224, 224, 224, 238, 224, 224, 224, 174, 224, 224, 224, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 48, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 206, 224, 224, 224, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 48, 224, 224, 224, 238, 224, 224, 224, 254, 224, 224, 224, 206, 224, 224, 224, 112, 224, 224, 224, 16, 224, 224, 224, 16, 224, 224, 224, 80, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 222, 224, 224, 224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 96, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 96, 0, 0, 0, 0, 224, 224, 224, 64, 224, 224, 224, 206, 224, 224, 224, 222, 224, 224, 224, 64, 0, 0, 0, 0, 224, 224, 224, 96, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 32, 0, 0, 0, 0, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 16, 0, 0, 0, 0, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 222, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 126, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 96, 0, 0, 0, 0, 224, 224, 224, 64, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 96, 0, 0, 0, 0, 224, 224, 224, 80, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 126, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 190, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 48, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 206, 224, 224, 224, 96, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 64, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 48, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 112, 224, 224, 224, 206, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 206, 224, 224, 224, 126, 224, 224, 224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=7]
image = SubResource( 18 )
size = Vector2( 16, 16 )
[sub_resource type="DynamicFont" id=1]
size = 13
font_data = ExtResource( 2 )
[sub_resource type="Image" id=19]
data = { data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8", "format": "RGBA8",
@ -57,11 +24,11 @@ data = {
"width": 16 "width": 16
} }
[sub_resource type="ImageTexture" id=9] [sub_resource type="ImageTexture" id=32]
image = SubResource( 19 ) image = SubResource( 42 )
size = Vector2( 16, 16 ) size = Vector2( 16, 16 )
[sub_resource type="Image" id=20] [sub_resource type="Image" id=43]
data = { data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8", "format": "RGBA8",
@ -70,11 +37,11 @@ data = {
"width": 16 "width": 16
} }
[sub_resource type="ImageTexture" id=11] [sub_resource type="ImageTexture" id=34]
image = SubResource( 20 ) image = SubResource( 43 )
size = Vector2( 16, 16 ) size = Vector2( 16, 16 )
[sub_resource type="Image" id=21] [sub_resource type="Image" id=44]
data = { data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8", "format": "RGBA8",
@ -83,11 +50,11 @@ data = {
"width": 16 "width": 16
} }
[sub_resource type="ImageTexture" id=13] [sub_resource type="ImageTexture" id=36]
image = SubResource( 21 ) image = SubResource( 44 )
size = Vector2( 16, 16 ) size = Vector2( 16, 16 )
[sub_resource type="Image" id=22] [sub_resource type="Image" id=45]
data = { data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), "data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8", "format": "RGBA8",
@ -96,20 +63,34 @@ data = {
"width": 16 "width": 16
} }
[sub_resource type="ImageTexture" id=15] [sub_resource type="ImageTexture" id=38]
image = SubResource( 22 ) image = SubResource( 45 )
size = Vector2( 16, 16 ) size = Vector2( 16, 16 )
[sub_resource type="Image" id=46]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=40]
image = SubResource( 46 )
size = Vector2( 16, 16 )
[sub_resource type="StyleBoxEmpty" id=28]
[node name="FileEditor" type="Control"] [node name="FileEditor" type="Control"]
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
margin_left = 7.0
margin_right = -6.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
script = ExtResource( 1 ) script = ExtResource( 1 )
[node name="FileEditorContainer" type="VBoxContainer" parent="."] [node name="FileEditorContainer" type="VBoxContainer" parent="."]
visible = false
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
margin_left = 6.0 margin_left = 6.0
@ -119,99 +100,105 @@ size_flags_vertical = 3
[node name="TobBar" type="HBoxContainer" parent="FileEditorContainer"] [node name="TobBar" type="HBoxContainer" parent="FileEditorContainer"]
margin_right = 1000.0 margin_right = 1000.0
margin_bottom = 22.0 margin_bottom = 20.0
[node name="file_btn" type="MenuButton" parent="FileEditorContainer/TobBar"] [node name="file_btn" type="MenuButton" parent="FileEditorContainer/TobBar"]
margin_right = 54.0 margin_right = 35.0
margin_bottom = 22.0 margin_bottom = 20.0
text = "File" text = "File"
icon = SubResource( 3 ) items = [ "New File", null, 0, false, false, 0, 268435534, null, "", false, "Open File", null, 0, false, false, 1, 268435535, null, "", false, "Close File", null, 0, false, false, 2, 335544387, null, "", false, "", null, 0, false, false, -1, 0, null, "", true, "Save File", null, 0, false, false, 3, 268435539, null, "", false, "Save File as...", null, 0, false, false, 4, 335544403, null, "", false, "Delete File", null, 0, false, false, 5, 268435524, null, "", false, "", null, 0, false, false, -1, 0, null, "", true, "Search in file...", null, 0, false, false, 6, 268435526, null, "", false, "Replace occurencies", null, 0, false, false, 7, 268435538, null, "", false ]
items = [ "New File", null, 0, false, false, 0, 268435534, null, "", false, "Open File", null, 0, false, false, 1, 268435535, null, "", false, "Close File", null, 0, false, false, 2, 335544387, null, "", false, "", null, 0, false, false, -1, 0, null, "", true, "Save File", null, 0, false, false, 3, 268435539, null, "", false, "Save File as...", null, 0, false, false, 4, 335544403, null, "", false, "Delete File", null, 0, false, false, 5, 268435524, null, "", false ]
[node name="editor_btn" type="MenuButton" parent="FileEditorContainer/TobBar"]
margin_left = 58.0
margin_right = 126.0
margin_bottom = 22.0
text = "Editor"
icon = SubResource( 5 )
items = [ "Vanilla Editor", null, 0, false, false, 0, 268435505, null, "", false, "CSV Editor", null, 0, false, false, 1, 0, null, "", false, "CFG/INI Editor", null, 0, false, false, 2, 268435507, null, "", false ]
[node name="preview_btn" type="MenuButton" parent="FileEditorContainer/TobBar"] [node name="preview_btn" type="MenuButton" parent="FileEditorContainer/TobBar"]
margin_left = 130.0 margin_left = 39.0
margin_right = 211.0 margin_right = 101.0
margin_bottom = 22.0 margin_bottom = 20.0
text = "Preview" text = "Preview"
icon = SubResource( 7 ) items = [ "BBCode Preview", null, 0, false, false, 0, 0, null, "", false, "Markdown Preview", null, 0, false, false, 1, 0, null, "", false, "HTML Preview", null, 0, false, false, 2, 0, null, "", false, "CSV Preview", null, 0, false, false, 3, 0, null, "", false ]
items = [ "BBCode Preview", null, 0, false, false, 0, 0, null, "", false, "Markdown Preview", null, 0, false, false, 1, 0, null, "", false, "HTML Preview", null, 0, false, false, 2, 0, null, "", false, "CSV Preview", null, 0, false, false, 3, 0, null, "", false, "XML Preview", null, 0, false, false, 4, 0, null, "", false, "JSON Preview", null, 0, false, false, 5, 0, null, "", false ]
[node name="version" type="Label" parent="FileEditorContainer/TobBar"] [node name="SettingsBtn" type="MenuButton" parent="FileEditorContainer/TobBar"]
margin_left = 961.0 margin_left = 105.0
margin_top = 2.0 margin_right = 168.0
margin_right = 1000.0 margin_bottom = 20.0
margin_bottom = 19.0 text = "Settings"
size_flags_horizontal = 10 items = [ "Change Font", null, 0, false, false, 0, 0, null, "", false ]
custom_fonts/font = SubResource( 1 )
custom_colors/font_color = Color( 0.121569, 0.145098, 0.192157, 1 )
text = "v1.2.1"
align = 1
[node name="SplitContainer" type="HSplitContainer" parent="FileEditorContainer"] [node name="SplitContainer" type="HSplitContainer" parent="FileEditorContainer"]
margin_top = 26.0 margin_top = 24.0
margin_right = 1000.0 margin_right = 1000.0
margin_bottom = 600.0 margin_bottom = 600.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
split_offset = 150 split_offset = 150
[node name="BoxContainer" type="VBoxContainer" parent="FileEditorContainer/SplitContainer"] [node name="FileContainer" type="VBoxContainer" parent="FileEditorContainer/SplitContainer"]
margin_right = 208.0 margin_right = 153.0
margin_bottom = 574.0 margin_bottom = 576.0
[node name="OpenFileName" type="LineEdit" parent="FileEditorContainer/SplitContainer/BoxContainer"] [node name="OpenFileList" type="ItemList" parent="FileEditorContainer/SplitContainer/FileContainer"]
margin_right = 208.0 margin_right = 153.0
margin_bottom = 24.0 margin_bottom = 572.0
mouse_filter = 2
text = "res://sample.html"
context_menu_enabled = false
[node name="OpenFileList" type="ItemList" parent="FileEditorContainer/SplitContainer/BoxContainer"]
margin_top = 28.0
margin_right = 208.0
margin_bottom = 570.0
size_flags_vertical = 3 size_flags_vertical = 3
items = [ "sample.bbs", SubResource( 9 ), false, "sample.xml", SubResource( 11 ), false, "sample.md", SubResource( 13 ), false, "sample.html", SubResource( 15 ), false ] items = [ "translation.csv", SubResource( 30 ), false, "sample.bbs", SubResource( 32 ), false, "sample.cfg", SubResource( 34 ), false, "sample.ini", SubResource( 36 ), false, "README.md", SubResource( 38 ), false, "VERSION.md", SubResource( 40 ), false ]
allow_reselect = true allow_reselect = true
[node name="HSeparator" type="HSeparator" parent="FileEditorContainer/SplitContainer/BoxContainer"] [node name="HSeparator" type="HSeparator" parent="FileEditorContainer/SplitContainer/FileContainer"]
margin_top = 574.0 margin_top = 576.0
margin_right = 208.0 margin_right = 153.0
margin_bottom = 574.0 margin_bottom = 576.0
rect_min_size = Vector2( 2, 0 ) rect_min_size = Vector2( 2, 0 )
custom_constants/separation = 0 custom_constants/separation = 0
custom_styles/separator = SubResource( 28 )
[node name="VanillaEditor" parent="FileEditorContainer/SplitContainer" instance=ExtResource( 3 )] [node name="EditorContainer" type="VBoxContainer" parent="FileEditorContainer/SplitContainer"]
anchor_right = 0.0 margin_left = 165.0
anchor_bottom = 0.0
margin_left = 220.0
margin_right = 1000.0
margin_bottom = 574.0
[node name="IniEditor" parent="FileEditorContainer/SplitContainer" instance=ExtResource( 4 )]
visible = false
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 220.0
margin_right = 1000.0 margin_right = 1000.0
margin_bottom = 576.0 margin_bottom = 576.0
[node name="HBoxContainer" type="HBoxContainer" parent="FileEditorContainer/SplitContainer/EditorContainer"]
margin_right = 835.0
margin_bottom = 24.0
[node name="Label" type="Label" parent="FileEditorContainer/SplitContainer/EditorContainer/HBoxContainer"]
margin_top = 5.0
margin_right = 71.0
margin_bottom = 19.0
text = "Editing file:"
[node name="OpenFileName" type="LineEdit" parent="FileEditorContainer/SplitContainer/EditorContainer/HBoxContainer"]
margin_left = 75.0
margin_right = 650.0
margin_bottom = 24.0
mouse_filter = 1
size_flags_horizontal = 3
text = "res://VERSION.md"
editable = false
[node name="wrap_button" type="OptionButton" parent="FileEditorContainer/SplitContainer/EditorContainer/HBoxContainer"]
margin_left = 654.0
margin_right = 738.0
margin_bottom = 24.0
text = "No Wrap"
items = [ "No Wrap", null, false, 0, null, "Soft Wrap", null, false, 1, null ]
selected = 0
[node name="map_button" type="OptionButton" parent="FileEditorContainer/SplitContainer/EditorContainer/HBoxContainer"]
margin_left = 742.0
margin_right = 835.0
margin_bottom = 24.0
text = "Show Map"
items = [ "Hide Map", null, false, 0, null, "Show Map", null, false, 1, null ]
selected = 1
[node name="FileList" type="FileDialog" parent="."] [node name="FileList" type="FileDialog" parent="."]
margin_top = 24.0 margin_top = 24.0
margin_right = 1024.0 margin_right = 1024.0
margin_bottom = 600.0 margin_bottom = 600.0
size_flags_vertical = 3 size_flags_vertical = 3
popup_exclusive = true popup_exclusive = true
window_title = "Salva un file"
dialog_hide_on_ok = true dialog_hide_on_ok = true
filters = PoolStringArray( "*.txt ; Plain Text File", "*.rtf ; Rich Text Format File", "*.log ; Log File", "*.md ; MD File", "*.doc ; WordPad Document", "*.doc ; Microsoft Word Document", "*.docm ; Word Open XML Macro-Enabled Document", "*.docx ; Microsoft Word Open XML Document", "*.bbs ; Bulletin Board System Text", "*.dat ; Data File", "*.xml ; XML File", "*.sql ; SQL database file", "*.json ; JavaScript Object Notation File", "*.html ; HyperText Markup Language", "*.csv ; Comma-separated values", "*.cfg ; Configuration File", "*.ini ; Initialization File (same as .cfg Configuration File)" ) filters = PoolStringArray( "*.txt ; Plain Text File", "*.rtf ; Rich Text Format File", "*.log ; Log File", "*.md ; MD File", "*.doc ; WordPad Document", "*.doc ; Microsoft Word Document", "*.docm ; Word Open XML Macro-Enabled Document", "*.docx ; Microsoft Word Open XML Document", "*.bbs ; Bulletin Board System Text", "*.dat ; Data File", "*.xml ; XML File", "*.sql ; SQL database file", "*.json ; JavaScript Object Notation File", "*.html ; HyperText Markup Language", "*.csv ; Comma-separated values", "*.cfg ; Configuration File", "*.ini ; Initialization File (same as .cfg Configuration File)", "*.csv ; Comma-separated values File", "*.res ; Resource File" )
show_hidden_files = true
[node name="NewFileDialogue" type="AcceptDialog" parent="."] [node name="NewFileDialogue" type="AcceptDialog" parent="."]
margin_left = 348.254 margin_left = 348.254
@ -259,3 +246,19 @@ margin_bottom = 37.5
window_title = "Unsaved changes" window_title = "Unsaved changes"
dialog_text = "There are some unsaved changes. dialog_text = "There are some unsaved changes.
Press \"OK\" if you want to close this tab anyway, or \"cancel\" if you want to keep on editing your file." Press \"OK\" if you want to close this tab anyway, or \"cancel\" if you want to keep on editing your file."
[node name="SelectFontDialog" type="FileDialog" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 222.0
margin_top = 132.0
margin_right = -221.0
margin_bottom = -131.0
window_title = "Open a File"
resizable = true
mode = 0
access = 2
filters = PoolStringArray( "*.TTF", "*.ttf" )
show_hidden_files = true
[connection signal="confirmed" from="ConfirmationDialog" to="." method="_on_ConfirmationDialog_confirmed"]

View File

@ -1,144 +0,0 @@
[gd_scene load_steps=12 format=2]
[ext_resource path="res://addons/file-editor/scripts/FileScene.gd" type="Script" id=1]
[ext_resource path="res://addons/file-editor/fonts/Roboto-Black.ttf" type="DynamicFontData" id=2]
[sub_resource type="StyleBoxFlat" id=1]
content_margin_left = 10.0
content_margin_right = 10.0
bg_color = Color( 0.145098, 0.172549, 0.231373, 1 )
[sub_resource type="StyleBoxEmpty" id=9]
[sub_resource type="StyleBoxEmpty" id=2]
[sub_resource type="StyleBoxEmpty" id=3]
[sub_resource type="StyleBoxEmpty" id=4]
[sub_resource type="StyleBoxEmpty" id=5]
[sub_resource type="StyleBoxEmpty" id=6]
[sub_resource type="StyleBoxEmpty" id=7]
[sub_resource type="DynamicFont" id=8]
font_data = ExtResource( 2 )
[node name="filename" type="VBoxContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
size_flags_vertical = 3
script = ExtResource( 1 )
[node name="HSeparator" type="HSeparator" parent="."]
margin_right = 1024.0
margin_bottom = 4.0
[node name="TopBar" type="HBoxContainer" parent="."]
margin_top = 8.0
margin_right = 1024.0
margin_bottom = 28.0
[node name="VSeparator" type="VSeparator" parent="TopBar"]
margin_right = 4.0
margin_bottom = 20.0
[node name="FileButton" type="MenuButton" parent="TopBar"]
margin_left = 8.0
margin_right = 51.0
margin_bottom = 20.0
custom_styles/hover = SubResource( 1 )
custom_styles/normal = SubResource( 1 )
text = "File"
flat = false
items = [ "Save File", null, 0, false, false, 0, 0, null, "", false, "Save file As...", null, 0, false, false, 1, 0, null, "", false, "", null, 0, false, false, -1, 0, null, "", true, "Normal Preview", null, 0, false, false, 2, 0, null, "", false, "BBCode Preview", null, 0, false, false, 3, 0, null, "", false, "Markdown Preview", null, 0, false, false, 4, 0, null, "", false, "HTML Preview", null, 0, false, false, 5, 0, null, "", false ]
[node name="filepath" type="Label" parent="TopBar"]
margin_left = 523.0
margin_top = 3.0
margin_right = 523.0
margin_bottom = 17.0
size_flags_horizontal = 6
[node name="close_btn" type="Button" parent="TopBar"]
margin_left = 996.0
margin_right = 1016.0
margin_bottom = 20.0
size_flags_horizontal = 8
text = "X"
[node name="VSeparator2" type="VSeparator" parent="TopBar"]
margin_left = 1020.0
margin_right = 1024.0
margin_bottom = 20.0
[node name="TextEditor" type="TextEdit" parent="."]
margin_top = 32.0
margin_right = 1024.0
margin_bottom = 577.0
size_flags_vertical = 3
syntax_highlighting = true
show_line_numbers = true
breakpoint_gutter = true
highlight_all_occurrences = true
smooth_scrolling = true
wrap_enabled = true
caret_blink = true
caret_blink_speed = 1.0
caret_moving_by_right_click = false
[node name="FileInfo" type="HBoxContainer" parent="."]
margin_top = 581.0
margin_right = 1024.0
margin_bottom = 600.0
custom_constants/separation = 2
[node name="VSeparator4" type="VSeparator" parent="FileInfo"]
margin_right = 5.0
margin_bottom = 19.0
rect_min_size = Vector2( 5, 0 )
custom_styles/separator = SubResource( 9 )
[node name="lastmodified_icon" type="TextureRect" parent="FileInfo"]
margin_left = 7.0
margin_right = 7.0
margin_bottom = 19.0
stretch_mode = 4
[node name="Label" type="Label" parent="FileInfo"]
margin_left = 9.0
margin_top = 2.0
margin_right = 134.0
margin_bottom = 16.0
text = "Last modified time:"
[node name="lastmodified" type="Label" parent="FileInfo"]
margin_left = 136.0
margin_top = 2.0
margin_right = 136.0
margin_bottom = 16.0
[node name="Readonly" type="CheckBox" parent="FileInfo"]
margin_left = 939.0
margin_right = 1018.0
margin_bottom = 19.0
size_flags_horizontal = 10
custom_styles/hover = SubResource( 2 )
custom_styles/pressed = SubResource( 3 )
custom_styles/focus = SubResource( 4 )
custom_styles/disabled = SubResource( 5 )
custom_styles/hover_pressed = SubResource( 6 )
custom_styles/normal = SubResource( 7 )
custom_fonts/font = SubResource( 8 )
custom_colors/font_color = Color( 0.145098, 0.172549, 0.231373, 1 )
custom_colors/font_color_pressed = Color( 1, 1, 1, 1 )
text = "Can Edit"
flat = true
[node name="VSeparator3" type="VSeparator" parent="FileInfo"]
margin_left = 1020.0
margin_right = 1024.0
margin_bottom = 19.0
rect_min_size = Vector2( 4, 0 )
[connection signal="text_changed" from="TextEditor" to="." method="_on_TextEditor_text_changed"]

View File

@ -1,369 +0,0 @@
[gd_scene load_steps=16 format=2]
[ext_resource path="res://addons/file-editor/scripts/IniVisualEditor.gd" type="Script" id=1]
[sub_resource type="Image" id=15]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=2]
image = SubResource( 15 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=16]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=4]
image = SubResource( 16 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=17]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 64, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=6]
image = SubResource( 17 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=18]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 48, 224, 224, 224, 142, 224, 224, 224, 238, 224, 224, 224, 238, 224, 224, 224, 174, 224, 224, 224, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 32, 224, 224, 224, 238, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 158, 224, 224, 224, 254, 224, 224, 224, 190, 224, 224, 224, 48, 224, 224, 224, 32, 224, 224, 224, 190, 224, 224, 224, 254, 224, 224, 224, 158, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 32, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 32, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 158, 224, 224, 224, 254, 224, 224, 224, 190, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 158, 224, 224, 224, 254, 224, 224, 224, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 32, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 48, 224, 224, 224, 158, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 190, 224, 224, 224, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=8]
image = SubResource( 18 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=19]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=10]
image = SubResource( 19 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=20]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 16, 224, 224, 224, 239, 224, 224, 224, 239, 224, 224, 224, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 80, 224, 224, 224, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=12]
image = SubResource( 20 )
size = Vector2( 16, 16 )
[sub_resource type="Image" id=21]
data = {
"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 222, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 64, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 254, 224, 224, 224, 238, 224, 224, 224, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
[sub_resource type="ImageTexture" id=14]
image = SubResource( 21 )
size = Vector2( 16, 16 )
[node name="IniEditor" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
script = ExtResource( 1 )
[node name="VBoxContainer" type="VBoxContainer" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
[node name="HSplitContainer" type="HSplitContainer" parent="VBoxContainer"]
margin_right = 1024.0
margin_bottom = 595.0
size_flags_vertical = 3
split_offset = 100
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HSplitContainer"]
margin_right = 174.0
margin_bottom = 595.0
size_flags_vertical = 3
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HSplitContainer/VBoxContainer"]
editor/display_folded = true
margin_right = 174.0
margin_bottom = 16.0
[node name="sections_icon" type="TextureRect" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer"]
margin_right = 16.0
margin_bottom = 16.0
texture = SubResource( 2 )
[node name="Label" type="Label" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer"]
margin_left = 20.0
margin_top = 1.0
margin_right = 174.0
margin_bottom = 15.0
size_flags_horizontal = 7
text = "Sections"
[node name="sections2" type="ItemList" parent="VBoxContainer/HSplitContainer/VBoxContainer"]
margin_top = 20.0
margin_right = 174.0
margin_bottom = 567.0
size_flags_vertical = 3
allow_reselect = true
auto_height = true
same_column_width = true
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/HSplitContainer/VBoxContainer"]
editor/display_folded = true
margin_top = 571.0
margin_right = 174.0
margin_bottom = 595.0
alignment = 1
[node name="btn_add_section" type="ToolButton" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer2"]
margin_left = 57.0
margin_right = 85.0
margin_bottom = 24.0
hint_tooltip = "Add a new Section"
icon = SubResource( 4 )
[node name="btn_remove_section" type="ToolButton" parent="VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer2"]
margin_left = 89.0
margin_right = 117.0
margin_bottom = 24.0
hint_tooltip = "Remove selected Section"
icon = SubResource( 6 )
[node name="VBoxContainer2" type="VBoxContainer" parent="VBoxContainer/HSplitContainer"]
editor/display_folded = true
margin_left = 186.0
margin_right = 1024.0
margin_bottom = 595.0
size_flags_vertical = 3
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/HSplitContainer/VBoxContainer2"]
margin_right = 838.0
margin_bottom = 16.0
[node name="keys_icon" type="TextureRect" parent="VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer2"]
margin_right = 16.0
margin_bottom = 16.0
texture = SubResource( 8 )
[node name="Label" type="Label" parent="VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer2"]
margin_left = 20.0
margin_top = 1.0
margin_right = 838.0
margin_bottom = 15.0
size_flags_horizontal = 7
text = "Keys"
[node name="keys" type="Tree" parent="VBoxContainer/HSplitContainer/VBoxContainer2"]
margin_top = 20.0
margin_right = 838.0
margin_bottom = 567.0
size_flags_vertical = 3
columns = 2
allow_reselect = true
hide_folding = true
select_mode = 1
[node name="HBoxContainer3" type="HBoxContainer" parent="VBoxContainer/HSplitContainer/VBoxContainer2"]
editor/display_folded = true
margin_top = 571.0
margin_right = 838.0
margin_bottom = 595.0
alignment = 1
[node name="btn_add_key" type="ToolButton" parent="VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3"]
margin_left = 373.0
margin_right = 401.0
margin_bottom = 24.0
hint_tooltip = "Add a new Key"
icon = SubResource( 10 )
[node name="btn_edit_key" type="ToolButton" parent="VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3"]
margin_left = 405.0
margin_right = 433.0
margin_bottom = 24.0
hint_tooltip = "Edit selected Key"
icon = SubResource( 12 )
[node name="btn_remove_key" type="ToolButton" parent="VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3"]
margin_left = 437.0
margin_right = 465.0
margin_bottom = 24.0
hint_tooltip = "Remove selected Key"
icon = SubResource( 14 )
[node name="HSeparator" type="HSeparator" parent="VBoxContainer"]
margin_top = 599.0
margin_right = 1024.0
margin_bottom = 600.0
rect_min_size = Vector2( 0, 1 )
custom_constants/separation = 0
[node name="Section" type="AcceptDialog" parent="."]
editor/display_folded = true
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -153.0
margin_top = -29.0
margin_right = 155.0
margin_bottom = 98.0
window_title = ""
[node name="Container" type="VBoxContainer" parent="Section"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 8.0
margin_top = 8.0
margin_right = -8.0
margin_bottom = -36.0
[node name="section" type="HBoxContainer" parent="Section/Container"]
margin_right = 292.0
margin_bottom = 24.0
[node name="Label" type="Label" parent="Section/Container/section"]
margin_top = 5.0
margin_right = 91.0
margin_bottom = 19.0
text = "Section name:"
[node name="_name" type="LineEdit" parent="Section/Container/section"]
margin_left = 95.0
margin_right = 292.0
margin_bottom = 24.0
size_flags_horizontal = 3
context_menu_enabled = false
[node name="key" type="HBoxContainer" parent="Section/Container"]
margin_top = 28.0
margin_right = 292.0
margin_bottom = 52.0
[node name="Label" type="Label" parent="Section/Container/key"]
margin_top = 5.0
margin_right = 91.0
margin_bottom = 19.0
rect_min_size = Vector2( 91, 0 )
text = "Key name:"
align = 1
[node name="_name" type="LineEdit" parent="Section/Container/key"]
margin_left = 95.0
margin_right = 292.0
margin_bottom = 24.0
size_flags_horizontal = 3
context_menu_enabled = false
[node name="value" type="HBoxContainer" parent="Section/Container"]
margin_top = 56.0
margin_right = 292.0
margin_bottom = 80.0
[node name="Label" type="Label" parent="Section/Container/value"]
margin_top = 5.0
margin_right = 91.0
margin_bottom = 19.0
rect_min_size = Vector2( 91, 0 )
text = "Key value:"
align = 1
[node name="_value" type="LineEdit" parent="Section/Container/value"]
margin_left = 95.0
margin_right = 292.0
margin_bottom = 24.0
size_flags_horizontal = 3
context_menu_enabled = false
[node name="Key" type="ConfirmationDialog" parent="."]
editor/display_folded = true
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -150.0
margin_top = -46.0
margin_right = 151.0
margin_bottom = 64.0
window_title = "Add a new Key"
[node name="data" type="VBoxContainer" parent="Key"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 8.0
margin_top = 8.0
margin_right = -8.0
margin_bottom = -36.0
alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="Key/data"]
margin_top = 7.0
margin_right = 285.0
margin_bottom = 31.0
[node name="Label" type="Label" parent="Key/data/HBoxContainer"]
margin_top = 5.0
margin_right = 140.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Key name:"
align = 1
valign = 1
[node name="name" type="LineEdit" parent="Key/data/HBoxContainer"]
margin_left = 144.0
margin_right = 285.0
margin_bottom = 24.0
size_flags_horizontal = 3
[node name="HBoxContainer2" type="HBoxContainer" parent="Key/data"]
margin_top = 35.0
margin_right = 285.0
margin_bottom = 59.0
[node name="Label" type="Label" parent="Key/data/HBoxContainer2"]
margin_top = 5.0
margin_right = 140.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Key value:"
align = 1
valign = 1
[node name="value" type="LineEdit" parent="Key/data/HBoxContainer2"]
margin_left = 144.0
margin_right = 285.0
margin_bottom = 24.0
size_flags_horizontal = 3

View File

@ -1,62 +0,0 @@
[gd_scene load_steps=12 format=2]
[ext_resource path="res://addons/file-editor/scripts/Preview.gd" type="Script" id=1]
[ext_resource path="res://addons/file-editor/fonts/COUR.TTF" type="DynamicFontData" id=2]
[ext_resource path="res://addons/file-editor/fonts/Carlito-BoldItalic.ttf" type="DynamicFontData" id=3]
[ext_resource path="res://addons/file-editor/fonts/Carlito-Italic.ttf" type="DynamicFontData" id=4]
[ext_resource path="res://addons/file-editor/fonts/Carlito-Bold.ttf" type="DynamicFontData" id=5]
[ext_resource path="res://addons/file-editor/fonts/Carlito-Regular.ttf" type="DynamicFontData" id=6]
[sub_resource type="DynamicFont" id=1]
use_mipmaps = true
use_filter = true
font_data = ExtResource( 2 )
[sub_resource type="DynamicFont" id=2]
font_data = ExtResource( 3 )
[sub_resource type="DynamicFont" id=3]
font_data = ExtResource( 4 )
[sub_resource type="DynamicFont" id=4]
font_data = ExtResource( 5 )
[sub_resource type="DynamicFont" id=5]
font_data = ExtResource( 6 )
[node name="Preview" type="WindowDialog"]
visible = true
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 81.0
margin_top = 47.0
margin_right = -80.0
margin_bottom = -48.0
window_title = "File preview"
resizable = true
script = ExtResource( 1 )
[node name="Container" type="VBoxContainer" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
[node name="TextPreview" type="RichTextLabel" parent="Container"]
visible = false
margin_right = 863.0
margin_bottom = 250.0
size_flags_vertical = 3
custom_fonts/mono_font = SubResource( 1 )
custom_fonts/bold_italics_font = SubResource( 2 )
custom_fonts/italics_font = SubResource( 3 )
custom_fonts/bold_font = SubResource( 4 )
custom_fonts/normal_font = SubResource( 5 )
bbcode_enabled = true
scroll_following = true
[node name="TablePreview" type="GridContainer" parent="Container"]
margin_right = 863.0
margin_bottom = 505.0
size_flags_horizontal = 3
size_flags_vertical = 3
columns = 3
[connection signal="popup_hide" from="." to="." method="_on_Preview_popup_hide"]

View File

@ -1,88 +0,0 @@
[gd_scene load_steps=10 format=2]
[ext_resource path="res://addons/file-editor/scripts/FileScene.gd" type="Script" id=1]
[ext_resource path="res://addons/file-editor/fonts/Roboto-Black.ttf" type="DynamicFontData" id=2]
[sub_resource type="StyleBoxEmpty" id=1]
[sub_resource type="StyleBoxEmpty" id=2]
[sub_resource type="StyleBoxEmpty" id=3]
[sub_resource type="StyleBoxEmpty" id=4]
[sub_resource type="StyleBoxEmpty" id=5]
[sub_resource type="StyleBoxEmpty" id=6]
[sub_resource type="DynamicFont" id=7]
font_data = ExtResource( 2 )
[node name="VanillaEditor" type="VBoxContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
size_flags_vertical = 3
script = ExtResource( 1 )
[node name="TextEditor" type="TextEdit" parent="."]
margin_right = 1024.0
margin_bottom = 577.0
size_flags_vertical = 3
syntax_highlighting = true
show_line_numbers = true
breakpoint_gutter = true
highlight_all_occurrences = true
override_selected_font_color = true
smooth_scrolling = true
hiding_enabled = 1
wrap_enabled = true
caret_blink = true
caret_blink_speed = 1.0
caret_moving_by_right_click = false
[node name="FileInfo" type="HBoxContainer" parent="."]
margin_top = 581.0
margin_right = 1024.0
margin_bottom = 600.0
custom_constants/separation = 2
[node name="lastmodified_icon" type="TextureRect" parent="FileInfo"]
margin_bottom = 19.0
stretch_mode = 4
[node name="Label" type="Label" parent="FileInfo"]
margin_left = 2.0
margin_top = 2.0
margin_right = 127.0
margin_bottom = 16.0
text = "Last modified time:"
[node name="lastmodified" type="Label" parent="FileInfo"]
margin_left = 129.0
margin_top = 2.0
margin_right = 129.0
margin_bottom = 16.0
[node name="Readonly" type="CheckBox" parent="FileInfo"]
margin_left = 939.0
margin_right = 1018.0
margin_bottom = 19.0
size_flags_horizontal = 10
custom_styles/hover = SubResource( 1 )
custom_styles/pressed = SubResource( 2 )
custom_styles/focus = SubResource( 3 )
custom_styles/disabled = SubResource( 4 )
custom_styles/hover_pressed = SubResource( 5 )
custom_styles/normal = SubResource( 6 )
custom_fonts/font = SubResource( 7 )
custom_colors/font_color = Color( 0.145098, 0.172549, 0.231373, 1 )
custom_colors/font_color_pressed = Color( 1, 1, 1, 1 )
text = "Can Edit"
flat = true
[node name="VSeparator3" type="VSeparator" parent="FileInfo"]
margin_left = 1020.0
margin_right = 1024.0
margin_bottom = 19.0
rect_min_size = Vector2( 4, 0 )
[connection signal="text_changed" from="TextEditor" to="." method="_on_TextEditor_text_changed"]

View File

@ -1,215 +1,399 @@
tool tool
extends Control extends Control
onready var FileList = $FileList enum FileMenuOptions {
FILE_MENU_OPTION_NEW = 0,
onready var NewFileDialogue = $NewFileDialogue FILE_MENU_OPTION_OPEN = 1,
onready var NewFileDialogue_name = $NewFileDialogue/VBoxContainer/new_filename FILE_MENU_OPTION_CLOSE = 2,
FILE_MENU_OPTION_SAVE = 3,
onready var FileBTN = $FileEditorContainer/TobBar/file_btn.get_popup() FILE_MENU_OPTION_SAVE_AS = 4,
onready var PreviewBTN = $FileEditorContainer/TobBar/preview_btn.get_popup() FILE_MENU_OPTION_DELETE = 5,
onready var EditorBTN = $FileEditorContainer/TobBar/editor_btn.get_popup() FILE_MENU_OPTION_SEARCH = 6,
FILE_MENU_OPTION_REPLACE = 7,
onready var Version = $FileEditorContainer/TobBar/version };
onready var VanillaEditor = $FileEditorContainer/SplitContainer/VanillaEditor
onready var IniEditor = $FileEditorContainer/SplitContainer/IniEditor
onready var OpenFileList = $FileEditorContainer/SplitContainer/BoxContainer/OpenFileList
onready var OpenFileName = $FileEditorContainer/SplitContainer/BoxContainer/OpenFileName
var Preview = preload("res://addons/file-editor/scenes/Preview.tscn")
var DIRECTORY : String = "res://" var DIRECTORY : String = "res://"
var EXCEPTIONS : String = "addons" var EXCEPTIONS : String = "addons"
var EXTENSIONS : PoolStringArray = [ var EXTENSIONS : PoolStringArray = [
"*.txt ; Plain Text File", "*.txt ; Plain Text File",
"*.rtf ; Rich Text Format File", "*.rtf ; Rich Text Format File",
"*.log ; Log File", "*.log ; Log File",
"*.md ; MD File", "*.md ; MD File",
"*.doc ; WordPad Document", "*.doc ; WordPad Document",
"*.doc ; Microsoft Word Document", "*.doc ; Microsoft Word Document",
"*.docm ; Word Open XML Macro-Enabled Document", "*.docm ; Word Open XML Macro-Enabled Document",
"*.docx ; Microsoft Word Open XML Document", "*.docx ; Microsoft Word Open XML Document",
"*.bbs ; Bulletin Board System Text", "*.bbs ; Bulletin Board System Text",
"*.dat ; Data File", "*.dat ; Data File",
"*.xml ; XML File", "*.xml ; XML File",
"*.sql ; SQL database file", "*.sql ; SQL database file",
"*.json ; JavaScript Object Notation File", "*.json ; JavaScript Object Notation File",
"*.html ; HyperText Markup Language", "*.html ; HyperText Markup Language",
"*.csv ; Comma-separated values", "*.csv ; Comma-separated values",
"*.cfg ; Configuration File", "*.cfg ; Configuration File",
"*.ini ; Initialization File (same as .cfg Configuration File)", "*.ini ; Initialization File (same as .cfg Configuration File)",
"*.csv ; Comma-separated values File",
"*.res ; Resource File",
] ]
var directories = []
var files = []
var current_file_index = -1
var current_file_path = ""
var save_as = false
func _ready(): var file_btn : MenuButton = null
clean_editor() var preview_btn : MenuButton = null
update_version() var settings_btn : MenuButton = null
connect_signals()
create_shortcuts()
load_icons()
var file_btn_popup : PopupMenu = null
var preview_btn_popup : PopupMenu = null
var settings_btn_popup : PopupMenu = null
var opened_files : Array = LastOpenedFiles.load_opened_files() var editor_container : HSplitContainer = null
for open_file in opened_files: var file_container : VBoxContainer = null
open_file(open_file[1]) var open_file_list : ItemList = null
var split_editor_container : VBoxContainer = null
var open_file_name : LineEdit = null
var wrap_btn : OptionButton = null
var map_btn : OptionButton = null
FileList.set_filters(EXTENSIONS) var file_list : FileDialog = null
IniEditor.hide()
func create_shortcuts(): var new_file_dialogue : AcceptDialog = null
var hotkey var new_file_dialogue_name : LineEdit = null
hotkey = InputEventKey.new() var confirmation_close : ConfirmationDialog = null
hotkey.scancode = KEY_S
hotkey.control = true
FileBTN.set_item_accelerator(4,hotkey.get_scancode_with_modifiers()) # save file
hotkey = InputEventKey.new() var select_font_dialog : FileDialog = null
var LastOpenedFiles : Reference = null
var Preview = preload("res://addons/file-editor/scripts/Preview.gd")
var VanillaEditor = preload("res://addons/file-editor/scripts/VanillaEditor.gd")
var directories : Array
var files : Array
var current_file_index : int = -1
var current_file_path : String
var save_as : bool = false
var current_editor : Control
var current_font : DynamicFont
var editing_file : bool = false
func _init() -> void:
set_anchors_and_margins_preset(Control.PRESET_WIDE)
size_flags_vertical = SIZE_EXPAND_FILL
size_flags_horizontal = SIZE_EXPAND_FILL
var vbc : VBoxContainer = VBoxContainer.new()
add_child(vbc)
vbc.set_anchors_and_margins_preset(Control.PRESET_WIDE)
var tob_bar : HBoxContainer = HBoxContainer.new()
vbc.add_child(tob_bar)
file_btn = MenuButton.new()
tob_bar.add_child(file_btn)
file_btn.text = "File"
file_btn_popup = file_btn.get_popup()
var hotkey : InputEventKey = InputEventKey.new()
hotkey.scancode = KEY_N hotkey.scancode = KEY_N
hotkey.control = true hotkey.control = true
FileBTN.set_item_accelerator(0,hotkey.get_scancode_with_modifiers()) # new file file_btn_popup.add_item("New File", FileMenuOptions.FILE_MENU_OPTION_NEW, hotkey.get_scancode_with_modifiers())
hotkey = InputEventKey.new() hotkey = InputEventKey.new()
hotkey.scancode = KEY_O hotkey.scancode = KEY_O
hotkey.control = true hotkey.control = true
FileBTN.set_item_accelerator(1,hotkey.get_scancode_with_modifiers()) # open file file_btn_popup.add_item("Open File", FileMenuOptions.FILE_MENU_OPTION_OPEN, hotkey.get_scancode_with_modifiers())
hotkey = InputEventKey.new()
hotkey.scancode = KEY_D
hotkey.control = true
FileBTN.set_item_accelerator(6,hotkey.get_scancode_with_modifiers()) # delete file
hotkey = InputEventKey.new()
hotkey.scancode = KEY_S
hotkey.control = true
hotkey.alt = true
FileBTN.set_item_accelerator(5,hotkey.get_scancode_with_modifiers()) #save file as
hotkey = InputEventKey.new() hotkey = InputEventKey.new()
hotkey.scancode = KEY_C hotkey.scancode = KEY_C
hotkey.control = true hotkey.control = true
hotkey.alt = true hotkey.alt = true
FileBTN.set_item_accelerator(2,hotkey.get_scancode_with_modifiers()) # close file file_btn_popup.add_item("Close File", FileMenuOptions.FILE_MENU_OPTION_CLOSE, hotkey.get_scancode_with_modifiers())
# vanilla editor ----------------------- file_btn_popup.add_separator()
hotkey = InputEventKey.new() hotkey = InputEventKey.new()
hotkey.scancode = KEY_1 hotkey.scancode = KEY_S
hotkey.control = true hotkey.control = true
EditorBTN.set_item_accelerator(0,hotkey.get_scancode_with_modifiers()) # vanilla editor file_btn_popup.add_item("Save File", FileMenuOptions.FILE_MENU_OPTION_SAVE, hotkey.get_scancode_with_modifiers())
hotkey = InputEventKey.new() hotkey = InputEventKey.new()
hotkey.scancode = KEY_3 hotkey.scancode = KEY_S
hotkey.control = true hotkey.control = true
EditorBTN.set_item_accelerator(2,hotkey.get_scancode_with_modifiers()) # vanilla editor hotkey.alt = true
file_btn_popup.add_item("Save File as...", FileMenuOptions.FILE_MENU_OPTION_SAVE_AS, hotkey.get_scancode_with_modifiers())
func load_icons(): #hotkey = InputEventKey.new()
$FileEditorContainer/TobBar/file_btn.icon = IconLoader.load_icon_from_name("file") #hotkey.scancode = KEY_D
$FileEditorContainer/TobBar/preview_btn.icon = IconLoader.load_icon_from_name("read") #hotkey.control = true
$FileEditorContainer/TobBar/editor_btn.icon = IconLoader.load_icon_from_name("edit_") #file_btn_popup.add_item("Delete File", FileMenuOptions.FILE_MENU_OPTION_DELETE, hotkey.get_scancode_with_modifiers())
file_btn_popup.add_item("Delete File", FileMenuOptions.FILE_MENU_OPTION_DELETE)
func connect_signals(): file_btn_popup.add_separator()
FileList.connect("confirmed",self,"update_list")
FileBTN.connect("id_pressed",self,"_on_filebtn_pressed")
PreviewBTN.connect("id_pressed",self,"_on_previewbtn_pressed")
EditorBTN.connect("id_pressed",self,"_on_editorbtn_pressed")
OpenFileList.connect("item_selected",self,"_on_fileitem_pressed") hotkey = InputEventKey.new()
hotkey.scancode = KEY_F
hotkey.control = true
file_btn_popup.add_item("Search in file...", FileMenuOptions.FILE_MENU_OPTION_SEARCH, hotkey.get_scancode_with_modifiers())
VanillaEditor.connect("text_changed",self,"_on_vanillaeditor_text_changed") hotkey = InputEventKey.new()
hotkey.scancode = KEY_R
hotkey.control = true
file_btn_popup.add_item("Replace occurencies", FileMenuOptions.FILE_MENU_OPTION_REPLACE, hotkey.get_scancode_with_modifiers())
#---------------- to update from IniEditor to VanillaEditor #Preview
IniEditor.connect("update_file",self,"_on_update_file") preview_btn = MenuButton.new()
tob_bar.add_child(preview_btn)
preview_btn.text = "Preview"
# ---- preview buttons preview_btn_popup = preview_btn.get_popup()
preview_btn_popup.add_item("BBCode Preview")
preview_btn_popup.add_item("Markdown Preview")
preview_btn_popup.add_item("HTML Preview")
preview_btn_popup.add_item("CSV Preview")
#Settings
settings_btn = MenuButton.new()
tob_bar.add_child(settings_btn)
settings_btn.text = "Settings"
settings_btn_popup = settings_btn.get_popup()
settings_btn_popup.add_item("Change Font")
#SplitContainer
editor_container = HSplitContainer.new()
vbc.add_child(editor_container)
editor_container.split_offset = 150
editor_container.size_flags_horizontal = SIZE_EXPAND_FILL
editor_container.size_flags_vertical = SIZE_EXPAND_FILL
#Files
file_container = VBoxContainer.new()
editor_container.add_child(file_container)
open_file_list = ItemList.new()
file_container.add_child(open_file_list)
open_file_list.allow_reselect = true
open_file_list.size_flags_vertical = SIZE_EXPAND_FILL
file_container.add_child(HSeparator.new())
#Editor
split_editor_container = VBoxContainer.new()
editor_container.add_child(split_editor_container)
var editor_top_bar : HBoxContainer = HBoxContainer.new()
split_editor_container.add_child(editor_top_bar)
var edtopbar_label : Label = Label.new()
editor_top_bar.add_child(edtopbar_label)
edtopbar_label.text = "Editing file:"
open_file_name = LineEdit.new()
editor_top_bar.add_child(open_file_name)
open_file_name.editable = false
open_file_name.mouse_filter = Control.MOUSE_FILTER_PASS
open_file_name.size_flags_horizontal = SIZE_EXPAND_FILL
wrap_btn = OptionButton.new()
editor_top_bar.add_child(wrap_btn)
wrap_btn.add_item("No Wrap")
wrap_btn.add_item("Soft Wrap")
map_btn = OptionButton.new()
editor_top_bar.add_child(map_btn)
map_btn.add_item("Hide Map")
map_btn.add_item("Show Map")
map_btn.selected = 1
#dialogs
file_list = FileDialog.new()
add_child(file_list)
file_list.show_hidden_files = true
file_list.dialog_hide_on_ok = true
file_list.window_title = "Save file"
file_list.popup_exclusive = true
file_list.set_anchors_and_margins_preset(Control.PRESET_WIDE)
file_list.margin_left = 222
file_list.margin_top = 132
file_list.margin_right = -221
file_list.margin_bottom = -131
file_list.rect_min_size = Vector2(200, 70)
new_file_dialogue = AcceptDialog.new()
add_child(new_file_dialogue)
new_file_dialogue.window_title = "Create new File"
var nfd_vbc : VBoxContainer = VBoxContainer.new()
new_file_dialogue.add_child(nfd_vbc)
var nfd_name : Label = Label.new()
nfd_vbc.add_child(nfd_name)
nfd_name.text = "Insert file name (no extension needed)"
nfd_name.align = Label.ALIGN_CENTER
nfd_name.valign = Label.VALIGN_CENTER
nfd_name.size_flags_vertical = SIZE_EXPAND_FILL
new_file_dialogue_name = LineEdit.new()
nfd_vbc.add_child(new_file_dialogue_name)
new_file_dialogue_name.clear_button_enabled = true
new_file_dialogue_name.text = "example"
new_file_dialogue_name.rect_min_size = Vector2(200, 0)
new_file_dialogue_name.size_flags_horizontal = SIZE_EXPAND | SIZE_SHRINK_CENTER
new_file_dialogue_name.size_flags_vertical = SIZE_EXPAND_FILL
confirmation_close = ConfirmationDialog.new()
add_child(confirmation_close)
confirmation_close.dialog_text = "There are some unsaved changes.\nPress \"OK\" if you want to close this tab anyway, or \"cancel\" if you want to keep on editing your file."
confirmation_close.window_title = "Unsaved changes"
confirmation_close.set_anchors_and_margins_preset(Control.PRESET_CENTER)
select_font_dialog = FileDialog.new()
add_child(select_font_dialog)
select_font_dialog.mode = FileDialog.MODE_OPEN_FILE
select_font_dialog.access = FileDialog.ACCESS_FILESYSTEM
select_font_dialog.show_hidden_files = true
select_font_dialog.window_title = "Open a File"
select_font_dialog.resizable = true
select_font_dialog.set_anchors_and_margins_preset(Control.PRESET_WIDE)
select_font_dialog.margin_left = 222
select_font_dialog.margin_top = 132
select_font_dialog.margin_right = -221
select_font_dialog.margin_bottom = -131
select_font_dialog.rect_min_size = Vector2(200, 70)
var farr : PoolStringArray = PoolStringArray()
farr.push_back("*.TTF")
farr.push_back("*.ttf")
select_font_dialog.filters = farr
func update_version(): func _ready() -> void:
var plugin_version = "" if not Engine.is_editor_hint():
var config = ConfigFile.new() return
var err = config.load("res://addons/file-editor/plugin.cfg")
if err == OK:
plugin_version = config.get_value("plugin","version")
Version.set_text("v"+plugin_version)
func create_selected_file(): clean_editor()
connect_signals()
if LastOpenedFiles:
var opened_files : Array = LastOpenedFiles.load_opened_files()
for opened_file in opened_files:
open_file(opened_file[1], opened_file[2])
file_list.set_filters(EXTENSIONS)
func connect_signals() -> void:
file_list.connect("confirmed",self,"update_list")
file_btn_popup.connect("id_pressed",self,"_on_file_btn_pressed")
preview_btn_popup.connect("id_pressed",self,"_on_preview_btn_pressed")
settings_btn_popup.connect("id_pressed",self,"_on_settings_btn_pressed")
open_file_list.connect("item_selected",self,"_on_fileitem_pressed")
wrap_btn.connect("item_selected",self,"on_wrap_button")
map_btn.connect("item_selected",self,"on_minimap_button")
select_font_dialog.connect("file_selected",self,"_on_font_selected")
func create_selected_file() -> void:
update_list() update_list()
FileList.mode = FileDialog.MODE_SAVE_FILE
FileList.set_title("Create a new File")
if FileList.is_connected("file_selected",self,"delete_file"):
FileList.disconnect("file_selected",self,"delete_file")
if FileList.is_connected("file_selected",self,"open_file"):
FileList.disconnect("file_selected",self,"open_file")
if not FileList.is_connected("file_selected",self,"create_new_file"):
FileList.connect("file_selected",self,"create_new_file")
open_filelist()
func open_selected_file(): file_list.mode = FileDialog.MODE_SAVE_FILE
file_list.set_title("Create a new File")
if file_list.is_connected("file_selected",self,"delete_file"):
file_list.disconnect("file_selected",self,"delete_file")
if file_list.is_connected("file_selected",self,"open_file"):
file_list.disconnect("file_selected",self,"open_file")
if not file_list.is_connected("file_selected",self,"create_new_file"):
file_list.connect("file_selected",self,"create_new_file")
open_file_list()
func open_selected_file() -> void:
update_list() update_list()
FileList.mode = FileDialog.MODE_OPEN_FILE
FileList.set_title("Select a File you want to edit")
if FileList.is_connected("file_selected",self,"delete_file"):
FileList.disconnect("file_selected",self,"delete_file")
if FileList.is_connected("file_selected",self,"create_new_file"):
FileList.disconnect("file_selected",self,"create_new_file")
if not FileList.is_connected("file_selected",self,"open_file"):
FileList.connect("file_selected",self,"open_file")
open_filelist()
func delete_selected_file(): file_list.mode = FileDialog.MODE_OPEN_FILE
file_list.set_title("Select a File you want to edit")
if file_list.is_connected("file_selected",self,"delete_file"):
file_list.disconnect("file_selected",self,"delete_file")
if file_list.is_connected("file_selected",self,"create_new_file"):
file_list.disconnect("file_selected",self,"create_new_file")
if not file_list.is_connected("file_selected",self,"open_file"):
file_list.connect("file_selected",self,"open_file")
open_file_list()
func delete_selected_file() -> void:
update_list() update_list()
FileList.mode = FileDialog.MODE_OPEN_FILES
FileList.set_title("Select one or more Files you want to delete")
if FileList.is_connected("file_selected",self,"open_file"):
FileList.disconnect("file_selected",self,"open_file")
if FileList.is_connected("file_selected",self,"create_new_file"):
FileList.disconnect("file_selected",self,"create_new_file")
if not FileList.is_connected("files_selected",self,"delete_file"):
FileList.connect("files_selected",self,"delete_file")
open_filelist()
func save_current_file_as(): file_list.mode = FileDialog.MODE_OPEN_FILES
file_list.set_title("Select one or more Files you want to delete")
if file_list.is_connected("file_selected",self,"open_file"):
file_list.disconnect("file_selected",self,"open_file")
if file_list.is_connected("file_selected",self,"create_new_file"):
file_list.disconnect("file_selected",self,"create_new_file")
if not file_list.is_connected("files_selected",self,"delete_file"):
file_list.connect("files_selected",self,"delete_file")
open_file_list()
func save_current_file_as() -> void:
update_list() update_list()
FileList.mode = FileDialog.MODE_SAVE_FILE file_list.mode = FileDialog.MODE_SAVE_FILE
FileList.set_title("Save this File as...") file_list.set_title("Save this File as...")
if FileList.is_connected("file_selected",self,"delete_file"):
FileList.disconnect("file_selected",self,"delete_file")
if FileList.is_connected("file_selected",self,"open_file"):
FileList.disconnect("file_selected",self,"open_file")
if not FileList.is_connected("file_selected",self,"create_new_file"):
FileList.connect("file_selected",self,"create_new_file")
open_filelist()
func _on_filebtn_pressed(index : int): if file_list.is_connected("file_selected",self,"delete_file"):
file_list.disconnect("file_selected",self,"delete_file")
if file_list.is_connected("file_selected",self,"open_file"):
file_list.disconnect("file_selected",self,"open_file")
if not file_list.is_connected("file_selected",self,"create_new_file"):
file_list.connect("file_selected",self,"create_new_file")
open_file_list()
func _on_file_btn_pressed(index : int) -> void:
match index: match index:
0: FileMenuOptions.FILE_MENU_OPTION_NEW:
create_selected_file() create_selected_file()
1: FileMenuOptions.FILE_MENU_OPTION_OPEN:
open_selected_file() open_selected_file()
2: FileMenuOptions.FILE_MENU_OPTION_CLOSE:
if current_file_index!=-1 and current_file_path != "": if current_file_index!=-1 and current_file_path != "":
close_file(current_file_index) close_file(current_file_index)
3: FileMenuOptions.FILE_MENU_OPTION_SAVE:
if current_file_index!=-1 and current_file_path != "": if current_file_index!=-1 and current_file_path != "":
save_as = false save_as = false
save_file(current_file_path) save_file(current_file_path)
4: FileMenuOptions.FILE_MENU_OPTION_SAVE_AS:
if current_file_index!=-1 and current_file_path != "": if current_file_index!=-1 and current_file_path != "":
save_as = true save_as = true
save_file(current_file_path) save_file(current_file_path)
save_current_file_as() save_current_file_as()
5: FileMenuOptions.FILE_MENU_OPTION_DELETE:
delete_selected_file() delete_selected_file()
FileMenuOptions.FILE_MENU_OPTION_SEARCH:
current_editor.open_search_box()
FileMenuOptions.FILE_MENU_OPTION_REPLACE:
current_editor.open_replace_box()
func _on_previewbtn_pressed(id : int): func _on_preview_btn_pressed(id : int) -> void:
if id == 0: if id == 0:
bbcode_preview() bbcode_preview()
elif id == 1: elif id == 1:
@ -218,195 +402,257 @@ func _on_previewbtn_pressed(id : int):
html_preview() html_preview()
elif id == 3: elif id == 3:
csv_preview() csv_preview()
elif id == 4:
xml_preview()
elif id == 5:
json_preview()
func _on_editorbtn_pressed(index : int): func _on_settings_btn_pressed(index : int) -> void:
match index: match index:
0: 0:
if not VanillaEditor.visible: select_font_dialog.popup()
VanillaEditor.show()
IniEditor.hide()
2:
if not IniEditor.visible:
VanillaEditor.hide()
IniEditor.show()
func _on_fileitem_pressed(index : int): func _on_font_selected(font_path : String) -> void:
current_editor.set_font(font_path)
LastOpenedFiles.store_editor_fonts(current_file_path.get_file(), font_path)
func _on_fileitem_pressed(index : int) -> void:
current_file_index = index current_file_index = index
var selected_item_metadata = OpenFileList.get_item_metadata(index) var selected_item_metadata : Array = open_file_list.get_item_metadata(current_file_index)
current_file_path = selected_item_metadata[2] var extension : String = selected_item_metadata[0].current_path.get_file().get_extension()
OpenFileName.set_text(current_file_path) if open_file_list.get_item_text(current_file_index).begins_with("(*)"):
editing_file = true
else:
editing_file = false
VanillaEditor.new_file_open(selected_item_metadata[0],selected_item_metadata[1]) current_file_path = selected_item_metadata[0].current_path
open_in_inieditor(current_file_path)
func close_file(index): if current_editor.visible or current_editor == null:
LastOpenedFiles.remove_opened_file(index,OpenFileList) if current_editor != null:
OpenFileList.remove_item(index) current_editor.hide()
OpenFileName.clear()
VanillaEditor.clean_editor()
func open_file(path : String): current_editor = selected_item_metadata[0]
current_editor.show()
open_file_name.set_text(current_editor.current_path)
if wrap_btn.get_selected_id() == 1:
current_editor.set_wrap_enabled(true)
else:
current_editor.set_wrap_enabled(false)
if map_btn.get_selected_id() == 1:
current_editor.draw_minimap(true)
else:
current_editor.draw_minimap(false)
func open_file(path : String, font : String = "null") -> void:
if current_file_path != path: if current_file_path != path:
current_file_path = path current_file_path = path
open_in_vanillaeditor(path) var vanilla_editor : Control = open_in_vanillaeditor(path)
open_in_inieditor(path)
LastOpenedFiles.store_opened_files(OpenFileList) if font != "null" and vanilla_editor.get("custom_fonts/font")!=null:
vanilla_editor.set_font(font)
generate_file_item(path, vanilla_editor)
LastOpenedFiles.store_opened_files(open_file_list)
current_editor.show()
func generate_file_item(path : String , veditor : Control) -> void:
open_file_name.set_text(path)
open_file_list.add_item(path.get_file(), null,true)
current_file_index = open_file_list.get_item_count()-1
open_file_list.set_item_metadata(current_file_index,[veditor])
open_file_list.select(open_file_list.get_item_count()-1)
func open_in_vanillaeditor(path : String) -> Control:
var editor : Control = VanillaEditor.new()
editor.LastOpenedFiles = LastOpenedFiles
editor.file_list = file_list
split_editor_container.add_child(editor,true)
if current_editor and current_editor!=editor:
editor.show()
current_editor.hide()
current_editor = editor
editor.connect("text_changed",self,"_on_vanillaeditor_text_changed")
func open_in_vanillaeditor(path : String):
var current_file : File = File.new() var current_file : File = File.new()
current_file.open(path,File.READ) current_file.open(path,File.READ)
var current_content : String = ""
current_content = current_file.get_as_text()
var current_content = current_file.get_as_text()
var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(path)) var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(path))
current_file.close() current_file.close()
editor.new_file_open(current_content,last_modified,current_file_path)
OpenFileName.set_text(path)
OpenFileList.add_item(path.get_file(),IconLoader.load_icon_from_name("file"),true)
current_file_index = OpenFileList.get_item_count()-1
OpenFileList.set_item_metadata(current_file_index,[current_content,last_modified,path])
VanillaEditor.new_file_open(current_content,last_modified)
update_list() update_list()
OpenFileList.select(OpenFileList.get_item_count()-1) if wrap_btn.get_selected_id() == 1:
current_editor.set_wrap_enabled(true)
func open_in_inieditor(path : String): return editor
var extension = path.get_file().get_extension()
if extension == "ini" or extension == "cfg":
IniEditor.current_file_path = path
var current_file : ConfigFile = ConfigFile.new()
var err = current_file.load(path)
if err == OK:
var sections = current_file.get_sections()
var filemap = []
for section in sections:
var keys = []
var section_keys = current_file.get_section_keys(section)
for key in section_keys:
keys.append([key,current_file.get_value(section,key)])
filemap.append([section,keys]) func close_file(index : int) -> void:
if editing_file:
IniEditor.open_file(filemap) confirmation_close.popup()
else: else:
IniEditor.clean_editor() confirm_close(index)
func confirm_close(index : int) -> void:
LastOpenedFiles.remove_opened_file(index,open_file_list)
open_file_list.remove_item(index)
open_file_name.clear()
current_editor.queue_free()
func _on_update_file(): if index > 0:
VanillaEditor.clean_editor() open_file_list.select(index-1)
_on_fileitem_pressed(index-1)
func _on_update_file() -> void:
var current_file : File = File.new() var current_file : File = File.new()
current_file.open(current_file_path,File.READ) current_file.open(current_file_path,File.READ)
var current_content = current_file.get_as_text() var current_content : String = current_file.get_as_text()
var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(current_file_path)) var last_modified : Dictionary = OS.get_datetime_from_unix_time(current_file.get_modified_time(current_file_path))
current_file.close() current_file.close()
VanillaEditor.new_file_open(current_content,last_modified) current_editor.new_file_open(current_content,last_modified,current_file_path)
func delete_file(files_selected : PoolStringArray): func delete_file(files_selected : PoolStringArray) -> void:
var dir = Directory.new() var dir = Directory.new()
for file in files_selected: for file in files_selected:
dir.remove(file) dir.remove(file)
update_list() update_list()
func open_newfiledialogue(): func open_new_file_dialogue() -> void:
NewFileDialogue.popup() new_file_dialogue.popup()
NewFileDialogue.set_position(OS.get_screen_size()/2 - NewFileDialogue.get_size()/2) new_file_dialogue.set_position(OS.get_screen_size()/2 - new_file_dialogue.get_size()/2)
func open_filelist(): func open_file_list() -> void:
update_list() update_list()
FileList.popup() file_list.popup()
FileList.set_position(OS.get_screen_size()/2 - FileList.get_size()/2) file_list.set_position(OS.get_screen_size()/2 - file_list.get_size()/2)
func _on_vanillaeditor_text_changed(): func create_new_file(given_path : String) -> void:
if not OpenFileList.get_item_text(current_file_index).ends_with("(*)"): var current_file : File = File.new()
OpenFileList.set_item_text(current_file_index,OpenFileList.get_item_text(current_file_index)+"(*)")
func create_new_file(given_path : String):
var current_file = File.new()
current_file.open(given_path,File.WRITE) current_file.open(given_path,File.WRITE)
if save_as :
current_file.store_line(VanillaEditor.get_node("TextEditor").get_text()) if save_as:
current_file.store_line(current_editor.text_editor.get_text())
current_file.close() current_file.close()
open_file(given_path) open_file(given_path)
func save_file(current_path : String): func save_file(current_path : String) -> void:
var current_file = File.new() print("Saving file: ",current_path)
var current_file : File = File.new()
current_file.open(current_path,File.WRITE) current_file.open(current_path,File.WRITE)
var current_content = VanillaEditor.get_node("TextEditor").get_text() var current_content : String = ""
if current_content == null: var lines : int = current_editor.text_editor.get_line_count()
current_content = ""
current_file.store_line(current_content) for line in range(lines):
#if current_editor.text_editor.get_line(line) == "":
# continue
current_content = current_editor.text_editor.get_text()
current_file.store_line(current_editor.text_editor.get_line(line))
current_file.close() current_file.close()
current_file_path = current_file_path current_file_path = current_path
var last_modified = OS.get_datetime_from_unix_time(current_file.get_modified_time(current_path)) var last_modified : Dictionary = OS.get_datetime_from_unix_time(current_file.get_modified_time(current_file_path))
VanillaEditor.update_lastmodified(last_modified,"save") current_editor.update_lastmodified(last_modified,"save")
OpenFileList.set_item_metadata(current_file_index,[current_content,last_modified,current_path])
if OpenFileList.get_item_text(current_file_index).ends_with("(*)"):
OpenFileList.set_item_text(current_file_index,OpenFileList.get_item_text(current_file_index).rstrip("(*)"))
open_in_inieditor(current_file_path) open_file_list.set_item_metadata(current_file_index,[current_editor])
if open_file_list.get_item_text(current_file_index).begins_with("(*)"):
open_file_list.set_item_text(current_file_index,open_file_list.get_item_text(current_file_index).lstrip("(*)"))
editing_file = false
update_list() update_list()
func clean_editor(): func clean_editor() -> void:
OpenFileName.clear() var nodes : Array = get_tree().get_nodes_in_group("vanilla_editor")
OpenFileList.clear()
VanillaEditor.clean_editor()
IniEditor.clean_editor()
func csv_preview(): for i in range(nodes.size()):
var preview = Preview.instance() var vanillaeditor : Node = nodes[i]
vanillaeditor.queue_free()
open_file_name.clear()
open_file_list.clear()
func csv_preview() -> void:
var preview : Control = Preview.new()
get_parent().get_parent().get_parent().add_child(preview) get_parent().get_parent().get_parent().add_child(preview)
preview.popup() preview.popup()
preview.window_title += " ("+current_file_path.get_file()+")" preview.window_title += " ("+current_file_path.get_file()+")"
var lines = VanillaEditor.get_node("TextEditor").get_line_count() var lines : int = current_editor.text_editor.get_line_count()
var rows = [] var rows : Array = Array()
for i in range(0,lines-1):
rows.append(VanillaEditor.get_node("TextEditor").get_line(i).rsplit(",",false)) for i in range(0, lines-1):
rows.append(current_editor.text_editor.get_line(i).rsplit(",",false))
preview.print_csv(rows) preview.print_csv(rows)
func bbcode_preview(): func bbcode_preview() -> void:
var preview = Preview.instance() var preview : Control = Preview.new()
get_parent().get_parent().get_parent().add_child(preview) get_parent().get_parent().get_parent().add_child(preview)
preview.popup() preview.popup()
preview.window_title += " ("+current_file_path.get_file()+")" preview.window_title += " ("+current_file_path.get_file()+")"
preview.print_bb(VanillaEditor.get_node("TextEditor").get_text()) preview.print_bb(current_editor.text_editor.get_text())
func markdown_preview(): func markdown_preview() -> void:
var preview = Preview.instance() var preview : Control = Preview.new()
get_parent().get_parent().get_parent().add_child(preview) get_parent().get_parent().get_parent().add_child(preview)
preview.popup() preview.popup()
preview.window_title += " ("+current_file_path.get_file()+")" preview.window_title += " ("+current_file_path.get_file()+")"
preview.print_markdown(VanillaEditor.get_node("TextEditor").get_text()) preview.print_markdown(current_editor.text_editor.get_text())
func html_preview(): func html_preview() -> void:
var preview = Preview.instance() var preview : Control = Preview.new()
get_parent().get_parent().get_parent().add_child(preview) get_parent().get_parent().get_parent().add_child(preview)
preview.popup() preview.popup()
preview.window_title += " ("+current_file_path.get_file()+")" preview.window_title += " ("+current_file_path.get_file()+")"
preview.print_html(VanillaEditor.get_node("TextEditor").get_text()) preview.print_html(current_editor.text_editor.get_text())
func xml_preview():
func _on_vanillaeditor_text_changed() -> void:
if not open_file_list.get_item_text(current_file_index).begins_with("(*)"):
open_file_list.set_item_text(current_file_index,"(*)"+open_file_list.get_item_text(current_file_index))
editing_file = true
func update_list() -> void:
file_list.invalidate()
func on_wrap_button(index:int) -> void:
match index:
0:
current_editor.set_wrap_enabled(false)
1:
current_editor.set_wrap_enabled(true)
func on_minimap_button(index:int) -> void:
match index:
0:
current_editor.draw_minimap(false)
1:
current_editor.draw_minimap(true)
func check_file_preview(file : String) -> void:
# check whether the opened file has a corresponding preview session for its extension
pass pass
func json_preview():
pass
func update_list(): func _on_ConfirmationDialog_confirmed() -> void:
FileList.invalidate() confirm_close(current_file_index)

View File

@ -1,19 +0,0 @@
tool
extends ToolButton
var fileditor_workspace
var fileditor
func _ready():
connect("pressed",self,"show_fileditor")
func show_fileditor():
fileditor_workspace.get_children()[0].hide()
fileditor_workspace.get_children()[1].hide()
fileditor_workspace.get_children()[2].hide()
fileditor_workspace.add_child(fileditor)
fileditor.show()
func load_values(fi, fe):
fileditor_workspace = fi
fileditor = fe

View File

@ -1,69 +0,0 @@
tool
extends VBoxContainer
onready var ReadOnly = $FileInfo/Readonly
onready var TextEditor = $TextEditor
onready var LastModified = $FileInfo/lastmodified
onready var FileList = get_parent().get_parent().get_parent().get_node("FileList")
onready var ClosingFile = get_parent().get_parent().get_parent().get_node("ConfirmationDialog")
onready var LastModifiedIcon = $FileInfo/lastmodified_icon
var current_path = ""
var current_filename = ""
var old_file_content = ""
var Preview = load("res://addons/file-editor/scenes/Preview.tscn")
signal text_changed()
func _ready():
ClosingFile.connect("confirmed",self,"queue_free")
ReadOnly.connect("toggled",self,"_on_Readonly_toggled")
ReadOnly.set("custom_icons/checked",IconLoader.load_icon_from_name("read"))
ReadOnly.set("custom_icons/unchecked",IconLoader.load_icon_from_name("edit"))
func clean_editor():
TextEditor.set_text("")
LastModifiedIcon.texture = IconLoader.load_icon_from_name("save")
LastModified.set_text("")
FileList.invalidate()
func new_file_open(file_content, last_modified):
TextEditor.set_text(file_content)
update_lastmodified(last_modified,"save")
FileList.invalidate()
func update_lastmodified(last_modified : Dictionary, icon : String):
LastModified.set_text(str(last_modified.hour)+":"+str(last_modified.minute)+" "+str(last_modified.day)+"/"+str(last_modified.month)+"/"+str(last_modified.year))
LastModifiedIcon.texture = IconLoader.load_icon_from_name(icon)
func new_file_create(file_name):
TextEditor.set_text("")
FileList.invalidate()
func close_editor():
if old_file_content != TextEditor.get_text():
ClosingFile.popup()
else:
queue_free()
func _on_Readonly_toggled(button_pressed):
if button_pressed:
ReadOnly.set_text("Read Only")
TextEditor.readonly = (true)
else:
ReadOnly.set_text("Can Edit")
TextEditor.readonly = (false)
func _on_TextEditor_text_changed():
LastModifiedIcon.texture = IconLoader.load_icon_from_name("saveas")
emit_signal("text_changed")

View File

@ -1,16 +1,13 @@
tool tool
extends Node extends Node
func _ready():
pass
func load_icon_from_name(icon_name : String) -> ImageTexture: func load_icon_from_name(icon_name : String) -> ImageTexture:
var file = File.new() var file : File = File.new()
var image = Image.new() var image : Image = Image.new()
var texture = ImageTexture.new() var texture : ImageTexture = ImageTexture.new()
file.open("res://addons/file-editor/icons.pngs/"+icon_name+".png.buttonicon", File.READ) file.open("res://addons/file-editor/icons.pngs/"+icon_name+".png.buttonicon", File.READ)
var buffer = file.get_buffer(file.get_len()) var buffer : PoolByteArray = file.get_buffer(file.get_len())
file.close() file.close()
image.load_png_from_buffer(buffer) image.load_png_from_buffer(buffer)

View File

@ -1,274 +0,0 @@
extends Control
tool
onready var Keys = $VBoxContainer/HSplitContainer/VBoxContainer2/keys
onready var Sections = $VBoxContainer/HSplitContainer/VBoxContainer/sections2
onready var BtnAddSection = $VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer2/btn_add_section
onready var BtnRemoveSection = $VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer2/btn_remove_section
onready var BtnAddKey = $VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3/btn_add_key
onready var BtnEditKey = $VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3/btn_edit_key
onready var BtnRemoveKey = $VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer3/btn_remove_key
onready var Section = $Section
onready var Key = $Key
var selected_key
var selected_section : int = -1
var root : TreeItem
var current_file_path : String = ""
signal update_file()
func _ready():
create_table_names()
connect_signals()
load_icons()
clean_editor()
# var metadata = [["name","Godot Engine"],["version","1.0.0"],["color","Light Blue"]]
# load_section("Engine", metadata)
func connect_signals():
Sections.connect("item_selected",self,"_on_section_selected")
Sections.connect("nothing_selected",self,"_on_nosection_selected")
BtnAddSection.connect("pressed",self,"_on_addsection_pressed")
BtnRemoveSection.connect("pressed",self,"_on_removesection_pressed")
Keys.connect("item_selected",self,"_on_key_selected")
Keys.connect("nothing_selected",self,"_on_nokey_selected")
BtnAddKey.connect("pressed",self,"_on_addkey_pressed")
BtnRemoveKey.connect("pressed",self,"_on_removekey_pressed")
BtnEditKey.connect("pressed",self,"_on_editkey_pressed")
func create_table_names():
create_root()
Keys.hide_root = true
Keys.set_column_titles_visible(true)
Keys.set_column_title(0,"Name")
Keys.set_column_title(1,"Value")
func load_icons():
$VBoxContainer/HSplitContainer/VBoxContainer/HBoxContainer/sections_icon.texture = IconLoader.load_icon_from_name("sections")
$VBoxContainer/HSplitContainer/VBoxContainer2/HBoxContainer2/keys_icon.texture = IconLoader.load_icon_from_name("keys")
BtnAddSection.icon = IconLoader.load_icon_from_name("add")
BtnAddSection.hint_tooltip = "Add a new Section"
BtnRemoveSection.icon = IconLoader.load_icon_from_name("delete")
BtnRemoveSection.hint_tooltip = "Remove selected Section"
BtnAddKey.icon = IconLoader.load_icon_from_name("add")
BtnAddKey.hint_tooltip = "Add a new Key"
BtnRemoveKey.icon = IconLoader.load_icon_from_name("delete")
BtnRemoveKey.hint_tooltip = "Remove selected Key"
BtnEditKey.icon = IconLoader.load_icon_from_name("edit_")
BtnEditKey.hint_tooltip = "Edit selected Key"
func _on_addsection_pressed():
Section.get_node("Container/section/_name").show()
Section.window_title = "Add a new Section"
if not Section.is_connected("confirmed",self,"new_section"):
Section.connect("confirmed",self,"new_section")
if Section.is_connected("confirmed",self,"remove_section"):
Section.disconnect("confirmed",self,"remove_section")
Section.popup()
func _on_removesection_pressed():
Section.get_node("Container").hide()
Section.window_title = "Remove selected Section"
Section.dialog_text = "Are you sure you want to remove this Section?"
if not Section.is_connected("confirmed",self,"remove_section"):
Section.connect("confirmed",self,"remove_section")
if Section.is_connected("confirmed",self,"new_section"):
Section.disconnect("confirmed",self,"new_section")
Section.popup()
func _on_addkey_pressed():
Key.get_node("data").show()
Key.get_node("data/HBoxContainer/name").editable = true
Key.get_node("data/HBoxContainer/name").set_text("")
Key.window_title = "Add a new Key"
Key.dialog_text = ""
if not Key.is_connected("confirmed",self,"new_key"):
Key.connect("confirmed",self,"new_key")
if Key.is_connected("confirmed",self,"edit_key"):
Key.disconnect("confirmed",self,"edit_key")
if Key.is_connected("confirmed",self,"remove_key"):
Key.disconnect("confirmed",self,"remove_key")
Key.popup()
func _on_removekey_pressed():
Key.get_node("data").hide()
Key.window_title = "Delete selected Key"
Key.dialog_text = "Are you sure you want to remove the selected Key?"
if not Key.is_connected("confirmed",self,"remove_key"):
Key.connect("confirmed",self,"remove_key")
if Key.is_connected("confirmed",self,"edit_key"):
Key.disconnect("confirmed",self,"edit_key")
if Key.is_connected("confirmed",self,"new_key"):
Key.disconnect("confirmed",self,"new_key")
Key.popup()
func _on_editkey_pressed():
Key.get_node("data").show()
Key.get_node("data/HBoxContainer/name").editable = false
Key.get_node("data/HBoxContainer/name").set_text(str(selected_key.get_text(0)))
Key.window_title = "Edit selected Key"
Key.dialog_text = ""
if not Key.is_connected("confirmed",self,"edit_key"):
Key.connect("confirmed",self,"edit_key")
if Key.is_connected("confirmed",self,"remove_key"):
Key.disconnect("confirmed",self,"remove_key")
if Key.is_connected("confirmed",self,"new_key"):
Key.disconnect("confirmed",self,"new_key")
Key.popup()
func clean_editor():
Keys.clear()
Sections.clear()
selected_section = -1
BtnAddKey.disabled = true
if current_file_path == "":
BtnAddSection.disabled = true
else:
BtnAddSection.disabled = false
BtnEditKey.disabled = true
BtnRemoveKey.disabled = true
BtnRemoveSection.disabled = true
create_root()
func open_file(filemap : Array):
clean_editor()
for section in filemap:
load_sections(section[0],section[1])
func new_section():
var file = ConfigFile.new()
file.load(current_file_path)
var section_name = str(Section.get_node("Container/section/_name").get_text())
var key_name = str(Section.get_node("Container/key/_name").get_text())
var key_value = Section.get_node("Container/value/_value").get_text()
if section_name and key_name and key_value:
file.set_value(section_name,key_name,key_value)
file.save(current_file_path)
load_sections(section_name,[[key_name,key_value]])
emit_signal("update_file")
else:
print("Section <",section_name,"> with Key name: <",key_name,"> and Key value: <",key_value,"> not valid.")
func remove_section():
var file = ConfigFile.new()
file.load(current_file_path)
var current_section = Sections.get_item_text(selected_section)
file.erase_section(current_section)
Sections.remove_item(selected_section)
file.save(current_file_path)
emit_signal("update_file")
func new_key():
var key_name = str(Key.get_node("data/HBoxContainer/name").get_text())
var key_value = Key.get_node("data/HBoxContainer2/value").get_text()
if key_name and key_value:
var file = ConfigFile.new()
file.load(current_file_path)
var current_section = Sections.get_item_text(selected_section)
file.set_value(current_section,key_name,key_value)
file.save(current_file_path)
load_keys_selected_section([[key_name,key_value]])
file.save(current_file_path)
emit_signal("update_file")
else:
print("Key name: <",key_name,"> with Key value: <",key_value,"> not valid.")
func remove_key():
var section = Sections.get_item_text(selected_section)
var sectionmetadata = Sections.get_item_metadata(selected_section)
for meta in sectionmetadata:
if meta.has(selected_key.get_text(0)):
sectionmetadata.erase(meta)
Sections.set_item_metadata(selected_section,sectionmetadata)
if Sections.get_item_metadata(selected_section) == []:
Sections.remove_item(selected_section)
var file = ConfigFile.new()
file.load(current_file_path)
file.set_value(section,selected_key.get_text(0),null)
file.save(current_file_path)
Keys.clear()
create_root()
load_keys_selected_section(sectionmetadata)
emit_signal("update_file")
func edit_key():
remove_key()
new_key()
# load a section with custom fields @section_name = name of section ; @section_metadata = keys of this section with keys' properties
func load_sections(section_name : String, section_metadata : Array):
Sections.add_item(section_name,IconLoader.load_icon_from_name("section"),true)
Sections.set_item_metadata(Sections.get_item_count()-1,section_metadata)
# load a key of a selected section to fill the "keys" list
func load_keys_selected_section(metadata : Array):
for key in metadata:
var key_item = Keys.create_item(root)
key_item.set_text(0,key[0])
key_item.set_text(1,key[1])
func _on_section_selected(index : int):
Keys.clear()
create_root()
BtnRemoveSection.disabled = false
BtnAddSection.disabled = false
BtnAddKey.disabled = false
BtnRemoveKey.disabled = true
BtnEditKey.disabled = true
selected_section = index
if Sections.get_item_metadata(index):
load_keys_selected_section(Sections.get_item_metadata(index))
func _on_key_selected():
selected_key = Keys.get_selected()
BtnRemoveKey.disabled = false
BtnEditKey.disabled = false
func _on_nosection_selected():
BtnRemoveKey.disabled = true
BtnAddKey.disabled = true
BtnEditKey.disabled = true
BtnRemoveSection.disabled = true
Keys.clear()
selected_section = -1
func _on_nokey_selected():
BtnRemoveKey.disabled = true
BtnEditKey.disabled = true
func create_root():
root = Keys.create_item()
root.set_text(0,"KEY_NAME")
root.set_text(1,"KEY_VALUE")

View File

@ -1,33 +1,71 @@
tool tool
extends Node extends Reference
const lastopenedfile_path : String = "res://addons/file-editor/lastopenedfiles.lastcfg" var editor_plugin : EditorPlugin = null
var editor_settings : EditorSettings = null
func _ready(): func store_opened_files(filecontainer : Control) -> void:
pass var arr : Array = Array()
func store_opened_files(filecontainer : Control): for child in range(filecontainer.get_item_count()):
var file = ConfigFile.new() var filepath : String = filecontainer.get_item_metadata(child)[0].current_path
file.load(lastopenedfile_path)
for child in range(0,filecontainer.get_item_count()):
var filepath = filecontainer.get_item_metadata(child)[2]
file.set_value("Opened",filepath.get_file(),filepath)
file.save(lastopenedfile_path) var a : Array = Array()
a.push_back(filepath.get_file())
a.push_back(filepath)
func remove_opened_file(index : int , filecontainer : Control): arr.push_back(a)
var file = ConfigFile.new()
file.load(lastopenedfile_path) editor_settings.set_project_metadata("file_editor", "files", arr)
var filepath = filecontainer.get_item_metadata(index)[2]
file.set_value("Opened",filepath.get_file(),null) func remove_opened_file(index : int , filecontainer : Control) -> void:
file.save(lastopenedfile_path) var filepath : String = filecontainer.get_item_metadata(index)[0].current_path
var f : String = filepath.get_file()
var arr : Array = editor_settings.get_project_metadata("file_editor", "files", Array())
for i in range(arr.size()):
var a : Array = arr[i]
if a[0] == f:
arr.remove(i)
break
editor_settings.set_project_metadata("file_editor", "files", arr)
var fonts_dict : Dictionary = editor_settings.get_project_metadata("file_editor", "file_fonts", Dictionary())
if fonts_dict.has(f):
fonts_dict.erase(f)
editor_settings.set_project_metadata("file_editor", "file_fonts", fonts_dict)
func load_opened_files() -> Array: func load_opened_files() -> Array:
var file = ConfigFile.new() var arr : Array = editor_settings.get_project_metadata("file_editor", "files", Array())
file.load(lastopenedfile_path) var fonts_dict : Dictionary = editor_settings.get_project_metadata("file_editor", "file_fonts", Dictionary())
var keys = [] var keys : Array = Array()
if file.has_section("Opened"): for i in range(arr.size()):
var openedfiles = file.get_section_keys("Opened") var a : Array = arr[i]
for openedfile in openedfiles:
keys.append([openedfile,file.get_value("Opened",openedfile)]) # creating and returning an Array with this format [1:file name, 2:file path, 3:file font]
var k : Array
k.push_back(a[0])
k.push_back(a[1])
if fonts_dict.has(a[0]):
k.push_back(fonts_dict[a[0]])
else:
k.push_back("null")
keys.append(k)
return keys return keys
func store_editor_fonts(file_name : String, font_path : String) -> void:
var fonts_dict : Dictionary = editor_settings.get_project_metadata("file_editor", "file_fonts", Dictionary())
fonts_dict[file_name] = font_path
editor_settings.set_project_metadata("file_editor", "file_fonts", fonts_dict)
func get_editor_font() -> String:
#var editor_plugin : EditorPlugin = EditorPlugin.new()
return editor_plugin.get_editor_interface().get_editor_settings().get_setting("interface/editor/code_font")

View File

@ -1,105 +1,160 @@
tool tool
extends WindowDialog extends WindowDialog
onready var TextPreview = $Container/TextPreview var text_preview : RichTextLabel = null
onready var TablePreview = $Container/TablePreview var table_preview : GridContainer = null
func _ready(): signal image_downloaded()
TextPreview.hide() signal image_loaded()
TablePreview.hide()
func print_preview(content : String): func _init() -> void:
TextPreview.append_bbcode(content) window_title = "File preview"
TextPreview.show() resizable = true
set_anchors_and_margins_preset(Control.PRESET_WIDE)
margin_left = 81
margin_top = 47
margin_right = -80
margin_bottom = -48
func print_bb(content : String): var vbc : VBoxContainer = VBoxContainer.new()
TextPreview.append_bbcode(content) vbc.set_anchors_and_margins_preset(Control.PRESET_WIDE)
TextPreview.show() add_child(vbc)
func print_markdown(content : String): text_preview = RichTextLabel.new()
var result = "" vbc.add_child(text_preview)
var bolded = [] text_preview.scroll_following = true
var italics = [] text_preview.bbcode_enabled = true
var striked = [] text_preview.size_flags_vertical = SIZE_EXPAND_FILL
var coded = [] text_preview.hide()
var linknames = []
var images = []
var links = []
var lists = []
var regex = RegEx.new() table_preview = GridContainer.new()
vbc.add_child(table_preview)
table_preview.columns = 3
table_preview.size_flags_horizontal = SIZE_EXPAND_FILL
table_preview.size_flags_vertical = SIZE_EXPAND_FILL
table_preview.hide()
connect("popup_hide", self, "_on_Preview_popup_hide")
func print_preview(content : String) -> void:
text_preview.append_bbcode(content)
text_preview.show()
func print_bb(content : String) -> void:
text_preview.append_bbcode(content)
text_preview.show()
func print_markdown(content : String) -> void:
var result : Array = Array()
var bolded : Array = Array()
var italics : Array = Array()
var striked : Array = Array()
var coded : Array = Array()
var linknames : Array = Array()
var images : Array = Array()
var links : Array = Array()
var lists : Array = Array()
var underlined : Array = Array()
var regex : RegEx = RegEx.new()
regex.compile('\\*\\*(?<boldtext>.*)\\*\\*') regex.compile('\\*\\*(?<boldtext>.*)\\*\\*')
result = regex.search_all(content) result = regex.search_all(content)
if result: for i in range(result.size()):
for res in result: var res : RegExMatch = result[i]
bolded.append(res.get_string("boldtext")) bolded.append(res.get_string("boldtext"))
regex.compile('\\_\\_(?<underlinetext>.*)\\_\\_')
result = regex.search_all(content)
for i in range(result.size()):
var res : RegExMatch = result[i]
underlined.append(res.get_string("underlinetext"))
regex.compile("\\*(?<italictext>.*)\\*") regex.compile("\\*(?<italictext>.*)\\*")
result = regex.search_all(content) result = regex.search_all(content)
if result: for i in range(result.size()):
for res in result: var res : RegExMatch = result[i]
italics.append(res.get_string("italictext")) italics.append(res.get_string("italictext"))
regex.compile("~~(?<strikedtext>.*)~~") regex.compile("~~(?<strikedtext>.*)~~")
result = regex.search_all(content) result = regex.search_all(content)
if result: for i in range(result.size()):
for res in result: var res : RegExMatch = result[i]
striked.append(res.get_string("strikedtext")) striked.append(res.get_string("strikedtext"))
regex.compile("`(?<coded>.*)`") regex.compile("`(?<coded>.*)`")
result = regex.search_all(content) result = regex.search_all(content)
if result: for i in range(result.size()):
for res in result: var res : RegExMatch = result[i]
coded.append(res.get_string("coded")) coded.append(res.get_string("coded"))
regex.compile("[+-*](?<element>\\s.*)") regex.compile("[+-*](?<element>\\s.*)")
result = regex.search_all(content) result = regex.search_all(content)
if result: for i in range(result.size()):
for res in result: var res : RegExMatch = result[i]
lists.append(res.get_string("element")) lists.append(res.get_string("element"))
regex.compile("(?<img>!\\[.*?\\))") regex.compile("(?<img>!\\[.*?\\))")
result = regex.search_all(content) result = regex.search_all(content)
if result: for i in range(result.size()):
for res in result: var res : RegExMatch = result[i]
images.append(res.get_string("img")) images.append(res.get_string("img"))
regex.compile("\\[(?<linkname>.*?)\\]|\\((?<link>[h\\.]\\S*?)\\)") regex.compile("\\[(?<linkname>.*?)\\]|\\((?<link>[h\\.]\\S*?)\\)")
result = regex.search_all(content) result = regex.search_all(content)
if result: for i in range(result.size()):
for res in result: var res : RegExMatch = result[i]
if res.get_string("link")!="": if res.get_string("link")!="":
links.append(res.get_string("link")) links.append(res.get_string("link"))
if res.get_string("linkname")!="": if res.get_string("linkname")!="":
linknames.append(res.get_string("linkname")) linknames.append(res.get_string("linkname"))
for bold in bolded: for i in range(bolded.size()):
var bold : String = bolded[i]
content = content.replace("**"+bold+"**","[b]"+bold+"[/b]") content = content.replace("**"+bold+"**","[b]"+bold+"[/b]")
for italic in italics:
for i in range(italics.size()):
var italic : String = italics[i]
content = content.replace("*"+italic+"*","[i]"+italic+"[/i]") content = content.replace("*"+italic+"*","[i]"+italic+"[/i]")
for strik in striked:
for i in range(striked.size()):
var strik : String = striked[i]
content = content.replace("~~"+strik+"~~","[s]"+strik+"[/s]") content = content.replace("~~"+strik+"~~","[s]"+strik+"[/s]")
for code in coded:
for i in range(underlined.size()):
var underline : String = underlined[i]
content = content.replace("__"+underline+"__","[u]"+underline+"[/u]")
for i in range(coded.size()):
var code : String = coded[i]
content = content.replace("`"+code+"`","[code]"+code+"[/code]") content = content.replace("`"+code+"`","[code]"+code+"[/code]")
for image in images:
for i in range(images.size()):
var image : String = images[i]
var substr = image.split("(") var substr = image.split("(")
var imglink = substr[1].rstrip(")") var imglink = substr[1].rstrip(")")
content = content.replace(image,"[img]"+imglink+"[/img]") content = content.replace(image,"[img]"+imglink+"[/img]")
for i in links.size(): for i in links.size():
content = content.replace("["+linknames[i]+"]("+links[i]+")","[url="+links[i]+"]"+linknames[i]+"[/url]") content = content.replace("["+linknames[i]+"]("+links[i]+")","[url="+links[i]+"]"+linknames[i]+"[/url]")
for element in lists:
for i in range(lists.size()):
var element : String = lists[i]
if content.find("- "+element): if content.find("- "+element):
content = content.replace("-"+element,"[indent]-"+element+"[/indent]") content = content.replace("-"+element,"[indent]-"+element+"[/indent]")
if content.find("+ "+element): if content.find("+ "+element):
content = content.replace("+"+element,"[indent]-"+element+"[/indent]") content = content.replace("+"+element,"[indent]-"+element+"[/indent]")
if content.find("* "+element): if content.find("* "+element):
content = content.replace("+"+element,"[indent]-"+element+"[/indent]") content = content.replace("+"+element,"[indent]-"+element+"[/indent]")
TextPreview.append_bbcode(content) text_preview.append_bbcode(content)
TextPreview.show() text_preview.show()
func print_html(content : String): func print_html(content : String) -> void:
content = content.replace("<i>","[i]") content = content.replace("<i>","[i]")
content = content.replace("</i>","[/i]") content = content.replace("</i>","[/i]")
content = content.replace("<b>","[b]") content = content.replace("<b>","[b]")
@ -120,12 +175,14 @@ func print_html(content : String):
content = content.replace("</pre>","[/code]") content = content.replace("</pre>","[/code]")
content = content.replace("<center>","[center]") content = content.replace("<center>","[center]")
content = content.replace("</center>","[/center]") content = content.replace("</center>","[/center]")
content = content.replace("<right>","[right]")
content = content.replace("</right>","[/right]")
TextPreview.append_bbcode(content) text_preview.append_bbcode(content)
TextPreview.show() text_preview.show()
func print_csv(rows : Array): func print_csv(rows : Array) -> void:
TablePreview.columns = rows[0].size() table_preview.columns = rows[0].size()
for item in rows: for item in rows:
for string in item: for string in item:
var label = Label.new() var label = Label.new()
@ -133,10 +190,9 @@ func print_csv(rows : Array):
label.set_h_size_flags(SIZE_EXPAND) label.set_h_size_flags(SIZE_EXPAND)
label.set_align(1) label.set_align(1)
label.set_valign(1) label.set_valign(1)
TablePreview.add_child(label) table_preview.add_child(label)
table_preview.show()
TablePreview.show() func _on_Preview_popup_hide() -> void:
func _on_Preview_popup_hide():
queue_free() queue_free()

View File

@ -0,0 +1,374 @@
tool
extends VBoxContainer
var LastOpenedFiles : Reference = null
var text_editor : TextEdit = null
var file_list : FileDialog = null
var search_box : HBoxContainer = null
var search_box_line_edit : LineEdit = null
var search_box_match_case_cb : CheckBox = null
var search_box_whole_words_cb : CheckBox = null
var search_box_close_button : Button = null
var replace_box : HBoxContainer = null
var replace_box_replace_le : LineEdit = null
var replace_box_with : LineEdit = null
var replace_box_button : Button = null
var replace_box_close : Button = null
var file_info_last_modified_icon : TextureRect = null
var file_info_last_modified : Label = null
var file_info_c_counter : Label = null
var file_info_read_only : CheckBox = null
var current_path : String = ""
var current_filename : String = ""
var search_flag : int = 0
signal text_changed()
func _init() -> void:
size_flags_vertical = SIZE_EXPAND_FILL
set_anchors_and_margins_preset(Control.PRESET_WIDE)
text_editor = TextEdit.new()
add_child(text_editor)
text_editor.highlight_current_line = true
text_editor.syntax_highlighting = true
text_editor.show_line_numbers = true
text_editor.breakpoint_gutter = true
text_editor.highlight_all_occurrences = true
text_editor.override_selected_font_color = true
text_editor.smooth_scrolling = true
text_editor.hiding_enabled = true
#todo look this up from the editor settings
#text_editor.caret_blink = true
#text_editor.caret_blink_speed = 1
text_editor.caret_moving_by_right_click = false
text_editor.minimap_draw = true
text_editor.size_flags_vertical = SIZE_EXPAND_FILL
text_editor.set("custom_colors/member_variable_color", Color(0.737255, 0.882353, 1))
text_editor.set("custom_colors/code_folding_color", Color(1, 1, 1, 0.701961))
text_editor.set("custom_colors/function_color", Color(0.341176, 0.701961, 1))
text_editor.set("custom_colors/safe_line_number_color", Color(0.8, 0.968627, 0.827451, 0.74902))
text_editor.set("custom_colors/symbol_color", Color(0.670588, 0.788235, 1))
text_editor.set("custom_colors/caret_background_color", Color(0, 0, 0))
text_editor.set("custom_colors/selection_color", Color(0.411765, 0.611765, 0.909804, 0.34902))
text_editor.set("custom_colors/caret_color", Color(1, 1, 1))
text_editor.set("custom_colors/breakpoint_color", Color(1, 0.470588, 0.419608))
text_editor.set("custom_colors/font_color_selected", Color(0, 0, 0))
text_editor.set("custom_colors/font_color", Color(1, 1, 1))
text_editor.set("custom_colors/completion_font_color", Color(1, 1, 1, 0.392157))
text_editor.set("custom_colors/completion_scroll_color", Color(1, 1, 1, 0.070588))
text_editor.set("custom_colors/background_color", Color(0.121569, 0.145098, 0.192157))
text_editor.set("custom_colors/number_color", Color(0.631373, 1, 0.882353))
text_editor.set("custom_colors/completion_background_color", Color(0.196078, 0.231373, 0.309804))
text_editor.set("custom_colors/brace_mismatch_color", Color(1, 0.470588, 0.419608))
text_editor.set("custom_colors/current_line_color", Color(1, 1, 1, 0.070588))
text_editor.set("custom_colors/completion_selected_color", Color(1, 1, 1, 0.070588))
text_editor.set("custom_colors/mark_color", Color(1, 0.470588, 0.419608, 0.301961))
text_editor.set("custom_colors/word_highlighted_color", Color(1, 1, 1, 0.392157))
text_editor.set("custom_colors/completion_existing_color", Color(1, 1, 1, 0.392157))
text_editor.set("custom_constants/completion_lines", 20)
text_editor.set("custom_constants/completion_max_width", 20)
text_editor.set("custom_constants/completion_scroll_width", 20)
#text_editor.owner = self
search_box = HBoxContainer.new()
add_child(search_box)
search_box.hide()
var selabel : Label = Label.new()
search_box.add_child(selabel)
selabel.text = "Search:"
search_box_line_edit = LineEdit.new()
search_box.add_child(search_box_line_edit)
search_box_line_edit.size_flags_horizontal = SIZE_EXPAND_FILL
search_box_line_edit.connect("text_changed", self, "_on_LineEdit_text_changed")
search_box_line_edit.connect("focus_entered", self, "_on_LineEdit_focus_entered")
search_box_match_case_cb = CheckBox.new()
search_box.add_child(search_box_match_case_cb)
search_box_match_case_cb.text = "Match Case"
search_box_match_case_cb.connect("toggled", self, "_on_matchcase_toggled")
search_box_whole_words_cb = CheckBox.new()
search_box.add_child(search_box_whole_words_cb)
search_box_whole_words_cb.text = "Whole Words"
search_box_whole_words_cb.connect("toggled", self, "_on_wholewords_toggled")
search_box_close_button = Button.new()
search_box.add_child(search_box_close_button)
search_box_close_button.text = "x"
search_box_close_button.flat = true
search_box_whole_words_cb.connect("pressed", self, "_on_close_pressed")
replace_box = HBoxContainer.new()
add_child(replace_box)
replace_box.hide()
var rblabel : Label = Label.new()
replace_box.add_child(rblabel)
rblabel.text = "Replace:"
replace_box_replace_le = LineEdit.new()
replace_box.add_child(replace_box_replace_le)
replace_box_replace_le.size_flags_horizontal = SIZE_EXPAND_FILL
var rb2label : Label = Label.new()
replace_box.add_child(rb2label)
rb2label.text = "With:"
replace_box_with = LineEdit.new()
replace_box.add_child(replace_box_with)
replace_box_with.size_flags_horizontal = SIZE_EXPAND_FILL
replace_box_button = Button.new()
replace_box.add_child(replace_box_button)
replace_box_button.text = "Replace"
replace_box_button.connect("pressed", self, "_on_Button_pressed")
replace_box_close = Button.new()
replace_box.add_child(replace_box_close)
replace_box_close.text = "x"
replace_box_close.flat = true
replace_box_button.connect("pressed", self, "_on_close2_pressed")
var file_info : HBoxContainer = HBoxContainer.new()
add_child(file_info)
file_info_last_modified_icon = TextureRect.new()
file_info.add_child(file_info_last_modified_icon)
file_info_last_modified_icon.stretch_mode = TextureRect.STRETCH_KEEP_CENTERED
var filabel : Label = Label.new()
file_info.add_child(filabel)
filabel.text = "Last modified time:"
file_info_last_modified = Label.new()
file_info.add_child(file_info_last_modified)
var fi2label : Label = Label.new()
file_info.add_child(fi2label)
fi2label.text = "Characters counter:"
fi2label.align = Label.ALIGN_RIGHT
fi2label.size_flags_horizontal = SIZE_EXPAND | SIZE_FILL | SIZE_SHRINK_CENTER | SIZE_SHRINK_END
file_info_c_counter = Label.new()
file_info.add_child(file_info_c_counter)
file_info_c_counter.size_flags_horizontal = SIZE_EXPAND
file_info_read_only = CheckBox.new()
file_info.add_child(file_info_read_only)
file_info_read_only.text = "Can Edit"
file_info_read_only.flat = true
file_info_read_only.size_flags_horizontal = SIZE_EXPAND | SIZE_SHRINK_END
func _ready() -> void:
text_editor.connect("text_changed", self, "_on_text_editor_text_changed")
#FileList = get_parent().get_parent().get_parent().get_parent().get_node("FileList")
file_info_read_only.connect("toggled",self,"_on_Readonly_toggled")
#file_info_read_only.set("custom_icons/checked",IconLoader.load_icon_from_name("read"))
#file_info_read_only.set("custom_icons/unchecked",IconLoader.load_icon_from_name("edit"))
add_to_group("vanilla_editor")
load_default_font()
func set_font(font_path : String) -> void:
var dynamic_font : DynamicFont = DynamicFont.new()
var dynamic_font_data : DynamicFontData = DynamicFontData.new()
dynamic_font_data.set_font_path(font_path)
dynamic_font.set_font_data(dynamic_font_data)
text_editor.set("custom_fonts/font",dynamic_font)
func load_default_font() -> void:
var default_font : String = LastOpenedFiles.get_editor_font()
if default_font != "":
set_font(default_font)
func set_wrap_enabled(enabled:bool) -> void:
text_editor.set_wrap_enabled(enabled)
text_editor.update()
func draw_minimap(value:bool) -> void:
text_editor.draw_minimap(value)
text_editor.update()
func color_region(filextension : String) -> void:
match(filextension):
"bbs":
text_editor.add_color_region("[b]","[/b]",Color8(153,153,255,255),false)
text_editor.add_color_region("[i]","[/i]",Color8(153,255,153,255),false)
text_editor.add_color_region("[s]","[/s]",Color8(255,153,153,255),false)
text_editor.add_color_region("[u]","[/u]",Color8(255,255,102,255),false)
text_editor.add_color_region("[url","[/url]",Color8(153,204,255,255),false)
text_editor.add_color_region("[code]","[/code]",Color8(192,192,192,255),false)
text_editor.add_color_region("[img]","[/img]",Color8(255,204,153,255),false)
text_editor.add_color_region("[center]","[/center]",Color8(175,238,238,255),false)
text_editor.add_color_region("[right]","[/right]",Color8(135,206,235,255),false)
"html":
text_editor.add_color_region("<b>","</b>",Color8(153,153,255,255),false)
text_editor.add_color_region("<i>","</i>",Color8(153,255,153,255),false)
text_editor.add_color_region("<del>","</del>",Color8(255,153,153,255),false)
text_editor.add_color_region("<ins>","</ins>",Color8(255,255,102,255),false)
text_editor.add_color_region("<a","</a>",Color8(153,204,255,255),false)
text_editor.add_color_region("<img","/>",Color8(255,204,153,255),true)
text_editor.add_color_region("<pre>","</pre>",Color8(192,192,192,255),false)
text_editor.add_color_region("<center>","</center>",Color8(175,238,238,255),false)
text_editor.add_color_region("<right>","</right>",Color8(135,206,235,255),false)
"md":
text_editor.add_color_region("***","***",Color8(126,186,181,255),false)
text_editor.add_color_region("**","**",Color8(153,153,255,255),false)
text_editor.add_color_region("*","*",Color8(153,255,153,255),false)
text_editor.add_color_region("+ ","",Color8(255,178,102,255),false)
text_editor.add_color_region("- ","",Color8(255,178,102,255),false)
text_editor.add_color_region("~~","~~",Color8(255,153,153,255),false)
text_editor.add_color_region("__","__",Color8(255,255,102,255),false)
text_editor.add_color_region("[",")",Color8(153,204,255,255),false)
text_editor.add_color_region("`","`",Color8(192,192,192,255),false)
text_editor.add_color_region('"*.','"',Color8(255,255,255,255),true)
text_editor.add_color_region("# ","",Color8(105,105,105,255),true)
text_editor.add_color_region("## ","",Color8(128,128,128,255),true)
text_editor.add_color_region("### ","",Color8(169,169,169,255),true)
text_editor.add_color_region("#### ","",Color8(192,192,192,255),true)
text_editor.add_color_region("##### ","",Color8(211,211,211,255),true)
text_editor.add_color_region("###### ","",Color8(255,255,255,255),true)
text_editor.add_color_region("> ","",Color8(172,138,79,255),true)
"cfg":
text_editor.add_color_region("[","]",Color8(153,204,255,255),false)
text_editor.add_color_region('"','"',Color8(255,255,102,255),false)
text_editor.add_color_region(';','',Color8(128,128,128,255),true)
"ini":
text_editor.add_color_region("[","]",Color8(153,204,255,255),false)
text_editor.add_color_region('"','"',Color8(255,255,102,255),false)
text_editor.add_color_region(';','',Color8(128,128,128,255),true)
_:
pass
func clean_editor() -> void:
text_editor.set_text("")
#file_info_last_modified_icon.texture = IconLoader.load_icon_from_name("save")
file_info_last_modified.set_text("")
file_list.invalidate()
current_filename = ""
current_path = ""
func new_file_open(file_content : String, last_modified : Dictionary, current_file_path : String) -> void:
current_path = current_file_path
current_filename = current_file_path.get_file()
color_region(current_filename.get_extension())
text_editor.set_text(file_content)
update_lastmodified(last_modified,"save")
file_list.invalidate()
count_characters()
func update_lastmodified(last_modified : Dictionary, icon : String) -> void:
file_info_last_modified.set_text(str(last_modified.hour)+":"+str(last_modified.minute)+" "+str(last_modified.day)+"/"+str(last_modified.month)+"/"+str(last_modified.year))
#file_info_last_modified_icon.texture = IconLoader.load_icon_from_name(icon)
func new_file_create(file_name : String) -> void:
text_editor.set_text("")
file_list.invalidate()
func _on_Readonly_toggled(button_pressed : bool) -> void:
if button_pressed:
file_info_read_only.set_text("Read Only")
text_editor.readonly = (true)
else:
file_info_read_only.set_text("Can Edit")
text_editor.readonly = (false)
func _on_text_editor_text_changed() -> void:
#file_info_last_modified_icon.texture = IconLoader.load_icon_from_name("saveas")
count_characters()
emit_signal("text_changed")
func count_characters() -> void:
var counted : int = 0
for line in range(text_editor.get_line_count()):
counted += text_editor.get_line(line).length()
file_info_c_counter.set_text(str(counted))
func _on_LineEdit_text_changed(new_text : String) -> void:
var linecount : int = text_editor.get_line_count()
if new_text != "":
var found : PoolIntArray
var find : bool = false
for line in range(linecount):
for column in range(text_editor.get_line(line).length()):
found = text_editor.search( new_text, search_flag, line , column )
if found.size():
if found[1] == line:
# if not find:
text_editor.select(line,found[0],found[1],found[0]+new_text.length())
# find = true
else:
text_editor.select(0,0,0,0)
else:
text_editor.select(0,0,0,0)
func _on_matchcase_toggled(button_pressed : bool) -> void:
if button_pressed:
search_flag = 1
else:
if search_box_whole_words_cb.is_pressed():
search_flag = 2
else:
search_flag = 0
_on_LineEdit_text_changed(search_box_line_edit.get_text())
func _on_wholewords_toggled(button_pressed : bool) -> void:
if button_pressed:
search_flag = 2
else:
if search_box_match_case_cb.is_pressed():
search_flag = 1
else:
search_flag = 0
_on_LineEdit_text_changed(search_box_line_edit.get_text())
func _on_close_pressed() -> void:
search_box.hide()
func open_search_box() -> void:
if search_box.visible:
search_box.hide()
else:
search_box.show()
search_box.get_node("LineEdit").grab_focus()
func _on_Button_pressed() -> void:
var linecount : int = text_editor.get_line_count()-1
var old_text : String = replace_box_replace_le.get_text()
var new_text : String = replace_box_with.get_text()
var text : String = text_editor.get_text()
text_editor.set_text(text.replace(old_text,new_text))
func open_replace_box() -> void:
if replace_box.visible:
replace_box.hide()
else:
replace_box.show()
replace_box.get_node("replace").grab_focus()
func _on_close2_pressed() -> void:
replace_box.hide()
func _on_LineEdit_focus_entered() -> void:
_on_LineEdit_text_changed(search_box_line_edit.get_text())

View File

@ -1,23 +1,22 @@
tool tool
extends EditorPlugin extends EditorPlugin
var doc = preload("../scenes/FileEditor.tscn").instance() var IconLoader = preload("res://addons/file-editor/scripts/IconLoader.gd").new()
var plugin_version var LastOpenedFiles = preload("res://addons/file-editor/scripts/LastOpenedFiles.gd").new()
var toolbar
var fileditorbutton var FileEditor
var IconLoader = preload("res://addons/file-editor/scripts/IconLoader.gd")
func _enter_tree(): func _enter_tree():
add_autoload_singleton("IconLoader","res://addons/file-editor/scripts/IconLoader.gd") LastOpenedFiles.editor_plugin = self
add_autoload_singleton("LastOpenedFiles","res://addons/file-editor/scripts/LastOpenedFiles.gd") LastOpenedFiles.editor_settings = get_editor_interface().get_editor_settings()
get_editor_interface().get_editor_viewport().add_child(doc)
doc.hide() FileEditor = preload("res://addons/file-editor/scripts/FileEditor.gd").new()
FileEditor.LastOpenedFiles = LastOpenedFiles
get_editor_interface().get_editor_viewport().add_child(FileEditor)
FileEditor.hide()
func _exit_tree(): func _exit_tree():
doc.clean_editor() get_editor_interface().get_editor_viewport().remove_child(FileEditor)
get_editor_interface().get_editor_viewport().remove_child(doc)
remove_autoload_singleton("IconLoader")
remove_autoload_singleton("LastOpenedFiles")
func has_main_screen(): func has_main_screen():
return true return true
@ -29,4 +28,4 @@ func get_plugin_icon():
return IconLoader.load_icon_from_name("file") return IconLoader.load_icon_from_name("file")
func make_visible(visible): func make_visible(visible):
doc.visible = visible FileEditor.visible = visible

28
project.pandemonium Normal file
View File

@ -0,0 +1,28 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=4
[application]
config/name="fileed"
config/icon="res://icon.png"
[editor_plugins]
enabled=PoolStringArray( "res://addons/file-editor/plugin.cfg" )
[physics]
common/enable_pause_aware_picking=true
[rendering]
vram_compression/import_etc=true
vram_compression/import_etc2=false
environment/default_environment="res://default_env.tres"