diff --git a/.gdlintrc b/.gdlintrc index 5a8fe03908c..d0a139df2e1 100644 --- a/.gdlintrc +++ b/.gdlintrc @@ -1,5 +1,7 @@ disable: - no-elif-return - no-else-return + - max-returns + - private-method-call max-file-lines: 2000 diff --git a/.github/workflows/dev-desktop-builds.yml b/.github/workflows/dev-desktop-builds.yml index c033d86004c..0efb22bd790 100644 --- a/.github/workflows/dev-desktop-builds.yml +++ b/.github/workflows/dev-desktop-builds.yml @@ -10,15 +10,12 @@ on: - "installer/*.pot" - "installer/po/*" - concurrency: group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-devdesktop cancel-in-progress: true env: - GODOT_VERSION: 3.5.2 - GODOT_VERSION_MAC: 3.5.2 - RASPBERRY_PI_BUILDS_VERSION: 1.15.0 + GODOT_VERSION: 4.1.1 EXPORT_NAME: Pixelorama jobs: @@ -26,7 +23,7 @@ jobs: name: Windows Export ๐Ÿ—” runs-on: ubuntu-latest container: - image: docker://barichello/godot-ci:3.5.2 + image: docker://barichello/godot-ci:4.1.1 steps: - name: Setup WINE and rcedit ๐Ÿท run: | @@ -35,19 +32,19 @@ jobs: wget https://github.com/electron/rcedit/releases/download/v1.1.1/rcedit-x64.exe mkdir -v -p ~/.local/share/rcedit mv rcedit-x64.exe ~/.local/share/rcedit - godot -q - echo 'export/windows/wine = "/usr/bin/wine"' >> ~/.config/godot/editor_settings-3.tres - echo 'export/windows/rcedit = "/github/home/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-3.tres + godot --headless --quit + echo 'export/windows/wine = "/usr/bin/wine"' >> ~/.config/godot/editor_settings-4.tres + echo 'export/windows/rcedit = "/github/home/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-4.tres - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 with: submodules: true - name: Setup ๐Ÿ’ป run: | - mkdir -v -p build/windows-64bit ~/.local/share/godot/templates - mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable + mkdir -v -p build/windows-64bit ~/.local/share/godot/export_templates + mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable - name: Windows Build ๐Ÿ”ง - run: godot -v --export "Windows Desktop 64-bit" ./build/windows-64bit/$EXPORT_NAME.exe + run: godot --headless -v --export-release "Windows Desktop 64-bit" ./build/windows-64bit/$EXPORT_NAME.exe - name: Copy pixelorama_data folder ๐Ÿ“ run: | cp -R ./pixelorama_data ./build/windows-64bit @@ -63,7 +60,7 @@ jobs: name: Linux Export ๐Ÿง runs-on: ubuntu-latest container: - image: docker://barichello/godot-ci:3.5.2 + image: docker://barichello/godot-ci:4.1.1 steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 @@ -71,42 +68,28 @@ jobs: submodules: true - name: Setup ๐Ÿ’ป run: | - mkdir -v -p build/linux-64bit build/linux-rpi4 ~/.local/share/godot/templates - mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable - - name: Download Unofficial Godot Raspberry Pi 4 Builds ๐Ÿ‡ - run: | - wget https://github.com/hiulit/Unofficial-Godot-Engine-Raspberry-Pi/releases/download/v${RASPBERRY_PI_BUILDS_VERSION}/godot_${GODOT_VERSION}-stable_rpi4.zip - unzip -a godot_${GODOT_VERSION}-stable_rpi4.zip + mkdir -v -p build/linux-64bit ~/.local/share/godot/export_templates + mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable - name: Linux Build ๐Ÿ”ง run: | - godot -v --export "Linux/X11 64-bit" ./build/linux-64bit/$EXPORT_NAME.x86_64 - godot -v --export "Raspberry Pi 4" ./build/linux-rpi4/$EXPORT_NAME.rpi4 + godot --headless -v --export-release "Linux/X11 64-bit" ./build/linux-64bit/$EXPORT_NAME.x86_64 - name: Give execute permission โ˜‘๏ธ run: | chmod +x ./build/linux-64bit/$EXPORT_NAME.x86_64 - chmod +x ./build/linux-rpi4/$EXPORT_NAME.rpi4 - name: Copy pixelorama_data folder ๐Ÿ“ run: | rm ./pixelorama_data/.gdignore cp -R ./pixelorama_data ./build/linux-64bit - cp -R ./pixelorama_data ./build/linux-rpi4 - name: Create tar.gz archive ๐Ÿ—œ๏ธ run: | cd build tar zcvf linux-64bit.tar.gz linux-64bit - tar zcvf linux-rpi4.tar.gz linux-rpi4 - name: Upload Artifact ๐Ÿš€ uses: actions/upload-artifact@v3 with: name: Linux-64bit path: ./build/linux-64bit.tar.gz retention-days: 14 - - name: Upload Raspberry Pi 4 Artifact ๐Ÿš€ - uses: actions/upload-artifact@v3 - with: - name: Linux-rpi4 - path: ./build/linux-rpi4.tar.gz - retention-days: 14 export-mac: name: Mac Export ๐ŸŽ @@ -118,25 +101,25 @@ jobs: submodules: true - name: Setup environment ๐Ÿ”ง run: | - export GODOT_VERSION=${GODOT_VERSION_MAC} + export GODOT_VERSION=${GODOT_VERSION} export EXPORT_NAME=Pixelorama - name: Download and extract export templates ๐Ÿ’พ run: | - mkdir -v -p ~/.local/share/godot/templates/${GODOT_VERSION_MAC}.stable - curl -O https://downloads.tuxfamily.org/godotengine/${GODOT_VERSION_MAC}/Godot_v${GODOT_VERSION_MAC}-stable_export_templates.tpz - unzip -a Godot_v${GODOT_VERSION_MAC}-stable_export_templates.tpz - mv ./templates/* ~/.local/share/godot/templates/${GODOT_VERSION_MAC}.stable + mkdir -v -p "/Users/runner/Library/Application Support/Godot/export_templates/${GODOT_VERSION}.stable" + curl -O https://downloads.tuxfamily.org/godotengine/${GODOT_VERSION}/Godot_v${GODOT_VERSION}-stable_export_templates.tpz + unzip -a Godot_v${GODOT_VERSION}-stable_export_templates.tpz + mv ./templates/* "/Users/runner/Library/Application Support/Godot/export_templates/${GODOT_VERSION}.stable" - name: Download Godot headless binary ๐Ÿค– run: | - wget https://github.com/huskeee/godot-headless-mac/releases/download/${GODOT_VERSION_MAC}-stable/Godot_v${GODOT_VERSION_MAC}-stable_mac_headless.64.zip - unzip -a Godot_v${GODOT_VERSION_MAC}-stable_mac_headless.64.zip + wget https://github.com/godotengine/godot/releases/download/${GODOT_VERSION}-stable/Godot_v${GODOT_VERSION}-stable_macos.universal.zip + unzip -a Godot_v${GODOT_VERSION}-stable_macos.universal.zip - name: Setup ๐Ÿ’ป run: mkdir -v -p ./build/mac - name: Mac Build ๐Ÿ”ง run: | - chown runner ./bin/Godot - chmod +x ./bin/Godot - ./bin/Godot -v --export "Mac OSX" ./build/mac/Pixelorama.zip + chown runner ./Godot.app/Contents/MacOS/Godot + chmod +x ./Godot.app/Contents/MacOS/Godot + ./Godot.app/Contents/MacOS/Godot --headless -v --export-release "macOS" ./build/mac/Pixelorama.zip - name: Make application executable ๐Ÿ”ง run: | unzip -a ./build/mac/Pixelorama.zip -d ./build/mac diff --git a/.github/workflows/dev-web.yml b/.github/workflows/dev-web.yml index 5240803ebec..66d6ecd0488 100644 --- a/.github/workflows/dev-web.yml +++ b/.github/workflows/dev-web.yml @@ -9,7 +9,7 @@ concurrency: cancel-in-progress: true env: - GODOT_VERSION: 3.5.2 + GODOT_VERSION: 4.1.1 EXPORT_NAME: Pixelorama jobs: @@ -17,7 +17,7 @@ jobs: name: Web Export ๐ŸŒ runs-on: ubuntu-latest container: - image: docker://barichello/godot-ci:3.5.2 + image: docker://barichello/godot-ci:4.1.1 steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 @@ -25,10 +25,10 @@ jobs: submodules: true - name: Setup ๐Ÿ’ป run: | - mkdir -v -p build/web ~/.local/share/godot/templates - mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable + mkdir -v -p build/web ~/.local/share/godot/export_templates + mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable - name: Web Build ๐Ÿ”ง - run: godot -v --export "HTML5" ./build/web/index.html + run: godot --headless -v --export-release "Web" ./build/web/index.html - name: Install rsync ๐Ÿ“š run: | apt-get update && apt-get install -y rsync diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7fb2626d8ae..7966f77ae51 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,11 +5,9 @@ on: branches: [ release ] env: - GODOT_VERSION: 3.5.2 - GODOT_VERSION_MAC: 3.5.2 - RASPBERRY_PI_BUILDS_VERSION: 1.15.0 + GODOT_VERSION: 4.1.1 EXPORT_NAME: Pixelorama - TAG: v0.11.2 + TAG: v1.0 BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} jobs: @@ -17,7 +15,7 @@ jobs: name: Windows Export ๐Ÿ—” runs-on: ubuntu-latest container: - image: docker://barichello/godot-ci:3.5.2 + image: docker://barichello/godot-ci:4.1.1 steps: - name: Setup WINE, rcedit and NSIS ๐Ÿท run: | @@ -26,21 +24,21 @@ jobs: wget https://github.com/electron/rcedit/releases/download/v1.1.1/rcedit-x64.exe mkdir -v -p ~/.local/share/rcedit mv rcedit-x64.exe ~/.local/share/rcedit - godot -q - echo 'export/windows/wine = "/usr/bin/wine"' >> ~/.config/godot/editor_settings-3.tres - echo 'export/windows/rcedit = "/github/home/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-3.tres + godot --headless --quit + echo 'export/windows/wine = "/usr/bin/wine"' >> ~/.config/godot/editor_settings-4.tres + echo 'export/windows/rcedit = "/github/home/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-4.tres - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 with: submodules: true - name: Setup ๐Ÿ’ป run: | - mkdir -v -p build/windows-64bit build/windows-32bit ~/.local/share/godot/templates - mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable + mkdir -v -p build/windows-64bit build/windows-32bit ~/.local/share/godot/export_templates + mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable - name: Windows Build ๐Ÿ”ง run: | - godot -v --export "Windows Desktop 64-bit" ./build/windows-64bit/$EXPORT_NAME.exe - godot -v --export "Windows Desktop 32-bit" ./build/windows-32bit/$EXPORT_NAME.exe + godot --headless -v --export-release "Windows Desktop 64-bit" ./build/windows-64bit/$EXPORT_NAME.exe + godot --headless -v --export-release "Windows Desktop 32-bit" ./build/windows-32bit/$EXPORT_NAME.exe - name: Copy pixelorama_data folder ๐Ÿ“ run: | rm ./pixelorama_data/.gdignore @@ -76,7 +74,7 @@ jobs: name: Linux Export ๐Ÿง runs-on: ubuntu-latest container: - image: docker://barichello/godot-ci:3.5.2 + image: docker://barichello/godot-ci:4.1.1 steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 @@ -84,39 +82,30 @@ jobs: submodules: true - name: Setup ๐Ÿ’ป run: | - mkdir -v -p build/linux-64bit build/linux-32bit build/linux-rpi4 ~/.local/share/godot/templates - mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable - - name: Download Unofficial Godot Raspberry Pi 4 Builds ๐Ÿ‡ - run: | - wget https://github.com/hiulit/Unofficial-Godot-Engine-Raspberry-Pi/releases/download/v${RASPBERRY_PI_BUILDS_VERSION}/godot_${GODOT_VERSION}-stable_rpi4.zip - unzip -a godot_${GODOT_VERSION}-stable_rpi4.zip + mkdir -v -p build/linux-64bit build/linux-32bit ~/.local/share/godot/export_templates + mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable - name: Linux Build ๐Ÿ”ง run: | - godot -v --export "Linux/X11 64-bit" ./build/linux-64bit/$EXPORT_NAME.x86_64 - godot -v --export "Linux/X11 32-bit" ./build/linux-32bit/$EXPORT_NAME.x86 - godot -v --export "Raspberry Pi 4" ./build/linux-rpi4/$EXPORT_NAME.rpi4 + godot --headless -v --export-release "Linux/X11 64-bit" ./build/linux-64bit/$EXPORT_NAME.x86_64 + godot --headless -v --export-release "Linux/X11 32-bit" ./build/linux-32bit/$EXPORT_NAME.x86 - name: Give execute permission โ˜‘๏ธ run: | chmod +x ./build/linux-64bit/$EXPORT_NAME.x86_64 chmod +x ./build/linux-32bit/$EXPORT_NAME.x86 - chmod +x ./build/linux-rpi4/$EXPORT_NAME.rpi4 - name: Copy pixelorama_data folder ๐Ÿ“ run: | rm ./pixelorama_data/.gdignore cp -R ./pixelorama_data ./build/linux-64bit cp -R ./pixelorama_data ./build/linux-32bit - cp -R ./pixelorama_data ./build/linux-rpi4 - name: Create tar.gz archive ๐Ÿ—œ๏ธ run: | cd build tar zcvf Pixelorama.Linux-64bit.tar.gz linux-64bit tar zcvf Pixelorama.Linux-32bit.tar.gz linux-32bit - tar zcvf Pixelorama.Linux-RPI4.tar.gz linux-rpi4 - name: Upload Release Assets to itch.io ๐ŸŽฎ run: | butler push ./build/Pixelorama.Linux-64bit.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-64 --userversion ${{env.TAG}} butler push ./build/Pixelorama.Linux-32bit.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-32 --userversion ${{env.TAG}} - butler push ./build/Pixelorama.Linux-RPI4.tar.gz ${{ secrets.ITCHIO_USERNAME }}/${{ secrets.ITCHIO_GAME }}:linux-rpi4 --userversion ${{env.TAG}} - name: Upload Release Asset ๐Ÿš€ uses: svenstaro/upload-release-action@v2 with: @@ -136,25 +125,25 @@ jobs: submodules: true - name: Setup environment ๐Ÿ”ง run: | - export GODOT_VERSION=${GODOT_VERSION_MAC} + export GODOT_VERSION=${GODOT_VERSION} export EXPORT_NAME=Pixelorama - name: Download and extract export templates ๐Ÿ’พ run: | - mkdir -v -p ~/.local/share/godot/templates/${GODOT_VERSION_MAC}.stable - curl -O https://downloads.tuxfamily.org/godotengine/${GODOT_VERSION_MAC}/Godot_v${GODOT_VERSION_MAC}-stable_export_templates.tpz - unzip -a Godot_v${GODOT_VERSION_MAC}-stable_export_templates.tpz - mv ./templates/* ~/.local/share/godot/templates/${GODOT_VERSION_MAC}.stable + mkdir -v -p "/Users/runner/Library/Application Support/Godot/export_templates/${GODOT_VERSION}.stable" + curl -O https://downloads.tuxfamily.org/godotengine/${GODOT_VERSION}/Godot_v${GODOT_VERSION}-stable_export_templates.tpz + unzip -a Godot_v${GODOT_VERSION}-stable_export_templates.tpz + mv ./templates/* "/Users/runner/Library/Application Support/Godot/export_templates/${GODOT_VERSION}.stable" - name: Download Godot headless binary ๐Ÿค– run: | - wget https://github.com/huskeee/godot-headless-mac/releases/download/${GODOT_VERSION_MAC}-stable/Godot_v${GODOT_VERSION_MAC}-stable_mac_headless.64.zip - unzip -a Godot_v${GODOT_VERSION_MAC}-stable_mac_headless.64.zip + wget https://github.com/godotengine/godot/releases/download/${GODOT_VERSION}-stable/Godot_v${GODOT_VERSION}-stable_macos.universal.zip + unzip -a Godot_v${GODOT_VERSION}-stable_macos.universal.zip - name: Setup ๐Ÿ’ป run: mkdir -v -p ./build/mac - name: Mac Build ๐Ÿ”ง run: | - chown runner ./bin/Godot - chmod +x ./bin/Godot - ./bin/Godot -v --export "Mac OSX" ./build/mac/Pixelorama.zip + chown runner ./Godot.app/Contents/MacOS/Godot + chmod +x ./Godot.app/Contents/MacOS/Godot + ./Godot.app/Contents/MacOS/Godot --headless -v --export-release "macOS" ./build/mac/Pixelorama.zip - name: Make application executable ๐Ÿ”ง run: | unzip -a ./build/mac/Pixelorama.zip -d ./build/mac @@ -189,7 +178,7 @@ jobs: name: Web Export ๐ŸŒ runs-on: ubuntu-latest container: - image: docker://barichello/godot-ci:3.5.2 + image: docker://barichello/godot-ci:4.1.1 steps: - name: Checkout ๐Ÿ›Ž๏ธ uses: actions/checkout@v3 @@ -200,7 +189,7 @@ jobs: mkdir -v -p build/web ~/.local/share/godot/templates mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable - name: Web Build ๐Ÿ”ง - run: godot -v --export "HTML5" ./build/web/index.html + run: godot --headless -v --export-release "Web" ./build/web/index.html - name: Install rsync ๐Ÿ“š run: | apt-get update && apt-get install -y rsync diff --git a/.github/workflows/static-checks.yml b/.github/workflows/static-checks.yml index 2b0bde8da65..5869284faef 100644 --- a/.github/workflows/static-checks.yml +++ b/.github/workflows/static-checks.yml @@ -20,7 +20,7 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Install gdtoolkit - run: pip3 install "gdtoolkit==3.*" + run: pip3 install "gdtoolkit==4.*" - name: Formatting checks run: gdformat --diff . - name: Linting checks diff --git a/CHANGELOG.md b/CHANGELOG.md index 57775ca748f..69dfb5f213e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). All the dates are in YYYY-MM-DD format.

+## [v1.0] - Unreleased + +Built using Godot 4.1.1 + +### Added +- Added some missing shortcuts for buttons. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900) +- The brush increment/decrement shortcuts can now be changed. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900) +- 3D layers now support torus shapes. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900) +- Image effect animation now supports the tweening transition method of spring. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900) + +### Changed +- Every shader-based image effect is automatically working without the need to change renderers, and they all work now on the Web version. This comes at the cost of less compatibility, as the desktop version now requires OpenGL 3.3 minimum instead of 2.1, and the Web version requires WebGL 2 instead of WebGL 1. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900) + +### Fixed +- Performance when drawing and doing operations such as bucket area fill should be better now. [#900](https://github.com/Orama-Interactive/Pixelorama/pull/900) +- Dividing by zero in value sliders and spinboxes no longer crashes the program. + ## [v0.11.2] - 2023-08-31 This update has been brought to you by the contributions of: [@Lsbt1](https://github.com/Lsbt1), Fayez Akhtar ([@Variable-ind](https://github.com/Variable-ind)) diff --git a/README.md b/README.md index d67038fc5b4..7c9d34b6f75 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ You can find Online Documentation for Pixelorama here: https://orama-interactive It's still work in progress so there are some pages missing. If you want to contribute, you can do so in [Pixelorama-Docs' GitHub Repository](https://github.com/Orama-Interactive/Pixelorama-Docs). ## Cloning Instructions -Pixelorama uses Godot 3.5, so you will need to have it in order to run the project. Older versions may not work. +Pixelorama uses Godot 4.1, so you will need to have it in order to run the project. Older versions will not work. As of right now, most of the code is written using GDScript, so the mono version of Godot is not required, but Pixelorama should also work with it. ## Current features: diff --git a/Translations/Translations.pot b/Translations/Translations.pot index ec9d38b1fe9..e9040d48fcb 100644 --- a/Translations/Translations.pot +++ b/Translations/Translations.pot @@ -1655,27 +1655,21 @@ msgid "Current frame as spritesheet" msgstr "" msgid "Jump to the first frame\n" -"(%s)" msgstr "" msgid "Go to the previous frame\n" -"(%s)" msgstr "" msgid "Play the animation backwards (from end to beginning)\n" -"(%s)" msgstr "" msgid "Play the animation forward (from beginning to end)\n" -"(%s)" msgstr "" msgid "Go to the next frame\n" -"(%s)" msgstr "" msgid "Jump to the last frame\n" -"(%s)" msgstr "" msgid "Onion Skinning settings" @@ -2614,6 +2608,10 @@ msgstr "" msgid "Backing out at ends" msgstr "" +#. Found under certain image effects that support properties that can be animated. A type of interpolation. +msgid "Spring towards the end" +msgstr "" + msgid "Silhouette" msgstr "" diff --git a/addons/README.md b/addons/README.md index 6643f79bcdf..f73373f3988 100644 --- a/addons/README.md +++ b/addons/README.md @@ -3,19 +3,19 @@ ## aimgio - Upstream: https://gitlab.com/20kdc/20kdc_godot_addons -- Version: Presently git commit b6a1411758c856ad543f4f661ca4105aa7c0ab6d -- License: [Unlicense](https://gitlab.com/20kdc/20kdc_godot_addons/-/blob/b6a1411758c856ad543f4f661ca4105aa7c0ab6d/addons/aimg_io/COPYING.txt) +- Version: ba00188e9da1ae229181f106788fcb72ccdd85fa +- License: [Unlicense](https://gitlab.com/20kdc/20kdc_godot_addons/-/blob/master/godot4/addons/aimg_io/COPYING.txt) ## Keychain - Upstream: https://github.com/Orama-Interactive/Keychain -- Version: Based on git commit 22539c2b9b9e781c0cd54f32d92c77b6f36837e0 with slight modifications in Keychain.gd and ShortcutEdit.tscn. +- Version: 4a08d6b380929031b2c9202811ae0a65d850a5ac - License: [MIT](https://github.com/Orama-Interactive/Keychain/blob/main/LICENSE) ## gdgifexporter - Upstream: https://github.com/jegor377/godot-gdgifexporter -- Version: custom +- Version: c368952a97bbbbcfa491358a61043be7009536a6 - License: [MIT](https://github.com/jegor377/godot-gdgifexporter/blob/master/LICENSE) Files extracted from source: @@ -24,13 +24,13 @@ Files extracted from source: ## godot-dockable-container - Upstream: https://github.com/gilzoide/godot-dockable-container -- Version: Based on git commit e5df60ed1d53246e03dba36053ff009846ba5174 with a modification on dockable_container.gd (lines 187-191). +- Version: 9a93231d7f449aad039b28ff05bc1ef40a9956ce - License: [CC0-1.0](https://github.com/gilzoide/godot-dockable-container/blob/main/LICENSE) ## SmartSlicer - Upstream: https://github.com/Variable-Interactive/SmartSlicer -- Version: Based on git commit 2804e6109f9667022c66522ce88a99a56fd67ca8 with a modification on SmartSlicePreview.gd (lines 31-32). Only the contents of addons folder are used and the script SmartSlicePreview.gd is moved to res://src/UI/Dialogs/HelperScripts/ for better organization +- Version: Based on git commit 5d65d2ff556fed878099c96546ceb307aa3bc030 with a modification on SmartSlicePreview.gd (lines 31-32). Only the contents of addons folder are used and the script SmartSlicePreview.gd is moved to res://src/UI/Dialogs/HelperScripts/ for better organization - License: [MIT](https://github.com/Variable-Interactive/SmartSlicer/blob/main/LICENSE) diff --git a/addons/SmartSlicer/Classes/RegionUnpacker.gd b/addons/SmartSlicer/Classes/RegionUnpacker.gd index 11f01f74724..26254123647 100644 --- a/addons/SmartSlicer/Classes/RegionUnpacker.gd +++ b/addons/SmartSlicer/Classes/RegionUnpacker.gd @@ -1,19 +1,42 @@ class_name RegionUnpacker -extends Reference +extends RefCounted # THIS CLASS TAKES INSPIRATION FROM PIXELORAMA'S FLOOD FILL # AND HAS BEEN MODIFIED FOR OPTIMIZATION var slice_thread := Thread.new() -var _include_boundary_threshold: int # the size of rect below which merging accounts for boundaty -var _merge_dist: int # after crossing threshold the smaller image will merge with larger image -# if it is within the _merge_dist +var _include_boundary_threshold: int ## ฮคhe size of rect below which merging accounts for boundary +## After crossing threshold the smaller image will merge with larger image +## if it is within the _merge_dist +var _merge_dist: int -# working array used as buffer for segments while flooding -var _allegro_flood_segments: Array -# results array per image while flooding -var _allegro_image_segments: Array +## Working array used as buffer for segments while flooding +var _allegro_flood_segments: Array[Segment] +## Results array per image while flooding +var _allegro_image_segments: Array[Segment] + + +class RectData: + var rects: Array[Rect2i] + var frame_size: Vector2i + + func _init(_rects: Array[Rect2i], _frame_size: Vector2i): + rects = _rects + frame_size = _frame_size + + +class Segment: + var flooding := false + var todo_above := false + var todo_below := false + var left_position := -5 + var right_position := -5 + var y := 0 + var next := 0 + + func _init(_y: int) -> void: + y = _y func _init(threshold: int, merge_dist: int) -> void: @@ -21,63 +44,58 @@ func _init(threshold: int, merge_dist: int) -> void: _merge_dist = merge_dist -func get_used_rects(image: Image) -> Dictionary: - if OS.get_name() == "HTML5": +func get_used_rects(image: Image) -> RectData: + if ProjectSettings.get_setting("rendering/driver/threads/thread_model") != 2: + # Single-threaded mode return get_rects(image) - else: - # If Thread model is set to "Multi-Threaded" in project settings>threads>thread model - if slice_thread.is_active(): + else: # Multi-threaded mode + if slice_thread.is_started(): slice_thread.wait_to_finish() - var error = slice_thread.start(self, "get_rects", image) + var error := slice_thread.start(get_rects.bind(image)) if error == OK: return slice_thread.wait_to_finish() else: return get_rects(image) - # If Thread model is set to "Single-Safe" in project settings>threads>thread model then - # comment the above code and uncomment below - #return get_rects({"image": image}) -func get_rects(image: Image) -> Dictionary: - # make a smaller image to make the loop shorter - var used_rect = image.get_used_rect() - if used_rect.size == Vector2.ZERO: +func get_rects(image: Image) -> RectData: + # Make a smaller image to make the loop shorter + var used_rect := image.get_used_rect() + if used_rect.size == Vector2i.ZERO: return clean_rects([]) - var test_image = image.get_rect(used_rect) - # prepare a bitmap to keep track of previous places + var test_image := image.get_region(used_rect) + # Prepare a bitmap to keep track of previous places var scanned_area := BitMap.new() scanned_area.create(test_image.get_size()) - test_image.lock() # Scan the image - var rects = [] - var frame_size = Vector2.ZERO + var rects: Array[Rect2i] = [] + var frame_size := Vector2i.ZERO for y in test_image.get_size().y: for x in test_image.get_size().x: - var position = Vector2(x, y) + var position := Vector2i(x, y) if test_image.get_pixelv(position).a > 0: # used portion of image detected - if !scanned_area.get_bit(position): + if !scanned_area.get_bitv(position): var rect := _estimate_rect(test_image, position) scanned_area.set_bit_rect(rect, true) rect.position += used_rect.position rects.append(rect) - test_image.unlock() - var rects_info = clean_rects(rects) - rects_info["rects"].sort_custom(self, "sort_rects") + var rects_info := clean_rects(rects) + rects_info.rects.sort_custom(sort_rects) return rects_info -func clean_rects(rects: Array) -> Dictionary: - var frame_size = Vector2.ZERO +func clean_rects(rects: Array[Rect2i]) -> RectData: + var frame_size := Vector2i.ZERO for i in rects.size(): - var target: Rect2 = rects.pop_front() - var test_rect = target + var target: Rect2i = rects.pop_front() + var test_rect := target if ( target.size.x < _include_boundary_threshold or target.size.y < _include_boundary_threshold ): - test_rect.size += Vector2(_merge_dist, _merge_dist) - test_rect.position -= Vector2(_merge_dist, _merge_dist) / 2 - var merged = false + test_rect.size += Vector2i(_merge_dist, _merge_dist) + test_rect.position -= Vector2i(_merge_dist, _merge_dist) / 2 + var merged := false for rect_i in rects.size(): if test_rect.intersects(rects[rect_i]): rects[rect_i] = target.merge(rects[rect_i]) @@ -91,61 +109,51 @@ func clean_rects(rects: Array) -> Dictionary: frame_size.x = target.size.x if target.size.y > frame_size.y: frame_size.y = target.size.y - return {"rects": rects, "frame_size": frame_size} + return RectData.new(rects, frame_size) -func sort_rects(rect_a: Rect2, rect_b: Rect2) -> bool: +func sort_rects(rect_a: Rect2i, rect_b: Rect2i) -> bool: # After many failed attempts, this version works for some reason (it's best not to disturb it) if rect_a.end.y < rect_b.position.y: return true if rect_a.position.x < rect_b.position.x: # if both lie in the same row - var start = rect_a.position - var size = Vector2(rect_b.end.x, rect_a.end.y) - if Rect2(start, size).intersects(rect_b): + var start := rect_a.position + var size := Vector2i(rect_b.end.x, rect_a.end.y) + if Rect2i(start, size).intersects(rect_b): return true return false -func _estimate_rect(image: Image, position: Vector2) -> Rect2: +func _estimate_rect(image: Image, position: Vector2) -> Rect2i: var cel_image := Image.new() cel_image.copy_from(image) - cel_image.lock() - var small_rect: Rect2 = _flood_fill(position, cel_image) - cel_image.unlock() + var small_rect := _flood_fill(position, cel_image) return small_rect -# Add a new segment to the array -func _add_new_segment(y: int = 0) -> void: - var segment = {} - segment.flooding = false - segment.todo_above = false - segment.todo_below = false - segment.left_position = -5 # anything less than -1 is ok - segment.right_position = -5 - segment.y = y - segment.next = 0 - _allegro_flood_segments.append(segment) +## Add a new segment to the array +func _add_new_segment(y := 0) -> void: + _allegro_flood_segments.append(Segment.new(y)) -# fill an horizontal segment around the specified position, and adds it to the -# list of segments filled. Returns the first x coordinate after the part of the -# line that has been filled. -func _flood_line_around_point(position: Vector2, image: Image) -> int: - # this method is called by `_flood_fill` after the required data structures - # have been initialized +## Fill an horizontal segment around the specified position, and adds it to the +## list of segments filled. Returns the first x coordinate after the part of the +## line that has been filled. +## this method is called by `_flood_fill` after the required data structures +## have been initialized +func _flood_line_around_point(position: Vector2i, image: Image) -> int: if not image.get_pixelv(position).a > 0: - return int(position.x) + 1 - var west: Vector2 = position - var east: Vector2 = position + return position.x + 1 + var west := position + var east := position while west.x >= 0 && image.get_pixelv(west).a > 0: - west += Vector2.LEFT + west += Vector2i.LEFT while east.x < image.get_width() && image.get_pixelv(east).a > 0: - east += Vector2.RIGHT + east += Vector2i.RIGHT # Make a note of the stuff we processed - var c = int(position.y) - var segment = _allegro_flood_segments[c] + var c := position.y + var segment := _allegro_flood_segments[c] # we may have already processed some segments on this y coordinate if segment.flooding: while segment.next > 0: @@ -154,7 +162,7 @@ func _flood_line_around_point(position: Vector2, image: Image) -> int: # found last current segment on this line c = _allegro_flood_segments.size() segment.next = c - _add_new_segment(int(position.y)) + _add_new_segment(position.y) segment = _allegro_flood_segments[c] # set the values for the current segment segment.flooding = true @@ -177,28 +185,28 @@ func _flood_line_around_point(position: Vector2, image: Image) -> int: _allegro_image_segments.append(segment) # we know the point just east of the segment is not part of a segment that should be # processed, else it would be part of this segment - return int(east.x) + 1 + return east.x + 1 func _check_flooded_segment(y: int, left: int, right: int, image: Image) -> bool: - var ret = false - var c: int = 0 + var ret := false + var c := 0 while left <= right: c = y while true: - var segment = _allegro_flood_segments[c] + var segment := _allegro_flood_segments[c] if left >= segment.left_position and left <= segment.right_position: left = segment.right_position + 2 break c = segment.next if c == 0: # couldn't find a valid segment, so we draw a new one - left = _flood_line_around_point(Vector2(left, y), image) + left = _flood_line_around_point(Vector2i(left, y), image) ret = true break return ret -func _flood_fill(position: Vector2, image: Image) -> Rect2: +func _flood_fill(position: Vector2i, image: Image) -> Rect2i: # implements the floodfill routine by Shawn Hargreaves # from https://www1.udel.edu/CIS/software/dist/allegro-4.2.1/src/flood.c # init flood data structures @@ -208,17 +216,15 @@ func _flood_fill(position: Vector2, image: Image) -> Rect2: # now actually color the image: since we have already checked a few things for the points # we'll process here, we're going to skip a bunch of safety checks to speed things up. - var final_image = Image.new() + var final_image := Image.new() final_image.copy_from(image) - final_image.fill(Color.transparent) - final_image.lock() + final_image.fill(Color.TRANSPARENT) _select_segments(final_image) - final_image.unlock() return final_image.get_used_rect() -func _compute_segments_for_image(position: Vector2, image: Image) -> void: +func _compute_segments_for_image(position: Vector2i, image: Image) -> void: # initially allocate at least 1 segment per line of image for j in image.get_height(): _add_new_segment(j) @@ -228,9 +234,9 @@ func _compute_segments_for_image(position: Vector2, image: Image) -> void: var done := false while not done: done = true - var max_index = _allegro_flood_segments.size() + var max_index := _allegro_flood_segments.size() for c in max_index: - var p = _allegro_flood_segments[c] + var p := _allegro_flood_segments[c] if p.todo_below: # check below the segment? p.todo_below = false if _check_flooded_segment(p.y + 1, p.left_position, p.right_position, image): @@ -244,8 +250,8 @@ func _compute_segments_for_image(position: Vector2, image: Image) -> void: func _select_segments(map: Image) -> void: # short circuit for flat colors for c in _allegro_image_segments.size(): - var p = _allegro_image_segments[c] - var rect = Rect2() - rect.position = Vector2(p.left_position, p.y) - rect.end = Vector2(p.right_position + 1, p.y + 1) - map.fill_rect(rect, Color.white) + var p := _allegro_image_segments[c] + var rect := Rect2i() + rect.position = Vector2i(p.left_position, p.y) + rect.end = Vector2i(p.right_position + 1, p.y + 1) + map.fill_rect(rect, Color.WHITE) diff --git a/addons/aimg_io/apng_exporter.gd b/addons/aimg_io/apng_exporter.gd index 060ee3603e8..c38348820fe 100644 --- a/addons/aimg_io/apng_exporter.gd +++ b/addons/aimg_io/apng_exporter.gd @@ -13,7 +13,7 @@ func export_animation( progress_report_obj: Object, progress_report_method, progress_report_args -) -> PoolByteArray: +) -> PackedByteArray: var frame_count := len(frames) var result := AImgIOAPNGStream.new() # Magic number @@ -65,7 +65,7 @@ func export_animation( # setup chunk interior... var ichk := result.start_chunk() write_padded_lines(ichk, image) - chunk.put_data(ichk.data_array.compress(File.COMPRESSION_DEFLATE)) + chunk.put_data(ichk.data_array.compress(FileAccess.COMPRESSION_DEFLATE)) # done with chunk interior if i == 0: result.write_chunk("IDAT", chunk.data_array) @@ -74,7 +74,7 @@ func export_animation( # Done with this frame! progress_report_obj.callv(progress_report_method, progress_report_args) # Final chunk. - result.write_chunk("IEND", PoolByteArray()) + result.write_chunk("IEND", PackedByteArray()) return result.finish() @@ -88,7 +88,7 @@ func write_delay(sp: StreamPeer, duration: float, fps_hint: float): # Precision is increased so we catch more complex cases. # But you should always get perfection for integers. var den := min(32767, max(fps_hint, 1)) - var num := max(duration, 0) * den + var num: float = max(duration, 0) * den # If the FPS hint brings us out of range before we start, try some obvious integers var fallback := 10000 while num > 32767: @@ -123,7 +123,7 @@ func write_padded_lines(sp: StreamPeer, img: Image): var base := 0 while y < h: var nl := base + (w * 4) - var line := data.subarray(base, nl - 1) + var line := data.slice(base, nl) sp.put_8(0) sp.put_data(line) y += 1 diff --git a/addons/aimg_io/apng_import_plugin.gd b/addons/aimg_io/apng_import_plugin.gd index e58974a82d5..33a27702eac 100644 --- a/addons/aimg_io/apng_import_plugin.gd +++ b/addons/aimg_io/apng_import_plugin.gd @@ -1,80 +1,60 @@ -tool +@tool class_name AImgIOAPNGImportPlugin extends EditorImportPlugin -func get_importer_name() -> String: +func _get_importer_name() -> String: return "aimgio.apng_animatedtexture" -func get_visible_name() -> String: +func _get_visible_name() -> String: return "APNG as AnimatedTexture" -func get_save_extension() -> String: +func _get_save_extension() -> String: return "res" -func get_resource_type() -> String: +func _get_resource_type() -> String: return "AnimatedTexture" -func get_recognized_extensions() -> Array: - return ["png"] +func _get_recognized_extensions() -> PackedStringArray: + return PackedStringArray(["png"]) -func get_preset_count(): +func _get_preset_count(): return 1 -func get_preset_name(_i): +func _get_preset_name(_i): return "Default" -func get_import_options(_i): - # GDLint workaround - it really does not want this string to exist due to length. - var hint = "Mipmaps,Repeat,Filter,Anisotropic Filter,Convert To Linear,Mirrored Repeat" - return [ - { - "name": "image_texture_storage", - "default_value": 2, - "property_hint": PROPERTY_HINT_ENUM_SUGGESTION, - "hint_string": "Raw,Lossy,Lossless" - }, - {"name": "image_texture_lossy_quality", "default_value": 0.7}, - { - "name": "texture_flags", - "default_value": 7, - "property_hint": PROPERTY_HINT_FLAGS, - "hint_string": hint - }, - # We don't know if Godot will change things somehow. - {"name": "texture_flags_add", "default_value": 0} - ] - - -func get_option_visibility(_option, _options): +func _get_import_options(_path: String, _i: int) -> Array[Dictionary]: + return [] + + +func _get_import_order(): + return 0 + + +func _get_option_visibility(_path: String, _option, _options): return true -func import(load_path: String, save_path: String, options, _platform_variants, _gen_files): +func _import(load_path: String, save_path: String, _options, _platform_variants, _gen_files): var res := AImgIOAPNGImporter.load_from_file(load_path) if res[0] != null: push_error("AImgIOPNGImporter: " + res[0]) return ERR_FILE_UNRECOGNIZED var frames: Array = res[1] var root: AnimatedTexture = AnimatedTexture.new() - var flags: int = options["texture_flags"] - flags |= options["texture_flags_add"] - root.flags = flags root.frames = len(frames) - root.fps = 1 for i in range(len(frames)): var f: AImgIOFrame = frames[i] - root.set_frame_delay(i, f.duration - 1.0) + root.set_frame_duration(i, f.duration) var tx := ImageTexture.new() - tx.storage = options["image_texture_storage"] - tx.lossy_quality = options["image_texture_lossy_quality"] - tx.create_from_image(f.content, flags) + tx.create_from_image(f.content) root.set_frame_texture(i, tx) - return ResourceSaver.save(save_path + ".res", root) + return ResourceSaver.save(root, save_path + ".res") diff --git a/addons/aimg_io/apng_importer.gd b/addons/aimg_io/apng_importer.gd index 481603e7d36..96bf301e179 100644 --- a/addons/aimg_io/apng_importer.gd +++ b/addons/aimg_io/apng_importer.gd @@ -1,6 +1,6 @@ -tool +@tool class_name AImgIOAPNGImporter -extends Reference +extends RefCounted # Will NOT import regular, unanimated PNGs - use Image.load_png_from_buffer # This is because we don't want to import the default image as a frame # Therefore it just uses the rule: @@ -10,7 +10,7 @@ extends Reference # Imports an APNG PoolByteArray into an animation as an Array of frames. # Returns [error, frames] similar to some read functions. # However, error is a string. -static func load_from_buffer(buffer: PoolByteArray) -> Array: +static func load_from_buffer(buffer: PackedByteArray) -> Array: var stream := AImgIOAPNGStream.new(buffer) var magic_str = stream.read_magic() if magic_str != null: @@ -35,14 +35,14 @@ static func load_from_buffer(buffer: PoolByteArray) -> Array: # So to convert an APNG frame to a PNG for reading, we need to stitch: # IHDR (modified), PLTE (if present), tRNS (if present), IDAT (from fdAT), # and IEND (generated). - var ihdr := PoolByteArray() - var plte := PoolByteArray() - var trns := PoolByteArray() + var ihdr := PackedByteArray() + var plte := PackedByteArray() + var trns := PackedByteArray() # stored full width/height for buffer var width := 0 var height := 0 # parse chunks - var frames := [] + var frames: Array[BFrame] = [] while stream.read_chunk() == OK: if stream.chunk_type == "IHDR": ihdr = stream.chunk_data @@ -78,17 +78,16 @@ static func load_from_buffer(buffer: PoolByteArray) -> Array: if len(frames) > 0: var f: BFrame = frames[len(frames) - 1] if len(stream.chunk_data) >= 4: - var data := stream.chunk_data.subarray(4, len(stream.chunk_data) - 1) + var data := stream.chunk_data.slice(4, len(stream.chunk_data)) f.add_data(data) # theoretically we *could* store the default frame somewhere, but *why*? # just use Image functions if you want that if len(frames) == 0: return ["No frames", null] # prepare initial operating buffer - var operating := Image.new() - operating.create(width, height, false, Image.FORMAT_RGBA8) + var operating := Image.create(width, height, false, Image.FORMAT_RGBA8) operating.fill(Color(0, 0, 0, 0)) - var finished := [] + var finished: Array[AImgIOFrame] = [] for v in frames: var fv: BFrame = v # Ok, so to avoid having to deal with filters and stuff, @@ -106,9 +105,9 @@ static func load_from_buffer(buffer: PoolByteArray) -> Array: var blit_target := operating var copy_blit_target := true # rectangles and such - var blit_src := Rect2(Vector2.ZERO, intermediary_img.get_size()) - var blit_pos := Vector2(fv.x, fv.y) - var blit_tgt := Rect2(blit_pos, intermediary_img.get_size()) + var blit_src := Rect2i(Vector2i.ZERO, intermediary_img.get_size()) + var blit_pos := Vector2i(fv.x, fv.y) + var blit_tgt := Rect2i(blit_pos, intermediary_img.get_size()) # early dispose ops if fv.dispose_op == 2: # previous @@ -118,10 +117,11 @@ static func load_from_buffer(buffer: PoolByteArray) -> Array: blit_target.copy_from(operating) copy_blit_target = false # actually blit - if fv.blend_op == 0: - blit_target.blit_rect(intermediary_img, blit_src, blit_pos) - else: - blit_target.blend_rect(intermediary_img, blit_src, blit_pos) + if blit_src.size != Vector2i.ZERO: + if fv.blend_op == 0: + blit_target.blit_rect(intermediary_img, blit_src, blit_pos) + else: + blit_target.blend_rect(intermediary_img, blit_src, blit_pos) # insert as frame var ffin := AImgIOFrame.new() ffin.duration = fv.duration @@ -143,10 +143,10 @@ static func load_from_buffer(buffer: PoolByteArray) -> Array: # Imports an APNG file into an animation as an array of frames. # Returns null on error. static func load_from_file(path: String) -> Array: - var o := File.new() - if o.open(path, File.READ) != OK: + var o := FileAccess.open(path, FileAccess.READ) + if o == null: return [null, "Unable to open file: " + path] - var l = o.get_len() + var l = o.get_length() var data = o.get_buffer(l) o.close() return load_from_buffer(data) @@ -154,7 +154,7 @@ static func load_from_file(path: String) -> Array: # Intermediate frame structure class BFrame: - extends Reference + extends RefCounted var dispose_op: int var blend_op: int var x: int @@ -162,9 +162,9 @@ class BFrame: var w: int var h: int var duration: float - var data: PoolByteArray + var data: PackedByteArray - func setup(fctl: PoolByteArray): + func setup(fctl: PackedByteArray): if len(fctl) < 26: return "" var sp := StreamPeerBuffer.new() @@ -191,8 +191,8 @@ class BFrame: # This can be loaded by Godot directly. # This basically skips most of the APNG decoding process. func intermediary( - ihdr: PoolByteArray, plte: PoolByteArray, trns: PoolByteArray - ) -> PoolByteArray: + ihdr: PackedByteArray, plte: PackedByteArray, trns: PackedByteArray + ) -> PackedByteArray: # Might be important to note this operates on a copy of ihdr (by-value). var sp := StreamPeerBuffer.new() sp.data_array = ihdr @@ -207,8 +207,8 @@ class BFrame: if len(trns) > 0: intermed.write_chunk("tRNS", trns) intermed.write_chunk("IDAT", data) - intermed.write_chunk("IEND", PoolByteArray()) + intermed.write_chunk("IEND", PackedByteArray()) return intermed.finish() - func add_data(d: PoolByteArray): + func add_data(d: PackedByteArray): data.append_array(d) diff --git a/addons/aimg_io/apng_stream.gd b/addons/aimg_io/apng_stream.gd index 8035be0fecf..a34dd1c13ca 100644 --- a/addons/aimg_io/apng_stream.gd +++ b/addons/aimg_io/apng_stream.gd @@ -1,6 +1,6 @@ -tool +@tool class_name AImgIOAPNGStream -extends Reference +extends RefCounted # APNG IO context. To be clear, this is still effectively magic. # Quite critical we preload this. Preloading creates static variables. @@ -8,7 +8,7 @@ extends Reference var crc32: AImgIOCRC32 = preload("apng_crc32.tres") var chunk_type: String -var chunk_data: PoolByteArray +var chunk_data: PackedByteArray # The reason this must be a StreamPeerBuffer is simple: # 1. We need to support in-memory IO for HTML5 to really work @@ -21,7 +21,7 @@ var chunk_data: PoolByteArray var _target: StreamPeerBuffer -func _init(t: PoolByteArray = PoolByteArray()): +func _init(t: PackedByteArray = PackedByteArray()): crc32.ensure_ready() _target = StreamPeerBuffer.new() _target.big_endian = true @@ -80,9 +80,9 @@ func start_chunk() -> StreamPeerBuffer: # Writes a PNG chunk. -func write_chunk(type: String, data: PoolByteArray): +func write_chunk(type: String, data: PackedByteArray): _target.put_32(len(data)) - var at := type.to_ascii() + var at := type.to_ascii_buffer() _target.put_data(at) _target.put_data(data) var crc := crc32.update(crc32.mask, at) @@ -91,5 +91,5 @@ func write_chunk(type: String, data: PoolByteArray): # Returns the data_array of the stream (to be used when you're done writing the file) -func finish() -> PoolByteArray: +func finish() -> PackedByteArray: return _target.data_array diff --git a/addons/aimg_io/base_exporter.gd b/addons/aimg_io/base_exporter.gd index dca521802be..805a60bf756 100644 --- a/addons/aimg_io/base_exporter.gd +++ b/addons/aimg_io/base_exporter.gd @@ -1,5 +1,5 @@ class_name AImgIOBaseExporter -extends Reference +extends RefCounted # Represents a method for exporting animations. var mime_type: String @@ -17,5 +17,5 @@ func export_animation( _progress_report_obj: Object, _progress_report_method, _progress_report_args -) -> PoolByteArray: - return PoolByteArray() +) -> PackedByteArray: + return PackedByteArray() diff --git a/addons/aimg_io/crc32.gd b/addons/aimg_io/crc32.gd index 5c9a684cb91..c2818e78aab 100644 --- a/addons/aimg_io/crc32.gd +++ b/addons/aimg_io/crc32.gd @@ -1,4 +1,4 @@ -tool +@tool class_name AImgIOCRC32 extends Resource # CRC32 implementation that uses a Resource for better caching @@ -6,10 +6,10 @@ extends Resource const INIT = 0xFFFFFFFF # The reversed polynomial. -export var reversed_polynomial: int = 0xEDB88320 +@export var reversed_polynomial: int = 0xEDB88320 # The mask (and initialization value). -export var mask: int = 0xFFFFFFFF +@export var mask: int = 0xFFFFFFFF var crc32_table = [] var _table_init_mutex: Mutex = Mutex.new() @@ -38,7 +38,7 @@ func ensure_ready(): # Performs the update step of CRC32 over some bytes. # Note that this is not the whole story. # The CRC must be initialized to 0xFFFFFFFF, then updated, then bitwise-inverted. -func update(crc: int, data: PoolByteArray) -> int: +func update(crc: int, data: PackedByteArray) -> int: var i := 0 var l := len(data) while i < l: diff --git a/addons/aimg_io/editor_plugin.gd b/addons/aimg_io/editor_plugin.gd index 0892344d045..3935f2963cb 100644 --- a/addons/aimg_io/editor_plugin.gd +++ b/addons/aimg_io/editor_plugin.gd @@ -1,4 +1,4 @@ -tool +@tool extends EditorPlugin var apng_importer diff --git a/addons/aimg_io/frame.gd b/addons/aimg_io/frame.gd index 2c7fdbf33d1..e06be1b6cbd 100644 --- a/addons/aimg_io/frame.gd +++ b/addons/aimg_io/frame.gd @@ -1,5 +1,6 @@ +@tool class_name AImgIOFrame -extends Reference +extends RefCounted # Represents a variable-timed frame of an animation. # Typically stuffed into an array. diff --git a/addons/dockable_container/dockable_container.gd b/addons/dockable_container/dockable_container.gd index 143597767b9..26f7f3b75d4 100644 --- a/addons/dockable_container/dockable_container.gd +++ b/addons/dockable_container/dockable_container.gd @@ -1,42 +1,69 @@ -tool +@tool +class_name DockableContainer extends Container -const SplitHandle = preload("split_handle.gd") -const DockablePanel = preload("dockable_panel.gd") -const ReferenceControl = preload("dockable_panel_reference_control.gd") -const DragNDropPanel = preload("drag_n_drop_panel.gd") -const Layout = preload("layout.gd") - -# gdlint: ignore=max-line-length -export(int, "Left", "Center", "Right") var tab_align = TabContainer.ALIGN_CENTER setget set_tab_align, get_tab_align -export(bool) var tabs_visible := true setget set_tabs_visible, get_tabs_visible -# gdlint: ignore=max-line-length -export(bool) var use_hidden_tabs_for_min_size: bool setget set_use_hidden_tabs_for_min_size, get_use_hidden_tabs_for_min_size -export(int) var rearrange_group = 0 -export(Resource) var layout = Layout.new() setget set_layout, get_layout -# If `clone_layout_on_ready` is true, `layout` will be cloned on `_ready`. -# This is useful for leaving layout Resources untouched in case you want to -# restore layout to its default later. -export(bool) var clone_layout_on_ready = true - -var _layout = Layout.new() -var _panel_container = Container.new() -var _split_container = Container.new() -var _drag_n_drop_panel = DragNDropPanel.new() +const SplitHandle := preload("split_handle.gd") +const DockablePanel := preload("dockable_panel.gd") +const DragNDropPanel := preload("drag_n_drop_panel.gd") + +@export var tab_alignment := TabBar.ALIGNMENT_CENTER: + get: + return _tab_align + set(value): + _tab_align = value + for i in range(1, _panel_container.get_child_count()): + var panel := _panel_container.get_child(i) as DockablePanel + panel.tab_alignment = value +@export var use_hidden_tabs_for_min_size := false: + get: + return _use_hidden_tabs_for_min_size + set(value): + _use_hidden_tabs_for_min_size = value + for i in range(1, _panel_container.get_child_count()): + var panel := _panel_container.get_child(i) as DockablePanel + panel.use_hidden_tabs_for_min_size = value +@export var tabs_visible := true: + get: + return _tabs_visible + set(value): + _tabs_visible = value + for i in range(1, _panel_container.get_child_count()): + var panel := _panel_container.get_child(i) as DockablePanel + panel.tabs_visible = value +@export var rearrange_group := 0 +@export var layout := DockableLayout.new(): + get: + return _layout + set(value): + set_layout(value) +## If `clone_layout_on_ready` is true, `layout` will be cloned checked `_ready`. +## This is useful for leaving layout Resources untouched in case you want to +## restore layout to its default later. +@export var clone_layout_on_ready := true + +var _layout := DockableLayout.new() +var _panel_container := Container.new() +var _split_container := Container.new() +var _drag_n_drop_panel := DragNDropPanel.new() var _drag_panel: DockablePanel -var _tab_align = TabContainer.ALIGN_CENTER -var _tabs_visible = true -var _use_hidden_tabs_for_min_size = false -var _current_panel_index = 0 -var _current_split_index = 0 -var _children_names = {} -var _layout_dirty = false +var _tab_align := TabBar.ALIGNMENT_CENTER +var _tabs_visible := true +var _use_hidden_tabs_for_min_size := false +var _current_panel_index := 0 +var _current_split_index := 0 +var _children_names := {} +var _layout_dirty := false + + +func _init() -> void: + child_entered_tree.connect(_child_entered_tree) + child_exiting_tree.connect(_child_exiting_tree) func _ready() -> void: set_process_input(false) _panel_container.name = "_panel_container" - .add_child(_panel_container) + add_child(_panel_container) move_child(_panel_container, 0) _split_container.name = "_split_container" _split_container.mouse_filter = MOUSE_FILTER_PASS @@ -44,13 +71,12 @@ func _ready() -> void: _drag_n_drop_panel.name = "_drag_n_drop_panel" _drag_n_drop_panel.mouse_filter = MOUSE_FILTER_PASS - _drag_n_drop_panel.set_drag_forwarding(self) _drag_n_drop_panel.visible = false - .add_child(_drag_n_drop_panel) + add_child(_drag_n_drop_panel) if not _layout: set_layout(null) - elif clone_layout_on_ready and not Engine.editor_hint: + elif clone_layout_on_ready and not Engine.is_editor_hint(): set_layout(_layout.clone()) @@ -61,7 +87,7 @@ func _notification(what: int) -> void: what == NOTIFICATION_DRAG_BEGIN and _can_handle_drag_data(get_viewport().gui_get_drag_data()) ): - _drag_n_drop_panel.set_enabled(true, not _layout.root.empty()) + _drag_n_drop_panel.set_enabled(true, not _layout.root.is_empty()) set_process_input(true) elif what == NOTIFICATION_DRAG_END: _drag_n_drop_panel.set_enabled(false) @@ -71,10 +97,10 @@ func _notification(what: int) -> void: func _input(event: InputEvent) -> void: assert(get_viewport().gui_is_dragging(), "FIXME: should only be called when dragging") if event is InputEventMouseMotion: - var local_position = get_local_mouse_position() - var panel + var local_position := get_local_mouse_position() + var panel: DockablePanel for i in range(1, _panel_container.get_child_count()): - var p = _panel_container.get_child(i) + var p := _panel_container.get_child(i) as DockablePanel if p.get_rect().has_point(local_position): panel = p break @@ -84,43 +110,37 @@ func _input(event: InputEvent) -> void: fit_child_in_rect(_drag_n_drop_panel, panel.get_child_rect()) -func add_child(node: Node, legible_unique_name: bool = false) -> void: - .add_child(node, legible_unique_name) - _drag_n_drop_panel.raise() +func _child_entered_tree(node: Node) -> void: + if node == _panel_container or node == _drag_n_drop_panel: + return + _drag_n_drop_panel.move_to_front() _track_and_add_node(node) -func add_child_below_node(node: Node, child_node: Node, legible_unique_name: bool = false) -> void: - .add_child_below_node(node, child_node, legible_unique_name) - _drag_n_drop_panel.raise() - _track_and_add_node(child_node) - - -func remove_child(node: Node) -> void: - .remove_child(node) +func _child_exiting_tree(node: Node) -> void: + if node == _panel_container or node == _drag_n_drop_panel: + return _untrack_node(node) -func can_drop_data_fw(_position: Vector2, data, from_control) -> bool: - return from_control == _drag_n_drop_panel and _can_handle_drag_data(data) - +func _can_drop_data(_position: Vector2, data) -> bool: + return _can_handle_drag_data(data) -func drop_data_fw(_position: Vector2, data, from_control) -> void: - assert(from_control == _drag_n_drop_panel, "FIXME") - var from_node: TabContainer = get_node(data.from_path) +func _drop_data(_position: Vector2, data) -> void: + var from_node := get_node(data.from_path) as DockablePanel if from_node == _drag_panel and _drag_panel.get_child_count() == 1: return - var moved_tab = from_node.get_tab_control(data.tabc_element) - if moved_tab is ReferenceControl: + var moved_tab := from_node.get_tab_control(data.tabc_element) + if moved_tab is DockableReferenceControl: moved_tab = moved_tab.reference_to if not _is_managed_node(moved_tab): moved_tab.get_parent().remove_child(moved_tab) add_child(moved_tab) if _drag_panel != null: - var margin = _drag_n_drop_panel.get_hover_margin() + var margin := _drag_n_drop_panel.get_hover_margin() _layout.split_leaf_with_node(_drag_panel.leaf, moved_tab, margin) _layout_dirty = true @@ -135,66 +155,47 @@ func set_control_as_current_tab(control: Control) -> void: if is_control_hidden(control): push_warning("Trying to focus a hidden control") return - var leaf = _layout.get_leaf_for_node(control) + var leaf := _layout.get_leaf_for_node(control) if not leaf: return - var position_in_leaf = leaf.find_node(control) + var position_in_leaf := leaf.find_child(control) if position_in_leaf < 0: return - var panel + var panel: DockablePanel for i in range(1, _panel_container.get_child_count()): - var p = _panel_container.get_child(i) + var p := _panel_container.get_child(i) as DockablePanel if p.leaf == leaf: panel = p break if not panel: return - panel.current_tab = clamp(position_in_leaf, 0, panel.get_tab_count() - 1) + panel.current_tab = clampi(position_in_leaf, 0, panel.get_tab_count() - 1) -func set_layout(value: Layout) -> void: +func set_layout(value: DockableLayout) -> void: if value == null: - value = Layout.new() + value = DockableLayout.new() if value == _layout: return - if _layout and _layout.is_connected("changed", self, "queue_sort"): - _layout.disconnect("changed", self, "queue_sort") + if _layout and _layout.changed.is_connected(queue_sort): + _layout.changed.disconnect(queue_sort) _layout = value - _layout.connect("changed", self, "queue_sort") + _layout.changed.connect(queue_sort) _layout_dirty = true queue_sort() -func get_layout() -> Layout: - return _layout - - -func set_tab_align(value: int) -> void: +func set_tab_alignment(value: TabBar.AlignmentMode) -> void: _tab_align = value for i in range(1, _panel_container.get_child_count()): var panel = _panel_container.get_child(i) - panel.tab_align = value + panel.tab_alignment = value func get_tab_align() -> int: return _tab_align -func set_tabs_visible(value: bool) -> void: - _tabs_visible = value - for i in range(1, _panel_container.get_child_count()): - var panel = _panel_container.get_child(i) - if panel.get_tab_count() >= 2: - panel.tabs_visible = true - else: - panel.tabs_visible = value - queue_sort() - - -func get_tabs_visible() -> bool: - return _tabs_visible - - func set_use_hidden_tabs_for_min_size(value: bool) -> void: _use_hidden_tabs_for_min_size = value for i in range(1, _panel_container.get_child_count()): @@ -206,35 +207,35 @@ func get_use_hidden_tabs_for_min_size() -> bool: return _use_hidden_tabs_for_min_size -func set_control_hidden(child: Control, hidden: bool) -> void: - _layout.set_node_hidden(child, hidden) +func set_control_hidden(child: Control, is_hidden: bool) -> void: + _layout.set_node_hidden(child, is_hidden) func is_control_hidden(child: Control) -> bool: return _layout.is_node_hidden(child) -func get_tabs() -> Array: - var tabs = [] +func get_tabs() -> Array[Control]: + var tabs: Array[Control] = [] for i in get_child_count(): - var child = get_child(i) + var child := get_child(i) if _is_managed_node(child): tabs.append(child) return tabs func get_tab_count() -> int: - var count = 0 + var count := 0 for i in get_child_count(): - var child = get_child(i) + var child := get_child(i) if _is_managed_node(child): count += 1 return count -func _can_handle_drag_data(data): +func _can_handle_drag_data(data) -> bool: if data is Dictionary and data.get("type") == "tabc_element": - var tabc = get_node_or_null(data.get("from_path")) + var tabc := get_node_or_null(data.get("from_path")) return ( tabc and tabc.has_method("get_tabs_rearrange_group") @@ -249,15 +250,15 @@ func _is_managed_node(node: Node) -> bool: and node != _panel_container and node != _drag_n_drop_panel and node is Control - and not node.is_set_as_toplevel() + and not node.top_level ) func _update_layout_with_children() -> void: - var names = PoolStringArray() + var names := PackedStringArray() _children_names.clear() for i in range(1, get_child_count() - 1): - var c = get_child(i) + var c := get_child(i) if _track_node(c): names.append(c.name) _layout.update_nodes(names) @@ -269,10 +270,10 @@ func _track_node(node: Node) -> bool: return false _children_names[node] = node.name _children_names[node.name] = node - if not node.is_connected("renamed", self, "_on_child_renamed"): - node.connect("renamed", self, "_on_child_renamed", [node]) - if not node.is_connected("tree_exiting", self, "_untrack_node"): - node.connect("tree_exiting", self, "_untrack_node", [node]) + if not node.renamed.is_connected(_on_child_renamed): + node.renamed.connect(_on_child_renamed.bind(node)) + if not node.tree_exiting.is_connected(_untrack_node): + node.tree_exiting.connect(_untrack_node.bind(node)) return true @@ -288,31 +289,31 @@ func _track_and_add_node(node: Node) -> void: func _untrack_node(node: Node) -> void: _children_names.erase(node) _children_names.erase(node.name) - if node.is_connected("renamed", self, "_on_child_renamed"): - node.disconnect("renamed", self, "_on_child_renamed") - if node.is_connected("tree_exiting", self, "_untrack_node"): - node.disconnect("tree_exiting", self, "_untrack_node") + if node.renamed.is_connected(_on_child_renamed): + node.renamed.disconnect(_on_child_renamed) + if node.tree_exiting.is_connected(_untrack_node): + node.tree_exiting.disconnect(_untrack_node) _layout_dirty = true func _resort() -> void: assert(_panel_container, "FIXME: resorting without _panel_container") - if _panel_container.get_position_in_parent() != 0: + if _panel_container.get_index() != 0: move_child(_panel_container, 0) - if _drag_n_drop_panel.get_position_in_parent() < get_child_count() - 1: - _drag_n_drop_panel.raise() + if _drag_n_drop_panel.get_index() < get_child_count() - 1: + _drag_n_drop_panel.move_to_front() if _layout_dirty: _update_layout_with_children() - var rect = Rect2(Vector2.ZERO, rect_size) + var rect := Rect2(Vector2.ZERO, size) fit_child_in_rect(_panel_container, rect) _panel_container.fit_child_in_rect(_split_container, rect) _current_panel_index = 1 _current_split_index = 0 - var children_list = [] + var children_list := [] _calculate_panel_and_split_list(children_list, _layout.root) _fit_panel_and_split_list_to_rect(children_list, rect) @@ -320,17 +321,17 @@ func _resort() -> void: _untrack_children_after(_split_container, _current_split_index) -# Calculate DockablePanel and SplitHandle minimum sizes, skipping empty -# branches. -# -# Returns a DockablePanel on non-empty leaves, a SplitHandle on non-empty -# splits, `null` if the whole branch is empty and no space should be used. -# -# `result` will be filled with the non-empty nodes in this post-order tree -# traversal. -func _calculate_panel_and_split_list(result: Array, layout_node: Layout.LayoutNode): - if layout_node is Layout.LayoutPanel: - var nodes = [] +## Calculate DockablePanel and SplitHandle minimum sizes, skipping empty +## branches. +## +## Returns a DockablePanel checked non-empty leaves, a SplitHandle checked non-empty +## splits, `null` if the whole branch is empty and no space should be used. +## +## `result` will be filled with the non-empty nodes in this post-order tree +## traversal. +func _calculate_panel_and_split_list(result: Array, layout_node: DockableLayoutNode): + if layout_node is DockableLayoutPanel: + var nodes: Array[Control] = [] for n in layout_node.names: var node: Control = _children_names.get(n) if node: @@ -343,21 +344,21 @@ func _calculate_panel_and_split_list(result: Array, layout_node: Layout.LayoutNo node.visible = false else: nodes.append(node) - if nodes.empty(): + if nodes.is_empty(): return null else: - var panel = _get_panel(_current_panel_index) + var panel := _get_panel(_current_panel_index) _current_panel_index += 1 panel.track_nodes(nodes, layout_node) result.append(panel) return panel - elif layout_node is Layout.LayoutSplit: + elif layout_node is DockableLayoutSplit: # by processing `second` before `first`, traversing `result` from back # to front yields a nice pre-order tree traversal var second_result = _calculate_panel_and_split_list(result, layout_node.second) var first_result = _calculate_panel_and_split_list(result, layout_node.first) if first_result and second_result: - var split = _get_split(_current_split_index) + var split := _get_split(_current_split_index) _current_split_index += 1 split.layout_split = layout_node split.first_minimum_size = first_result.get_layout_minimum_size() @@ -372,58 +373,58 @@ func _calculate_panel_and_split_list(result: Array, layout_node: Layout.LayoutNo push_warning("FIXME: invalid Resource, should be branch or leaf, found %s" % layout_node) -# Traverse list from back to front fitting controls where they belong. -# -# Be sure to call this with the result from `_calculate_split_minimum_sizes`. +## Traverse list from back to front fitting controls where they belong. +## +## Be sure to call this with the result from `_calculate_split_minimum_sizes`. func _fit_panel_and_split_list_to_rect(panel_and_split_list: Array, rect: Rect2) -> void: var control = panel_and_split_list.pop_back() if control is DockablePanel: _panel_container.fit_child_in_rect(control, rect) elif control is SplitHandle: var split_rects = control.get_split_rects(rect) - _split_container.fit_child_in_rect(control, split_rects.self) - _fit_panel_and_split_list_to_rect(panel_and_split_list, split_rects.first) - _fit_panel_and_split_list_to_rect(panel_and_split_list, split_rects.second) + _split_container.fit_child_in_rect(control, split_rects["self"]) + _fit_panel_and_split_list_to_rect(panel_and_split_list, split_rects["first"]) + _fit_panel_and_split_list_to_rect(panel_and_split_list, split_rects["second"]) +## Get the idx'th DockablePanel, reusing an instanced one if possible func _get_panel(idx: int) -> DockablePanel: - """Get the idx'th DockablePanel, reusing an instanced one if possible""" assert(_panel_container, "FIXME: creating panel without _panel_container") if idx < _panel_container.get_child_count(): return _panel_container.get_child(idx) - var panel = DockablePanel.new() - panel.tab_align = _tab_align + var panel := DockablePanel.new() + panel.tab_alignment = _tab_align panel.tabs_visible = _tabs_visible panel.use_hidden_tabs_for_min_size = _use_hidden_tabs_for_min_size - panel.set_tabs_rearrange_group(max(0, rearrange_group)) + panel.set_tabs_rearrange_group(maxi(0, rearrange_group)) _panel_container.add_child(panel) - panel.connect("tab_layout_changed", self, "_on_panel_tab_layout_changed", [panel]) + panel.tab_layout_changed.connect(_on_panel_tab_layout_changed.bind(panel)) return panel +## Get the idx'th SplitHandle, reusing an instanced one if possible func _get_split(idx: int) -> SplitHandle: - """Get the idx'th SplitHandle, reusing an instanced one if possible""" assert(_split_container, "FIXME: creating split without _split_container") if idx < _split_container.get_child_count(): return _split_container.get_child(idx) - var split = SplitHandle.new() + var split := SplitHandle.new() _split_container.add_child(split) return split -static func _untrack_children_after(node, idx: int) -> void: - """Helper for removing and freeing all remaining children from node""" +## Helper for removing and freeing all remaining children from node +func _untrack_children_after(node: Control, idx: int) -> void: for i in range(idx, node.get_child_count()): - var child = node.get_child(idx) + var child := node.get_child(idx) node.remove_child(child) child.queue_free() +## Handler for `DockablePanel.tab_layout_changed`, update its DockableLayoutPanel func _on_panel_tab_layout_changed(tab: int, panel: DockablePanel) -> void: - """Handler for `DockablePanel.tab_layout_changed`, update its LayoutPanel""" _layout_dirty = true - var control = panel.get_tab_control(tab) - if control is ReferenceControl: + var control := panel.get_tab_control(tab) + if control is DockableReferenceControl: control = control.reference_to if not _is_managed_node(control): control.get_parent().remove_child(control) @@ -432,10 +433,10 @@ func _on_panel_tab_layout_changed(tab: int, panel: DockablePanel) -> void: queue_sort() +## Handler for `Node.renamed` signal, updates tracked name for node func _on_child_renamed(child: Node) -> void: - """Handler for `Node.renamed` signal, updates tracked name for node""" - var old_name = _children_names.get(child) - if not old_name: + var old_name: String = _children_names.get(child) + if old_name == str(child.name): return _children_names.erase(old_name) _children_names[child] = child.name diff --git a/addons/dockable_container/dockable_panel.gd b/addons/dockable_container/dockable_panel.gd index e166863583a..bc4044da08c 100644 --- a/addons/dockable_container/dockable_panel.gd +++ b/addons/dockable_container/dockable_panel.gd @@ -1,14 +1,15 @@ -tool +@tool extends TabContainer signal tab_layout_changed(tab) -const ReferenceControl = preload("dockable_panel_reference_control.gd") -const Layout = preload("layout.gd") +var leaf: DockableLayoutPanel: + get: + return get_leaf() + set(value): + set_leaf(value) -var leaf: Layout.LayoutPanel setget set_leaf, get_leaf - -var _leaf: Layout.LayoutPanel +var _leaf: DockableLayoutPanel func _ready() -> void: @@ -16,49 +17,51 @@ func _ready() -> void: func _enter_tree() -> void: - connect("tab_selected", self, "_on_tab_selected") - connect("tab_changed", self, "_on_tab_changed") + active_tab_rearranged.connect(_on_tab_changed) + tab_selected.connect(_on_tab_selected) + tab_changed.connect(_on_tab_changed) func _exit_tree() -> void: - disconnect("tab_selected", self, "_on_tab_selected") - disconnect("tab_changed", self, "_on_tab_changed") + active_tab_rearranged.disconnect(_on_tab_changed) + tab_selected.disconnect(_on_tab_selected) + tab_changed.disconnect(_on_tab_changed) -func track_nodes(nodes: Array, new_leaf: Layout.LayoutPanel) -> void: +func track_nodes(nodes: Array[Control], new_leaf: DockableLayoutPanel) -> void: _leaf = null # avoid using previous leaf in tab_changed signals - var min_size = min(nodes.size(), get_child_count()) + var min_size := mini(nodes.size(), get_child_count()) # remove spare children for i in range(min_size, get_child_count()): - var child = get_child(min_size) + var child := get_child(min_size) as DockableReferenceControl child.reference_to = null remove_child(child) child.queue_free() # add missing children for i in range(min_size, nodes.size()): - var ref_control = ReferenceControl.new() + var ref_control := DockableReferenceControl.new() add_child(ref_control) assert(nodes.size() == get_child_count(), "FIXME") # setup children for i in nodes.size(): - var ref_control: ReferenceControl = get_child(i) + var ref_control := get_child(i) as DockableReferenceControl ref_control.reference_to = nodes[i] set_tab_title(i, nodes[i].name) set_leaf(new_leaf) func get_child_rect() -> Rect2: - var control = get_current_tab_control() - return Rect2(rect_position + control.rect_position, control.rect_size) + var control := get_current_tab_control() + return Rect2(position + control.position, control.size) -func set_leaf(value: Layout.LayoutPanel) -> void: +func set_leaf(value: DockableLayoutPanel) -> void: if get_tab_count() > 0 and value: - current_tab = clamp(value.current_tab, 0, get_tab_count() - 1) + current_tab = clampi(value.current_tab, 0, get_tab_count() - 1) _leaf = value -func get_leaf() -> Layout.LayoutPanel: +func get_leaf() -> DockableLayoutPanel: return _leaf @@ -74,10 +77,10 @@ func _on_tab_selected(tab: int) -> void: func _on_tab_changed(tab: int) -> void: if not _leaf: return - var control = get_tab_control(tab) + var control := get_tab_control(tab) if not control: return - var tab_name = control.name - var name_index_in_leaf = _leaf.find_name(tab_name) + var tab_name := control.name + var name_index_in_leaf := _leaf.find_name(tab_name) if name_index_in_leaf != tab: # NOTE: this handles added tabs (index == -1) - emit_signal("tab_layout_changed", tab) + tab_layout_changed.emit(tab) diff --git a/addons/dockable_container/dockable_panel_reference_control.gd b/addons/dockable_container/dockable_panel_reference_control.gd index 1aacc5904aa..06dc11b92f4 100644 --- a/addons/dockable_container/dockable_panel_reference_control.gd +++ b/addons/dockable_container/dockable_panel_reference_control.gd @@ -1,20 +1,38 @@ -tool +@tool +class_name DockableReferenceControl extends Container -# Control that mimics its own visibility and rect into another Control. - -var reference_to: Control setget set_reference_to, get_reference_to +## Control that mimics its own visibility and rect into another Control. + +var reference_to: Control: + get: + return _reference_to + set(control): + if _reference_to != control: + if is_instance_valid(_reference_to): + _reference_to.renamed.disconnect(_on_reference_to_renamed) + _reference_to.minimum_size_changed.disconnect(update_minimum_size) + _reference_to = control + + minimum_size_changed.emit() + if not is_instance_valid(_reference_to): + return + _reference_to.renamed.connect(_on_reference_to_renamed) + _reference_to.minimum_size_changed.connect(update_minimum_size) + _reference_to.visible = visible + _reposition_reference() var _reference_to: Control = null func _ready() -> void: mouse_filter = MOUSE_FILTER_IGNORE + set_notify_transform(true) func _notification(what: int) -> void: if what == NOTIFICATION_VISIBILITY_CHANGED and _reference_to: _reference_to.visible = visible - elif what == NOTIFICATION_SORT_CHILDREN and _reference_to: + elif what == NOTIFICATION_TRANSFORM_CHANGED and _reference_to: _reposition_reference() @@ -22,27 +40,9 @@ func _get_minimum_size() -> Vector2: return _reference_to.get_combined_minimum_size() if _reference_to else Vector2.ZERO -func set_reference_to(control: Control) -> void: - if _reference_to != control: - if _reference_to: - _reference_to.disconnect("renamed", self, "_on_reference_to_renamed") - _reference_to.disconnect("minimum_size_changed", self, "minimum_size_changed") - _reference_to = control - minimum_size_changed() - if not _reference_to: - return - _reference_to.connect("renamed", self, "_on_reference_to_renamed") - _reference_to.connect("minimum_size_changed", self, "minimum_size_changed") - _reference_to.visible = visible - - -func get_reference_to() -> Control: - return _reference_to - - func _reposition_reference() -> void: - _reference_to.rect_global_position = rect_global_position - _reference_to.rect_size = rect_size + _reference_to.global_position = global_position + _reference_to.size = size func _on_reference_to_renamed() -> void: diff --git a/addons/dockable_container/drag_n_drop_panel.gd b/addons/dockable_container/drag_n_drop_panel.gd index 726a6e6a767..7e5d7714d6d 100644 --- a/addons/dockable_container/drag_n_drop_panel.gd +++ b/addons/dockable_container/drag_n_drop_panel.gd @@ -1,45 +1,48 @@ -tool +@tool extends Control -const DRAW_NOTHING = -1 -const DRAW_CENTERED = -2 +enum { MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM, MARGIN_CENTER } -var _draw_margin = DRAW_NOTHING -var _should_split = false +const DRAW_NOTHING := -1 +const DRAW_CENTERED := -2 +const MARGIN_NONE := -1 + +var _draw_margin := DRAW_NOTHING +var _should_split := false func _notification(what: int) -> void: if what == NOTIFICATION_MOUSE_EXIT: _draw_margin = DRAW_NOTHING - update() + queue_redraw() elif what == NOTIFICATION_MOUSE_ENTER and not _should_split: _draw_margin = DRAW_CENTERED - update() + queue_redraw() func _gui_input(event: InputEvent) -> void: if _should_split and event is InputEventMouseMotion: _draw_margin = _find_hover_margin(event.position) - update() + queue_redraw() func _draw() -> void: - var rect + var rect: Rect2 if _draw_margin == DRAW_NOTHING: return elif _draw_margin == DRAW_CENTERED: - rect = Rect2(Vector2.ZERO, rect_size) + rect = Rect2(Vector2.ZERO, size) elif _draw_margin == MARGIN_LEFT: - rect = Rect2(0, 0, rect_size.x * 0.5, rect_size.y) + rect = Rect2(0, 0, size.x * 0.5, size.y) elif _draw_margin == MARGIN_TOP: - rect = Rect2(0, 0, rect_size.x, rect_size.y * 0.5) + rect = Rect2(0, 0, size.x, size.y * 0.5) elif _draw_margin == MARGIN_RIGHT: - var half_width = rect_size.x * 0.5 - rect = Rect2(half_width, 0, half_width, rect_size.y) + var half_width = size.x * 0.5 + rect = Rect2(half_width, 0, half_width, size.y) elif _draw_margin == MARGIN_BOTTOM: - var half_height = rect_size.y * 0.5 - rect = Rect2(0, half_height, rect_size.x, half_height) - var stylebox = get_stylebox("panel", "TooltipPanel") + var half_height = size.y * 0.5 + rect = Rect2(0, half_height, size.x, half_height) + var stylebox := get_theme_stylebox("panel", "TooltipPanel") draw_style_box(stylebox, rect) @@ -48,7 +51,7 @@ func set_enabled(enabled: bool, should_split: bool = true) -> void: _should_split = should_split if enabled: _draw_margin = DRAW_NOTHING - update() + queue_redraw() func get_hover_margin() -> int: @@ -56,23 +59,23 @@ func get_hover_margin() -> int: func _find_hover_margin(point: Vector2) -> int: - var half_size = rect_size * 0.5 + var half_size := size * 0.5 - var left = point.distance_squared_to(Vector2(0, half_size.y)) - var lesser = left - var lesser_margin = MARGIN_LEFT + var left := point.distance_squared_to(Vector2(0, half_size.y)) + var lesser := left + var lesser_margin := MARGIN_LEFT - var top = point.distance_squared_to(Vector2(half_size.x, 0)) + var top := point.distance_squared_to(Vector2(half_size.x, 0)) if lesser > top: lesser = top lesser_margin = MARGIN_TOP - var right = point.distance_squared_to(Vector2(rect_size.x, half_size.y)) + var right := point.distance_squared_to(Vector2(size.x, half_size.y)) if lesser > right: lesser = right lesser_margin = MARGIN_RIGHT - var bottom = point.distance_squared_to(Vector2(half_size.x, rect_size.y)) + var bottom := point.distance_squared_to(Vector2(half_size.x, size.y)) if lesser > bottom: #lesser = bottom # unused result lesser_margin = MARGIN_BOTTOM diff --git a/addons/dockable_container/icon.svg b/addons/dockable_container/icon.svg new file mode 100644 index 00000000000..d87d598df10 --- /dev/null +++ b/addons/dockable_container/icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/addons/dockable_container/icon.svg.import b/addons/dockable_container/icon.svg.import new file mode 100644 index 00000000000..595e57305be --- /dev/null +++ b/addons/dockable_container/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dy25danh2am23" +path="res://.godot/imported/icon.svg-35635e7bbda4487d4b2942da1d987df8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/dockable_container/icon.svg" +dest_files=["res://.godot/imported/icon.svg-35635e7bbda4487d4b2942da1d987df8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/dockable_container/inspector_plugin/editor_inspector_plugin.gd b/addons/dockable_container/inspector_plugin/editor_inspector_plugin.gd index c9272a9c579..73d0372b4f6 100644 --- a/addons/dockable_container/inspector_plugin/editor_inspector_plugin.gd +++ b/addons/dockable_container/inspector_plugin/editor_inspector_plugin.gd @@ -1,17 +1,22 @@ extends EditorInspectorPlugin -const DockableContainer = preload("../dockable_container.gd") -const LayoutEditorProperty = preload("layout_editor_property.gd") +const LayoutEditorProperty := preload("layout_editor_property.gd") -func can_handle(object: Object) -> bool: +func _can_handle(object: Object) -> bool: return object is DockableContainer -func parse_property( - _object: Object, _type: int, path: String, _hint: int, _hint_text: String, _usage: int +func _parse_property( + _object: Object, + _type: Variant.Type, + name: String, + _hint: PropertyHint, + _hint_text: String, + _usage: int, + _wide: bool ) -> bool: - if path == "layout": - var editor_property = LayoutEditorProperty.new() + if name == "layout": + var editor_property := LayoutEditorProperty.new() add_property_editor("layout", editor_property) return false diff --git a/addons/dockable_container/inspector_plugin/layout_editor_property.gd b/addons/dockable_container/inspector_plugin/layout_editor_property.gd index 9a5e96a6247..eb00134bad0 100644 --- a/addons/dockable_container/inspector_plugin/layout_editor_property.gd +++ b/addons/dockable_container/inspector_plugin/layout_editor_property.gd @@ -1,71 +1,71 @@ extends EditorProperty -const DockableContainer = preload("../dockable_container.gd") -const Layout = preload("../layout.gd") - -var _container = DockableContainer.new() -var _hidden_menu_button = MenuButton.new() +var _container := DockableContainer.new() +var _hidden_menu_button := MenuButton.new() var _hidden_menu_popup: PopupMenu -var _hidden_menu_list: PoolStringArray +var _hidden_menu_list: PackedStringArray func _ready() -> void: - rect_min_size = Vector2(128, 256) + custom_minimum_size = Vector2(128, 256) _hidden_menu_button.text = "Visible nodes" add_child(_hidden_menu_button) _hidden_menu_popup = _hidden_menu_button.get_popup() _hidden_menu_popup.hide_on_checkable_item_selection = false - _hidden_menu_popup.connect("about_to_show", self, "_on_hidden_menu_popup_about_to_show") - _hidden_menu_popup.connect("id_pressed", self, "_on_hidden_menu_popup_id_pressed") + _hidden_menu_popup.about_to_popup.connect(_on_hidden_menu_popup_about_to_show) + _hidden_menu_popup.id_pressed.connect(_on_hidden_menu_popup_id_pressed) _container.clone_layout_on_ready = false - _container.rect_min_size = rect_min_size + _container.custom_minimum_size = custom_minimum_size - var original_container: DockableContainer = get_edited_object() - var value = original_container.get(get_edited_property()) - _container.set(get_edited_property(), value) + var value := _get_layout().clone() # The layout gets reset when selecting it without clone for n in value.get_names(): - var child = _create_child_control(n) + var child := _create_child_control(n) _container.add_child(child) + _container.set(get_edited_property(), value) add_child(_container) set_bottom_editor(_container) -func update_property() -> void: - var value = _get_layout() +func _exit_tree() -> void: # Not sure if this is needed, but just to be sure + queue_free() + + +func _update_property() -> void: + var value := _get_layout() _container.set(get_edited_property(), value) -func _get_layout() -> Layout: - var original_container: DockableContainer = get_edited_object() +func _get_layout() -> DockableLayout: + var original_container := get_edited_object() as DockableContainer return original_container.get(get_edited_property()) -func _create_child_control(named: String) -> Control: - var new_control = Label.new() +func _create_child_control(named: String) -> Label: + var new_control := Label.new() new_control.name = named - new_control.align = Label.ALIGN_CENTER - new_control.valign = Label.VALIGN_CENTER + new_control.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + new_control.vertical_alignment = VERTICAL_ALIGNMENT_CENTER new_control.clip_text = true new_control.text = named return new_control func _on_hidden_menu_popup_about_to_show() -> void: - var layout = _get_layout() + var layout := _get_layout().clone() _hidden_menu_popup.clear() _hidden_menu_list = layout.get_names() for i in _hidden_menu_list.size(): - var tab_name = _hidden_menu_list[i] + var tab_name := _hidden_menu_list[i] _hidden_menu_popup.add_check_item(tab_name, i) _hidden_menu_popup.set_item_checked(i, not layout.is_tab_hidden(tab_name)) func _on_hidden_menu_popup_id_pressed(id: int) -> void: - var layout = _get_layout() - var tab_name = _hidden_menu_list[id] - var new_hidden = not layout.is_tab_hidden(tab_name) - layout.set_tab_hidden(tab_name, new_hidden) + var layout := _get_layout().clone() + var tab_name := _hidden_menu_list[id] + var new_hidden := not layout.is_tab_hidden(tab_name) + _get_layout().set_tab_hidden(tab_name, new_hidden) _hidden_menu_popup.set_item_checked(id, not new_hidden) - emit_changed(get_edited_property(), layout) + emit_changed(get_edited_property(), _get_layout()) # This line may not be needed diff --git a/addons/dockable_container/layout.gd b/addons/dockable_container/layout.gd index 4400fb6f7b3..e2a803633f3 100644 --- a/addons/dockable_container/layout.gd +++ b/addons/dockable_container/layout.gd @@ -1,84 +1,80 @@ -tool +@tool +class_name DockableLayout extends Resource -# Layout Resource definition, holding the root LayoutNode and hidden tabs. -# -# LayoutSplit are binary trees with nested LayoutSplit subtrees and LayoutPanel -# leaves. Both of them inherit from LayoutNode to help with type annotation and -# define common funcionality. -# -# Hidden tabs are marked in the `hidden_tabs` Dictionary by name. - -const LayoutNode = preload("layout_node.gd") -const LayoutPanel = preload("layout_panel.gd") -const LayoutSplit = preload("layout_split.gd") - -export(Resource) var root = LayoutPanel.new() setget set_root, get_root -export(Dictionary) var hidden_tabs = {} setget set_hidden_tabs, get_hidden_tabs - -var _changed_signal_queued = false -var _first_leaf: LayoutPanel +## DockableLayout Resource definition, holding the root DockableLayoutNode and hidden tabs. +## +## DockableLayoutSplit are binary trees with nested DockableLayoutSplit subtrees +## and DockableLayoutPanel leaves. Both of them inherit from DockableLayoutNode to help with +## type annotation and define common functionality. +## +## Hidden tabs are marked in the `hidden_tabs` Dictionary by name. + +enum { MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM, MARGIN_CENTER } + +@export var root: DockableLayoutNode = DockableLayoutPanel.new(): + get: + return _root + set(value): + set_root(value) +@export var hidden_tabs := {}: + get: + return _hidden_tabs + set(value): + if value != _hidden_tabs: + _hidden_tabs = value + changed.emit() + +var _changed_signal_queued := false +var _first_leaf: DockableLayoutPanel var _hidden_tabs: Dictionary var _leaf_by_node_name: Dictionary -var _root: LayoutNode = LayoutPanel.new() +var _root: DockableLayoutNode = DockableLayoutPanel.new() func _init() -> void: resource_name = "Layout" -func set_root(value: LayoutNode, should_emit_changed = true) -> void: +func set_root(value: DockableLayoutNode, should_emit_changed := true) -> void: if not value: - value = LayoutPanel.new() + value = DockableLayoutPanel.new() if _root == value: return - if _root and _root.is_connected("changed", self, "_on_root_changed"): - _root.disconnect("changed", self, "_on_root_changed") + if _root and _root.changed.is_connected(_on_root_changed): + _root.changed.disconnect(_on_root_changed) _root = value _root.parent = null - _root.connect("changed", self, "_on_root_changed") + _root.changed.connect(_on_root_changed) if should_emit_changed: _on_root_changed() -func get_root() -> LayoutNode: +func get_root() -> DockableLayoutNode: return _root -func set_hidden_tabs(value: Dictionary) -> void: - if value != _hidden_tabs: - _hidden_tabs = value - emit_signal("changed") +func clone() -> DockableLayout: + return duplicate(true) -func get_hidden_tabs() -> Dictionary: - return _hidden_tabs - - -func clone(): - var new_layout = get_script().new() - new_layout.root = _root.clone() - new_layout._hidden_tabs = _hidden_tabs.duplicate() - return new_layout - - -func get_names() -> PoolStringArray: +func get_names() -> PackedStringArray: return _root.get_names() -# Add missing nodes on first leaf and remove nodes outside indices from leaves. -# -# _leaf_by_node_name = { -# (string keys) = respective Leaf that holds the node name, -# } -func update_nodes(names: PoolStringArray) -> void: +## Add missing nodes on first leaf and remove nodes outside indices from leaves. +## +## _leaf_by_node_name = { +## (string keys) = respective Leaf that holds the node name, +## } +func update_nodes(names: PackedStringArray) -> void: _leaf_by_node_name.clear() _first_leaf = null - var empty_leaves = [] - _ensure_names_in_node(_root, names, empty_leaves) + var empty_leaves: Array[DockableLayoutPanel] = [] + _ensure_names_in_node(_root, names, empty_leaves) # Changes _leaf_by_node_name and empty_leaves for l in empty_leaves: _remove_leaf(l) if not _first_leaf: - _first_leaf = LayoutPanel.new() + _first_leaf = DockableLayoutPanel.new() set_root(_first_leaf) for n in names: if not _leaf_by_node_name.has(n): @@ -87,12 +83,12 @@ func update_nodes(names: PoolStringArray) -> void: _on_root_changed() -func move_node_to_leaf(node: Node, leaf: LayoutPanel, relative_position: int) -> void: - var node_name = node.name - var previous_leaf = _leaf_by_node_name.get(node_name) +func move_node_to_leaf(node: Node, leaf: DockableLayoutPanel, relative_position: int) -> void: + var node_name := node.name + var previous_leaf: DockableLayoutPanel = _leaf_by_node_name.get(node_name) if previous_leaf: previous_leaf.remove_node(node) - if previous_leaf.empty(): + if previous_leaf.is_empty(): _remove_leaf(previous_leaf) leaf.insert_node(relative_position, node) @@ -100,18 +96,18 @@ func move_node_to_leaf(node: Node, leaf: LayoutPanel, relative_position: int) -> _on_root_changed() -func get_leaf_for_node(node: Node) -> LayoutPanel: +func get_leaf_for_node(node: Node) -> DockableLayoutPanel: return _leaf_by_node_name.get(node.name) -func split_leaf_with_node(leaf, node: Node, margin: int) -> void: - var root_branch = leaf.parent - var new_leaf = LayoutPanel.new() - var new_branch = LayoutSplit.new() +func split_leaf_with_node(leaf: DockableLayoutPanel, node: Node, margin: int) -> void: + var root_branch := leaf.parent + var new_leaf := DockableLayoutPanel.new() + var new_branch := DockableLayoutSplit.new() if margin == MARGIN_LEFT or margin == MARGIN_RIGHT: - new_branch.direction = LayoutSplit.Direction.HORIZONTAL + new_branch.direction = DockableLayoutSplit.Direction.HORIZONTAL else: - new_branch.direction = LayoutSplit.Direction.VERTICAL + new_branch.direction = DockableLayoutSplit.Direction.VERTICAL if margin == MARGIN_LEFT or margin == MARGIN_TOP: new_branch.first = new_leaf new_branch.second = leaf @@ -130,7 +126,7 @@ func split_leaf_with_node(leaf, node: Node, margin: int) -> void: func add_node(node: Node) -> void: - var node_name = node.name + var node_name := node.name if _leaf_by_node_name.has(node_name): return _first_leaf.push_name(node_name) @@ -139,19 +135,19 @@ func add_node(node: Node) -> void: func remove_node(node: Node) -> void: - var node_name = node.name - var leaf: LayoutPanel = _leaf_by_node_name.get(node_name) + var node_name := node.name + var leaf: DockableLayoutPanel = _leaf_by_node_name.get(node_name) if not leaf: return leaf.remove_node(node) _leaf_by_node_name.erase(node_name) - if leaf.empty(): + if leaf.is_empty(): _remove_leaf(leaf) _on_root_changed() func rename_node(previous_name: String, new_name: String) -> void: - var leaf = _leaf_by_node_name.get(previous_name) + var leaf: DockableLayoutPanel = _leaf_by_node_name.get(previous_name) if not leaf: return leaf.rename_node(previous_name, new_name) @@ -187,35 +183,35 @@ func _on_root_changed() -> void: return _changed_signal_queued = true set_deferred("_changed_signal_queued", false) - call_deferred("emit_signal", "changed") + emit_changed.call_deferred() -func _ensure_names_in_node(node: LayoutNode, names: PoolStringArray, empty_leaves: Array) -> void: - if node is LayoutPanel: - node.update_nodes(names, _leaf_by_node_name) - if node.empty(): +func _ensure_names_in_node( + node: DockableLayoutNode, names: PackedStringArray, empty_leaves: Array[DockableLayoutPanel] +) -> void: + if node is DockableLayoutPanel: + node.update_nodes(names, _leaf_by_node_name) # This changes _leaf_by_node_name + if node.is_empty(): empty_leaves.append(node) if not _first_leaf: _first_leaf = node - elif node is LayoutSplit: + elif node is DockableLayoutSplit: _ensure_names_in_node(node.first, names, empty_leaves) _ensure_names_in_node(node.second, names, empty_leaves) else: assert(false, "Invalid Resource, should be branch or leaf, found %s" % node) -func _remove_leaf(leaf: LayoutPanel) -> void: - assert(leaf.empty(), "FIXME: trying to remove a leaf with nodes") +func _remove_leaf(leaf: DockableLayoutPanel) -> void: + assert(leaf.is_empty(), "FIXME: trying to remove_at a leaf with nodes") if _root == leaf: return - var collapsed_branch = leaf.parent - assert(collapsed_branch is LayoutSplit, "FIXME: leaf is not a child of branch") - var kept_branch = ( - collapsed_branch.first - if leaf == collapsed_branch.second - else collapsed_branch.second + var collapsed_branch := leaf.parent + assert(collapsed_branch is DockableLayoutSplit, "FIXME: leaf is not a child of branch") + var kept_branch: DockableLayoutNode = ( + collapsed_branch.first if leaf == collapsed_branch.second else collapsed_branch.second ) - var root_branch = collapsed_branch.parent + var root_branch := collapsed_branch.parent #HERE if collapsed_branch == _root: set_root(kept_branch, true) elif root_branch: @@ -231,10 +227,10 @@ func _print_tree() -> void: print("") -func _print_tree_step(tree_or_leaf, level, idx) -> void: - if tree_or_leaf is LayoutPanel: +func _print_tree_step(tree_or_leaf: DockableLayoutNode, level: int, idx: int) -> void: + if tree_or_leaf is DockableLayoutPanel: print(" |".repeat(level), "- (%d) = " % idx, tree_or_leaf.names) - else: + elif tree_or_leaf is DockableLayoutSplit: print( " |".repeat(level), "-+ (%d) = " % idx, diff --git a/addons/dockable_container/layout_node.gd b/addons/dockable_container/layout_node.gd index 116944e0617..b4d1a283ab3 100644 --- a/addons/dockable_container/layout_node.gd +++ b/addons/dockable_container/layout_node.gd @@ -1,30 +1,23 @@ -tool +@tool +class_name DockableLayoutNode extends Resource -# Base class for Layout tree nodes +## Base class for DockableLayout tree nodes -var parent = null +var parent: DockableLayoutSplit = null func emit_tree_changed() -> void: - var node = self + var node := self while node: - node.emit_signal("changed") + node.emit_changed() node = node.parent -# Returns a deep copy of the layout. -# -# Use this instead of `Resource.duplicate(true)` to ensure objects have the -# right script and parenting is correctly set for each node. -func clone(): - assert(false, "FIXME: implement on child") - - -# Returns whether there are any nodes -func empty() -> bool: +## Returns whether there are any nodes +func is_empty() -> bool: return true -# Returns all tab names in this node -func get_names() -> PoolStringArray: - return PoolStringArray() +## Returns all tab names in this node +func get_names() -> PackedStringArray: + return PackedStringArray() diff --git a/addons/dockable_container/layout_panel.gd b/addons/dockable_container/layout_panel.gd index 69ac578058d..e15201b105e 100644 --- a/addons/dockable_container/layout_panel.gd +++ b/addons/dockable_container/layout_panel.gd @@ -1,11 +1,23 @@ -tool -extends "layout_node.gd" -# Layout leaf nodes, defining tabs - -export(PoolStringArray) var names: PoolStringArray setget set_names, get_names -export(int) var current_tab: int setget set_current_tab, get_current_tab - -var _names := PoolStringArray() +@tool +class_name DockableLayoutPanel +extends DockableLayoutNode +## DockableLayout leaf nodes, defining tabs + +@export var names: PackedStringArray: + get: + return get_names() + set(value): + _names = value + emit_tree_changed() +@export var current_tab: int: + get: + return int(clamp(_current_tab, 0, _names.size() - 1)) + set(value): + if value != _current_tab: + _current_tab = value + emit_tree_changed() + +var _names := PackedStringArray() var _current_tab := 0 @@ -13,29 +25,8 @@ func _init() -> void: resource_name = "Tabs" -func clone(): - var new_panel = get_script().new() - new_panel._names = _names - new_panel._current_tab = _current_tab - return new_panel - - -func set_current_tab(value: int) -> void: - if value != _current_tab: - _current_tab = value - emit_tree_changed() - - -func get_current_tab() -> int: - return int(clamp(_current_tab, 0, _names.size() - 1)) - - -func set_names(value: PoolStringArray) -> void: - _names = value - emit_tree_changed() - - -func get_names() -> PoolStringArray: +## Returns all tab names in this node +func get_names() -> PackedStringArray: return _names @@ -56,21 +47,21 @@ func find_name(node_name: String) -> int: return -1 -func find_node(node: Node): +func find_child(node: Node) -> int: return find_name(node.name) func remove_node(node: Node) -> void: - var i = find_node(node) + var i := find_child(node) if i >= 0: - _names.remove(i) + _names.remove_at(i) emit_tree_changed() else: push_warning("Remove failed, node '%s' was not found" % node) func rename_node(previous_name: String, new_name: String) -> void: - var i = find_name(previous_name) + var i := find_name(previous_name) if i >= 0: _names.set(i, new_name) emit_tree_changed() @@ -78,17 +69,18 @@ func rename_node(previous_name: String, new_name: String) -> void: push_warning("Rename failed, name '%s' was not found" % previous_name) -func empty() -> bool: - return _names.empty() +## Returns whether there are any nodes +func is_empty() -> bool: + return _names.is_empty() -func update_nodes(node_names: PoolStringArray, data: Dictionary): - var i = 0 - var removed_any = false +func update_nodes(node_names: PackedStringArray, data: Dictionary) -> void: + var i := 0 + var removed_any := false while i < _names.size(): - var current = _names[i] + var current := _names[i] if not current in node_names or data.has(current): - _names.remove(i) + _names.remove_at(i) removed_any = true else: data[current] = self diff --git a/addons/dockable_container/layout_split.gd b/addons/dockable_container/layout_split.gd index ac75d6539ef..5e78138124a 100644 --- a/addons/dockable_container/layout_split.gd +++ b/addons/dockable_container/layout_split.gd @@ -1,76 +1,77 @@ -tool -extends "layout_node.gd" -# Layout binary tree nodes, defining subtrees and leaf panels - -enum Direction { - HORIZONTAL, - VERTICAL, -} - -const LayoutPanel = preload("layout_panel.gd") - -export(Direction) var direction = Direction.HORIZONTAL setget set_direction, get_direction -export(float, 0, 1) var percent = 0.5 setget set_percent, get_percent -export(Resource) var first = LayoutPanel.new() setget set_first, get_first -export(Resource) var second = LayoutPanel.new() setget set_second, get_second - -var _direction = Direction.HORIZONTAL -var _percent = 0.5 -var _first -var _second +@tool +class_name DockableLayoutSplit +extends DockableLayoutNode +## DockableLayout binary tree nodes, defining subtrees and leaf panels + +enum Direction { HORIZONTAL, VERTICAL } + +@export var direction := Direction.HORIZONTAL: + get: + return get_direction() + set(value): + set_direction(value) +@export_range(0, 1) var percent := 0.5: + get = get_percent, + set = set_percent +@export var first: DockableLayoutNode = DockableLayoutPanel.new(): + get: + return get_first() + set(value): + set_first(value) +@export var second: DockableLayoutNode = DockableLayoutPanel.new(): + get: + return get_second() + set(value): + set_second(value) + +var _direction := Direction.HORIZONTAL +var _percent := 0.5 +var _first: DockableLayoutNode +var _second: DockableLayoutNode func _init() -> void: resource_name = "Split" -func clone(): - var new_split = get_script().new() - new_split._direction = _direction - new_split._percent = _percent - new_split.first = _first.clone() - new_split.second = _second.clone() - return new_split - - -func set_first(value) -> void: +func set_first(value: DockableLayoutNode) -> void: if value == null: - _first = LayoutPanel.new() + _first = DockableLayoutPanel.new() else: _first = value _first.parent = self emit_tree_changed() -func get_first(): +func get_first() -> DockableLayoutNode: return _first -func set_second(value) -> void: +func set_second(value: DockableLayoutNode) -> void: if value == null: - _second = LayoutPanel.new() + _second = DockableLayoutPanel.new() else: _second = value _second.parent = self emit_tree_changed() -func get_second(): +func get_second() -> DockableLayoutNode: return _second -func set_direction(value: int) -> void: +func set_direction(value: Direction) -> void: if value != _direction: _direction = value emit_tree_changed() -func get_direction() -> int: +func get_direction() -> Direction: return _direction func set_percent(value: float) -> void: - var clamped_value = clamp(value, 0, 1) + var clamped_value := clampf(value, 0, 1) if not is_equal_approx(_percent, clamped_value): _percent = clamped_value emit_tree_changed() @@ -80,14 +81,15 @@ func get_percent() -> float: return _percent -func get_names() -> PoolStringArray: - var names = _first.get_names() +func get_names() -> PackedStringArray: + var names := _first.get_names() names.append_array(_second.get_names()) return names -func empty() -> bool: - return _first.empty() and _second.empty() +## Returns whether there are any nodes +func is_empty() -> bool: + return _first.is_empty() and _second.is_empty() func is_horizontal() -> bool: diff --git a/addons/dockable_container/plugin.cfg b/addons/dockable_container/plugin.cfg index c2558f9a39e..b35959190f1 100644 --- a/addons/dockable_container/plugin.cfg +++ b/addons/dockable_container/plugin.cfg @@ -9,5 +9,5 @@ Layout information is stored in Resource objects, so they can be saved/loaded fr This plugin also offers a replica of the Container layout to be edited directly in the inspector." author="gilzoide" -version="1.1.1" +version="1.1.2" script="plugin.gd" diff --git a/addons/dockable_container/plugin.gd b/addons/dockable_container/plugin.gd index 9e3f49b71da..e93e0101af5 100644 --- a/addons/dockable_container/plugin.gd +++ b/addons/dockable_container/plugin.gd @@ -1,15 +1,15 @@ -tool +@tool extends EditorPlugin -const DockableContainer = preload("dockable_container.gd") -const LayoutInspectorPlugin = preload("inspector_plugin/editor_inspector_plugin.gd") +const LayoutInspectorPlugin := preload("inspector_plugin/editor_inspector_plugin.gd") +const Icon := preload("icon.svg") -var _layout_inspector_plugin +var _layout_inspector_plugin: LayoutInspectorPlugin func _enter_tree() -> void: _layout_inspector_plugin = LayoutInspectorPlugin.new() - add_custom_type("DockableContainer", "Container", DockableContainer, null) + add_custom_type("DockableContainer", "Container", DockableContainer, Icon) add_inspector_plugin(_layout_inspector_plugin) diff --git a/addons/dockable_container/samples/TestScene.gd b/addons/dockable_container/samples/TestScene.gd index 057274046d6..f94ac972d7c 100644 --- a/addons/dockable_container/samples/TestScene.gd +++ b/addons/dockable_container/samples/TestScene.gd @@ -1,10 +1,10 @@ extends VBoxContainer -const SAVED_LAYOUT_PATH = "user://layout.tres" +const SAVED_LAYOUT_PATH := "user://layout.tres" -onready var _container = $DockableContainers/DockableContainer -onready var _clone_control = $HBoxContainer/ControlPrefab -onready var _checkbox_container = $HBoxContainer +@onready var _container := $DockableContainers/DockableContainer as DockableContainer +@onready var _clone_control := $HBoxContainer/ControlPrefab as ColorRect +@onready var _checkbox_container := $HBoxContainer as HBoxContainer func _ready() -> void: @@ -12,33 +12,33 @@ func _ready() -> void: $HBoxContainer/SaveLayoutButton.visible = false $HBoxContainer/LoadLayoutButton.visible = false - var tabs = _container.get_tabs() + var tabs := _container.get_tabs() for i in tabs.size(): - var checkbox = CheckBox.new() + var checkbox := CheckBox.new() checkbox.text = str(i) - checkbox.pressed = not _container.is_control_hidden(tabs[i]) - checkbox.connect("toggled", self, "_on_CheckButton_toggled", [tabs[i]]) + checkbox.button_pressed = not _container.is_control_hidden(tabs[i]) + checkbox.toggled.connect(_on_CheckButton_toggled.bind(tabs[i])) _checkbox_container.add_child(checkbox) func _on_add_pressed() -> void: - var control = _clone_control.duplicate() - control.get_node("Buttons/Rename").connect( - "pressed", self, "_on_control_rename_button_pressed", [control] + var control := _clone_control.duplicate() + control.get_node("Buttons/Rename").pressed.connect( + _on_control_rename_button_pressed.bind(control) ) - control.get_node("Buttons/Remove").connect( - "pressed", self, "_on_control_remove_button_pressed", [control] + control.get_node("Buttons/Remove").pressed.connect( + _on_control_remove_button_pressed.bind(control) ) control.color = Color(randf(), randf(), randf()) control.name = "Control0" _container.add_child(control, true) - yield(_container, "sort_children") + await _container.sort_children _container.set_control_as_current_tab(control) func _on_save_pressed() -> void: - if ResourceSaver.save(SAVED_LAYOUT_PATH, _container.get_layout()) != OK: + if ResourceSaver.save(_container.layout, SAVED_LAYOUT_PATH) != OK: print("ERROR") @@ -51,11 +51,11 @@ func _on_load_pressed() -> void: func _on_control_rename_button_pressed(control: Control) -> void: - control.name += " =D" + control.name = StringName(str(control.name) + " =D") func _on_control_remove_button_pressed(control: Control) -> void: - _container.remove_child(control) + control.get_parent().remove_child(control) control.queue_free() diff --git a/addons/dockable_container/samples/TestScene.tscn b/addons/dockable_container/samples/TestScene.tscn index 855aba0c381..80ca9cc6a0e 100644 --- a/addons/dockable_container/samples/TestScene.tscn +++ b/addons/dockable_container/samples/TestScene.tscn @@ -1,235 +1,176 @@ -[gd_scene load_steps=16 format=2] +[gd_scene load_steps=16 format=3 uid="uid://drlvhuchtk6if"] -[ext_resource path="res://addons/dockable_container/dockable_container.gd" type="Script" id=1] -[ext_resource path="res://addons/dockable_container/layout.gd" type="Script" id=2] -[ext_resource path="res://addons/dockable_container/layout_split.gd" type="Script" id=3] -[ext_resource path="res://addons/dockable_container/samples/TestScene.gd" type="Script" id=4] -[ext_resource path="res://addons/dockable_container/layout_panel.gd" type="Script" id=5] +[ext_resource type="Script" path="res://addons/dockable_container/dockable_container.gd" id="1"] +[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="2"] +[ext_resource type="Script" path="res://addons/dockable_container/samples/TestScene.gd" id="4"] +[ext_resource type="Script" path="res://addons/dockable_container/layout_split.gd" id="4_yhgfb"] +[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="5"] -[sub_resource type="Resource" id=5] +[sub_resource type="Resource" id="Resource_8aoc2"] resource_name = "Tabs" -script = ExtResource( 5 ) -names = PoolStringArray( "Control0" ) +script = ExtResource("5") +names = PackedStringArray("Control0") current_tab = 0 -[sub_resource type="Resource" id=1] +[sub_resource type="Resource" id="Resource_6kjom"] resource_name = "Tabs" -script = ExtResource( 5 ) -names = PoolStringArray( "Control1", "Control2" ) +script = ExtResource("5") +names = PackedStringArray("Control1", "Control2") current_tab = 0 -[sub_resource type="Resource" id=6] +[sub_resource type="Resource" id="Resource_hl8y1"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("4_yhgfb") direction = 1 percent = 0.5 -first = SubResource( 5 ) -second = SubResource( 1 ) +first = SubResource("Resource_8aoc2") +second = SubResource("Resource_6kjom") -[sub_resource type="Resource" id=2] +[sub_resource type="Resource" id="Resource_ybwqe"] resource_name = "Layout" -script = ExtResource( 2 ) -root = SubResource( 6 ) -hidden_tabs = { -} +script = ExtResource("2") +root = SubResource("Resource_hl8y1") +hidden_tabs = {} -[sub_resource type="Resource" id=3] +[sub_resource type="Resource" id="Resource_ntwfj"] resource_name = "Tabs" -script = ExtResource( 5 ) -names = PoolStringArray( "Control3" ) +script = ExtResource("5") +names = PackedStringArray("Control3") current_tab = 0 -[sub_resource type="Resource" id=7] +[sub_resource type="Resource" id="Resource_dmyvf"] resource_name = "Tabs" -script = ExtResource( 5 ) -names = PoolStringArray( "Control4" ) +script = ExtResource("5") +names = PackedStringArray("Control4") current_tab = 0 -[sub_resource type="Resource" id=8] +[sub_resource type="Resource" id="Resource_vag66"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("4_yhgfb") direction = 1 -percent = 0.28125 -first = SubResource( 3 ) -second = SubResource( 7 ) +percent = 0.281 +first = SubResource("Resource_ntwfj") +second = SubResource("Resource_dmyvf") -[sub_resource type="Resource" id=9] +[sub_resource type="Resource" id="Resource_4q660"] resource_name = "Tabs" -script = ExtResource( 5 ) -names = PoolStringArray( "Control5" ) +script = ExtResource("5") +names = PackedStringArray("Control5") current_tab = 0 -[sub_resource type="Resource" id=10] +[sub_resource type="Resource" id="Resource_jhibs"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("4_yhgfb") direction = 0 percent = 0.5 -first = SubResource( 8 ) -second = SubResource( 9 ) +first = SubResource("Resource_vag66") +second = SubResource("Resource_4q660") -[sub_resource type="Resource" id=4] +[sub_resource type="Resource" id="Resource_xhxpg"] resource_name = "Layout" -script = ExtResource( 2 ) -root = SubResource( 10 ) -hidden_tabs = { -} +script = ExtResource("2") +root = SubResource("Resource_jhibs") +hidden_tabs = {} [node name="SampleScene" type="VBoxContainer"] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -script = ExtResource( 4 ) +script = ExtResource("4") [node name="HBoxContainer" type="HBoxContainer" parent="."] -margin_right = 1024.0 -margin_bottom = 20.0 -custom_constants/separation = 16 +layout_mode = 2 alignment = 1 [node name="AddControlButton" type="Button" parent="HBoxContainer"] -margin_left = 345.0 -margin_right = 472.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 4 text = "(+) ADD CONTROL" [node name="SaveLayoutButton" type="Button" parent="HBoxContainer"] -margin_left = 488.0 -margin_right = 575.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 4 text = "Save Layout" [node name="LoadLayoutButton" type="Button" parent="HBoxContainer"] -margin_left = 591.0 -margin_right = 679.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 4 text = "Load Layout" [node name="ControlPrefab" type="ColorRect" parent="HBoxContainer"] visible = false -margin_left = 677.0 -margin_right = 697.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 20, 20 ) -color = Color( 0.129412, 0.121569, 0.121569, 1 ) +layout_mode = 2 +color = Color(0.129412, 0.121569, 0.121569, 1) [node name="Buttons" type="VBoxContainer" parent="HBoxContainer/ControlPrefab"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -65.5 -margin_top = -22.0 -margin_right = 65.5 -margin_bottom = 22.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -65.5 +offset_top = -22.0 +offset_right = 65.5 +offset_bottom = 22.0 [node name="Rename" type="Button" parent="HBoxContainer/ControlPrefab/Buttons"] -margin_right = 131.0 -margin_bottom = 20.0 +layout_mode = 2 text = "Rename" -__meta__ = { -"_edit_use_anchors_": false -} [node name="Remove" type="Button" parent="HBoxContainer/ControlPrefab/Buttons"] -margin_top = 24.0 -margin_right = 131.0 -margin_bottom = 44.0 +layout_mode = 2 text = "REMOVE" -__meta__ = { -"_edit_use_anchors_": false -} [node name="DockableContainers" type="HBoxContainer" parent="."] -margin_top = 24.0 -margin_right = 1024.0 -margin_bottom = 600.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="DockableContainer" type="Container" parent="DockableContainers"] -margin_right = 483.0 -margin_bottom = 576.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} -layout = SubResource( 2 ) +script = ExtResource("1") +layout = SubResource("Resource_ybwqe") [node name="Control0" type="ColorRect" parent="DockableContainers/DockableContainer"] -margin_left = 4.0 -margin_top = 32.0 -margin_right = 479.0 -margin_bottom = 278.0 -rect_min_size = Vector2( 64, 64 ) +layout_mode = 2 [node name="Control1" type="ColorRect" parent="DockableContainers/DockableContainer"] -margin_left = 4.0 -margin_top = 326.0 -margin_right = 479.0 -margin_bottom = 572.0 -rect_min_size = Vector2( 128, 128 ) -color = Color( 0.141176, 0.0745098, 0.603922, 1 ) +layout_mode = 2 +color = Color(0.141176, 0.0745098, 0.603922, 1) [node name="Control2" type="ColorRect" parent="DockableContainers/DockableContainer"] visible = false -margin_top = 294.0 -margin_right = 64.0 -margin_bottom = 358.0 -rect_min_size = Vector2( 64, 64 ) -color = Color( 0.533333, 0.380392, 0.380392, 1 ) +layout_mode = 2 +color = Color(0.533333, 0.380392, 0.380392, 1) [node name="Separator" type="ColorRect" parent="DockableContainers"] -margin_left = 487.0 -margin_right = 537.0 -margin_bottom = 576.0 -rect_min_size = Vector2( 50, 0 ) -color = Color( 0, 0, 0, 1 ) +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 +color = Color(0, 0, 0, 1) [node name="DockableContainer2" type="Container" parent="DockableContainers"] -margin_left = 541.0 -margin_right = 1024.0 -margin_bottom = 576.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} -layout = SubResource( 4 ) +script = ExtResource("1") +layout = SubResource("Resource_xhxpg") [node name="Control3" type="ColorRect" parent="DockableContainers/DockableContainer2"] -margin_left = 4.0 -margin_top = 32.0 -margin_right = 231.5 -margin_bottom = 152.0 -rect_min_size = Vector2( 64, 64 ) -color = Color( 0, 1, 0.905882, 1 ) +layout_mode = 2 +color = Color(0, 1, 0.905882, 1) [node name="Control4" type="ColorRect" parent="DockableContainers/DockableContainer2"] -margin_left = 4.0 -margin_top = 200.0 -margin_right = 231.5 -margin_bottom = 572.0 -rect_min_size = Vector2( 128, 128 ) -color = Color( 0, 0.698039, 0.0588235, 1 ) +layout_mode = 2 +color = Color(0, 0.698039, 0.0588235, 1) [node name="Control5" type="ColorRect" parent="DockableContainers/DockableContainer2"] -margin_left = 251.5 -margin_top = 32.0 -margin_right = 479.0 -margin_bottom = 572.0 -rect_min_size = Vector2( 64, 64 ) -color = Color( 1, 0.937255, 0, 1 ) +layout_mode = 2 +color = Color(1, 0.937255, 0, 1) [connection signal="pressed" from="HBoxContainer/AddControlButton" to="." method="_on_add_pressed"] [connection signal="pressed" from="HBoxContainer/SaveLayoutButton" to="." method="_on_save_pressed"] diff --git a/addons/dockable_container/split_handle.gd b/addons/dockable_container/split_handle.gd index 54b0aee534d..baf4b1fb5f2 100644 --- a/addons/dockable_container/split_handle.gd +++ b/addons/dockable_container/split_handle.gd @@ -1,53 +1,49 @@ -tool +@tool extends Control -const Layout = preload("layout.gd") - -const SPLIT_THEME_CLASS = [ - "HSplitContainer", # SPLIT_THEME_CLASS[LayoutSplit.Direction.HORIZONTAL] - "VSplitContainer", # SPLIT_THEME_CLASS[LayoutSplit.Direction.VERTICAL] +const SPLIT_THEME_CLASS: PackedStringArray = [ + "HSplitContainer", # SPLIT_THEME_CLASS[DockableLayoutSplit.Direction.HORIZONTAL] + "VSplitContainer", # SPLIT_THEME_CLASS[DockableLayoutSplit.Direction.VERTICAL] ] -const SPLIT_MOUSE_CURSOR_SHAPE = [ - Control.CURSOR_HSPLIT, # SPLIT_MOUSE_CURSOR_SHAPE[LayoutSplit.Direction.HORIZONTAL] - Control.CURSOR_VSPLIT, # SPLIT_MOUSE_CURSOR_SHAPE[LayoutSplit.Direction.VERTICAL] +const SPLIT_MOUSE_CURSOR_SHAPE: Array[Control.CursorShape] = [ + Control.CURSOR_HSPLIT, # SPLIT_MOUSE_CURSOR_SHAPE[DockableLayoutSplit.Direction.HORIZONTAL] + Control.CURSOR_VSPLIT, # SPLIT_MOUSE_CURSOR_SHAPE[DockableLayoutSplit.Direction.VERTICAL] ] -var layout_split: Layout.LayoutSplit +var layout_split: DockableLayoutSplit var first_minimum_size: Vector2 var second_minimum_size: Vector2 -var _parent_rect -var _mouse_hovering = false -var _dragging = false +var _parent_rect: Rect2 +var _mouse_hovering := false +var _dragging := false func _draw() -> void: - var theme_class = SPLIT_THEME_CLASS[layout_split.direction] - var icon = get_icon("grabber", theme_class) - var autohide = bool(get_constant("autohide", theme_class)) + var theme_class := SPLIT_THEME_CLASS[layout_split.direction] + var icon := get_theme_icon("grabber", theme_class) + var autohide := bool(get_theme_constant("autohide", theme_class)) if not icon or (autohide and not _mouse_hovering): return - draw_texture(icon, (rect_size - icon.get_size()) * 0.5) + draw_texture(icon, (size - icon.get_size()) * 0.5) func _gui_input(event: InputEvent) -> void: - if event is InputEventMouseButton and event.button_index == BUTTON_LEFT: + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: _dragging = event.is_pressed() - if event.doubleclick: + if event.double_click: layout_split.percent = 0.5 elif _dragging and event is InputEventMouseMotion: - var mouse_in_parent = get_parent_control().get_local_mouse_position() + var mouse_in_parent := get_parent_control().get_local_mouse_position() if layout_split.is_horizontal(): layout_split.percent = ( - (mouse_in_parent.x - _parent_rect.position.x) - / _parent_rect.size.x + (mouse_in_parent.x - _parent_rect.position.x) / _parent_rect.size.x ) else: layout_split.percent = ( - (mouse_in_parent.y - _parent_rect.position.y) - / _parent_rect.size.y + (mouse_in_parent.y - _parent_rect.position.y) / _parent_rect.size.y ) @@ -55,13 +51,13 @@ func _notification(what: int) -> void: if what == NOTIFICATION_MOUSE_ENTER: _mouse_hovering = true set_split_cursor(true) - if bool(get_constant("autohide", SPLIT_THEME_CLASS[layout_split.direction])): - update() + if bool(get_theme_constant("autohide", SPLIT_THEME_CLASS[layout_split.direction])): + queue_redraw() elif what == NOTIFICATION_MOUSE_EXIT: _mouse_hovering = false set_split_cursor(false) - if bool(get_constant("autohide", SPLIT_THEME_CLASS[layout_split.direction])): - update() + if bool(get_theme_constant("autohide", SPLIT_THEME_CLASS[layout_split.direction])): + queue_redraw() elif what == NOTIFICATION_FOCUS_EXIT: _dragging = false @@ -69,15 +65,15 @@ func _notification(what: int) -> void: func get_layout_minimum_size() -> Vector2: if not layout_split: return Vector2.ZERO - var separation = get_constant("separation", SPLIT_THEME_CLASS[layout_split.direction]) + var separation := get_theme_constant("separation", SPLIT_THEME_CLASS[layout_split.direction]) if layout_split.is_horizontal(): return Vector2( first_minimum_size.x + separation + second_minimum_size.x, - max(first_minimum_size.y, second_minimum_size.y) + maxf(first_minimum_size.y, second_minimum_size.y) ) else: return Vector2( - max(first_minimum_size.x, second_minimum_size.x), + maxf(first_minimum_size.x, second_minimum_size.x), first_minimum_size.y + separation + second_minimum_size.y ) @@ -91,41 +87,34 @@ func set_split_cursor(value: bool) -> void: func get_split_rects(rect: Rect2) -> Dictionary: _parent_rect = rect - var separation = get_constant("separation", SPLIT_THEME_CLASS[layout_split.direction]) - var origin = rect.position - var size = rect.size - var percent = layout_split.percent + var separation := get_theme_constant("separation", SPLIT_THEME_CLASS[layout_split.direction]) + var origin := rect.position + var percent := layout_split.percent if layout_split.is_horizontal(): - var first_width = max((size.x - separation) * percent, first_minimum_size.x) - var split_offset = clamp( - size.x * percent - separation * 0.5, + var split_offset := clampf( + rect.size.x * percent - separation * 0.5, first_minimum_size.x, - size.x - second_minimum_size.x - separation + rect.size.x - second_minimum_size.x - separation ) - var second_width = size.x - split_offset - separation + var second_width := rect.size.x - split_offset - separation return { - "first": Rect2(origin.x, origin.y, split_offset, size.y), - "self": Rect2(origin.x + split_offset, origin.y, separation, size.y), - "second": Rect2(origin.x + split_offset + separation, origin.y, second_width, size.y), + "first": Rect2(origin.x, origin.y, split_offset, rect.size.y), + "self": Rect2(origin.x + split_offset, origin.y, separation, rect.size.y), + "second": + Rect2(origin.x + split_offset + separation, origin.y, second_width, rect.size.y), } else: - var first_height = max((size.y - separation) * percent, first_minimum_size.y) - var split_offset = clamp( - size.y * percent - separation * 0.5, + var split_offset := clampf( + rect.size.y * percent - separation * 0.5, first_minimum_size.y, - size.y - second_minimum_size.y - separation + rect.size.y - second_minimum_size.y - separation ) - var second_height = size.y - split_offset - separation + var second_height := rect.size.y - split_offset - separation return { - "first": Rect2(origin.x, origin.y, size.x, split_offset), - "self": Rect2(origin.x, origin.y + split_offset, size.x, separation), - "second": Rect2(origin.x, origin.y + split_offset + separation, size.x, second_height), + "first": Rect2(origin.x, origin.y, rect.size.x, split_offset), + "self": Rect2(origin.x, origin.y + split_offset, rect.size.x, separation), + "second": + Rect2(origin.x, origin.y + split_offset + separation, rect.size.x, second_height), } - - -static func get_separation_with_control(control: Control) -> Vector2: - var hseparation = control.get_constant("separation", "HSplitContainer") - var vseparation = control.get_constant("separation", "VSplitContainer") - return Vector2(hseparation, vseparation) diff --git a/addons/gdgifexporter/converter.gd b/addons/gdgifexporter/converter.gd index 846d93cdd3d..d294297fa77 100644 --- a/addons/gdgifexporter/converter.gd +++ b/addons/gdgifexporter/converter.gd @@ -1,59 +1,53 @@ -extends Reference +extends RefCounted var _shader: Shader -func get_indexed_datas(image: Image, colors: Array) -> PoolByteArray: - _shader = preload("./lookup_color.shader") +func get_indexed_datas(image: Image, colors: Array) -> PackedByteArray: + _shader = preload("./lookup_color.gdshader") return _convert(image, colors) -func get_similar_indexed_datas(image: Image, colors: Array) -> PoolByteArray: - _shader = preload("./lookup_similar.shader") +func get_similar_indexed_datas(image: Image, colors: Array) -> PackedByteArray: + _shader = preload("./lookup_similar.gdshader") return _convert(image, colors) -func _convert(image: Image, colors: Array) -> PoolByteArray: - var vp = VisualServer.viewport_create() - var canvas = VisualServer.canvas_create() - VisualServer.viewport_attach_canvas(vp, canvas) - VisualServer.viewport_set_size(vp, image.get_width(), image.get_height()) - VisualServer.viewport_set_disable_3d(vp, true) - VisualServer.viewport_set_usage(vp, VisualServer.VIEWPORT_USAGE_2D) - VisualServer.viewport_set_hdr(vp, true) - VisualServer.viewport_set_active(vp, true) - - var ci_rid = VisualServer.canvas_item_create() - VisualServer.viewport_set_canvas_transform(vp, canvas, Transform()) - VisualServer.canvas_item_set_parent(ci_rid, canvas) - var texture = ImageTexture.new() - texture.create_from_image(image) - VisualServer.canvas_item_add_texture_rect( - ci_rid, Rect2(Vector2(0, 0), image.get_size()), texture +func _convert(image: Image, colors: Array) -> PackedByteArray: + var vp := RenderingServer.viewport_create() + var canvas := RenderingServer.canvas_create() + RenderingServer.viewport_attach_canvas(vp, canvas) + RenderingServer.viewport_set_size(vp, image.get_width(), image.get_height()) + RenderingServer.viewport_set_disable_3d(vp, true) + RenderingServer.viewport_set_active(vp, true) + + var ci_rid := RenderingServer.canvas_item_create() + RenderingServer.viewport_set_canvas_transform(vp, canvas, Transform3D()) + RenderingServer.canvas_item_set_parent(ci_rid, canvas) + var texture := ImageTexture.create_from_image(image) + RenderingServer.canvas_item_add_texture_rect( + ci_rid, Rect2(Vector2.ZERO, image.get_size()), texture ) - var mat_rid = VisualServer.material_create() - VisualServer.material_set_shader(mat_rid, _shader.get_rid()) - var lut = Image.new() - lut.create(256, 1, false, Image.FORMAT_RGB8) + var mat_rid := RenderingServer.material_create() + RenderingServer.material_set_shader(mat_rid, _shader.get_rid()) + var lut := Image.create(256, 1, false, Image.FORMAT_RGB8) lut.fill(Color8(colors[0][0], colors[0][1], colors[0][2])) - lut.lock() for i in colors.size(): lut.set_pixel(i, 0, Color8(colors[i][0], colors[i][1], colors[i][2])) - var lut_tex = ImageTexture.new() - lut_tex.create_from_image(lut) - VisualServer.material_set_param(mat_rid, "lut", lut_tex) - VisualServer.canvas_item_set_material(ci_rid, mat_rid) - - VisualServer.viewport_set_update_mode(vp, VisualServer.VIEWPORT_UPDATE_ONCE) - VisualServer.viewport_set_vflip(vp, true) - VisualServer.force_draw(false) - image = VisualServer.texture_get_data(VisualServer.viewport_get_texture(vp)) - - VisualServer.free_rid(vp) - VisualServer.free_rid(canvas) - VisualServer.free_rid(ci_rid) - VisualServer.free_rid(mat_rid) + var lut_tex := ImageTexture.create_from_image(lut) + # Not sure why putting lut_tex is an array is needed, but without it, it doesn't work + RenderingServer.material_set_param(mat_rid, "lut", [lut_tex]) + RenderingServer.canvas_item_set_material(ci_rid, mat_rid) + + RenderingServer.viewport_set_update_mode(vp, RenderingServer.VIEWPORT_UPDATE_ONCE) + RenderingServer.force_draw(false) + image = RenderingServer.texture_2d_get(RenderingServer.viewport_get_texture(vp)) + + RenderingServer.free_rid(vp) + RenderingServer.free_rid(canvas) + RenderingServer.free_rid(ci_rid) + RenderingServer.free_rid(mat_rid) image.convert(Image.FORMAT_R8) return image.get_data() diff --git a/addons/gdgifexporter/exporter.gd b/addons/gdgifexporter/exporter.gd index a6b9f408daa..79a2aa6578e 100644 --- a/addons/gdgifexporter/exporter.gd +++ b/addons/gdgifexporter/exporter.gd @@ -1,16 +1,16 @@ -extends Reference +extends RefCounted enum Error { OK = 0, EMPTY_IMAGE = 1, BAD_IMAGE_FORMAT = 2 } -var little_endian = preload("./little_endian.gd").new() -var lzw = preload("./gif-lzw/lzw.gd").new() -var converter = preload("./converter.gd") +var little_endian := preload("./little_endian.gd").new() +var lzw := preload("./gif-lzw/lzw.gd").new() +var converter := preload("./converter.gd") var last_color_table := [] var last_transparency_index := -1 # File data and Header -var data := PoolByteArray([]) +var data := PackedByteArray([]) func _init(_width: int, _height: int): @@ -19,12 +19,12 @@ func _init(_width: int, _height: int): add_application_ext("NETSCAPE", "2.0", [1, 0, 0]) -func export_file_data() -> PoolByteArray: - return data + PoolByteArray([0x3b]) +func export_file_data() -> PackedByteArray: + return data + PackedByteArray([0x3b]) func add_header() -> void: - data += "GIF".to_ascii() + "89a".to_ascii() + data += "GIF".to_ascii_buffer() + "89a".to_ascii_buffer() func add_logical_screen_descriptor(width: int, height: int) -> void: @@ -53,18 +53,17 @@ func add_application_ext(app_iden: String, app_auth_code: String, _data: Array) data.append(extension_introducer) data.append(extension_label) data.append(block_size) - data += app_iden.to_ascii() - data += app_auth_code.to_ascii() + data += app_iden.to_ascii_buffer() + data += app_auth_code.to_ascii_buffer() data.append(_data.size()) - data += PoolByteArray(_data) + data += PackedByteArray(_data) data.append(0) # finds the image color table. Stops if the size gets larger than 256. func find_color_table(image: Image) -> Dictionary: - image.lock() var result: Dictionary = {} - var image_data: PoolByteArray = image.get_data() + var image_data: PackedByteArray = image.get_data() for i in range(0, image_data.size(), 4): var color: Array = [ @@ -77,8 +76,6 @@ func find_color_table(image: Image) -> Dictionary: result[color] = result.size() if result.size() > 256: break - - image.unlock() return result @@ -89,10 +86,11 @@ func find_transparency_color_index(color_table: Dictionary) -> int: return -1 -func colors_to_codes(img: Image, col_palette: Dictionary, transp_color_index: int) -> PoolByteArray: - img.lock() - var image_data: PoolByteArray = img.get_data() - var result: PoolByteArray = PoolByteArray([]) +func colors_to_codes( + img: Image, col_palette: Dictionary, transp_color_index: int +) -> PackedByteArray: + var image_data: PackedByteArray = img.get_data() + var result: PackedByteArray = PackedByteArray([]) for i in range(0, image_data.size(), 4): var color: Array = [image_data[i], image_data[i + 1], image_data[i + 2], image_data[i + 3]] @@ -106,7 +104,6 @@ func colors_to_codes(img: Image, col_palette: Dictionary, transp_color_index: in result.append(0) push_warning("colors_to_codes: color not found! [%d, %d, %d, %d]" % color) - img.unlock() return result @@ -120,11 +117,11 @@ func make_proper_size(color_table: Array) -> Array: func calc_delay_time(frame_delay: float) -> int: - return int(ceil(frame_delay / 0.01)) + return int(ceili(frame_delay / 0.01)) -func color_table_to_indexes(colors: Array) -> PoolByteArray: - var result: PoolByteArray = PoolByteArray([]) +func color_table_to_indexes(colors: Array) -> PackedByteArray: + var result: PackedByteArray = PackedByteArray([]) for i in range(colors.size()): result.append(i) return result @@ -141,13 +138,13 @@ func add_frame(image: Image, frame_delay: float, quantizator: Script) -> int: var found_color_table: Dictionary = find_color_table(image) - var image_converted_to_codes: PoolByteArray + var image_converted_to_codes: PackedByteArray var transparency_color_index: int = -1 var color_table: Array if found_color_table.size() <= 256: # we don't need to quantize the image. # try to find transparency color index. transparency_color_index = find_transparency_color_index(found_color_table) - # if didn't found transparency color index but there is atleast one + # if didn't find transparency color index but there is at least one # place for this color then add it artificially. if transparency_color_index == -1 and found_color_table.size() <= 255: found_color_table[[0, 0, 0, 0]] = found_color_table.size() @@ -172,7 +169,7 @@ func add_frame(image: Image, frame_delay: float, quantizator: Script) -> int: var compressed_image_result: Array = lzw.compress_lzw( image_converted_to_codes, color_table_indexes ) - var compressed_image_data: PoolByteArray = compressed_image_result[0] + var compressed_image_data: PackedByteArray = compressed_image_result[0] var lzw_min_code_size: int = compressed_image_result[1] add_graphic_constrol_ext(delay_time, transparency_color_index) @@ -183,7 +180,7 @@ func add_frame(image: Image, frame_delay: float, quantizator: Script) -> int: return Error.OK -# adds frame with last color informations +## Adds frame with last color information func add_frame_with_lci(image: Image, frame_delay: float) -> int: # check if image is of good format if image.get_format() != Image.FORMAT_RGBA8: @@ -193,7 +190,7 @@ func add_frame_with_lci(image: Image, frame_delay: float) -> int: if image.is_empty(): return Error.EMPTY_IMAGE - var image_converted_to_codes: PoolByteArray = converter.new().get_similar_indexed_datas( + var image_converted_to_codes: PackedByteArray = converter.new().get_similar_indexed_datas( image, last_color_table ) @@ -201,7 +198,7 @@ func add_frame_with_lci(image: Image, frame_delay: float) -> int: var compressed_image_result: Array = lzw.compress_lzw( image_converted_to_codes, color_table_indexes ) - var compressed_image_data: PoolByteArray = compressed_image_result[0] + var compressed_image_data: PackedByteArray = compressed_image_result[0] var lzw_min_code_size: int = compressed_image_result[1] var delay_time := calc_delay_time(frame_delay) @@ -258,38 +255,34 @@ func color_table_bit_size(color_table: Array) -> int: func add_local_color_table(color_table: Array) -> void: for color in color_table: - data.append_array([color[0], color[1], color[2]]) + data.append(color[0]) + data.append(color[1]) + data.append(color[2]) var size := color_table_bit_size(color_table) var proper_size := int(pow(2, size + 1)) if color_table.size() != proper_size: for i in range(proper_size - color_table.size()): - data.append_array([0, 0, 0]) + data += PackedByteArray([0, 0, 0]) -func add_image_data_block(lzw_min_code_size: int, frame_data: PoolByteArray) -> void: - var max_block_size = 254 +func add_image_data_block(lzw_min_code_size: int, _data: PackedByteArray) -> void: data.append(lzw_min_code_size) - # the amount of blocks which will be stored - # ceiled because the last block doesn't have to be exactly max_block_size - var block_count = ceil(frame_data.size() / float(max_block_size)) - - for i in range(block_count): - var start_block_index = i * max_block_size - var end_block_index = (i * max_block_size) + max_block_size - 1 - # final block can be smaller than max block size - end_block_index = ( - end_block_index - if end_block_index < frame_data.size() - 1 - else frame_data.size() - 1 - ) - var block_size = end_block_index - start_block_index + 1 - var block = frame_data.subarray(start_block_index, end_block_index) - - # store block size and it's data - data.append(block_size) - data.append_array(block) - if not frame_data.empty(): + var block_size_index: int = 0 + var i: int = 0 + var data_index: int = 0 + while data_index < _data.size(): + if i == 0: + data.append(0) + block_size_index = data.size() - 1 + data.append(_data[data_index]) + data[block_size_index] += 1 + data_index += 1 + i += 1 + if i == 254: + i = 0 + + if not _data.is_empty(): data.append(0) diff --git a/addons/gdgifexporter/gif-lzw/lsbbitpacker.gd b/addons/gdgifexporter/gif-lzw/lsbbitpacker.gd index 3141d091409..d6cc3f9cffd 100644 --- a/addons/gdgifexporter/gif-lzw/lsbbitpacker.gd +++ b/addons/gdgifexporter/gif-lzw/lsbbitpacker.gd @@ -1,11 +1,11 @@ -extends Reference +extends RefCounted class LSBLZWBitPacker: var bit_index: int = 0 var stream: int = 0 - var chunks: PoolByteArray = PoolByteArray([]) + var chunks: PackedByteArray = PackedByteArray([]) func put_byte(): chunks.append(stream & 0xff) @@ -20,7 +20,7 @@ class LSBLZWBitPacker: while bit_index >= 8: self.put_byte() - func pack() -> PoolByteArray: + func pack() -> PackedByteArray: if bit_index != 0: self.put_byte() return chunks @@ -28,4 +28,4 @@ class LSBLZWBitPacker: func reset() -> void: bit_index = 0 stream = 0 - chunks = PoolByteArray([]) + chunks = PackedByteArray([]) diff --git a/addons/gdgifexporter/gif-lzw/lsbbitunpacker.gd b/addons/gdgifexporter/gif-lzw/lsbbitunpacker.gd index 9f8507f2db8..732c86b0aa0 100644 --- a/addons/gdgifexporter/gif-lzw/lsbbitunpacker.gd +++ b/addons/gdgifexporter/gif-lzw/lsbbitunpacker.gd @@ -1,13 +1,13 @@ -extends Reference +extends RefCounted class LSBLZWBitUnpacker: - var chunk_stream: PoolByteArray + var chunk_stream: PackedByteArray var bit_index: int = 0 var byte: int var byte_index: int = 0 - func _init(_chunk_stream: PoolByteArray): + func _init(_chunk_stream: PackedByteArray): chunk_stream = _chunk_stream self.get_byte() diff --git a/addons/gdgifexporter/gif-lzw/lzw.gd b/addons/gdgifexporter/gif-lzw/lzw.gd index 8ca1a85afcf..6f90f99eb25 100644 --- a/addons/gdgifexporter/gif-lzw/lzw.gd +++ b/addons/gdgifexporter/gif-lzw/lzw.gd @@ -1,38 +1,84 @@ -extends Reference +extends RefCounted -var lsbbitpacker = preload("./lsbbitpacker.gd") -var lsbbitunpacker = preload("./lsbbitunpacker.gd") +var lsbbitpacker := preload("./lsbbitpacker.gd") +var lsbbitunpacker := preload("./lsbbitunpacker.gd") -var code_table := {} -var entries_counter := 0 +class CodeEntry: + var sequence: PackedByteArray + var raw_array: Array -func get_bit_length(value: int): - # bitwise or on value does ensure that the function works with value 0 - # long number at the end is log(2.0) - return ceil(log(value | 0x1 + 1) / 0.6931471805599453) + func _init(_sequence): + raw_array = _sequence + sequence = _sequence + func add(other: CodeEntry) -> CodeEntry: + return CodeEntry.new(self.raw_array + other.raw_array) -func initialize_color_code_table(colors: PoolByteArray) -> void: - code_table.clear() - entries_counter = 0 + func _to_string(): + var result: String = "" + for element in self.sequence: + result += str(element) + ", " + return result.substr(0, result.length() - 2) + + +class CodeTable: + var entries: Dictionary = {} + var counter: int = 0 + var lookup: Dictionary = {} + + func add(entry) -> int: + self.entries[self.counter] = entry + self.lookup[entry.raw_array] = self.counter + counter += 1 + return counter + + func find(entry) -> int: + return self.lookup.get(entry.raw_array, -1) + + func has(entry) -> bool: + return self.find(entry) != -1 + + func get_entry(index: int) -> CodeEntry: + return self.entries.get(index, null) + + func _to_string() -> String: + var result: String = "CodeTable:\n" + for id in self.entries: + result += str(id) + ": " + self.entries[id].to_string() + "\n" + result += "Counter: " + str(self.counter) + "\n" + return result + + +func log2(value: float) -> float: + return log(value) / log(2.0) + + +func get_bits_number_for(value: int) -> int: + if value == 0: + return 1 + return int(ceili(log2(value + 1))) + + +func initialize_color_code_table(colors: PackedByteArray) -> CodeTable: + var result_code_table: CodeTable = CodeTable.new() for color_id in colors: # warning-ignore:return_value_discarded - code_table[PoolByteArray([color_id])] = entries_counter - entries_counter += 1 + result_code_table.add(CodeEntry.new([color_id])) # move counter to the first available compression code index var last_color_index: int = colors.size() - 1 - var clear_code_index: int = pow(2, get_bit_length(last_color_index)) - entries_counter = clear_code_index + 2 + var clear_code_index: int = pow(2, get_bits_number_for(last_color_index)) + result_code_table.counter = clear_code_index + 2 + return result_code_table # compression and decompression done with source: # http://www.matthewflickinger.com/lab/whatsinagif/lzw_image_data.asp -func compress_lzw(index_stream: PoolByteArray, colors: PoolByteArray) -> Array: +func compress_lzw(image: PackedByteArray, colors: PackedByteArray) -> Array: # Initialize code table - initialize_color_code_table(colors) + var code_table: CodeTable = initialize_color_code_table(colors) # Clear Code index is 2** # is the amount of bits needed to write down all colors # from color table. We use last color index because we can write @@ -40,63 +86,127 @@ func compress_lzw(index_stream: PoolByteArray, colors: PoolByteArray) -> Array: # Number 15 is in binary 0b1111, so we'll need 4 bits to write all # colors down. var last_color_index: int = colors.size() - 1 - var clear_code_index: int = pow(2, get_bit_length(last_color_index)) - var current_code_size: int = get_bit_length(clear_code_index) - var binary_code_stream = lsbbitpacker.LSBLZWBitPacker.new() + var clear_code_index: int = pow(2, get_bits_number_for(last_color_index)) + var index_stream: PackedByteArray = image + var current_code_size: int = get_bits_number_for(clear_code_index) + var binary_code_stream := lsbbitpacker.LSBLZWBitPacker.new() # initialize with Clear Code binary_code_stream.write_bits(clear_code_index, current_code_size) # Read first index from index stream. - var index_buffer := PoolByteArray([index_stream[0]]) + var index_buffer := CodeEntry.new([index_stream[0]]) var data_index: int = 1 # while data_index < index_stream.size(): # Get the next index from the index stream. - var k := index_stream[data_index] + var k := CodeEntry.new([index_stream[data_index]]) data_index += 1 # Is index buffer + k in our code table? - var new_index_buffer := PoolByteArray(index_buffer) - new_index_buffer.push_back(k) + var new_index_buffer := index_buffer.add(k) if code_table.has(new_index_buffer): # if YES # Add k to the end of the index buffer index_buffer = new_index_buffer else: # if NO # Add a row for index buffer + k into our code table - binary_code_stream.write_bits(code_table.get(index_buffer, -1), current_code_size) + binary_code_stream.write_bits(code_table.find(index_buffer), current_code_size) # We don't want to add new code to code table if we've exceeded 4095 # index. - var last_entry_index: int = entries_counter - 1 + var last_entry_index: int = code_table.counter - 1 if last_entry_index != 4095: # Output the code for just the index buffer to our code stream # warning-ignore:return_value_discarded - code_table[new_index_buffer] = entries_counter - entries_counter += 1 + code_table.add(new_index_buffer) else: # if we exceeded 4095 index (code table is full), we should # output Clear Code and reset everything. binary_code_stream.write_bits(clear_code_index, current_code_size) - initialize_color_code_table(colors) + code_table = initialize_color_code_table(colors) # get_bits_number_for(clear_code_index) is the same as # LZW code size + 1 - current_code_size = get_bit_length(clear_code_index) + current_code_size = get_bits_number_for(clear_code_index) # Detect when you have to save new codes in bigger bits boxes # change current code size when it happens because we want to save # flexible code sized codes - var new_code_size_candidate: int = get_bit_length(entries_counter - 1) + var new_code_size_candidate: int = get_bits_number_for(code_table.counter - 1) if new_code_size_candidate > current_code_size: current_code_size = new_code_size_candidate # Index buffer is set to k - index_buffer = PoolByteArray([k]) + index_buffer = k # Output code for contents of index buffer - binary_code_stream.write_bits(code_table.get(index_buffer, -1), current_code_size) + binary_code_stream.write_bits(code_table.find(index_buffer), current_code_size) # output end with End Of Information Code binary_code_stream.write_bits(clear_code_index + 1, current_code_size) - var min_code_size: int = get_bit_length(clear_code_index) - 1 + var min_code_size: int = get_bits_number_for(clear_code_index) - 1 return [binary_code_stream.pack(), min_code_size] + + +# gdlint: ignore=max-line-length +func decompress_lzw( + code_stream_data: PackedByteArray, min_code_size: int, colors: PackedByteArray +) -> PackedByteArray: + var code_table: CodeTable = initialize_color_code_table(colors) + var index_stream := PackedByteArray([]) + var binary_code_stream = lsbbitunpacker.LSBLZWBitUnpacker.new(code_stream_data) + var current_code_size: int = min_code_size + 1 + var clear_code_index: int = pow(2, min_code_size) + + # CODE is an index of code table, {CODE} is sequence inside + # code table with index CODE. The same goes for PREVCODE. + + # Remove first Clear Code from stream. We don't need it. + binary_code_stream.remove_bits(current_code_size) + + # let CODE be the first code in the code stream + var code: int = binary_code_stream.read_bits(current_code_size) + # output {CODE} to index stream + index_stream.append_array(code_table.get_entry(code).sequence) + # set PREVCODE = CODE + var prevcode: int = code + # + while true: + # let CODE be the next code in the code stream + code = binary_code_stream.read_bits(current_code_size) + # Detect Clear Code. When detected reset everything and get next code. + if code == clear_code_index: + code_table = initialize_color_code_table(colors) + current_code_size = min_code_size + 1 + code = binary_code_stream.read_bits(current_code_size) + elif code == clear_code_index + 1: # Stop when detected EOI Code. + break + # is CODE in the code table? + var code_entry: CodeEntry = code_table.get_entry(code) + if code_entry != null: # if YES + # output {CODE} to index stream + index_stream.append_array(code_entry.sequence) + # let k be the first index in {CODE} + var k: CodeEntry = CodeEntry.new([code_entry.sequence[0]]) + # warning-ignore:return_value_discarded + # add {PREVCODE} + k to the code table + code_table.add(code_table.get_entry(prevcode).add(k)) + # set PREVCODE = CODE + prevcode = code + else: # if NO + # let k be the first index of {PREVCODE} + var prevcode_entry: CodeEntry = code_table.get_entry(prevcode) + var k: CodeEntry = CodeEntry.new([prevcode_entry.sequence[0]]) + # output {PREVCODE} + k to index stream + index_stream.append_array(prevcode_entry.add(k).sequence) + # add {PREVCODE} + k to code table + # warning-ignore:return_value_discarded + code_table.add(prevcode_entry.add(k)) + # set PREVCODE = CODE + prevcode = code + + # Detect when we should increase current code size and increase it. + var new_code_size_candidate: int = get_bits_number_for(code_table.counter) + if new_code_size_candidate > current_code_size: + current_code_size = new_code_size_candidate + + return index_stream diff --git a/addons/gdgifexporter/little_endian.gd b/addons/gdgifexporter/little_endian.gd index cb865e1a371..7d1585f7be0 100644 --- a/addons/gdgifexporter/little_endian.gd +++ b/addons/gdgifexporter/little_endian.gd @@ -1,5 +1,5 @@ -extends Reference +extends RefCounted -func int_to_2bytes(value: int) -> PoolByteArray: - return PoolByteArray([value & 255, (value >> 8) & 255]) +func int_to_2bytes(value: int) -> PackedByteArray: + return PackedByteArray([value & 255, (value >> 8) & 255]) diff --git a/addons/gdgifexporter/lookup_color.shader b/addons/gdgifexporter/lookup_color.gdshader similarity index 100% rename from addons/gdgifexporter/lookup_color.shader rename to addons/gdgifexporter/lookup_color.gdshader diff --git a/addons/gdgifexporter/lookup_similar.shader b/addons/gdgifexporter/lookup_similar.gdshader similarity index 100% rename from addons/gdgifexporter/lookup_similar.shader rename to addons/gdgifexporter/lookup_similar.gdshader diff --git a/addons/gdgifexporter/quantization/median_cut.gd b/addons/gdgifexporter/quantization/median_cut.gd index 4610f03db47..9e79d01a0fd 100644 --- a/addons/gdgifexporter/quantization/median_cut.gd +++ b/addons/gdgifexporter/quantization/median_cut.gd @@ -1,20 +1,20 @@ -extends Reference +extends RefCounted -var converter = preload("../converter.gd").new() +var converter := preload("../converter.gd").new() var transparency := false func longest_axis(colors: Array) -> int: - var start := [255, 255, 255] - var end := [0, 0, 0] + var start: PackedInt32Array = [255, 255, 255] + var end: PackedInt32Array = [0, 0, 0] for color in colors: for i in 3: - start[i] = min(color[i], start[i]) - end[i] = max(color[i], end[i]) + start[i] = mini(color[i], start[i]) + end[i] = maxi(color[i], end[i]) - var max_r = end[0] - start[0] - var max_g = end[1] - start[1] - var max_b = end[2] - start[2] + var max_r := end[0] - start[0] + var max_g := end[1] - start[1] + var max_b := end[2] - start[2] if max_r > max_g: if max_r > max_b: @@ -73,16 +73,14 @@ func average_colors(buckets: Array) -> Dictionary: func pixels_to_colors(image: Image) -> Array: - image.lock() var result := [] - var data: PoolByteArray = image.get_data() + var data: PackedByteArray = image.get_data() for i in range(0, data.size(), 4): if data[i + 3] == 0: transparency = true continue result.append([data[i], data[i + 1], data[i + 2]]) - image.unlock() return result @@ -93,7 +91,7 @@ func remove_smallest_bucket(buckets: Array) -> Array: for i in range(buckets.size()): if buckets[i].size() < buckets[i_of_smallest_bucket].size(): i_of_smallest_bucket = i - buckets.remove(i_of_smallest_bucket) + buckets.remove_at(i_of_smallest_bucket) return buckets @@ -103,15 +101,15 @@ func remove_empty_buckets(buckets: Array) -> Array: var i := buckets.find([]) while i != -1: - buckets.remove(i) + buckets.remove_at(i) i = buckets.find([]) return buckets -# quantizes to gif ready codes +## Quantizes to gif ready codes func quantize(image: Image) -> Array: - var pixels = pixels_to_colors(image) + var pixels := pixels_to_colors(image) if pixels.size() == 0: return pixels @@ -158,6 +156,6 @@ func quantize(image: Image) -> Array: if transparency: color_array = [[0, 0, 0]] + color_array - var data: PoolByteArray = converter.get_similar_indexed_datas(image, color_array) + var data: PackedByteArray = converter.get_similar_indexed_datas(image, color_array) return [data, color_array, transparency] diff --git a/addons/gdgifexporter/quantization/uniform.gd b/addons/gdgifexporter/quantization/uniform.gd new file mode 100644 index 00000000000..05192fa6c8d --- /dev/null +++ b/addons/gdgifexporter/quantization/uniform.gd @@ -0,0 +1,82 @@ +extends RefCounted + +var converter := preload("../converter.gd").new() +var transparency := false + + +func how_many_divisions(colors_count: int) -> int: + return int(ceili(pow(colors_count, 1.0 / 4.0))) + + +func generate_colors(colors_count: int) -> Array: + var divisions_count: int = how_many_divisions(colors_count) + var colors: Array = [] + + for a in range(divisions_count): + for b in range(divisions_count): + for g in range(divisions_count): + for r in range(divisions_count): + colors.append( + [ + Vector3( + (255.0 / divisions_count) * r, + (255.0 / divisions_count) * g, + (255.0 / divisions_count) * b + ), + (255.0 / divisions_count) * a + ] + ) + + return colors + + +func find_nearest_color(palette_color: Vector3, image_data: PackedByteArray) -> Array: + var nearest_color = null + var nearest_alpha = null + for i in range(0, image_data.size(), 4): + var color := Vector3(image_data[i], image_data[i + 1], image_data[i + 2]) + # detect transparency + if image_data[3] == 0: + transparency = true + if ( + (nearest_color == null) + or ( + palette_color.distance_squared_to(color) + < palette_color.distance_squared_to(nearest_color) + ) + ): + nearest_color = color + nearest_alpha = image_data[i + 3] + return [nearest_color, nearest_alpha] + + +## Moves every color from palette colors to the nearest found color in image +func enhance_colors(image: Image, palette_colors: Array) -> Array: + var data := image.get_data() + + for i in range(palette_colors.size()): + var nearest_color := find_nearest_color(palette_colors[i][0], data) + palette_colors[i] = nearest_color + + return palette_colors + + +func to_color_array(colors: Array) -> Array: + var result := [] + for v in colors: + result.append([v[0].x, v[0].y, v[0].z]) + return result + + +## Quantizes to gif ready codes +func quantize(image: Image) -> Array: + var colors: Array = generate_colors(256) + var tmp_image := Image.new() + tmp_image.copy_from(image) + tmp_image.resize(32, 32) + colors = enhance_colors(tmp_image, colors) + colors = to_color_array(colors) + + var data: PackedByteArray = converter.get_similar_indexed_datas(image, colors) + + return [data, colors, transparency] diff --git a/addons/keychain/Keychain.gd b/addons/keychain/Keychain.gd index c7e3777e99b..be39efd182b 100644 --- a/addons/keychain/Keychain.gd +++ b/addons/keychain/Keychain.gd @@ -1,21 +1,19 @@ extends Node -const TRANSLATIONS_PATH := "res://addons/keychain/translations" const PROFILES_PATH := "user://shortcut_profiles" -# Change these settings -var profiles := [preload("profiles/default.tres")] -var selected_profile: ShortcutProfile = profiles[0] +## Change these settings +var profiles: Array[ShortcutProfile] = [preload("profiles/default.tres")] +var selected_profile := profiles[0] var profile_index := 0 -# Syntax: "action_name": InputAction.new("Action Display Name", "Group", true) -# Note that "action_name" must already exist in the Project's Input Map. +## Syntax: "action_name": InputAction.new("Action Display Name", "Group", true) +## Note that "action_name" must already exist in the Project's Input Map. var actions := {} -# Syntax: "Group Name": InputGroup.new("Parent Group Name") +## Syntax: "Group Name": InputGroup.new("Parent Group Name") var groups := {} var ignore_actions := [] var ignore_ui_actions := true var changeable_types := [true, true, true, true] -var multiple_menu_accelerators := false var config_path := "user://cache.ini" var config_file: ConfigFile @@ -25,79 +23,11 @@ class InputAction: var group := "" var global := true - func _init(_display_name := "", _group := "", _global := true) -> void: + func _init(_display_name := "", _group := "", _global := true): display_name = _display_name group = _group global = _global - func update_node(_action: String) -> void: - pass - - func handle_input(_event: InputEvent, _action: String) -> bool: - return false - - -# This class is useful for the accelerators of PopupMenu items -# It's possible for PopupMenu items to have multiple shortcuts by using -# set_item_shortcut(), but we have no control over the accelerator text that appears. -# Thus, we are stuck with using accelerators instead of shortcuts. -# If Godot ever receives the ability to change the accelerator text of the items, -# we could in theory remove this class. -# If you don't care about PopupMenus in the same scene as ShortcutEdit -# such as projects like Pixelorama where everything is in the same scene, -# then you can ignore this class. -class MenuInputAction: - extends InputAction - var node_path := "" - var node: PopupMenu - var menu_item_id := 0 - var echo := false - - func _init( - _display_name := "", - _group := "", - _global := true, - _node_path := "", - _menu_item_id := 0, - _echo := false - ) -> void: - ._init(_display_name, _group, _global) - node_path = _node_path - menu_item_id = _menu_item_id - echo = _echo - - func get_node(root: Node) -> void: - var temp_node = root.get_node(node_path) - if temp_node is PopupMenu: - node = node - elif temp_node is MenuButton: - node = temp_node.get_popup() - - func update_node(action: String) -> void: - if !node: - return - var first_key: InputEventKey = Keychain.action_get_first_key(action) - var accel := first_key.get_scancode_with_modifiers() if first_key else 0 - node.set_item_accelerator(menu_item_id, accel) - - func handle_input(event: InputEvent, action: String) -> bool: - if not node: - return false - if event.is_action_pressed(action, false, true): - if event is InputEventKey: - var acc: int = node.get_item_accelerator(menu_item_id) - # If the event is the same as the menu item's accelerator, skip - if acc == event.get_scancode_with_modifiers(): - return true - node.emit_signal("id_pressed", menu_item_id) - return true - if event.is_action(action, true) and echo: - if event.is_echo(): - node.emit_signal("id_pressed", menu_item_id) - return true - - return false - class InputGroup: var parent_group := "" @@ -112,21 +42,18 @@ class InputGroup: func _ready() -> void: if !config_file: config_file = ConfigFile.new() - if !config_path.empty(): + if !config_path.is_empty(): config_file.load(config_path) - set_process_input(multiple_menu_accelerators) - # Load shortcut profiles - var profile_dir := Directory.new() - profile_dir.make_dir(PROFILES_PATH) - profile_dir.open(PROFILES_PATH) + DirAccess.make_dir_recursive_absolute(PROFILES_PATH) + var profile_dir := DirAccess.open(PROFILES_PATH) profile_dir.list_dir_begin() var file_name = profile_dir.get_next() while file_name != "": if !profile_dir.current_is_dir(): if file_name.get_extension() == "tres": - var file = load(PROFILES_PATH.plus_file(file_name)) + var file = load(PROFILES_PATH.path_join(file_name)) if file is ShortcutProfile: profiles.append(file) file_name = profile_dir.get_next() @@ -135,7 +62,7 @@ func _ready() -> void: if profiles.size() == 1: var profile := ShortcutProfile.new() profile.name = "Custom" - profile.resource_path = PROFILES_PATH.plus_file("custom.tres") + profile.resource_path = PROFILES_PATH.path_join("custom.tres") var saved := profile.save() if saved: profiles.append(profile) @@ -143,37 +70,9 @@ func _ready() -> void: for profile in profiles: profile.fill_bindings() - var l18n_dir := Directory.new() - l18n_dir.open(TRANSLATIONS_PATH) - l18n_dir.list_dir_begin() - file_name = l18n_dir.get_next() - while file_name != "": - if !l18n_dir.current_is_dir(): - if file_name.get_extension() == "po": - var t: Translation = load(TRANSLATIONS_PATH.plus_file(file_name)) - TranslationServer.add_translation(t) - file_name = l18n_dir.get_next() - profile_index = config_file.get_value("shortcuts", "shortcuts_profile", 0) change_profile(profile_index) - for action in actions: - var input_action: InputAction = actions[action] - if input_action is MenuInputAction: - # Below line has been modified - input_action.get_node(Global.top_menu_container.get_node("MenuItems")) - - -func _input(event: InputEvent) -> void: - if event is InputEventMouseMotion: - return - - for action in actions: - var input_action: InputAction = actions[action] - var done: bool = input_action.handle_input(event, action) - if done: - return - func change_profile(index: int) -> void: if index >= profiles.size(): @@ -184,33 +83,21 @@ func change_profile(index: int) -> void: action_erase_events(action) for event in selected_profile.bindings[action]: action_add_event(action, event) - # NOTE: Following line not present in the plugin itself, be careful not to overwrite - Global.update_hint_tooltips() func action_add_event(action: String, event: InputEvent) -> void: InputMap.action_add_event(action, event) - if action in actions: - actions[action].update_node(action) func action_erase_event(action: String, event: InputEvent) -> void: InputMap.action_erase_event(action, event) - if action in actions: - actions[action].update_node(action) func action_erase_events(action: String) -> void: InputMap.action_erase_events(action) - if action in actions: - actions[action].update_node(action) - - -func action_get_first_key(action: String) -> InputEventKey: - var first_key: InputEventKey = null - var events := InputMap.get_action_list(action) - for event in events: - if event is InputEventKey: - first_key = event - break - return first_key + + +func load_translation(locale: String) -> void: + var translation = load("res://addons/keychain/translations".path_join(locale + ".po")) + if is_instance_valid(translation) and translation is Translation: + TranslationServer.add_translation(translation) diff --git a/addons/keychain/LICENSE b/addons/keychain/LICENSE deleted file mode 100644 index 5deb9a77d8b..00000000000 --- a/addons/keychain/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 Orama Interactive - -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. diff --git a/addons/keychain/ShortcutEdit.gd b/addons/keychain/ShortcutEdit.gd index 42e2a8ed497..5a1a63603c0 100644 --- a/addons/keychain/ShortcutEdit.gd +++ b/addons/keychain/ShortcutEdit.gd @@ -2,7 +2,7 @@ extends Control enum { KEYBOARD, MOUSE, JOY_BUTTON, JOY_AXIS } -const MOUSE_BUTTON_NAMES := [ +const MOUSE_BUTTON_NAMES: PackedStringArray = [ "Left Button", "Right Button", "Middle Button", @@ -14,7 +14,7 @@ const MOUSE_BUTTON_NAMES := [ "X Button 2", ] -const JOY_BUTTON_NAMES := [ +const JOY_BUTTON_NAMES: PackedStringArray = [ "DualShock Cross, Xbox A, Nintendo B", "DualShock Circle, Xbox B, Nintendo A", "DualShock Square, Xbox X, Nintendo Y", @@ -40,7 +40,7 @@ const JOY_BUTTON_NAMES := [ "PS4/5 Touchpad", ] -const JOY_AXIS_NAMES := [ +const JOY_AXIS_NAMES: PackedStringArray = [ "(Left Stick Left)", "(Left Stick Right)", "(Left Stick Up)", @@ -66,29 +66,29 @@ const JOY_AXIS_NAMES := [ var currently_editing_tree_item: TreeItem var is_editing := false # Textures taken from Godot https://github.com/godotengine/godot/tree/master/editor/icons -var add_tex: Texture = preload("assets/add.svg") -var edit_tex: Texture = preload("assets/edit.svg") -var delete_tex: Texture = preload("assets/close.svg") -var joy_axis_tex: Texture = preload("assets/joy_axis.svg") -var joy_button_tex: Texture = preload("assets/joy_button.svg") -var key_tex: Texture = preload("assets/keyboard.svg") -var key_phys_tex: Texture = preload("assets/keyboard_physical.svg") -var mouse_tex: Texture = preload("assets/mouse.svg") -var shortcut_tex: Texture = preload("assets/shortcut.svg") -var folder_tex: Texture = preload("assets/folder.svg") - -onready var tree: Tree = $VBoxContainer/ShortcutTree -onready var profile_option_button: OptionButton = find_node("ProfileOptionButton") -onready var rename_profile_button: Button = find_node("RenameProfile") -onready var delete_profile_button: Button = find_node("DeleteProfile") -onready var shortcut_type_menu: PopupMenu = $ShortcutTypeMenu -onready var keyboard_shortcut_selector: ConfirmationDialog = $KeyboardShortcutSelectorDialog -onready var mouse_shortcut_selector: ConfirmationDialog = $MouseShortcutSelectorDialog -onready var joy_key_shortcut_selector: ConfirmationDialog = $JoyKeyShortcutSelectorDialog -onready var joy_axis_shortcut_selector: ConfirmationDialog = $JoyAxisShortcutSelectorDialog -onready var profile_settings: ConfirmationDialog = $ProfileSettings -onready var profile_name: LineEdit = $ProfileSettings/ProfileName -onready var delete_confirmation: ConfirmationDialog = $DeleteConfirmation +var add_tex: Texture2D = preload("assets/add.svg") +var edit_tex: Texture2D = preload("assets/edit.svg") +var delete_tex: Texture2D = preload("assets/close.svg") +var joy_axis_tex: Texture2D = preload("assets/joy_axis.svg") +var joy_button_tex: Texture2D = preload("assets/joy_button.svg") +var key_tex: Texture2D = preload("assets/keyboard.svg") +var key_phys_tex: Texture2D = preload("assets/keyboard_physical.svg") +var mouse_tex: Texture2D = preload("assets/mouse.svg") +var shortcut_tex: Texture2D = preload("assets/shortcut.svg") +var folder_tex: Texture2D = preload("assets/folder.svg") + +@onready var tree: Tree = $VBoxContainer/ShortcutTree +@onready var profile_option_button: OptionButton = find_child("ProfileOptionButton") +@onready var rename_profile_button: Button = find_child("RenameProfile") +@onready var delete_profile_button: Button = find_child("DeleteProfile") +@onready var shortcut_type_menu: PopupMenu = $ShortcutTypeMenu +@onready var keyboard_shortcut_selector: ConfirmationDialog = $KeyboardShortcutSelectorDialog +@onready var mouse_shortcut_selector: ConfirmationDialog = $MouseShortcutSelectorDialog +@onready var joy_key_shortcut_selector: ConfirmationDialog = $JoyKeyShortcutSelectorDialog +@onready var joy_axis_shortcut_selector: ConfirmationDialog = $JoyAxisShortcutSelectorDialog +@onready var profile_settings: ConfirmationDialog = $ProfileSettings +@onready var profile_name: LineEdit = $ProfileSettings/ProfileName +@onready var delete_confirmation: ConfirmationDialog = $DeleteConfirmation func _ready() -> void: @@ -107,7 +107,7 @@ func _ready() -> void: profile_option_button.select(Keychain.profile_index) _on_ProfileOptionButton_item_selected(Keychain.profile_index) - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": $VBoxContainer/HBoxContainer/OpenProfileFolder.queue_free() @@ -121,7 +121,7 @@ func _construct_tree() -> void: for action in InputMap.get_actions(): # Fill the tree with actions and their events if action in Keychain.ignore_actions: continue - if Keychain.ignore_ui_actions and action.begins_with("ui_"): + if Keychain.ignore_ui_actions and (action as String).begins_with("ui_"): continue var display_name := get_action_name(action) @@ -131,7 +131,7 @@ func _construct_tree() -> void: group_name = input_action.group var tree_item: TreeItem - if group_name and group_name in Keychain.groups: + if not group_name.is_empty() and group_name in Keychain.groups: var input_group: Keychain.InputGroup = Keychain.groups[group_name] var group_root: TreeItem = input_group.tree_item tree_item = tree.create_item(group_root) @@ -142,7 +142,7 @@ func _construct_tree() -> void: tree_item.set_text(0, display_name) tree_item.set_metadata(0, action) tree_item.set_icon(0, shortcut_tex) - for event in InputMap.get_action_list(action): + for event in InputMap.action_get_events(action): add_event_tree_item(event, tree_item) tree_item.add_button(0, add_tex, 0, buttons_disabled, "Add") @@ -151,8 +151,6 @@ func _construct_tree() -> void: func _fill_selector_options() -> void: - keyboard_shortcut_selector.entered_shortcut.visible = true - keyboard_shortcut_selector.option_button.visible = false mouse_shortcut_selector.input_type_l.text = "Mouse Button Index:" joy_key_shortcut_selector.input_type_l.text = "Joypad Button Index:" joy_axis_shortcut_selector.input_type_l.text = "Joypad Axis Index:" @@ -171,8 +169,8 @@ func _fill_selector_options() -> void: var joy_axis_option_button: OptionButton = joy_axis_shortcut_selector.option_button var i := 0.0 for option in JOY_AXIS_NAMES: - var sign_symbol = "+" if floor(i) != i else "-" - var text: String = tr("Axis") + " %s %s %s" % [floor(i), sign_symbol, tr(option)] + var sign_symbol := "+" if floori(i) != i else "-" + var text: String = tr("Axis") + " %s %s %s" % [floori(i), sign_symbol, tr(option)] joy_axis_option_button.add_item(text) i += 0.5 @@ -200,7 +198,7 @@ func get_action_name(action: String) -> String: if action in Keychain.actions: display_name = Keychain.actions[action].display_name - if display_name.empty(): + if display_name.is_empty(): display_name = _humanize_snake_case(action) return display_name @@ -209,7 +207,7 @@ func _humanize_snake_case(text: String) -> String: text = text.replace("_", " ") var first_letter := text.left(1) first_letter = first_letter.capitalize() - text.erase(0, 1) + text = text.right(-1) text = text.insert(0, first_letter) return text @@ -236,7 +234,7 @@ func add_event_tree_item(event: InputEvent, action_tree_item: TreeItem) -> void: event_tree_item.set_metadata(0, event) match event_class: "InputEventKey": - var scancode: int = event.get_scancode_with_modifiers() + var scancode: int = event.get_keycode_with_modifiers() if scancode > 0: event_tree_item.set_icon(0, key_tex) else: @@ -252,19 +250,10 @@ func add_event_tree_item(event: InputEvent, action_tree_item: TreeItem) -> void: func event_to_str(event: InputEvent) -> String: - var output := "" - if event is InputEventKey: - var scancode: int = event.get_scancode_with_modifiers() - var physical_str := "" - if scancode == 0: - scancode = event.get_physical_scancode_with_modifiers() - physical_str = " " + tr("(Physical)") - output = OS.get_scancode_string(scancode) + physical_str - - elif event is InputEventMouseButton: - output = tr(MOUSE_BUTTON_NAMES[event.button_index - 1]) - - elif event is InputEventJoypadButton: + var output := event.as_text() + # event.as_text() could be used for these event types as well, but this gives more control + # to the developer as to what strings will be printed + if event is InputEventJoypadButton: var button_index: int = event.button_index output = tr("Button") if button_index >= JOY_BUTTON_NAMES.size(): @@ -281,24 +270,22 @@ func event_to_str(event: InputEvent) -> String: return output -func _on_ShortcutTree_button_pressed(item: TreeItem, _column: int, id: int) -> void: +func _on_shortcut_tree_button_clicked(item: TreeItem, _column: int, id: int, _mbi: int) -> void: var action = item.get_metadata(0) currently_editing_tree_item = item - if action is String: + if action is StringName: if id == 0: # Add var rect: Rect2 = tree.get_item_area_rect(item, 0) rect.position.x = rect.end.x - 42 rect.position.y += 42 - tree.get_scroll().y - rect.position += rect_global_position + rect.position += global_position rect.size = Vector2(110, 23 * shortcut_type_menu.get_item_count()) shortcut_type_menu.popup(rect) elif id == 1: # Delete Keychain.action_erase_events(action) Keychain.selected_profile.change_action(action) - var child := item.get_children() - while child != null: + for child in item.get_children(): child.free() - child = item.get_children() elif action is InputEvent: var parent_action = item.get_parent().get_metadata(0) @@ -312,7 +299,7 @@ func _on_ShortcutTree_button_pressed(item: TreeItem, _column: int, id: int) -> v elif action is InputEventJoypadMotion: joy_axis_shortcut_selector.popup_centered() elif id == 1: # Delete - if not parent_action is String: + if not parent_action is StringName: return Keychain.action_erase_event(parent_action, action) Keychain.selected_profile.change_action(parent_action) @@ -322,7 +309,7 @@ func _on_ShortcutTree_button_pressed(item: TreeItem, _column: int, id: int) -> v func _on_ShortcutTree_item_activated() -> void: var selected_item: TreeItem = tree.get_selected() if selected_item.get_button_count(0) > 0 and !selected_item.is_button_disabled(0, 0): - _on_ShortcutTree_button_pressed(tree.get_selected(), 0, 0) + _on_shortcut_tree_button_clicked(tree.get_selected(), 0, 0, 0) func _on_ShortcutTypeMenu_id_pressed(id: int) -> void: @@ -353,14 +340,14 @@ func _on_ProfileOptionButton_item_selected(index: int) -> void: func _on_NewProfile_pressed() -> void: is_editing = false profile_name.text = "New Shortcut Profile" - profile_settings.window_title = "New Shortcut Profile" + profile_settings.title = "New Shortcut Profile" profile_settings.popup_centered() func _on_RenameProfile_pressed() -> void: is_editing = true profile_name.text = Keychain.selected_profile.name - profile_settings.window_title = "Rename Shortcut Profile" + profile_settings.title = "Rename Shortcut Profile" profile_settings.popup_centered() @@ -376,7 +363,7 @@ func _on_ProfileSettings_confirmed() -> void: var file_name := profile_name.text + ".tres" var profile := ShortcutProfile.new() profile.name = profile_name.text - profile.resource_path = Keychain.PROFILES_PATH.plus_file(file_name) + profile.resource_path = Keychain.PROFILES_PATH.path_join(file_name) profile.fill_bindings() var saved := profile.save() if not saved: @@ -397,14 +384,18 @@ func _on_ProfileSettings_confirmed() -> void: func _delete_profile_file(file_name: String) -> void: - var dir := Directory.new() + var dir := DirAccess.open(file_name.get_base_dir()) + var err := dir.get_open_error() + if err != OK: + print("Error deleting shortcut profile %s. Error code: %s" % [file_name, err]) + return dir.remove(file_name) func _on_DeleteConfirmation_confirmed() -> void: _delete_profile_file(Keychain.selected_profile.resource_path) profile_option_button.remove_item(Keychain.profile_index) - Keychain.profiles.remove(Keychain.profile_index) + Keychain.profiles.remove_at(Keychain.profile_index) Keychain.profile_index -= 1 if Keychain.profile_index < 0: Keychain.profile_index = 0 diff --git a/addons/keychain/ShortcutEdit.tscn b/addons/keychain/ShortcutEdit.tscn index 0dbd150c29c..57bfd46c4f7 100644 --- a/addons/keychain/ShortcutEdit.tscn +++ b/addons/keychain/ShortcutEdit.tscn @@ -1,105 +1,108 @@ -[gd_scene load_steps=7 format=2] - -[ext_resource path="res://addons/keychain/ShortcutEdit.gd" type="Script" id=1] -[ext_resource path="res://addons/keychain/assets/joy_button.svg" type="Texture" id=2] -[ext_resource path="res://addons/keychain/assets/keyboard.svg" type="Texture" id=3] -[ext_resource path="res://addons/keychain/assets/joy_axis.svg" type="Texture" id=4] -[ext_resource path="res://addons/keychain/assets/mouse.svg" type="Texture" id=5] -[ext_resource path="res://addons/keychain/ShortcutSelectorDialog.tscn" type="PackedScene" id=6] - -[node name="ShortcutEdit" type="VBoxContainer"] +[gd_scene load_steps=7 format=3 uid="uid://bq7ibhm0txl5p"] + +[ext_resource type="Script" path="res://addons/keychain/ShortcutEdit.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://ca58ufal2ufd8" path="res://addons/keychain/assets/joy_button.svg" id="2"] +[ext_resource type="Texture2D" uid="uid://c2s5rm4nec5yh" path="res://addons/keychain/assets/keyboard.svg" id="3"] +[ext_resource type="Texture2D" uid="uid://bb6q6om3d08cm" path="res://addons/keychain/assets/joy_axis.svg" id="4"] +[ext_resource type="Texture2D" uid="uid://bma7xj2rqqcr8" path="res://addons/keychain/assets/mouse.svg" id="5"] +[ext_resource type="PackedScene" uid="uid://bfjcafe2kvx7n" path="res://addons/keychain/ShortcutSelectorDialog.tscn" id="6"] + +[node name="ShortcutEdit" type="Control"] +layout_mode = 3 +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 size_flags_vertical = 3 -script = ExtResource( 1 ) +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] -margin_right = 1280.0 -margin_bottom = 720.0 +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 size_flags_vertical = 3 [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_right = 1280.0 -margin_bottom = 20.0 +layout_mode = 2 [node name="ProfileLabel" type="Label" parent="VBoxContainer/HBoxContainer"] -margin_top = 3.0 -margin_right = 102.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Shortcut profile:" [node name="ProfileOptionButton" type="OptionButton" parent="VBoxContainer/HBoxContainer"] -margin_left = 106.0 -margin_right = 135.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 [node name="NewProfile" type="Button" parent="VBoxContainer/HBoxContainer"] -margin_left = 139.0 -margin_right = 179.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "New" [node name="RenameProfile" type="Button" parent="VBoxContainer/HBoxContainer"] -margin_left = 183.0 -margin_right = 247.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Rename" [node name="DeleteProfile" type="Button" parent="VBoxContainer/HBoxContainer"] -margin_left = 251.0 -margin_right = 306.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Delete" [node name="OpenProfileFolder" type="Button" parent="VBoxContainer/HBoxContainer"] -margin_left = 310.0 -margin_right = 401.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Open Folder" [node name="ShortcutTree" type="Tree" parent="VBoxContainer"] -margin_top = 24.0 -margin_right = 1280.0 -margin_bottom = 720.0 +layout_mode = 2 size_flags_vertical = 3 hide_root = true [node name="ShortcutTypeMenu" type="PopupMenu" parent="."] -margin_right = 20.0 -margin_bottom = 20.0 -items = [ "Key", ExtResource( 3 ), 0, false, false, 0, 0, null, "", false, "Mouse Button", ExtResource( 5 ), 0, false, false, 1, 0, null, "", false, "Joy Button", ExtResource( 2 ), 0, false, false, 2, 0, null, "", false, "Joy Axis", ExtResource( 4 ), 0, false, false, 3, 0, null, "", false ] - -[node name="KeyboardShortcutSelectorDialog" parent="." instance=ExtResource( 6 )] - -[node name="MouseShortcutSelectorDialog" parent="." instance=ExtResource( 6 )] +size = Vector2i(154, 116) +item_count = 4 +item_0/text = "Key" +item_0/icon = ExtResource("3") +item_0/id = 0 +item_1/text = "Mouse Button" +item_1/icon = ExtResource("5") +item_1/id = 1 +item_2/text = "Joy Button" +item_2/icon = ExtResource("2") +item_2/id = 2 +item_3/text = "Joy Axis" +item_3/icon = ExtResource("4") +item_3/id = 3 + +[node name="KeyboardShortcutSelectorDialog" parent="." instance=ExtResource("6")] +size = Vector2i(417, 134) + +[node name="MouseShortcutSelectorDialog" parent="." instance=ExtResource("6")] +size = Vector2i(417, 134) input_type = 1 -[node name="JoyKeyShortcutSelectorDialog" parent="." instance=ExtResource( 6 )] +[node name="JoyKeyShortcutSelectorDialog" parent="." instance=ExtResource("6")] +size = Vector2i(417, 134) input_type = 2 -[node name="JoyAxisShortcutSelectorDialog" parent="." instance=ExtResource( 6 )] +[node name="JoyAxisShortcutSelectorDialog" parent="." instance=ExtResource("6")] +size = Vector2i(417, 134) input_type = 3 [node name="ProfileSettings" type="ConfirmationDialog" parent="."] -margin_right = 200.0 -margin_bottom = 70.0 [node name="ProfileName" type="LineEdit" parent="ProfileSettings"] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 192.0 -margin_bottom = 34.0 -caret_blink = true -caret_blink_speed = 0.5 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 192.0 +offset_bottom = 51.0 [node name="DeleteConfirmation" type="ConfirmationDialog" parent="."] -margin_right = 200.0 -margin_bottom = 70.0 +size = Vector2i(427, 100) dialog_text = "Are you sure you want to delete this shortcut profile?" [connection signal="item_selected" from="VBoxContainer/HBoxContainer/ProfileOptionButton" to="." method="_on_ProfileOptionButton_item_selected"] @@ -107,7 +110,7 @@ dialog_text = "Are you sure you want to delete this shortcut profile?" [connection signal="pressed" from="VBoxContainer/HBoxContainer/RenameProfile" to="." method="_on_RenameProfile_pressed"] [connection signal="pressed" from="VBoxContainer/HBoxContainer/DeleteProfile" to="." method="_on_DeleteProfile_pressed"] [connection signal="pressed" from="VBoxContainer/HBoxContainer/OpenProfileFolder" to="." method="_on_OpenProfileFolder_pressed"] -[connection signal="button_pressed" from="VBoxContainer/ShortcutTree" to="." method="_on_ShortcutTree_button_pressed"] +[connection signal="button_clicked" from="VBoxContainer/ShortcutTree" to="." method="_on_shortcut_tree_button_clicked"] [connection signal="item_activated" from="VBoxContainer/ShortcutTree" to="." method="_on_ShortcutTree_item_activated"] [connection signal="id_pressed" from="ShortcutTypeMenu" to="." method="_on_ShortcutTypeMenu_id_pressed"] [connection signal="confirmed" from="ProfileSettings" to="." method="_on_ProfileSettings_confirmed"] diff --git a/addons/keychain/ShortcutProfile.gd b/addons/keychain/ShortcutProfile.gd index a3bf008026d..0fb269a192a 100644 --- a/addons/keychain/ShortcutProfile.gd +++ b/addons/keychain/ShortcutProfile.gd @@ -1,9 +1,9 @@ class_name ShortcutProfile extends Resource -export(String) var name := "" -export(bool) var customizable := true -export(Dictionary) var bindings := {} +@export var name := "" +@export var customizable := true +@export var bindings := {} func _init() -> void: @@ -14,7 +14,7 @@ func fill_bindings() -> void: var unnecessary_actions = bindings.duplicate() # Checks if the profile has any unused actions for action in InputMap.get_actions(): if not action in bindings: - bindings[action] = InputMap.get_action_list(action) + bindings[action] = InputMap.action_get_events(action) unnecessary_actions.erase(action) for action in unnecessary_actions: bindings.erase(action) @@ -24,14 +24,14 @@ func fill_bindings() -> void: func change_action(action: String) -> void: if not customizable: return - bindings[action] = InputMap.get_action_list(action) + bindings[action] = InputMap.action_get_events(action) save() func save() -> bool: if !customizable: return false - var err := ResourceSaver.save(resource_path, self) + var err := ResourceSaver.save(self, resource_path) if err != OK: print("Error saving shortcut profile %s. Error code: %s" % [resource_path, err]) return false diff --git a/addons/keychain/ShortcutSelectorDialog.gd b/addons/keychain/ShortcutSelectorDialog.gd index be1bbb0691e..fb28434b02a 100644 --- a/addons/keychain/ShortcutSelectorDialog.gd +++ b/addons/keychain/ShortcutSelectorDialog.gd @@ -2,28 +2,39 @@ extends ConfirmationDialog enum InputTypes { KEYBOARD, MOUSE, JOY_BUTTON, JOY_AXIS } -export(InputTypes) var input_type: int = InputTypes.KEYBOARD +@export var input_type := InputTypes.KEYBOARD var listened_input: InputEvent -onready var root: Node = get_parent() -onready var input_type_l: Label = $VBoxContainer/InputTypeLabel -onready var entered_shortcut: LineEdit = $VBoxContainer/EnteredShortcut -onready var option_button: OptionButton = $VBoxContainer/OptionButton -onready var already_exists: Label = $VBoxContainer/AlreadyExistsLabel +@onready var root := get_parent() +@onready var input_type_l := $VBoxContainer/InputTypeLabel as Label +@onready var entered_shortcut := $VBoxContainer/EnteredShortcut as LineEdit +@onready var option_button := $VBoxContainer/OptionButton as OptionButton +@onready var modifier_buttons := $VBoxContainer/ModifierButtons as HBoxContainer +@onready var alt_button := $VBoxContainer/ModifierButtons/Alt as CheckBox +@onready var shift_button := $VBoxContainer/ModifierButtons/Shift as CheckBox +@onready var control_button := $VBoxContainer/ModifierButtons/Control as CheckBox +@onready var meta_button := $VBoxContainer/ModifierButtons/Meta as CheckBox +@onready var command_control_button := $VBoxContainer/ModifierButtons/CommandOrControl as CheckBox +@onready var already_exists := $VBoxContainer/AlreadyExistsLabel as Label func _ready() -> void: set_process_input(false) if input_type == InputTypes.KEYBOARD: - get_ok().focus_neighbour_top = entered_shortcut.get_path() - get_cancel().focus_neighbour_top = entered_shortcut.get_path() - entered_shortcut.focus_neighbour_bottom = get_ok().get_path() + entered_shortcut.visible = true + option_button.visible = false + get_ok_button().focus_neighbor_top = entered_shortcut.get_path() + get_cancel_button().focus_neighbor_top = entered_shortcut.get_path() + entered_shortcut.focus_neighbor_bottom = get_ok_button().get_path() else: - get_ok().focus_neighbour_top = option_button.get_path() - get_cancel().focus_neighbour_top = option_button.get_path() - option_button.focus_neighbour_bottom = get_ok().get_path() + if input_type != InputTypes.MOUSE: + modifier_buttons.visible = false + get_ok_button().focus_neighbor_top = option_button.get_path() + get_cancel_button().focus_neighbor_top = option_button.get_path() + option_button.focus_neighbor_bottom = get_ok_button().get_path() - get_close_button().focus_mode = Control.FOCUS_NONE + +# get_close_button().focus_mode = Control.FOCUS_NONE func _input(event: InputEvent) -> void: @@ -31,7 +42,8 @@ func _input(event: InputEvent) -> void: return if event.pressed: listened_input = event - entered_shortcut.text = OS.get_scancode_string(event.get_scancode_with_modifiers()) + _set_modifier_buttons_state(listened_input) + entered_shortcut.text = event.as_text() _show_assigned_state(event) @@ -40,7 +52,7 @@ func _show_assigned_state(event: InputEvent) -> void: var action := "" if metadata is InputEvent: # Editing an input event action = root.currently_editing_tree_item.get_parent().get_metadata(0) - elif metadata is String: # Adding a new input event to an action + elif metadata is StringName: # Adding a new input event to an action action = metadata var matching_pair: Array = _find_matching_event_in_map(action, event) @@ -65,14 +77,14 @@ func _apply_shortcut_change(input_event: InputEvent) -> void: return root.currently_editing_tree_item.set_metadata(0, input_event) root.currently_editing_tree_item.set_text(0, root.event_to_str(input_event)) - elif metadata is String: # Adding a new input event to an action + elif metadata is StringName: # Adding a new input event to an action var changed: bool = _set_shortcut(metadata, null, input_event) if !changed: return root.add_event_tree_item(input_event, root.currently_editing_tree_item) -func _set_shortcut(action: String, old_event: InputEvent, new_event: InputEvent) -> bool: +func _set_shortcut(action: StringName, old_event: InputEvent, new_event: InputEvent) -> bool: if InputMap.action_has_event(action, new_event): # If the current action already has that event return false if old_event: @@ -86,7 +98,7 @@ func _set_shortcut(action: String, old_event: InputEvent, new_event: InputEvent) if action in Keychain.actions: group = Keychain.actions[action].group - var action_to_replace: String = matching_pair[0] + var action_to_replace: StringName = matching_pair[0] var input_to_replace: InputEvent = matching_pair[1] Keychain.action_erase_event(action_to_replace, input_to_replace) Keychain.selected_profile.change_action(action_to_replace) @@ -95,34 +107,20 @@ func _set_shortcut(action: String, old_event: InputEvent, new_event: InputEvent) while tree_item != null: # Loop through Tree's TreeItems... var metadata = tree_item.get_metadata(0) if metadata is InputEvent: - if input_to_replace.shortcut_match(metadata): - var map_action: String = tree_item.get_parent().get_metadata(0) + if input_to_replace.is_match(metadata): + var map_action: StringName = tree_item.get_parent().get_metadata(0) if map_action == action_to_replace: tree_item.free() break - tree_item = _get_next_tree_item(tree_item) + tree_item = tree_item.get_next_in_tree() Keychain.action_add_event(action, new_event) Keychain.selected_profile.change_action(action) return true -# Based on https://github.com/godotengine/godot/blob/master/scene/gui/tree.cpp#L685 -func _get_next_tree_item(current: TreeItem) -> TreeItem: - if current.get_children(): - current = current.get_children() - elif current.get_next(): - current = current.get_next() - else: - while current and !current.get_next(): - current = current.get_parent() - if current: - current = current.get_next() - return current - - -func _find_matching_event_in_map(action: String, event: InputEvent) -> Array: +func _find_matching_event_in_map(action: StringName, event: InputEvent) -> Array: var group := "" if action in Keychain.actions: group = Keychain.actions[action].group @@ -130,10 +128,10 @@ func _find_matching_event_in_map(action: String, event: InputEvent) -> Array: for map_action in InputMap.get_actions(): if map_action in Keychain.ignore_actions: continue - if Keychain.ignore_ui_actions and map_action.begins_with("ui_"): + if Keychain.ignore_ui_actions and (map_action as String).begins_with("ui_"): continue - for map_event in InputMap.get_action_list(map_action): - if !event.shortcut_match(map_event): + for map_event in InputMap.action_get_events(map_action): + if !event.is_match(map_event): continue if map_action in Keychain.actions: @@ -148,27 +146,30 @@ func _find_matching_event_in_map(action: String, event: InputEvent) -> Array: func _on_ShortcutSelectorDialog_about_to_show() -> void: + var metadata = root.currently_editing_tree_item.get_metadata(0) if input_type == InputTypes.KEYBOARD: listened_input = null already_exists.text = "" entered_shortcut.text = "" - yield(get_tree(), "idle_frame") + if metadata is InputEvent: + _set_modifier_buttons_state(metadata) + await get_tree().process_frame entered_shortcut.grab_focus() else: - var metadata = root.currently_editing_tree_item.get_metadata(0) if metadata is InputEvent: # Editing an input event var index := 0 if metadata is InputEventMouseButton: index = metadata.button_index - 1 + _set_modifier_buttons_state(metadata) elif metadata is InputEventJoypadButton: index = metadata.button_index elif metadata is InputEventJoypadMotion: index = metadata.axis * 2 - index += round(metadata.axis_value) / 2.0 + 0.5 + index += signi(metadata.axis_value) / 2.0 + 0.5 option_button.select(index) _on_OptionButton_item_selected(index) - elif metadata is String: # Adding a new input event to an action + elif metadata is StringName: # Adding a new input event to an action option_button.select(0) _on_OptionButton_item_selected(0) @@ -181,6 +182,11 @@ func _on_OptionButton_item_selected(index: int) -> void: if input_type == InputTypes.MOUSE: listened_input = InputEventMouseButton.new() listened_input.button_index = index + 1 + listened_input.alt_pressed = alt_button.button_pressed + listened_input.shift_pressed = shift_button.button_pressed + listened_input.ctrl_pressed = control_button.button_pressed + listened_input.meta_pressed = meta_button.button_pressed + listened_input.command_or_control_autoremap = command_control_button.button_pressed elif input_type == InputTypes.JOY_BUTTON: listened_input = InputEventJoypadButton.new() listened_input.button_index = index @@ -197,3 +203,50 @@ func _on_EnteredShortcut_focus_entered() -> void: func _on_EnteredShortcut_focus_exited() -> void: set_process_input(false) + + +func _on_alt_toggled(button_pressed: bool) -> void: + if not is_instance_valid(listened_input): + return + listened_input.alt_pressed = button_pressed + entered_shortcut.text = listened_input.as_text() + + +func _set_modifier_buttons_state(event: InputEventWithModifiers) -> void: + alt_button.button_pressed = event.alt_pressed + shift_button.button_pressed = event.shift_pressed + control_button.button_pressed = event.ctrl_pressed + meta_button.button_pressed = event.meta_pressed + command_control_button.button_pressed = event.command_or_control_autoremap + + +func _on_shift_toggled(button_pressed: bool) -> void: + if not is_instance_valid(listened_input): + return + listened_input.shift_pressed = button_pressed + entered_shortcut.text = listened_input.as_text() + + +func _on_control_toggled(button_pressed: bool) -> void: + if not is_instance_valid(listened_input): + return + listened_input.ctrl_pressed = button_pressed + entered_shortcut.text = listened_input.as_text() + + +func _on_meta_toggled(button_pressed: bool) -> void: + if not is_instance_valid(listened_input): + return + listened_input.meta_pressed = button_pressed + entered_shortcut.text = listened_input.as_text() + + +func _on_command_or_control_toggled(button_pressed: bool) -> void: + control_button.button_pressed = false + meta_button.button_pressed = false + control_button.visible = not button_pressed + meta_button.visible = not button_pressed + if not is_instance_valid(listened_input): + return + listened_input.command_or_control_autoremap = button_pressed + entered_shortcut.text = listened_input.as_text() diff --git a/addons/keychain/ShortcutSelectorDialog.tscn b/addons/keychain/ShortcutSelectorDialog.tscn index 0e4188dbe43..65250e3063f 100644 --- a/addons/keychain/ShortcutSelectorDialog.tscn +++ b/addons/keychain/ShortcutSelectorDialog.tscn @@ -1,49 +1,69 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://bfjcafe2kvx7n"] -[ext_resource path="res://addons/keychain/ShortcutSelectorDialog.gd" type="Script" id=1] +[ext_resource type="Script" path="res://addons/keychain/ShortcutSelectorDialog.gd" id="1"] [node name="ShortcutSelectorDialog" type="ConfirmationDialog"] -margin_right = 200.0 -margin_bottom = 70.0 -popup_exclusive = true -window_title = "Set the shortcut" -script = ExtResource( 1 ) +size = Vector2i(417, 169) +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 341.0 -margin_bottom = 64.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 409.0 +offset_bottom = 120.0 [node name="InputTypeLabel" type="Label" parent="VBoxContainer"] -margin_right = 333.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Press a key or a key combination to set the shortcut" [node name="EnteredShortcut" type="LineEdit" parent="VBoxContainer"] visible = false -margin_top = 18.0 -margin_right = 333.0 -margin_bottom = 32.0 -align = 1 +layout_mode = 2 editable = false virtual_keyboard_enabled = false [node name="OptionButton" type="OptionButton" parent="VBoxContainer"] -margin_top = 18.0 -margin_right = 333.0 -margin_bottom = 38.0 +layout_mode = 2 mouse_default_cursor_shape = 2 +[node name="ModifierButtons" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 + +[node name="Alt" type="CheckBox" parent="VBoxContainer/ModifierButtons"] +layout_mode = 2 +mouse_default_cursor_shape = 2 +text = "Alt" + +[node name="Shift" type="CheckBox" parent="VBoxContainer/ModifierButtons"] +layout_mode = 2 +mouse_default_cursor_shape = 2 +text = "Shift" + +[node name="Control" type="CheckBox" parent="VBoxContainer/ModifierButtons"] +layout_mode = 2 +mouse_default_cursor_shape = 2 +text = "Control" + +[node name="Meta" type="CheckBox" parent="VBoxContainer/ModifierButtons"] +layout_mode = 2 +mouse_default_cursor_shape = 2 +text = "Meta" + +[node name="CommandOrControl" type="CheckBox" parent="VBoxContainer/ModifierButtons"] +layout_mode = 2 +mouse_default_cursor_shape = 2 +text = "Command / Control (auto)" + [node name="AlreadyExistsLabel" type="Label" parent="VBoxContainer"] -margin_top = 42.0 -margin_right = 333.0 -margin_bottom = 56.0 -align = 1 +layout_mode = 2 -[connection signal="about_to_show" from="." to="." method="_on_ShortcutSelectorDialog_about_to_show"] +[connection signal="about_to_popup" from="." to="." method="_on_ShortcutSelectorDialog_about_to_show"] [connection signal="confirmed" from="." to="." method="_on_ShortcutSelectorDialog_confirmed"] -[connection signal="popup_hide" from="." to="." method="_on_ShortcutSelectorDialog_popup_hide"] [connection signal="focus_entered" from="VBoxContainer/EnteredShortcut" to="." method="_on_EnteredShortcut_focus_entered"] [connection signal="focus_exited" from="VBoxContainer/EnteredShortcut" to="." method="_on_EnteredShortcut_focus_exited"] [connection signal="item_selected" from="VBoxContainer/OptionButton" to="." method="_on_OptionButton_item_selected"] +[connection signal="toggled" from="VBoxContainer/ModifierButtons/Alt" to="." method="_on_alt_toggled"] +[connection signal="toggled" from="VBoxContainer/ModifierButtons/Shift" to="." method="_on_shift_toggled"] +[connection signal="toggled" from="VBoxContainer/ModifierButtons/Control" to="." method="_on_control_toggled"] +[connection signal="toggled" from="VBoxContainer/ModifierButtons/Meta" to="." method="_on_meta_toggled"] +[connection signal="toggled" from="VBoxContainer/ModifierButtons/CommandOrControl" to="." method="_on_command_or_control_toggled"] diff --git a/addons/keychain/assets/add.svg b/addons/keychain/assets/add.svg index b0fdf8a3b51..afad08a2e0c 100644 --- a/addons/keychain/assets/add.svg +++ b/addons/keychain/assets/add.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/addons/keychain/assets/add.svg.import b/addons/keychain/assets/add.svg.import index 7437cee83be..7119d897979 100644 --- a/addons/keychain/assets/add.svg.import +++ b/addons/keychain/assets/add.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/add.svg-4084e314648c872072757f9b0f544cf9.stex" +type="CompressedTexture2D" +uid="uid://c4433pa25cxp2" +path="res://.godot/imported/add.svg-4084e314648c872072757f9b0f544cf9.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/keychain/assets/add.svg" -dest_files=[ "res://.import/add.svg-4084e314648c872072757f9b0f544cf9.stex" ] +dest_files=["res://.godot/imported/add.svg-4084e314648c872072757f9b0f544cf9.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/keychain/assets/close.svg b/addons/keychain/assets/close.svg index fc587082c15..331727ab913 100644 --- a/addons/keychain/assets/close.svg +++ b/addons/keychain/assets/close.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/addons/keychain/assets/close.svg.import b/addons/keychain/assets/close.svg.import index 386cc270530..f5cbc7ba293 100644 --- a/addons/keychain/assets/close.svg.import +++ b/addons/keychain/assets/close.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/close.svg-12d57fa7e5a34826f312eed6ba1feb1a.stex" +type="CompressedTexture2D" +uid="uid://f1gcylay6c6f" +path="res://.godot/imported/close.svg-12d57fa7e5a34826f312eed6ba1feb1a.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/keychain/assets/close.svg" -dest_files=[ "res://.import/close.svg-12d57fa7e5a34826f312eed6ba1feb1a.stex" ] +dest_files=["res://.godot/imported/close.svg-12d57fa7e5a34826f312eed6ba1feb1a.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/keychain/assets/edit.svg b/addons/keychain/assets/edit.svg index 925f7930bcc..6fc7ae012db 100644 --- a/addons/keychain/assets/edit.svg +++ b/addons/keychain/assets/edit.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/addons/keychain/assets/edit.svg.import b/addons/keychain/assets/edit.svg.import index 97e414ccff8..7e1f8f0007c 100644 --- a/addons/keychain/assets/edit.svg.import +++ b/addons/keychain/assets/edit.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/edit.svg-cd9834545a8696f1e8611efa12a48f33.stex" +type="CompressedTexture2D" +uid="uid://df8gl3u2nqpl3" +path="res://.godot/imported/edit.svg-cd9834545a8696f1e8611efa12a48f33.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/keychain/assets/edit.svg" -dest_files=[ "res://.import/edit.svg-cd9834545a8696f1e8611efa12a48f33.stex" ] +dest_files=["res://.godot/imported/edit.svg-cd9834545a8696f1e8611efa12a48f33.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/keychain/assets/folder.svg b/addons/keychain/assets/folder.svg index 904f94b2929..c2def257ea0 100644 --- a/addons/keychain/assets/folder.svg +++ b/addons/keychain/assets/folder.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/addons/keychain/assets/folder.svg.import b/addons/keychain/assets/folder.svg.import index 6f338de44cd..da52faa774d 100644 --- a/addons/keychain/assets/folder.svg.import +++ b/addons/keychain/assets/folder.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/folder.svg-490bb7e2d2aa4425de998b1d382cf534.stex" +type="CompressedTexture2D" +uid="uid://b0gbmkb8xwksb" +path="res://.godot/imported/folder.svg-490bb7e2d2aa4425de998b1d382cf534.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/keychain/assets/folder.svg" -dest_files=[ "res://.import/folder.svg-490bb7e2d2aa4425de998b1d382cf534.stex" ] +dest_files=["res://.godot/imported/folder.svg-490bb7e2d2aa4425de998b1d382cf534.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/keychain/assets/joy_axis.svg.import b/addons/keychain/assets/joy_axis.svg.import index bb97537f4cf..322d8196941 100644 --- a/addons/keychain/assets/joy_axis.svg.import +++ b/addons/keychain/assets/joy_axis.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/joy_axis.svg-9e1156700cfe46afb1ca622536a9a2e1.stex" +type="CompressedTexture2D" +uid="uid://bb6q6om3d08cm" +path="res://.godot/imported/joy_axis.svg-9e1156700cfe46afb1ca622536a9a2e1.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/keychain/assets/joy_axis.svg" -dest_files=[ "res://.import/joy_axis.svg-9e1156700cfe46afb1ca622536a9a2e1.stex" ] +dest_files=["res://.godot/imported/joy_axis.svg-9e1156700cfe46afb1ca622536a9a2e1.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/keychain/assets/joy_button.svg.import b/addons/keychain/assets/joy_button.svg.import index d5662ed2ed5..22c1bada9ff 100644 --- a/addons/keychain/assets/joy_button.svg.import +++ b/addons/keychain/assets/joy_button.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/joy_button.svg-df5663c6f296cab556e81b9c770699d0.stex" +type="CompressedTexture2D" +uid="uid://ca58ufal2ufd8" +path="res://.godot/imported/joy_button.svg-df5663c6f296cab556e81b9c770699d0.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/keychain/assets/joy_button.svg" -dest_files=[ "res://.import/joy_button.svg-df5663c6f296cab556e81b9c770699d0.stex" ] +dest_files=["res://.godot/imported/joy_button.svg-df5663c6f296cab556e81b9c770699d0.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/keychain/assets/keyboard.svg b/addons/keychain/assets/keyboard.svg index ab6755c8b4a..b9dfab71ed2 100644 --- a/addons/keychain/assets/keyboard.svg +++ b/addons/keychain/assets/keyboard.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/addons/keychain/assets/keyboard.svg.import b/addons/keychain/assets/keyboard.svg.import index a74b8cfdaee..9c67f4722f0 100644 --- a/addons/keychain/assets/keyboard.svg.import +++ b/addons/keychain/assets/keyboard.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/keyboard.svg-fac365b6f70899f1dfa71ce4b4761ac6.stex" +type="CompressedTexture2D" +uid="uid://c2s5rm4nec5yh" +path="res://.godot/imported/keyboard.svg-fac365b6f70899f1dfa71ce4b4761ac6.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/keychain/assets/keyboard.svg" -dest_files=[ "res://.import/keyboard.svg-fac365b6f70899f1dfa71ce4b4761ac6.stex" ] +dest_files=["res://.godot/imported/keyboard.svg-fac365b6f70899f1dfa71ce4b4761ac6.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/keychain/assets/keyboard_physical.svg b/addons/keychain/assets/keyboard_physical.svg index f12cd461188..4364e0b4fa5 100644 --- a/addons/keychain/assets/keyboard_physical.svg +++ b/addons/keychain/assets/keyboard_physical.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/addons/keychain/assets/keyboard_physical.svg.import b/addons/keychain/assets/keyboard_physical.svg.import index d25f2aed7d6..b6e1c826751 100644 --- a/addons/keychain/assets/keyboard_physical.svg.import +++ b/addons/keychain/assets/keyboard_physical.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/keyboard_physical.svg-f50c796569ade32b57ece1ba0bd7dfbb.stex" +type="CompressedTexture2D" +uid="uid://cmh8eaibhn5y8" +path="res://.godot/imported/keyboard_physical.svg-f50c796569ade32b57ece1ba0bd7dfbb.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/keychain/assets/keyboard_physical.svg" -dest_files=[ "res://.import/keyboard_physical.svg-f50c796569ade32b57ece1ba0bd7dfbb.stex" ] +dest_files=["res://.godot/imported/keyboard_physical.svg-f50c796569ade32b57ece1ba0bd7dfbb.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/keychain/assets/mouse.svg b/addons/keychain/assets/mouse.svg index 2dcc03e12ec..217512085e9 100644 --- a/addons/keychain/assets/mouse.svg +++ b/addons/keychain/assets/mouse.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/addons/keychain/assets/mouse.svg.import b/addons/keychain/assets/mouse.svg.import index ad38c3a71cc..af0251b6a72 100644 --- a/addons/keychain/assets/mouse.svg.import +++ b/addons/keychain/assets/mouse.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/mouse.svg-559695787f3bb55c16dc66bd6a9b9032.stex" +type="CompressedTexture2D" +uid="uid://bma7xj2rqqcr8" +path="res://.godot/imported/mouse.svg-559695787f3bb55c16dc66bd6a9b9032.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/keychain/assets/mouse.svg" -dest_files=[ "res://.import/mouse.svg-559695787f3bb55c16dc66bd6a9b9032.stex" ] +dest_files=["res://.godot/imported/mouse.svg-559695787f3bb55c16dc66bd6a9b9032.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/keychain/assets/shortcut.svg b/addons/keychain/assets/shortcut.svg index 87b1a40e482..4ef16f0401a 100644 --- a/addons/keychain/assets/shortcut.svg +++ b/addons/keychain/assets/shortcut.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/addons/keychain/assets/shortcut.svg.import b/addons/keychain/assets/shortcut.svg.import index c690e79acb7..ab7ac36d797 100644 --- a/addons/keychain/assets/shortcut.svg.import +++ b/addons/keychain/assets/shortcut.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/shortcut.svg-401daac18a817142e2b29e5801e00053.stex" +type="CompressedTexture2D" +uid="uid://bmi24jp4fqi7k" +path="res://.godot/imported/shortcut.svg-401daac18a817142e2b29e5801e00053.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://addons/keychain/assets/shortcut.svg" -dest_files=[ "res://.import/shortcut.svg-401daac18a817142e2b29e5801e00053.stex" ] +dest_files=["res://.godot/imported/shortcut.svg-401daac18a817142e2b29e5801e00053.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/keychain/plugin.cfg b/addons/keychain/plugin.cfg index 36bf2f63e7b..095c8eef529 100644 --- a/addons/keychain/plugin.cfg +++ b/addons/keychain/plugin.cfg @@ -3,5 +3,5 @@ name="Keychain" description="A plugin for the Godot Engine that aims to give the player full control over the input actions of the game." author="Orama Interactive" -version="1.1" +version="2.0" script="plugin.gd" diff --git a/addons/keychain/plugin.gd b/addons/keychain/plugin.gd index 0eee623e340..1eb1d3c73eb 100644 --- a/addons/keychain/plugin.gd +++ b/addons/keychain/plugin.gd @@ -1,4 +1,4 @@ -tool +@tool extends EditorPlugin diff --git a/addons/keychain/profiles/default.tres b/addons/keychain/profiles/default.tres index ce74da48503..b952157427e 100644 --- a/addons/keychain/profiles/default.tres +++ b/addons/keychain/profiles/default.tres @@ -1,10 +1,9 @@ -[gd_resource type="Resource" load_steps=2 format=2] +[gd_resource type="Resource" script_class="ShortcutProfile" load_steps=2 format=3 uid="uid://df04uev1epmmo"] -[ext_resource path="res://addons/keychain/ShortcutProfile.gd" type="Script" id=1] +[ext_resource type="Script" path="res://addons/keychain/ShortcutProfile.gd" id="1"] [resource] -script = ExtResource( 1 ) +script = ExtResource("1") name = "Default" customizable = false -bindings = { -} +bindings = {} diff --git a/assets/dither-matrices/bayer16.png.import b/assets/dither-matrices/bayer16.png.import index cc50d8a4500..a31f0f23778 100644 --- a/assets/dither-matrices/bayer16.png.import +++ b/assets/dither-matrices/bayer16.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/bayer16.png-48f80e5e8f0bdac9e83b3acfa8588cf2.stex" +type="CompressedTexture2D" +uid="uid://cdtpmo4pjjjdd" +path="res://.godot/imported/bayer16.png-48f80e5e8f0bdac9e83b3acfa8588cf2.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/dither-matrices/bayer16.png" -dest_files=[ "res://.import/bayer16.png-48f80e5e8f0bdac9e83b3acfa8588cf2.stex" ] +dest_files=["res://.godot/imported/bayer16.png-48f80e5e8f0bdac9e83b3acfa8588cf2.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/dither-matrices/bayer2.png.import b/assets/dither-matrices/bayer2.png.import index f2615956578..3b4d40593f7 100644 --- a/assets/dither-matrices/bayer2.png.import +++ b/assets/dither-matrices/bayer2.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/bayer2.png-c060ec2442edc204b9ec0ab2d99e19bf.stex" +type="CompressedTexture2D" +uid="uid://cdoxrolk7qdju" +path="res://.godot/imported/bayer2.png-c060ec2442edc204b9ec0ab2d99e19bf.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/dither-matrices/bayer2.png" -dest_files=[ "res://.import/bayer2.png-c060ec2442edc204b9ec0ab2d99e19bf.stex" ] +dest_files=["res://.godot/imported/bayer2.png-c060ec2442edc204b9ec0ab2d99e19bf.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/dither-matrices/bayer4.png.import b/assets/dither-matrices/bayer4.png.import index 5a072bef8e7..7cc9104f962 100644 --- a/assets/dither-matrices/bayer4.png.import +++ b/assets/dither-matrices/bayer4.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/bayer4.png-2008f73a4dd6b2f9f4ba6aac825a7b9b.stex" +type="CompressedTexture2D" +uid="uid://oald6mp1l1h7" +path="res://.godot/imported/bayer4.png-2008f73a4dd6b2f9f4ba6aac825a7b9b.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/dither-matrices/bayer4.png" -dest_files=[ "res://.import/bayer4.png-2008f73a4dd6b2f9f4ba6aac825a7b9b.stex" ] +dest_files=["res://.godot/imported/bayer4.png-2008f73a4dd6b2f9f4ba6aac825a7b9b.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/dither-matrices/bayer8.png.import b/assets/dither-matrices/bayer8.png.import index 483cea2ad04..530a9bf37f7 100644 --- a/assets/dither-matrices/bayer8.png.import +++ b/assets/dither-matrices/bayer8.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/bayer8.png-2c0f9ff189b3d219f822ce84a94f5abd.stex" +type="CompressedTexture2D" +uid="uid://bq45j7jxav8nw" +path="res://.godot/imported/bayer8.png-2c0f9ff189b3d219f822ce84a94f5abd.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/dither-matrices/bayer8.png" -dest_files=[ "res://.import/bayer8.png-2c0f9ff189b3d219f822ce84a94f5abd.stex" ] +dest_files=["res://.godot/imported/bayer8.png-2c0f9ff189b3d219f822ce84a94f5abd.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/fonts/DroidSansFallback-License.txt b/assets/fonts/DroidSansFallback-License.txt deleted file mode 100644 index 1a96dfde6c2..00000000000 --- a/assets/fonts/DroidSansFallback-License.txt +++ /dev/null @@ -1,18 +0,0 @@ -Copyright (C) 2008 The Android Open Source Project - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -########## - -This directory contains the fonts for the platform. They are licensed -under the Apache 2 license. diff --git a/assets/fonts/DroidSansFallback.ttf b/assets/fonts/DroidSansFallback.ttf deleted file mode 100644 index 61460b1f9df..00000000000 Binary files a/assets/fonts/DroidSansFallback.ttf and /dev/null differ diff --git a/assets/fonts/Roboto-Big.tres b/assets/fonts/Roboto-Big.tres deleted file mode 100644 index 2721e19cac5..00000000000 --- a/assets/fonts/Roboto-Big.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="DynamicFont" load_steps=3 format=2] - -[ext_resource path="res://assets/fonts/Roboto-Regular.ttf" type="DynamicFontData" id=1] -[ext_resource path="res://assets/fonts/DroidSansFallback.ttf" type="DynamicFontData" id=2] - -[resource] -use_mipmaps = true -use_filter = true -font_data = ExtResource( 1 ) -fallback/0 = ExtResource( 2 ) diff --git a/assets/fonts/Roboto-Italic.tres b/assets/fonts/Roboto-Italic.tres deleted file mode 100644 index b4fcaac7c7b..00000000000 --- a/assets/fonts/Roboto-Italic.tres +++ /dev/null @@ -1,11 +0,0 @@ -[gd_resource type="DynamicFont" load_steps=3 format=2] - -[ext_resource path="res://assets/fonts/Roboto-Italic.ttf" type="DynamicFontData" id=1] -[ext_resource path="res://assets/fonts/DroidSansFallback.ttf" type="DynamicFontData" id=2] - -[resource] -size = 12 -use_mipmaps = true -use_filter = true -font_data = ExtResource( 1 ) -fallback/0 = ExtResource( 2 ) diff --git a/assets/fonts/Roboto-Italic.ttf.import b/assets/fonts/Roboto-Italic.ttf.import new file mode 100644 index 00000000000..0e97040ef24 --- /dev/null +++ b/assets/fonts/Roboto-Italic.ttf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cy5lkye8vdr5t" +path="res://.godot/imported/Roboto-Italic.ttf-1459ab7510a4240cd642ef0fe9caff7f.fontdata" + +[deps] + +source_file="res://assets/fonts/Roboto-Italic.ttf" +dest_files=["res://.godot/imported/Roboto-Italic.ttf-1459ab7510a4240cd642ef0fe9caff7f.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/fonts/Roboto-Regular.tres b/assets/fonts/Roboto-Regular.tres deleted file mode 100644 index d8e5b485e70..00000000000 --- a/assets/fonts/Roboto-Regular.tres +++ /dev/null @@ -1,11 +0,0 @@ -[gd_resource type="DynamicFont" load_steps=3 format=2] - -[ext_resource path="res://assets/fonts/Roboto-Regular.ttf" type="DynamicFontData" id=1] -[ext_resource path="res://assets/fonts/DroidSansFallback.ttf" type="DynamicFontData" id=2] - -[resource] -size = 12 -use_mipmaps = true -use_filter = true -font_data = ExtResource( 1 ) -fallback/0 = ExtResource( 2 ) diff --git a/assets/fonts/Roboto-Regular.ttf.import b/assets/fonts/Roboto-Regular.ttf.import new file mode 100644 index 00000000000..5a7e24eaa7a --- /dev/null +++ b/assets/fonts/Roboto-Regular.ttf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cvc4lelf6hl7x" +path="res://.godot/imported/Roboto-Regular.ttf-e67097a08cc051e6b179dbaab401b2bc.fontdata" + +[deps] + +source_file="res://assets/fonts/Roboto-Regular.ttf" +dest_files=["res://.godot/imported/Roboto-Regular.ttf-e67097a08cc051e6b179dbaab401b2bc.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/fonts/Roboto-Small.tres b/assets/fonts/Roboto-Small.tres deleted file mode 100644 index c4d999caed4..00000000000 --- a/assets/fonts/Roboto-Small.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="DynamicFont" load_steps=3 format=2] - -[ext_resource path="res://assets/fonts/Roboto-Regular.ttf" type="DynamicFontData" id=1] -[ext_resource path="res://assets/fonts/DroidSansFallback.ttf" type="DynamicFontData" id=2] - -[resource] -size = 10 -use_mipmaps = true -font_data = ExtResource( 1 ) -fallback/0 = ExtResource( 2 ) diff --git a/assets/graphics/circle_9x9.png.import b/assets/graphics/circle_9x9.png.import index 4fb3dabbf2b..d2a3e6f1a86 100644 --- a/assets/graphics/circle_9x9.png.import +++ b/assets/graphics/circle_9x9.png.import @@ -2,12 +2,13 @@ importer="image" type="Image" -path="res://.import/circle_9x9.png-775114b180b1f2b8d06dc42243fc410b.image" +uid="uid://bccayivs7v851" +path="res://.godot/imported/circle_9x9.png-775114b180b1f2b8d06dc42243fc410b.image" [deps] source_file="res://assets/graphics/circle_9x9.png" -dest_files=[ "res://.import/circle_9x9.png-775114b180b1f2b8d06dc42243fc410b.image" ] +dest_files=["res://.godot/imported/circle_9x9.png-775114b180b1f2b8d06dc42243fc410b.image"] [params] diff --git a/assets/graphics/circle_filled_9x9.png.import b/assets/graphics/circle_filled_9x9.png.import index e1e79fc900c..69d05332b45 100644 --- a/assets/graphics/circle_filled_9x9.png.import +++ b/assets/graphics/circle_filled_9x9.png.import @@ -2,12 +2,13 @@ importer="image" type="Image" -path="res://.import/circle_filled_9x9.png-babef9d7f189abd07273845268222c6c.image" +uid="uid://0rkdth7xh8ah" +path="res://.godot/imported/circle_filled_9x9.png-babef9d7f189abd07273845268222c6c.image" [deps] source_file="res://assets/graphics/circle_filled_9x9.png" -dest_files=[ "res://.import/circle_filled_9x9.png-babef9d7f189abd07273845268222c6c.image" ] +dest_files=["res://.godot/imported/circle_filled_9x9.png-babef9d7f189abd07273845268222c6c.image"] [params] diff --git a/assets/graphics/cursor.png.import b/assets/graphics/cursor.png.import index 3ea87ca1251..a8a740d74ce 100644 --- a/assets/graphics/cursor.png.import +++ b/assets/graphics/cursor.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/cursor.png-45ecd5a1e583fe3ca68fe559623aadce.stex" +type="CompressedTexture2D" +uid="uid://busi7lojhqxgq" +path="res://.godot/imported/cursor.png-45ecd5a1e583fe3ca68fe559623aadce.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/cursor.png" -dest_files=[ "res://.import/cursor.png-45ecd5a1e583fe3ca68fe559623aadce.stex" ] +dest_files=["res://.godot/imported/cursor.png-45ecd5a1e583fe3ca68fe559623aadce.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/dotted_line.png.import b/assets/graphics/dotted_line.png.import index e37bc2484e6..d0ad9172a27 100644 --- a/assets/graphics/dotted_line.png.import +++ b/assets/graphics/dotted_line.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/dotted_line.png-9a94e4e6ebf9c11e53076f53e529d37a.stex" +type="CompressedTexture2D" +uid="uid://xnqvppcpt7jb" +path="res://.godot/imported/dotted_line.png-9a94e4e6ebf9c11e53076f53e529d37a.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/dotted_line.png" -dest_files=[ "res://.import/dotted_line.png-9a94e4e6ebf9c11e53076f53e529d37a.stex" ] +dest_files=["res://.godot/imported/dotted_line.png-9a94e4e6ebf9c11e53076f53e529d37a.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/gizmos/directional_light.svg.import b/assets/graphics/gizmos/directional_light.svg.import index 0f9e25737b6..dab7d548234 100644 --- a/assets/graphics/gizmos/directional_light.svg.import +++ b/assets/graphics/gizmos/directional_light.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/directional_light.svg-093cdb9a72dee590271da014181a4680.stex" +type="CompressedTexture2D" +uid="uid://bd25ysikhyhqn" +path="res://.godot/imported/directional_light.svg-093cdb9a72dee590271da014181a4680.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://assets/graphics/gizmos/directional_light.svg" -dest_files=[ "res://.import/directional_light.svg-093cdb9a72dee590271da014181a4680.stex" ] +dest_files=["res://.godot/imported/directional_light.svg-093cdb9a72dee590271da014181a4680.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gizmos/omni_light.svg.import b/assets/graphics/gizmos/omni_light.svg.import index 886848a9997..a1cc97b7eaf 100644 --- a/assets/graphics/gizmos/omni_light.svg.import +++ b/assets/graphics/gizmos/omni_light.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/omni_light.svg-b0faa945d45257c6c9fecd256ed51eee.stex" +type="CompressedTexture2D" +uid="uid://cu38hb880ltae" +path="res://.godot/imported/omni_light.svg-b0faa945d45257c6c9fecd256ed51eee.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://assets/graphics/gizmos/omni_light.svg" -dest_files=[ "res://.import/omni_light.svg-b0faa945d45257c6c9fecd256ed51eee.stex" ] +dest_files=["res://.godot/imported/omni_light.svg-b0faa945d45257c6c9fecd256ed51eee.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gizmos/spot_light.svg.import b/assets/graphics/gizmos/spot_light.svg.import index a8040fae612..ab9a3405575 100644 --- a/assets/graphics/gizmos/spot_light.svg.import +++ b/assets/graphics/gizmos/spot_light.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/spot_light.svg-d309a6f5345413a6c8b9afd3cfe72f29.stex" +type="CompressedTexture2D" +uid="uid://ded88bscdjle8" +path="res://.godot/imported/spot_light.svg-d309a6f5345413a6c8b9afd3cfe72f29.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://assets/graphics/gizmos/spot_light.svg" -dest_files=[ "res://.import/spot_light.svg-d309a6f5345413a6c8b9afd3cfe72f29.stex" ] +dest_files=["res://.godot/imported/spot_light.svg-d309a6f5345413a6c8b9afd3cfe72f29.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/icons/icon.png.import b/assets/graphics/icons/icon.png.import index 29af9a99ac1..742e24bbb46 100644 --- a/assets/graphics/icons/icon.png.import +++ b/assets/graphics/icons/icon.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon.png-aa34c86f977c2e615fbfe8e823c3b00c.stex" +type="CompressedTexture2D" +uid="uid://b47r0c6auaqk6" +path="res://.godot/imported/icon.png-aa34c86f977c2e615fbfe8e823c3b00c.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/icons/icon.png" -dest_files=[ "res://.import/icon.png-aa34c86f977c2e615fbfe8e823c3b00c.stex" ] +dest_files=["res://.godot/imported/icon.png-aa34c86f977c2e615fbfe8e823c3b00c.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/clone.png.import b/assets/graphics/layers/clone.png.import index 5241134ac94..2564dc1488c 100644 --- a/assets/graphics/layers/clone.png.import +++ b/assets/graphics/layers/clone.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/clone.png-04ad708db9ea2b00606e50fe99f4ca29.stex" +type="CompressedTexture2D" +uid="uid://d3gx4phcox58s" +path="res://.godot/imported/clone.png-04ad708db9ea2b00606e50fe99f4ca29.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/clone.png" -dest_files=[ "res://.import/clone.png-04ad708db9ea2b00606e50fe99f4ca29.stex" ] +dest_files=["res://.godot/imported/clone.png-04ad708db9ea2b00606e50fe99f4ca29.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/delete.png.import b/assets/graphics/layers/delete.png.import index 55dc4554064..d61be7fb1eb 100644 --- a/assets/graphics/layers/delete.png.import +++ b/assets/graphics/layers/delete.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/delete.png-78cc7779425d13dd019b2b6b51aca5b2.stex" +type="CompressedTexture2D" +uid="uid://x2k652y15v04" +path="res://.godot/imported/delete.png-78cc7779425d13dd019b2b6b51aca5b2.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/delete.png" -dest_files=[ "res://.import/delete.png-78cc7779425d13dd019b2b6b51aca5b2.stex" ] +dest_files=["res://.godot/imported/delete.png-78cc7779425d13dd019b2b6b51aca5b2.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/group_collapsed.png.import b/assets/graphics/layers/group_collapsed.png.import index 83ac242ef69..fc3e4c5cdf0 100644 --- a/assets/graphics/layers/group_collapsed.png.import +++ b/assets/graphics/layers/group_collapsed.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/group_collapsed.png-9d08fac1c2f635c754860111d024aa0f.stex" +type="CompressedTexture2D" +uid="uid://d11kh3e3nq1l5" +path="res://.godot/imported/group_collapsed.png-9d08fac1c2f635c754860111d024aa0f.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/group_collapsed.png" -dest_files=[ "res://.import/group_collapsed.png-9d08fac1c2f635c754860111d024aa0f.stex" ] +dest_files=["res://.godot/imported/group_collapsed.png-9d08fac1c2f635c754860111d024aa0f.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/group_expanded.png.import b/assets/graphics/layers/group_expanded.png.import index 9c8eff2dd93..660a0d26507 100644 --- a/assets/graphics/layers/group_expanded.png.import +++ b/assets/graphics/layers/group_expanded.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/group_expanded.png-f3cd620185a4989737d6d9a36f4b57f3.stex" +type="CompressedTexture2D" +uid="uid://dndlglvqc7v6a" +path="res://.godot/imported/group_expanded.png-f3cd620185a4989737d6d9a36f4b57f3.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/group_expanded.png" -dest_files=[ "res://.import/group_expanded.png-f3cd620185a4989737d6d9a36f4b57f3.stex" ] +dest_files=["res://.godot/imported/group_expanded.png-f3cd620185a4989737d6d9a36f4b57f3.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/group_new.png.import b/assets/graphics/layers/group_new.png.import index 904b6b0bd6f..73ab0710ded 100644 --- a/assets/graphics/layers/group_new.png.import +++ b/assets/graphics/layers/group_new.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/group_new.png-4ebdc7dd84d8c8a7b7979f50f4471543.stex" +type="CompressedTexture2D" +uid="uid://cmgnc2emsbxni" +path="res://.godot/imported/group_new.png-4ebdc7dd84d8c8a7b7979f50f4471543.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/group_new.png" -dest_files=[ "res://.import/group_new.png-4ebdc7dd84d8c8a7b7979f50f4471543.stex" ] +dest_files=["res://.godot/imported/group_new.png-4ebdc7dd84d8c8a7b7979f50f4471543.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/layer_invisible.png.import b/assets/graphics/layers/layer_invisible.png.import index 3cb9cc47bc7..46376e521d8 100644 --- a/assets/graphics/layers/layer_invisible.png.import +++ b/assets/graphics/layers/layer_invisible.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/layer_invisible.png-b8a35d26d7a70c1d9e228e24fcffb0d2.stex" +type="CompressedTexture2D" +uid="uid://dwqdm6pllnipj" +path="res://.godot/imported/layer_invisible.png-b8a35d26d7a70c1d9e228e24fcffb0d2.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/layer_invisible.png" -dest_files=[ "res://.import/layer_invisible.png-b8a35d26d7a70c1d9e228e24fcffb0d2.stex" ] +dest_files=["res://.godot/imported/layer_invisible.png-b8a35d26d7a70c1d9e228e24fcffb0d2.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/layer_visible.png.import b/assets/graphics/layers/layer_visible.png.import index 3f3a47df6f6..28024064957 100644 --- a/assets/graphics/layers/layer_visible.png.import +++ b/assets/graphics/layers/layer_visible.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/layer_visible.png-28b5ac4566a2e156d8e7d4caecc5f889.stex" +type="CompressedTexture2D" +uid="uid://c2b3htff5yox8" +path="res://.godot/imported/layer_visible.png-28b5ac4566a2e156d8e7d4caecc5f889.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/layer_visible.png" -dest_files=[ "res://.import/layer_visible.png-28b5ac4566a2e156d8e7d4caecc5f889.stex" ] +dest_files=["res://.godot/imported/layer_visible.png-28b5ac4566a2e156d8e7d4caecc5f889.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/linked_layer.png.import b/assets/graphics/layers/linked_layer.png.import index 635f6fcb260..0ad2f04186a 100644 --- a/assets/graphics/layers/linked_layer.png.import +++ b/assets/graphics/layers/linked_layer.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/linked_layer.png-b1b5eaf8b8ea0396142d4f1a6180fff9.stex" +type="CompressedTexture2D" +uid="uid://brxdpqcx5g7v2" +path="res://.godot/imported/linked_layer.png-b1b5eaf8b8ea0396142d4f1a6180fff9.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/linked_layer.png" -dest_files=[ "res://.import/linked_layer.png-b1b5eaf8b8ea0396142d4f1a6180fff9.stex" ] +dest_files=["res://.godot/imported/linked_layer.png-b1b5eaf8b8ea0396142d4f1a6180fff9.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/lock.png.import b/assets/graphics/layers/lock.png.import index ad321455ac4..fd83c888c40 100644 --- a/assets/graphics/layers/lock.png.import +++ b/assets/graphics/layers/lock.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/lock.png-cd4de2cfd1fd7db7839cbddf2e6ed0ef.stex" +type="CompressedTexture2D" +uid="uid://des606sdhau2i" +path="res://.godot/imported/lock.png-cd4de2cfd1fd7db7839cbddf2e6ed0ef.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/lock.png" -dest_files=[ "res://.import/lock.png-cd4de2cfd1fd7db7839cbddf2e6ed0ef.stex" ] +dest_files=["res://.godot/imported/lock.png-cd4de2cfd1fd7db7839cbddf2e6ed0ef.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/merge_down.png.import b/assets/graphics/layers/merge_down.png.import index fbd4883da5f..f42ff5c8a8b 100644 --- a/assets/graphics/layers/merge_down.png.import +++ b/assets/graphics/layers/merge_down.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/merge_down.png-a3f5d31e30b455770aabfc4c5082293e.stex" +type="CompressedTexture2D" +uid="uid://bx1xa5aacxfx4" +path="res://.godot/imported/merge_down.png-a3f5d31e30b455770aabfc4c5082293e.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/merge_down.png" -dest_files=[ "res://.import/merge_down.png-a3f5d31e30b455770aabfc4c5082293e.stex" ] +dest_files=["res://.godot/imported/merge_down.png-a3f5d31e30b455770aabfc4c5082293e.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/move_down.png.import b/assets/graphics/layers/move_down.png.import index 6df051ce4a9..9b7a10382f7 100644 --- a/assets/graphics/layers/move_down.png.import +++ b/assets/graphics/layers/move_down.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/move_down.png-5c0dcaa0f2a312e278777265b5650041.stex" +type="CompressedTexture2D" +uid="uid://dmhauk0dee42v" +path="res://.godot/imported/move_down.png-5c0dcaa0f2a312e278777265b5650041.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/move_down.png" -dest_files=[ "res://.import/move_down.png-5c0dcaa0f2a312e278777265b5650041.stex" ] +dest_files=["res://.godot/imported/move_down.png-5c0dcaa0f2a312e278777265b5650041.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/move_up.png.import b/assets/graphics/layers/move_up.png.import index b7dfeff71d6..02ef8cd0108 100644 --- a/assets/graphics/layers/move_up.png.import +++ b/assets/graphics/layers/move_up.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/move_up.png-2e639f267f2670e8bc72d0101082d31e.stex" +type="CompressedTexture2D" +uid="uid://c7bha4a6x4bav" +path="res://.godot/imported/move_up.png-2e639f267f2670e8bc72d0101082d31e.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/move_up.png" -dest_files=[ "res://.import/move_up.png-2e639f267f2670e8bc72d0101082d31e.stex" ] +dest_files=["res://.godot/imported/move_up.png-2e639f267f2670e8bc72d0101082d31e.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/new.png.import b/assets/graphics/layers/new.png.import index 148317df3f9..4e68a57cedf 100644 --- a/assets/graphics/layers/new.png.import +++ b/assets/graphics/layers/new.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/new.png-0807d977a6b977842f10a56051eb0c7b.stex" +type="CompressedTexture2D" +uid="uid://d36mlbmq06q4e" +path="res://.godot/imported/new.png-0807d977a6b977842f10a56051eb0c7b.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/new.png" -dest_files=[ "res://.import/new.png-0807d977a6b977842f10a56051eb0c7b.stex" ] +dest_files=["res://.godot/imported/new.png-0807d977a6b977842f10a56051eb0c7b.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/unlinked_layer.png.import b/assets/graphics/layers/unlinked_layer.png.import index bf88889d8e1..e52d179769d 100644 --- a/assets/graphics/layers/unlinked_layer.png.import +++ b/assets/graphics/layers/unlinked_layer.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/unlinked_layer.png-3b8f06ad6f0e4f7ae07342b1315d50b5.stex" +type="CompressedTexture2D" +uid="uid://cofw1x6chh4i" +path="res://.godot/imported/unlinked_layer.png-3b8f06ad6f0e4f7ae07342b1315d50b5.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/unlinked_layer.png" -dest_files=[ "res://.import/unlinked_layer.png-3b8f06ad6f0e4f7ae07342b1315d50b5.stex" ] +dest_files=["res://.godot/imported/unlinked_layer.png-3b8f06ad6f0e4f7ae07342b1315d50b5.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/layers/unlock.png.import b/assets/graphics/layers/unlock.png.import index a1cb0bb447c..560b0f0959b 100644 --- a/assets/graphics/layers/unlock.png.import +++ b/assets/graphics/layers/unlock.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/unlock.png-71ad91dbe0f60844cb241c3fa92b1d9e.stex" +type="CompressedTexture2D" +uid="uid://dhc0pnnqojd2m" +path="res://.godot/imported/unlock.png-71ad91dbe0f60844cb241c3fa92b1d9e.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/layers/unlock.png" -dest_files=[ "res://.import/unlock.png-71ad91dbe0f60844cb241c3fa92b1d9e.stex" ] +dest_files=["res://.godot/imported/unlock.png-71ad91dbe0f60844cb241c3fa92b1d9e.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/animate.png.import b/assets/graphics/misc/animate.png.import index 2d3817f74b4..bf39584dfd8 100644 --- a/assets/graphics/misc/animate.png.import +++ b/assets/graphics/misc/animate.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/animate.png-79364ccdc41b6325d06915e85b554b1e.stex" +type="CompressedTexture2D" +uid="uid://blrd4x0ma7b3h" +path="res://.godot/imported/animate.png-79364ccdc41b6325d06915e85b554b1e.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/animate.png" -dest_files=[ "res://.import/animate.png-79364ccdc41b6325d06915e85b554b1e.stex" ] +dest_files=["res://.godot/imported/animate.png-79364ccdc41b6325d06915e85b554b1e.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/check.png.import b/assets/graphics/misc/check.png.import index 8e108e2eb9f..e89c25901c9 100644 --- a/assets/graphics/misc/check.png.import +++ b/assets/graphics/misc/check.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/check.png-0fc65a6dd56b2296f9f8446beb7b136a.stex" +type="CompressedTexture2D" +uid="uid://heqfoai5j8p" +path="res://.godot/imported/check.png-0fc65a6dd56b2296f9f8446beb7b136a.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/check.png" -dest_files=[ "res://.import/check.png-0fc65a6dd56b2296f9f8446beb7b136a.stex" ] +dest_files=["res://.godot/imported/check.png-0fc65a6dd56b2296f9f8446beb7b136a.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/color_defaults.png.import b/assets/graphics/misc/color_defaults.png.import index e73c99df02f..c816142b61f 100644 --- a/assets/graphics/misc/color_defaults.png.import +++ b/assets/graphics/misc/color_defaults.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/color_defaults.png-c124fa16d0ba44ed53b431d16e310948.stex" +type="CompressedTexture2D" +uid="uid://dkpxkdk1xf0ea" +path="res://.godot/imported/color_defaults.png-c124fa16d0ba44ed53b431d16e310948.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/color_defaults.png" -dest_files=[ "res://.import/color_defaults.png-c124fa16d0ba44ed53b431d16e310948.stex" ] +dest_files=["res://.godot/imported/color_defaults.png-c124fa16d0ba44ed53b431d16e310948.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/color_switch.png.import b/assets/graphics/misc/color_switch.png.import index 183792000d7..4820e84f83c 100644 --- a/assets/graphics/misc/color_switch.png.import +++ b/assets/graphics/misc/color_switch.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/color_switch.png-a49ad8d7dd5258b7f0ac15f4eff6f2cb.stex" +type="CompressedTexture2D" +uid="uid://d0v821l01w7go" +path="res://.godot/imported/color_switch.png-a49ad8d7dd5258b7f0ac15f4eff6f2cb.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/color_switch.png" -dest_files=[ "res://.import/color_switch.png-a49ad8d7dd5258b7f0ac15f4eff6f2cb.stex" ] +dest_files=["res://.godot/imported/color_switch.png-a49ad8d7dd5258b7f0ac15f4eff6f2cb.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/dynamics.png.import b/assets/graphics/misc/dynamics.png.import index 4d6142134f0..e61d019119a 100644 --- a/assets/graphics/misc/dynamics.png.import +++ b/assets/graphics/misc/dynamics.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/dynamics.png-ea904a4a1658c230cb654ce11b3cb7b2.stex" +type="CompressedTexture2D" +uid="uid://dg3dumyfj1682" +path="res://.godot/imported/dynamics.png-ea904a4a1658c230cb654ce11b3cb7b2.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/dynamics.png" -dest_files=[ "res://.import/dynamics.png-ea904a4a1658c230cb654ce11b3cb7b2.stex" ] +dest_files=["res://.godot/imported/dynamics.png-ea904a4a1658c230cb654ce11b3cb7b2.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/horizontal_mirror_off.png.import b/assets/graphics/misc/horizontal_mirror_off.png.import index e0d0bd61535..a76b63caeea 100644 --- a/assets/graphics/misc/horizontal_mirror_off.png.import +++ b/assets/graphics/misc/horizontal_mirror_off.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/horizontal_mirror_off.png-9d8560bf545907eff57b3b2107854b44.stex" +type="CompressedTexture2D" +uid="uid://cjrokejjsp5dm" +path="res://.godot/imported/horizontal_mirror_off.png-9d8560bf545907eff57b3b2107854b44.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/horizontal_mirror_off.png" -dest_files=[ "res://.import/horizontal_mirror_off.png-9d8560bf545907eff57b3b2107854b44.stex" ] +dest_files=["res://.godot/imported/horizontal_mirror_off.png-9d8560bf545907eff57b3b2107854b44.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/horizontal_mirror_on.png.import b/assets/graphics/misc/horizontal_mirror_on.png.import index e863fc54b01..e0490bba02b 100644 --- a/assets/graphics/misc/horizontal_mirror_on.png.import +++ b/assets/graphics/misc/horizontal_mirror_on.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/horizontal_mirror_on.png-264c6a31006968d8eccd9723d3c84173.stex" +type="CompressedTexture2D" +uid="uid://38kahqv1fdiu" +path="res://.godot/imported/horizontal_mirror_on.png-264c6a31006968d8eccd9723d3c84173.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/horizontal_mirror_on.png" -dest_files=[ "res://.import/horizontal_mirror_on.png-264c6a31006968d8eccd9723d3c84173.stex" ] +dest_files=["res://.godot/imported/horizontal_mirror_on.png-264c6a31006968d8eccd9723d3c84173.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/icon_reload.png.import b/assets/graphics/misc/icon_reload.png.import index 53b233cd394..aed04a3c839 100644 --- a/assets/graphics/misc/icon_reload.png.import +++ b/assets/graphics/misc/icon_reload.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/icon_reload.png-938449bb97ec8e3146e3e63a36e4d9a4.stex" +type="CompressedTexture2D" +uid="uid://bv7ldl8obhawm" +path="res://.godot/imported/icon_reload.png-938449bb97ec8e3146e3e63a36e4d9a4.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/icon_reload.png" -dest_files=[ "res://.import/icon_reload.png-938449bb97ec8e3146e3e63a36e4d9a4.stex" ] +dest_files=["res://.godot/imported/icon_reload.png-938449bb97ec8e3146e3e63a36e4d9a4.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/landscape.png.import b/assets/graphics/misc/landscape.png.import index bd0822c9b3a..bf98aca9a5e 100644 --- a/assets/graphics/misc/landscape.png.import +++ b/assets/graphics/misc/landscape.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/landscape.png-06f6d4634b998fafceba8617ed995411.stex" +type="CompressedTexture2D" +uid="uid://0vc1pn1sn2ud" +path="res://.godot/imported/landscape.png-06f6d4634b998fafceba8617ed995411.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/landscape.png" -dest_files=[ "res://.import/landscape.png-06f6d4634b998fafceba8617ed995411.stex" ] +dest_files=["res://.godot/imported/landscape.png-06f6d4634b998fafceba8617ed995411.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/lock_aspect.png.import b/assets/graphics/misc/lock_aspect.png.import index a9edbf1ca82..1ea22935c7c 100644 --- a/assets/graphics/misc/lock_aspect.png.import +++ b/assets/graphics/misc/lock_aspect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/lock_aspect.png-73737b9c965fcfc20370ece65a769bab.stex" +type="CompressedTexture2D" +uid="uid://beqermx8s5q8y" +path="res://.godot/imported/lock_aspect.png-73737b9c965fcfc20370ece65a769bab.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/lock_aspect.png" -dest_files=[ "res://.import/lock_aspect.png-73737b9c965fcfc20370ece65a769bab.stex" ] +dest_files=["res://.godot/imported/lock_aspect.png-73737b9c965fcfc20370ece65a769bab.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/lock_aspect_2.png.import b/assets/graphics/misc/lock_aspect_2.png.import index 7ffd846712a..1e950d7dad5 100644 --- a/assets/graphics/misc/lock_aspect_2.png.import +++ b/assets/graphics/misc/lock_aspect_2.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/lock_aspect_2.png-463878b082f40e094e4a379076b066c6.stex" +type="CompressedTexture2D" +uid="uid://cancw70yw0pv7" +path="res://.godot/imported/lock_aspect_2.png-463878b082f40e094e4a379076b066c6.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/lock_aspect_2.png" -dest_files=[ "res://.import/lock_aspect_2.png-463878b082f40e094e4a379076b066c6.stex" ] +dest_files=["res://.godot/imported/lock_aspect_2.png-463878b082f40e094e4a379076b066c6.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/lock_aspect_guides.png.import b/assets/graphics/misc/lock_aspect_guides.png.import index 1ecc4c44ff8..5222b3e84e9 100644 --- a/assets/graphics/misc/lock_aspect_guides.png.import +++ b/assets/graphics/misc/lock_aspect_guides.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/lock_aspect_guides.png-928321195f27dd29d4b591772db9fba0.stex" +type="CompressedTexture2D" +uid="uid://kd10jfc1dxf5" +path="res://.godot/imported/lock_aspect_guides.png-928321195f27dd29d4b591772db9fba0.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/lock_aspect_guides.png" -dest_files=[ "res://.import/lock_aspect_guides.png-928321195f27dd29d4b591772db9fba0.stex" ] +dest_files=["res://.godot/imported/lock_aspect_guides.png-928321195f27dd29d4b591772db9fba0.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/locked_size.png.import b/assets/graphics/misc/locked_size.png.import index bcfe69e1744..4174545d512 100644 --- a/assets/graphics/misc/locked_size.png.import +++ b/assets/graphics/misc/locked_size.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/locked_size.png-05ec97950456a9ee42557d3414337309.stex" +type="CompressedTexture2D" +uid="uid://cq0uqutw8r8wi" +path="res://.godot/imported/locked_size.png-05ec97950456a9ee42557d3414337309.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/locked_size.png" -dest_files=[ "res://.import/locked_size.png-05ec97950456a9ee42557d3414337309.stex" ] +dest_files=["res://.godot/imported/locked_size.png-05ec97950456a9ee42557d3414337309.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/pixel_perfect_off.png.import b/assets/graphics/misc/pixel_perfect_off.png.import index f0abb0e186d..70ad1934fba 100644 --- a/assets/graphics/misc/pixel_perfect_off.png.import +++ b/assets/graphics/misc/pixel_perfect_off.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/pixel_perfect_off.png-3ae3ddb583d51a5cedad3b51fdc0f0d4.stex" +type="CompressedTexture2D" +uid="uid://22h12g8p3jtd" +path="res://.godot/imported/pixel_perfect_off.png-3ae3ddb583d51a5cedad3b51fdc0f0d4.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/pixel_perfect_off.png" -dest_files=[ "res://.import/pixel_perfect_off.png-3ae3ddb583d51a5cedad3b51fdc0f0d4.stex" ] +dest_files=["res://.godot/imported/pixel_perfect_off.png-3ae3ddb583d51a5cedad3b51fdc0f0d4.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/pixel_perfect_on.png.import b/assets/graphics/misc/pixel_perfect_on.png.import index dd1f8108a7e..cc09c8fafa9 100644 --- a/assets/graphics/misc/pixel_perfect_on.png.import +++ b/assets/graphics/misc/pixel_perfect_on.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/pixel_perfect_on.png-b6491a77b0ebb21671803e7a75c8e18d.stex" +type="CompressedTexture2D" +uid="uid://ckx4ua0ecg4xq" +path="res://.godot/imported/pixel_perfect_on.png-b6491a77b0ebb21671803e7a75c8e18d.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/pixel_perfect_on.png" -dest_files=[ "res://.import/pixel_perfect_on.png-b6491a77b0ebb21671803e7a75c8e18d.stex" ] +dest_files=["res://.godot/imported/pixel_perfect_on.png-b6491a77b0ebb21671803e7a75c8e18d.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/portrait.png.import b/assets/graphics/misc/portrait.png.import index 18a48b5dfaf..0cb861c3721 100644 --- a/assets/graphics/misc/portrait.png.import +++ b/assets/graphics/misc/portrait.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/portrait.png-9b586f1b2b2a8fb8e580481b3bf6d826.stex" +type="CompressedTexture2D" +uid="uid://kj867tldofxi" +path="res://.godot/imported/portrait.png-9b586f1b2b2a8fb8e580481b3bf6d826.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/portrait.png" -dest_files=[ "res://.import/portrait.png-9b586f1b2b2a8fb8e580481b3bf6d826.stex" ] +dest_files=["res://.godot/imported/portrait.png-9b586f1b2b2a8fb8e580481b3bf6d826.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/uncheck.png.import b/assets/graphics/misc/uncheck.png.import index 16eeadfca9e..6f37d68a4c2 100644 --- a/assets/graphics/misc/uncheck.png.import +++ b/assets/graphics/misc/uncheck.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/uncheck.png-e9003e3a9b5f329de0c2aec37621a462.stex" +type="CompressedTexture2D" +uid="uid://di8au2u87jgv5" +path="res://.godot/imported/uncheck.png-e9003e3a9b5f329de0c2aec37621a462.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/uncheck.png" -dest_files=[ "res://.import/uncheck.png-e9003e3a9b5f329de0c2aec37621a462.stex" ] +dest_files=["res://.godot/imported/uncheck.png-e9003e3a9b5f329de0c2aec37621a462.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/unlocked_size.png.import b/assets/graphics/misc/unlocked_size.png.import index bbca431f977..5b1361ad530 100644 --- a/assets/graphics/misc/unlocked_size.png.import +++ b/assets/graphics/misc/unlocked_size.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/unlocked_size.png-bd224f1987da9100f208bda51349ff67.stex" +type="CompressedTexture2D" +uid="uid://bgrq56ndc4ydj" +path="res://.godot/imported/unlocked_size.png-bd224f1987da9100f208bda51349ff67.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/unlocked_size.png" -dest_files=[ "res://.import/unlocked_size.png-bd224f1987da9100f208bda51349ff67.stex" ] +dest_files=["res://.godot/imported/unlocked_size.png-bd224f1987da9100f208bda51349ff67.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/value_arrow.svg.import b/assets/graphics/misc/value_arrow.svg.import index 4be56869a29..87f879050c3 100644 --- a/assets/graphics/misc/value_arrow.svg.import +++ b/assets/graphics/misc/value_arrow.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/value_arrow.svg-fba0386b90d817941c289525e36a6d5f.stex" +type="CompressedTexture2D" +uid="uid://ct8wn8m6x4m54" +path="res://.godot/imported/value_arrow.svg-fba0386b90d817941c289525e36a6d5f.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://assets/graphics/misc/value_arrow.svg" -dest_files=[ "res://.import/value_arrow.svg-fba0386b90d817941c289525e36a6d5f.stex" ] +dest_files=["res://.godot/imported/value_arrow.svg-fba0386b90d817941c289525e36a6d5f.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/misc/value_arrow_hover.svg.import b/assets/graphics/misc/value_arrow_hover.svg.import index ee7fcb9cf32..1789dbba2d3 100644 --- a/assets/graphics/misc/value_arrow_hover.svg.import +++ b/assets/graphics/misc/value_arrow_hover.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/value_arrow_hover.svg-32e8ddfab9c4382171107e88c513d4f4.stex" +type="CompressedTexture2D" +uid="uid://bq8h66v4ie8xl" +path="res://.godot/imported/value_arrow_hover.svg-32e8ddfab9c4382171107e88c513d4f4.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://assets/graphics/misc/value_arrow_hover.svg" -dest_files=[ "res://.import/value_arrow_hover.svg-32e8ddfab9c4382171107e88c513d4f4.stex" ] +dest_files=["res://.godot/imported/value_arrow_hover.svg-32e8ddfab9c4382171107e88c513d4f4.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/misc/value_arrow_press.svg.import b/assets/graphics/misc/value_arrow_press.svg.import index ed7b08133e8..d6ad0e715a1 100644 --- a/assets/graphics/misc/value_arrow_press.svg.import +++ b/assets/graphics/misc/value_arrow_press.svg.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/value_arrow_press.svg-8069ba67bd2ee03d7abc3777706035a9.stex" +type="CompressedTexture2D" +uid="uid://hhxenhteahv6" +path="res://.godot/imported/value_arrow_press.svg-8069ba67bd2ee03d7abc3777706035a9.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,27 @@ metadata={ [deps] source_file="res://assets/graphics/misc/value_arrow_press.svg" -dest_files=[ "res://.import/value_arrow_press.svg-8069ba67bd2ee03d7abc3777706035a9.stex" ] +dest_files=["res://.godot/imported/value_arrow_press.svg-8069ba67bd2ee03d7abc3777706035a9.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/misc/value_slider.png.import b/assets/graphics/misc/value_slider.png.import index cbad17ed9a0..0b0250c1d53 100644 --- a/assets/graphics/misc/value_slider.png.import +++ b/assets/graphics/misc/value_slider.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/value_slider.png-1923f0534fe53aef508cb99231851c39.stex" +type="CompressedTexture2D" +uid="uid://c7u0yofrpm50a" +path="res://.godot/imported/value_slider.png-1923f0534fe53aef508cb99231851c39.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/value_slider.png" -dest_files=[ "res://.import/value_slider.png-1923f0534fe53aef508cb99231851c39.stex" ] +dest_files=["res://.godot/imported/value_slider.png-1923f0534fe53aef508cb99231851c39.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/vertical_mirror_off.png.import b/assets/graphics/misc/vertical_mirror_off.png.import index 74424094c36..292836cc1b9 100644 --- a/assets/graphics/misc/vertical_mirror_off.png.import +++ b/assets/graphics/misc/vertical_mirror_off.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/vertical_mirror_off.png-936c41f3e58c04ace7cdc4930d473d7c.stex" +type="CompressedTexture2D" +uid="uid://hiduvaa73fr6" +path="res://.godot/imported/vertical_mirror_off.png-936c41f3e58c04ace7cdc4930d473d7c.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/vertical_mirror_off.png" -dest_files=[ "res://.import/vertical_mirror_off.png-936c41f3e58c04ace7cdc4930d473d7c.stex" ] +dest_files=["res://.godot/imported/vertical_mirror_off.png-936c41f3e58c04ace7cdc4930d473d7c.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/misc/vertical_mirror_on.png.import b/assets/graphics/misc/vertical_mirror_on.png.import index 9c38fb23439..4bcb6254bfd 100644 --- a/assets/graphics/misc/vertical_mirror_on.png.import +++ b/assets/graphics/misc/vertical_mirror_on.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/vertical_mirror_on.png-f1f50f9138b06f859838a13350e60a8a.stex" +type="CompressedTexture2D" +uid="uid://di0v6f5osw0id" +path="res://.godot/imported/vertical_mirror_on.png-f1f50f9138b06f859838a13350e60a8a.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/misc/vertical_mirror_on.png" -dest_files=[ "res://.import/vertical_mirror_on.png-f1f50f9138b06f859838a13350e60a8a.stex" ] +dest_files=["res://.godot/imported/vertical_mirror_on.png-f1f50f9138b06f859838a13350e60a8a.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/palette/add.png.import b/assets/graphics/palette/add.png.import index 496837affd7..4e23cf4e15c 100644 --- a/assets/graphics/palette/add.png.import +++ b/assets/graphics/palette/add.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/add.png-c9dc80b6c922e70dabcc944f9eb6e5d9.stex" +type="CompressedTexture2D" +uid="uid://b7ydn1tt37rcl" +path="res://.godot/imported/add.png-c9dc80b6c922e70dabcc944f9eb6e5d9.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/palette/add.png" -dest_files=[ "res://.import/add.png-c9dc80b6c922e70dabcc944f9eb6e5d9.stex" ] +dest_files=["res://.godot/imported/add.png-c9dc80b6c922e70dabcc944f9eb6e5d9.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/palette/edit.png.import b/assets/graphics/palette/edit.png.import index 8b20d2a08e5..5a7816fb9a3 100644 --- a/assets/graphics/palette/edit.png.import +++ b/assets/graphics/palette/edit.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/edit.png-69d6fa919970bb9987f02f09190d3661.stex" +type="CompressedTexture2D" +uid="uid://biyn51upnlxle" +path="res://.godot/imported/edit.png-69d6fa919970bb9987f02f09190d3661.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/palette/edit.png" -dest_files=[ "res://.import/edit.png-69d6fa919970bb9987f02f09190d3661.stex" ] +dest_files=["res://.godot/imported/edit.png-69d6fa919970bb9987f02f09190d3661.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/pixel_image.png.import b/assets/graphics/pixel_image.png.import index 39c3a8d6473..08834143156 100644 --- a/assets/graphics/pixel_image.png.import +++ b/assets/graphics/pixel_image.png.import @@ -2,12 +2,13 @@ importer="image" type="Image" -path="res://.import/pixel_image.png-221d9db93637e5bd84a0851e7bc0147c.image" +uid="uid://dp23gk2ocyjiu" +path="res://.godot/imported/pixel_image.png-221d9db93637e5bd84a0851e7bc0147c.image" [deps] source_file="res://assets/graphics/pixel_image.png" -dest_files=[ "res://.import/pixel_image.png-221d9db93637e5bd84a0851e7bc0147c.image" ] +dest_files=["res://.godot/imported/pixel_image.png-221d9db93637e5bd84a0851e7bc0147c.image"] [params] diff --git a/assets/graphics/recorder/start.png.import b/assets/graphics/recorder/start.png.import index 1cc5c971964..58fd17343b0 100644 --- a/assets/graphics/recorder/start.png.import +++ b/assets/graphics/recorder/start.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/start.png-f7a4d6649bfd0c2da16e274157bff38e.stex" +type="CompressedTexture2D" +uid="uid://bgfqvkmstecr5" +path="res://.godot/imported/start.png-f7a4d6649bfd0c2da16e274157bff38e.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/recorder/start.png" -dest_files=[ "res://.import/start.png-f7a4d6649bfd0c2da16e274157bff38e.stex" ] +dest_files=["res://.godot/imported/start.png-f7a4d6649bfd0c2da16e274157bff38e.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/recorder/stop.png.import b/assets/graphics/recorder/stop.png.import index 8880b153923..62533017145 100644 --- a/assets/graphics/recorder/stop.png.import +++ b/assets/graphics/recorder/stop.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/stop.png-17c7b37f77b393ec6d5202f1f8a192ce.stex" +type="CompressedTexture2D" +uid="uid://cdaou5ckbayre" +path="res://.godot/imported/stop.png-17c7b37f77b393ec6d5202f1f8a192ce.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/recorder/stop.png" -dest_files=[ "res://.import/stop.png-17c7b37f77b393ec6d5202f1f8a192ce.stex" ] +dest_files=["res://.godot/imported/stop.png-17c7b37f77b393ec6d5202f1f8a192ce.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/splash.png.import b/assets/graphics/splash.png.import index 7358eef0ffd..4963b92af3a 100644 --- a/assets/graphics/splash.png.import +++ b/assets/graphics/splash.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/splash.png-17460da1948f3a674809d951b9a8184a.stex" +type="CompressedTexture2D" +uid="uid://cgjbk5vsy535u" +path="res://.godot/imported/splash.png-17460da1948f3a674809d951b9a8184a.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/splash.png" -dest_files=[ "res://.import/splash.png-17460da1948f3a674809d951b9a8184a.stex" ] +dest_files=["res://.godot/imported/splash.png-17460da1948f3a674809d951b9a8184a.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/splash_screen/artworks/exuvita.png.import b/assets/graphics/splash_screen/artworks/exuvita.png.import index 4b7aa424701..0ef687be86e 100644 --- a/assets/graphics/splash_screen/artworks/exuvita.png.import +++ b/assets/graphics/splash_screen/artworks/exuvita.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/exuvita.png-d93ba4b30822e9ce8c3e5db3899b8346.stex" +type="CompressedTexture2D" +uid="uid://ttgefsksr61" +path="res://.godot/imported/exuvita.png-d93ba4b30822e9ce8c3e5db3899b8346.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/splash_screen/artworks/exuvita.png" -dest_files=[ "res://.import/exuvita.png-d93ba4b30822e9ce8c3e5db3899b8346.stex" ] +dest_files=["res://.godot/imported/exuvita.png-d93ba4b30822e9ce8c3e5db3899b8346.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/splash_screen/artworks/roroto.png.import b/assets/graphics/splash_screen/artworks/roroto.png.import index c35caf1e014..4d89cf8d5d0 100644 --- a/assets/graphics/splash_screen/artworks/roroto.png.import +++ b/assets/graphics/splash_screen/artworks/roroto.png.import @@ -1,17 +1,34 @@ [remap] -importer="aimgio.apng_animatedtexture" -type="AnimatedTexture" -path="res://.import/roroto.png-5bb796ce1a0c5bb768b883a88b3da539.res" +importer="texture" +type="CompressedTexture2D" +uid="uid://bpyrg1b61ap1f" +path="res://.godot/imported/roroto.png-5bb796ce1a0c5bb768b883a88b3da539.ctex" +metadata={ +"vram_texture": false +} [deps] source_file="res://assets/graphics/splash_screen/artworks/roroto.png" -dest_files=[ "res://.import/roroto.png-5bb796ce1a0c5bb768b883a88b3da539.res" ] +dest_files=["res://.godot/imported/roroto.png-5bb796ce1a0c5bb768b883a88b3da539.ctex"] [params] -image_texture_storage=2 -image_texture_lossy_quality=0.7 -texture_flags=3 -texture_flags_add=0 +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/splash_screen/artworks/uch.png.import b/assets/graphics/splash_screen/artworks/uch.png.import index e37347d58b5..f0356e06edf 100644 --- a/assets/graphics/splash_screen/artworks/uch.png.import +++ b/assets/graphics/splash_screen/artworks/uch.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/uch.png-e9a8fe02d73624e657b2af84c9c36ce3.stex" +type="CompressedTexture2D" +uid="uid://mq50x8xtj6vf" +path="res://.godot/imported/uch.png-e9a8fe02d73624e657b2af84c9c36ce3.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/splash_screen/artworks/uch.png" -dest_files=[ "res://.import/uch.png-e9a8fe02d73624e657b2af84c9c36ce3.stex" ] +dest_files=["res://.godot/imported/uch.png-e9a8fe02d73624e657b2af84c9c36ce3.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/splash_screen/artworks/wishdream.png.import b/assets/graphics/splash_screen/artworks/wishdream.png.import index 0517eb18700..cc3c2003c55 100644 --- a/assets/graphics/splash_screen/artworks/wishdream.png.import +++ b/assets/graphics/splash_screen/artworks/wishdream.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/wishdream.png-2d4b51ec077caa274db44eee48928c59.stex" +type="CompressedTexture2D" +uid="uid://b5adjms3vxj13" +path="res://.godot/imported/wishdream.png-2d4b51ec077caa274db44eee48928c59.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/splash_screen/artworks/wishdream.png" -dest_files=[ "res://.import/wishdream.png-2d4b51ec077caa274db44eee48928c59.stex" ] +dest_files=["res://.godot/imported/wishdream.png-2d4b51ec077caa274db44eee48928c59.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/splash_screen/discord.png.import b/assets/graphics/splash_screen/discord.png.import index 4b4deb55927..9bb66a9e931 100644 --- a/assets/graphics/splash_screen/discord.png.import +++ b/assets/graphics/splash_screen/discord.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/discord.png-73d97a9585e0efb593d5a88792440de4.stex" +type="CompressedTexture2D" +uid="uid://du0tqirgve32c" +path="res://.godot/imported/discord.png-73d97a9585e0efb593d5a88792440de4.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/splash_screen/discord.png" -dest_files=[ "res://.import/discord.png-73d97a9585e0efb593d5a88792440de4.stex" ] +dest_files=["res://.godot/imported/discord.png-73d97a9585e0efb593d5a88792440de4.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/splash_screen/github_32px.png.import b/assets/graphics/splash_screen/github_32px.png.import index 4d6bad7854e..b3d72ed5fc5 100644 --- a/assets/graphics/splash_screen/github_32px.png.import +++ b/assets/graphics/splash_screen/github_32px.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/github_32px.png-281ab32f2184cefb27bac8e948163a0c.stex" +type="CompressedTexture2D" +uid="uid://bnhuqq1ucdlw2" +path="res://.godot/imported/github_32px.png-281ab32f2184cefb27bac8e948163a0c.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/splash_screen/github_32px.png" -dest_files=[ "res://.import/github_32px.png-281ab32f2184cefb27bac8e948163a0c.stex" ] +dest_files=["res://.godot/imported/github_32px.png-281ab32f2184cefb27bac8e948163a0c.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=0.5 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/splash_screen/orama_64x64.png.import b/assets/graphics/splash_screen/orama_64x64.png.import index dd5cd7e100f..1b137beb4fd 100644 --- a/assets/graphics/splash_screen/orama_64x64.png.import +++ b/assets/graphics/splash_screen/orama_64x64.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/orama_64x64.png-90aebdfc06fab9fe377c4ad4b8cc7f0f.stex" +type="CompressedTexture2D" +uid="uid://s25pa611bpvj" +path="res://.godot/imported/orama_64x64.png-90aebdfc06fab9fe377c4ad4b8cc7f0f.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/splash_screen/orama_64x64.png" -dest_files=[ "res://.import/orama_64x64.png-90aebdfc06fab9fe377c4ad4b8cc7f0f.stex" ] +dest_files=["res://.godot/imported/orama_64x64.png-90aebdfc06fab9fe377c4ad4b8cc7f0f.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/splash_screen/patreon_mark_white.png.import b/assets/graphics/splash_screen/patreon_mark_white.png.import index c6528b66727..fcbf10a06e2 100644 --- a/assets/graphics/splash_screen/patreon_mark_white.png.import +++ b/assets/graphics/splash_screen/patreon_mark_white.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/patreon_mark_white.png-333e31617952eb830c8e3f158ffcc047.stex" +type="CompressedTexture2D" +uid="uid://c587jfnyu84ro" +path="res://.godot/imported/patreon_mark_white.png-333e31617952eb830c8e3f158ffcc047.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/splash_screen/patreon_mark_white.png" -dest_files=[ "res://.import/patreon_mark_white.png-333e31617952eb830c8e3f158ffcc047.stex" ] +dest_files=["res://.godot/imported/patreon_mark_white.png-333e31617952eb830c8e3f158ffcc047.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/splash_screen/version.png.import b/assets/graphics/splash_screen/version.png.import index c7f750033ef..350a0585ead 100644 --- a/assets/graphics/splash_screen/version.png.import +++ b/assets/graphics/splash_screen/version.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/version.png-8fd3ce593258c5b901d0eeab8f20b522.stex" +type="CompressedTexture2D" +uid="uid://dywk5yd41twch" +path="res://.godot/imported/version.png-8fd3ce593258c5b901d0eeab8f20b522.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/splash_screen/version.png" -dest_files=[ "res://.import/version.png-8fd3ce593258c5b901d0eeab8f20b522.stex" ] +dest_files=["res://.godot/imported/version.png-8fd3ce593258c5b901d0eeab8f20b522.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/copy_frame.png.import b/assets/graphics/timeline/copy_frame.png.import index dfdb6566777..a821c2e1507 100644 --- a/assets/graphics/timeline/copy_frame.png.import +++ b/assets/graphics/timeline/copy_frame.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/copy_frame.png-e09a3c5a1070079322962a711999889d.stex" +type="CompressedTexture2D" +uid="uid://cerkv5yx4cqeh" +path="res://.godot/imported/copy_frame.png-e09a3c5a1070079322962a711999889d.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/copy_frame.png" -dest_files=[ "res://.import/copy_frame.png-e09a3c5a1070079322962a711999889d.stex" ] +dest_files=["res://.godot/imported/copy_frame.png-e09a3c5a1070079322962a711999889d.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/expandable.png.import b/assets/graphics/timeline/expandable.png.import index cdc6565d095..421212c7f5f 100644 --- a/assets/graphics/timeline/expandable.png.import +++ b/assets/graphics/timeline/expandable.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/expandable.png-9dec5066d9defff2e5dcbc620ae7a945.stex" +type="CompressedTexture2D" +uid="uid://dinubfua8gqhw" +path="res://.godot/imported/expandable.png-9dec5066d9defff2e5dcbc620ae7a945.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/expandable.png" -dest_files=[ "res://.import/expandable.png-9dec5066d9defff2e5dcbc620ae7a945.stex" ] +dest_files=["res://.godot/imported/expandable.png-9dec5066d9defff2e5dcbc620ae7a945.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/go_to_first_frame.png.import b/assets/graphics/timeline/go_to_first_frame.png.import index beec7394ff2..802341261e9 100644 --- a/assets/graphics/timeline/go_to_first_frame.png.import +++ b/assets/graphics/timeline/go_to_first_frame.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/go_to_first_frame.png-5ace75ca4086d0cd0ea4cb5c328a5bdd.stex" +type="CompressedTexture2D" +uid="uid://bujrukk5ii3bi" +path="res://.godot/imported/go_to_first_frame.png-5ace75ca4086d0cd0ea4cb5c328a5bdd.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/go_to_first_frame.png" -dest_files=[ "res://.import/go_to_first_frame.png-5ace75ca4086d0cd0ea4cb5c328a5bdd.stex" ] +dest_files=["res://.godot/imported/go_to_first_frame.png-5ace75ca4086d0cd0ea4cb5c328a5bdd.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/go_to_last_frame.png.import b/assets/graphics/timeline/go_to_last_frame.png.import index cbcb5f063a7..7d95f8868a7 100644 --- a/assets/graphics/timeline/go_to_last_frame.png.import +++ b/assets/graphics/timeline/go_to_last_frame.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/go_to_last_frame.png-5bfd2e17ea9a4bef3107cad8cf57ab0c.stex" +type="CompressedTexture2D" +uid="uid://l4jj86y1hukm" +path="res://.godot/imported/go_to_last_frame.png-5bfd2e17ea9a4bef3107cad8cf57ab0c.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/go_to_last_frame.png" -dest_files=[ "res://.import/go_to_last_frame.png-5bfd2e17ea9a4bef3107cad8cf57ab0c.stex" ] +dest_files=["res://.godot/imported/go_to_last_frame.png-5bfd2e17ea9a4bef3107cad8cf57ab0c.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/loop.png.import b/assets/graphics/timeline/loop.png.import index 7114da2dc36..f254bd55737 100644 --- a/assets/graphics/timeline/loop.png.import +++ b/assets/graphics/timeline/loop.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/loop.png-0fe21b3572696cfdf51daf177457d190.stex" +type="CompressedTexture2D" +uid="uid://fbwld5ofmocm" +path="res://.godot/imported/loop.png-0fe21b3572696cfdf51daf177457d190.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/loop.png" -dest_files=[ "res://.import/loop.png-0fe21b3572696cfdf51daf177457d190.stex" ] +dest_files=["res://.godot/imported/loop.png-0fe21b3572696cfdf51daf177457d190.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/loop_none.png.import b/assets/graphics/timeline/loop_none.png.import index 004c25f4f0d..0910d84fd90 100644 --- a/assets/graphics/timeline/loop_none.png.import +++ b/assets/graphics/timeline/loop_none.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/loop_none.png-22d35e7d55b4528ac607e374179bbfe3.stex" +type="CompressedTexture2D" +uid="uid://b3v4o0nfdlcbn" +path="res://.godot/imported/loop_none.png-22d35e7d55b4528ac607e374179bbfe3.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/loop_none.png" -dest_files=[ "res://.import/loop_none.png-22d35e7d55b4528ac607e374179bbfe3.stex" ] +dest_files=["res://.godot/imported/loop_none.png-22d35e7d55b4528ac607e374179bbfe3.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/loop_pingpong.png.import b/assets/graphics/timeline/loop_pingpong.png.import index 0a07bd2d44d..e35534ff184 100644 --- a/assets/graphics/timeline/loop_pingpong.png.import +++ b/assets/graphics/timeline/loop_pingpong.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/loop_pingpong.png-f033c9ab9f5df9770d9033128ad3bdb1.stex" +type="CompressedTexture2D" +uid="uid://d3nhxgjkgdwx4" +path="res://.godot/imported/loop_pingpong.png-f033c9ab9f5df9770d9033128ad3bdb1.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/loop_pingpong.png" -dest_files=[ "res://.import/loop_pingpong.png-f033c9ab9f5df9770d9033128ad3bdb1.stex" ] +dest_files=["res://.godot/imported/loop_pingpong.png-f033c9ab9f5df9770d9033128ad3bdb1.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/move_arrow.png.import b/assets/graphics/timeline/move_arrow.png.import index 11753e33d7f..dda6cdb8b34 100644 --- a/assets/graphics/timeline/move_arrow.png.import +++ b/assets/graphics/timeline/move_arrow.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/move_arrow.png-e654998e3822a83f8f4ae2cc3dd973b8.stex" +type="CompressedTexture2D" +uid="uid://d1oxrkwndy5fi" +path="res://.godot/imported/move_arrow.png-e654998e3822a83f8f4ae2cc3dd973b8.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/move_arrow.png" -dest_files=[ "res://.import/move_arrow.png-e654998e3822a83f8f4ae2cc3dd973b8.stex" ] +dest_files=["res://.godot/imported/move_arrow.png-e654998e3822a83f8f4ae2cc3dd973b8.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/new_frame.png.import b/assets/graphics/timeline/new_frame.png.import index b91a30f42fb..1003fb6a9ae 100644 --- a/assets/graphics/timeline/new_frame.png.import +++ b/assets/graphics/timeline/new_frame.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/new_frame.png-af2063a43cbf3c78591238e21f66f075.stex" +type="CompressedTexture2D" +uid="uid://d1urikaf1lxwl" +path="res://.godot/imported/new_frame.png-af2063a43cbf3c78591238e21f66f075.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/new_frame.png" -dest_files=[ "res://.import/new_frame.png-af2063a43cbf3c78591238e21f66f075.stex" ] +dest_files=["res://.godot/imported/new_frame.png-af2063a43cbf3c78591238e21f66f075.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/next_frame.png.import b/assets/graphics/timeline/next_frame.png.import index 808075ea69a..c86bf44d215 100644 --- a/assets/graphics/timeline/next_frame.png.import +++ b/assets/graphics/timeline/next_frame.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/next_frame.png-cd7680ea9df19801117c47b11806f322.stex" +type="CompressedTexture2D" +uid="uid://b2ndrc0cvy1m5" +path="res://.godot/imported/next_frame.png-cd7680ea9df19801117c47b11806f322.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/next_frame.png" -dest_files=[ "res://.import/next_frame.png-cd7680ea9df19801117c47b11806f322.stex" ] +dest_files=["res://.godot/imported/next_frame.png-cd7680ea9df19801117c47b11806f322.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/onion_skinning.png.import b/assets/graphics/timeline/onion_skinning.png.import index 4ee2361ed5d..242cf5a98e7 100644 --- a/assets/graphics/timeline/onion_skinning.png.import +++ b/assets/graphics/timeline/onion_skinning.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/onion_skinning.png-715a7c88ad45013d4cd2d741b8d13857.stex" +type="CompressedTexture2D" +uid="uid://bx08wgf4t6r06" +path="res://.godot/imported/onion_skinning.png-715a7c88ad45013d4cd2d741b8d13857.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/onion_skinning.png" -dest_files=[ "res://.import/onion_skinning.png-715a7c88ad45013d4cd2d741b8d13857.stex" ] +dest_files=["res://.godot/imported/onion_skinning.png-715a7c88ad45013d4cd2d741b8d13857.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/onion_skinning_off.png.import b/assets/graphics/timeline/onion_skinning_off.png.import index f3246b9f78a..3d493c453ec 100644 --- a/assets/graphics/timeline/onion_skinning_off.png.import +++ b/assets/graphics/timeline/onion_skinning_off.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/onion_skinning_off.png-ba5b99777ec37512407efe234529a202.stex" +type="CompressedTexture2D" +uid="uid://dukip7mvotxsp" +path="res://.godot/imported/onion_skinning_off.png-ba5b99777ec37512407efe234529a202.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/onion_skinning_off.png" -dest_files=[ "res://.import/onion_skinning_off.png-ba5b99777ec37512407efe234529a202.stex" ] +dest_files=["res://.godot/imported/onion_skinning_off.png-ba5b99777ec37512407efe234529a202.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/pause.png.import b/assets/graphics/timeline/pause.png.import index 68611c12bc8..15ddd73cbfb 100644 --- a/assets/graphics/timeline/pause.png.import +++ b/assets/graphics/timeline/pause.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/pause.png-6213e49d72351c855d9a86b758e2f276.stex" +type="CompressedTexture2D" +uid="uid://bsk6rjydiogcc" +path="res://.godot/imported/pause.png-6213e49d72351c855d9a86b758e2f276.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/pause.png" -dest_files=[ "res://.import/pause.png-6213e49d72351c855d9a86b758e2f276.stex" ] +dest_files=["res://.godot/imported/pause.png-6213e49d72351c855d9a86b758e2f276.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/play.png.import b/assets/graphics/timeline/play.png.import index b5f0e053668..966ff676fb5 100644 --- a/assets/graphics/timeline/play.png.import +++ b/assets/graphics/timeline/play.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/play.png-968e50b88d3511be5f0d3d76d9dde478.stex" +type="CompressedTexture2D" +uid="uid://c7smxwfa8826j" +path="res://.godot/imported/play.png-968e50b88d3511be5f0d3d76d9dde478.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/play.png" -dest_files=[ "res://.import/play.png-968e50b88d3511be5f0d3d76d9dde478.stex" ] +dest_files=["res://.godot/imported/play.png-968e50b88d3511be5f0d3d76d9dde478.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/play_backwards.png.import b/assets/graphics/timeline/play_backwards.png.import index 5a6e588ea9f..1ea916623ba 100644 --- a/assets/graphics/timeline/play_backwards.png.import +++ b/assets/graphics/timeline/play_backwards.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/play_backwards.png-3004489218149889b3e23d5bdf0a35bc.stex" +type="CompressedTexture2D" +uid="uid://esistdjfbrc4" +path="res://.godot/imported/play_backwards.png-3004489218149889b3e23d5bdf0a35bc.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/play_backwards.png" -dest_files=[ "res://.import/play_backwards.png-3004489218149889b3e23d5bdf0a35bc.stex" ] +dest_files=["res://.godot/imported/play_backwards.png-3004489218149889b3e23d5bdf0a35bc.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/previous_frame.png.import b/assets/graphics/timeline/previous_frame.png.import index 0b8637a1033..c00fa70c90c 100644 --- a/assets/graphics/timeline/previous_frame.png.import +++ b/assets/graphics/timeline/previous_frame.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/previous_frame.png-fc37ecd96f63e90341b50c578185611c.stex" +type="CompressedTexture2D" +uid="uid://cw7nn7360atot" +path="res://.godot/imported/previous_frame.png-fc37ecd96f63e90341b50c578185611c.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/previous_frame.png" -dest_files=[ "res://.import/previous_frame.png-fc37ecd96f63e90341b50c578185611c.stex" ] +dest_files=["res://.godot/imported/previous_frame.png-fc37ecd96f63e90341b50c578185611c.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/remove_frame.png.import b/assets/graphics/timeline/remove_frame.png.import index 78d98dc5f83..fc0aeb2d46b 100644 --- a/assets/graphics/timeline/remove_frame.png.import +++ b/assets/graphics/timeline/remove_frame.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/remove_frame.png-8093a4405f9a88bcb896e973afef045b.stex" +type="CompressedTexture2D" +uid="uid://bt72662c3gp2f" +path="res://.godot/imported/remove_frame.png-8093a4405f9a88bcb896e973afef045b.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/remove_frame.png" -dest_files=[ "res://.import/remove_frame.png-8093a4405f9a88bcb896e973afef045b.stex" ] +dest_files=["res://.godot/imported/remove_frame.png-8093a4405f9a88bcb896e973afef045b.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/timeline/tag.png.import b/assets/graphics/timeline/tag.png.import index 260dcb6147b..61a0918e701 100644 --- a/assets/graphics/timeline/tag.png.import +++ b/assets/graphics/timeline/tag.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/tag.png-d40c07fde0f15ca4aa9533f283d8253f.stex" +type="CompressedTexture2D" +uid="uid://i13jhsg117kd" +path="res://.godot/imported/tag.png-d40c07fde0f15ca4aa9533f283d8253f.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/timeline/tag.png" -dest_files=[ "res://.import/tag.png-d40c07fde0f15ca4aa9533f283d8253f.stex" ] +dest_files=["res://.godot/imported/tag.png-d40c07fde0f15ca4aa9533f283d8253f.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/3dshapeedit.png.import b/assets/graphics/tools/3dshapeedit.png.import index 81a39355d13..2799a42972f 100644 --- a/assets/graphics/tools/3dshapeedit.png.import +++ b/assets/graphics/tools/3dshapeedit.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/3dshapeedit.png-2d2aa73fafc7df7f7df84b5c0db6c1a6.stex" +type="CompressedTexture2D" +uid="uid://dgiwrnyslvciy" +path="res://.godot/imported/3dshapeedit.png-2d2aa73fafc7df7f7df84b5c0db6c1a6.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/3dshapeedit.png" -dest_files=[ "res://.import/3dshapeedit.png-2d2aa73fafc7df7f7df84b5c0db6c1a6.stex" ] +dest_files=["res://.godot/imported/3dshapeedit.png-2d2aa73fafc7df7f7df84b5c0db6c1a6.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/bucket.png.import b/assets/graphics/tools/bucket.png.import index 9755194dd73..c35c18c189f 100644 --- a/assets/graphics/tools/bucket.png.import +++ b/assets/graphics/tools/bucket.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/bucket.png-c31dc57fbf727577f054850c63eb803f.stex" +type="CompressedTexture2D" +uid="uid://cqki4c2chcjtx" +path="res://.godot/imported/bucket.png-c31dc57fbf727577f054850c63eb803f.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/bucket.png" -dest_files=[ "res://.import/bucket.png-c31dc57fbf727577f054850c63eb803f.stex" ] +dest_files=["res://.godot/imported/bucket.png-c31dc57fbf727577f054850c63eb803f.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/colorpicker.png.import b/assets/graphics/tools/colorpicker.png.import index 6eadc05f019..3447d62a197 100644 --- a/assets/graphics/tools/colorpicker.png.import +++ b/assets/graphics/tools/colorpicker.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/colorpicker.png-eaf5dae0c5646ebeedd5be7adcec3fc4.stex" +type="CompressedTexture2D" +uid="uid://jqgqq0x4csuv" +path="res://.godot/imported/colorpicker.png-eaf5dae0c5646ebeedd5be7adcec3fc4.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/colorpicker.png" -dest_files=[ "res://.import/colorpicker.png-eaf5dae0c5646ebeedd5be7adcec3fc4.stex" ] +dest_files=["res://.godot/imported/colorpicker.png-eaf5dae0c5646ebeedd5be7adcec3fc4.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/colorselect.png.import b/assets/graphics/tools/colorselect.png.import index 7e58ed9c006..0f99b5315ab 100644 --- a/assets/graphics/tools/colorselect.png.import +++ b/assets/graphics/tools/colorselect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/colorselect.png-8bc9961d9685310e49b7ac5394d63a43.stex" +type="CompressedTexture2D" +uid="uid://c7ehylp4krapg" +path="res://.godot/imported/colorselect.png-8bc9961d9685310e49b7ac5394d63a43.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/colorselect.png" -dest_files=[ "res://.import/colorselect.png-8bc9961d9685310e49b7ac5394d63a43.stex" ] +dest_files=["res://.godot/imported/colorselect.png-8bc9961d9685310e49b7ac5394d63a43.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/crop.png.import b/assets/graphics/tools/crop.png.import index 8d8f188f1a3..6a4dad8ff3f 100644 --- a/assets/graphics/tools/crop.png.import +++ b/assets/graphics/tools/crop.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/crop.png-b117b864c2b96dd1998350bff3c06cf8.stex" +type="CompressedTexture2D" +uid="uid://ddv5j1mhgkb1v" +path="res://.godot/imported/crop.png-b117b864c2b96dd1998350bff3c06cf8.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/crop.png" -dest_files=[ "res://.import/crop.png-b117b864c2b96dd1998350bff3c06cf8.stex" ] +dest_files=["res://.godot/imported/crop.png-b117b864c2b96dd1998350bff3c06cf8.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/3dshapeedit.png.import b/assets/graphics/tools/cursors/3dshapeedit.png.import index 2186ebe709b..27f64b9c985 100644 --- a/assets/graphics/tools/cursors/3dshapeedit.png.import +++ b/assets/graphics/tools/cursors/3dshapeedit.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/3dshapeedit.png-cca253df77476289c578814dc8af5d80.stex" +type="CompressedTexture2D" +uid="uid://du4f0vx07ekxu" +path="res://.godot/imported/3dshapeedit.png-cca253df77476289c578814dc8af5d80.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/3dshapeedit.png" -dest_files=[ "res://.import/3dshapeedit.png-cca253df77476289c578814dc8af5d80.stex" ] +dest_files=["res://.godot/imported/3dshapeedit.png-cca253df77476289c578814dc8af5d80.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/bucket.png.import b/assets/graphics/tools/cursors/bucket.png.import index ec044c133ca..6692409ae6f 100644 --- a/assets/graphics/tools/cursors/bucket.png.import +++ b/assets/graphics/tools/cursors/bucket.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/bucket.png-c4bf805415b00425c55b8adac894ad7c.stex" +type="CompressedTexture2D" +uid="uid://4gwpbvu11u5t" +path="res://.godot/imported/bucket.png-c4bf805415b00425c55b8adac894ad7c.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/bucket.png" -dest_files=[ "res://.import/bucket.png-c4bf805415b00425c55b8adac894ad7c.stex" ] +dest_files=["res://.godot/imported/bucket.png-c4bf805415b00425c55b8adac894ad7c.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/colorpicker.png.import b/assets/graphics/tools/cursors/colorpicker.png.import index 600c3796bb2..a5590fa5cbf 100644 --- a/assets/graphics/tools/cursors/colorpicker.png.import +++ b/assets/graphics/tools/cursors/colorpicker.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/colorpicker.png-c6a61314982ffe89f5d4075de144fe78.stex" +type="CompressedTexture2D" +uid="uid://duc2e7vcjpc1a" +path="res://.godot/imported/colorpicker.png-c6a61314982ffe89f5d4075de144fe78.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/colorpicker.png" -dest_files=[ "res://.import/colorpicker.png-c6a61314982ffe89f5d4075de144fe78.stex" ] +dest_files=["res://.godot/imported/colorpicker.png-c6a61314982ffe89f5d4075de144fe78.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/colorselect.png.import b/assets/graphics/tools/cursors/colorselect.png.import index 679b575beff..0c8f91250ac 100644 --- a/assets/graphics/tools/cursors/colorselect.png.import +++ b/assets/graphics/tools/cursors/colorselect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/colorselect.png-855fe4674fbd105e7500362dbda30f8a.stex" +type="CompressedTexture2D" +uid="uid://df1wb5rxfcrnj" +path="res://.godot/imported/colorselect.png-855fe4674fbd105e7500362dbda30f8a.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/colorselect.png" -dest_files=[ "res://.import/colorselect.png-855fe4674fbd105e7500362dbda30f8a.stex" ] +dest_files=["res://.godot/imported/colorselect.png-855fe4674fbd105e7500362dbda30f8a.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/crop.png.import b/assets/graphics/tools/cursors/crop.png.import index bb2158565d3..74f146783b1 100644 --- a/assets/graphics/tools/cursors/crop.png.import +++ b/assets/graphics/tools/cursors/crop.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/crop.png-b1dd939167138aaa21a7eeec94aed6bc.stex" +type="CompressedTexture2D" +uid="uid://lyhijjv0r0hv" +path="res://.godot/imported/crop.png-b1dd939167138aaa21a7eeec94aed6bc.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/crop.png" -dest_files=[ "res://.import/crop.png-b1dd939167138aaa21a7eeec94aed6bc.stex" ] +dest_files=["res://.godot/imported/crop.png-b1dd939167138aaa21a7eeec94aed6bc.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/ellipseselect.png.import b/assets/graphics/tools/cursors/ellipseselect.png.import index 77b82c42266..2d6b07e603c 100644 --- a/assets/graphics/tools/cursors/ellipseselect.png.import +++ b/assets/graphics/tools/cursors/ellipseselect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/ellipseselect.png-8527cb3b0a9808cb60359a76f56bc85d.stex" +type="CompressedTexture2D" +uid="uid://r6g6gtw0pydb" +path="res://.godot/imported/ellipseselect.png-8527cb3b0a9808cb60359a76f56bc85d.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/ellipseselect.png" -dest_files=[ "res://.import/ellipseselect.png-8527cb3b0a9808cb60359a76f56bc85d.stex" ] +dest_files=["res://.godot/imported/ellipseselect.png-8527cb3b0a9808cb60359a76f56bc85d.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/ellipsetool.png.import b/assets/graphics/tools/cursors/ellipsetool.png.import index fb317a10b54..0b7632488bb 100644 --- a/assets/graphics/tools/cursors/ellipsetool.png.import +++ b/assets/graphics/tools/cursors/ellipsetool.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/ellipsetool.png-20648f66274b5b7765f16a599dc4d5ff.stex" +type="CompressedTexture2D" +uid="uid://cesvhtam3mwyb" +path="res://.godot/imported/ellipsetool.png-20648f66274b5b7765f16a599dc4d5ff.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/ellipsetool.png" -dest_files=[ "res://.import/ellipsetool.png-20648f66274b5b7765f16a599dc4d5ff.stex" ] +dest_files=["res://.godot/imported/ellipsetool.png-20648f66274b5b7765f16a599dc4d5ff.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/eraser.png.import b/assets/graphics/tools/cursors/eraser.png.import index 5f2a9ae9b6b..91f7c632ebb 100644 --- a/assets/graphics/tools/cursors/eraser.png.import +++ b/assets/graphics/tools/cursors/eraser.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/eraser.png-a00636af98c0fcf6bd6bf35640b83459.stex" +type="CompressedTexture2D" +uid="uid://cjig3eey2tffx" +path="res://.godot/imported/eraser.png-a00636af98c0fcf6bd6bf35640b83459.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/eraser.png" -dest_files=[ "res://.import/eraser.png-a00636af98c0fcf6bd6bf35640b83459.stex" ] +dest_files=["res://.godot/imported/eraser.png-a00636af98c0fcf6bd6bf35640b83459.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/lasso.png.import b/assets/graphics/tools/cursors/lasso.png.import index bba12ea126f..34ca978ee83 100644 --- a/assets/graphics/tools/cursors/lasso.png.import +++ b/assets/graphics/tools/cursors/lasso.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/lasso.png-b57369a1f33ebad796567cc7f2255d6c.stex" +type="CompressedTexture2D" +uid="uid://bcslhoiu6rv6" +path="res://.godot/imported/lasso.png-b57369a1f33ebad796567cc7f2255d6c.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/lasso.png" -dest_files=[ "res://.import/lasso.png-b57369a1f33ebad796567cc7f2255d6c.stex" ] +dest_files=["res://.godot/imported/lasso.png-b57369a1f33ebad796567cc7f2255d6c.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/linetool.png.import b/assets/graphics/tools/cursors/linetool.png.import index 70557bfc42f..6904e3d1e96 100644 --- a/assets/graphics/tools/cursors/linetool.png.import +++ b/assets/graphics/tools/cursors/linetool.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/linetool.png-f88b6978c31a033619980bf335cfaa21.stex" +type="CompressedTexture2D" +uid="uid://ciu01f7am4n1o" +path="res://.godot/imported/linetool.png-f88b6978c31a033619980bf335cfaa21.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/linetool.png" -dest_files=[ "res://.import/linetool.png-f88b6978c31a033619980bf335cfaa21.stex" ] +dest_files=["res://.godot/imported/linetool.png-f88b6978c31a033619980bf335cfaa21.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/magicwand.png.import b/assets/graphics/tools/cursors/magicwand.png.import index aed1e8433f9..69e6a687bc6 100644 --- a/assets/graphics/tools/cursors/magicwand.png.import +++ b/assets/graphics/tools/cursors/magicwand.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/magicwand.png-a88950f47e167183b2e78f8980f580f0.stex" +type="CompressedTexture2D" +uid="uid://bpceh02g4g2sy" +path="res://.godot/imported/magicwand.png-a88950f47e167183b2e78f8980f580f0.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/magicwand.png" -dest_files=[ "res://.import/magicwand.png-a88950f47e167183b2e78f8980f580f0.stex" ] +dest_files=["res://.godot/imported/magicwand.png-a88950f47e167183b2e78f8980f580f0.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/move.png.import b/assets/graphics/tools/cursors/move.png.import index 124d185ca5f..81ba2c664a1 100644 --- a/assets/graphics/tools/cursors/move.png.import +++ b/assets/graphics/tools/cursors/move.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/move.png-3d9f5f2d803b18a63b76370eb4228771.stex" +type="CompressedTexture2D" +uid="uid://byt5eb1wvnwss" +path="res://.godot/imported/move.png-3d9f5f2d803b18a63b76370eb4228771.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/move.png" -dest_files=[ "res://.import/move.png-3d9f5f2d803b18a63b76370eb4228771.stex" ] +dest_files=["res://.godot/imported/move.png-3d9f5f2d803b18a63b76370eb4228771.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/paintselect.png.import b/assets/graphics/tools/cursors/paintselect.png.import index f39c069c025..a60e121e59a 100644 --- a/assets/graphics/tools/cursors/paintselect.png.import +++ b/assets/graphics/tools/cursors/paintselect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/paintselect.png-1d54eb74829e8876df77b986085c99ff.stex" +type="CompressedTexture2D" +uid="uid://cplipjwqdowiw" +path="res://.godot/imported/paintselect.png-1d54eb74829e8876df77b986085c99ff.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/paintselect.png" -dest_files=[ "res://.import/paintselect.png-1d54eb74829e8876df77b986085c99ff.stex" ] +dest_files=["res://.godot/imported/paintselect.png-1d54eb74829e8876df77b986085c99ff.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/pan.png.import b/assets/graphics/tools/cursors/pan.png.import index 20b9728747e..2a53a0ea64f 100644 --- a/assets/graphics/tools/cursors/pan.png.import +++ b/assets/graphics/tools/cursors/pan.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/pan.png-c49ef20d232155a864f417b751f95229.stex" +type="CompressedTexture2D" +uid="uid://21ghkqotcvf6" +path="res://.godot/imported/pan.png-c49ef20d232155a864f417b751f95229.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/pan.png" -dest_files=[ "res://.import/pan.png-c49ef20d232155a864f417b751f95229.stex" ] +dest_files=["res://.godot/imported/pan.png-c49ef20d232155a864f417b751f95229.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/pencil.png.import b/assets/graphics/tools/cursors/pencil.png.import index 2570a59fcca..cd5df7eedd3 100644 --- a/assets/graphics/tools/cursors/pencil.png.import +++ b/assets/graphics/tools/cursors/pencil.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/pencil.png-ad4aa17c50d39e687be59518f7ec26db.stex" +type="CompressedTexture2D" +uid="uid://c03sutx62rpqu" +path="res://.godot/imported/pencil.png-ad4aa17c50d39e687be59518f7ec26db.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/pencil.png" -dest_files=[ "res://.import/pencil.png-ad4aa17c50d39e687be59518f7ec26db.stex" ] +dest_files=["res://.godot/imported/pencil.png-ad4aa17c50d39e687be59518f7ec26db.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/polygonselect.png.import b/assets/graphics/tools/cursors/polygonselect.png.import index 0f5d4140551..ceafe4ce113 100644 --- a/assets/graphics/tools/cursors/polygonselect.png.import +++ b/assets/graphics/tools/cursors/polygonselect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/polygonselect.png-f7d96d53f34c3c81d653feb6c115ef81.stex" +type="CompressedTexture2D" +uid="uid://bwtwx2gkkr272" +path="res://.godot/imported/polygonselect.png-f7d96d53f34c3c81d653feb6c115ef81.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/polygonselect.png" -dest_files=[ "res://.import/polygonselect.png-f7d96d53f34c3c81d653feb6c115ef81.stex" ] +dest_files=["res://.godot/imported/polygonselect.png-f7d96d53f34c3c81d653feb6c115ef81.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/rectangletool.png.import b/assets/graphics/tools/cursors/rectangletool.png.import index c69af75cea6..3197c3c88df 100644 --- a/assets/graphics/tools/cursors/rectangletool.png.import +++ b/assets/graphics/tools/cursors/rectangletool.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/rectangletool.png-09c04120a942fab47b3339db72969340.stex" +type="CompressedTexture2D" +uid="uid://c7b1125hs66sf" +path="res://.godot/imported/rectangletool.png-09c04120a942fab47b3339db72969340.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/rectangletool.png" -dest_files=[ "res://.import/rectangletool.png-09c04120a942fab47b3339db72969340.stex" ] +dest_files=["res://.godot/imported/rectangletool.png-09c04120a942fab47b3339db72969340.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/rectselect.png.import b/assets/graphics/tools/cursors/rectselect.png.import index c44bafdb597..8ffbd0d843e 100644 --- a/assets/graphics/tools/cursors/rectselect.png.import +++ b/assets/graphics/tools/cursors/rectselect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/rectselect.png-6c6ec53df2045632b26bffa7c0399df4.stex" +type="CompressedTexture2D" +uid="uid://bxiqomq08ctsr" +path="res://.godot/imported/rectselect.png-6c6ec53df2045632b26bffa7c0399df4.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/rectselect.png" -dest_files=[ "res://.import/rectselect.png-6c6ec53df2045632b26bffa7c0399df4.stex" ] +dest_files=["res://.godot/imported/rectselect.png-6c6ec53df2045632b26bffa7c0399df4.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/shading.png.import b/assets/graphics/tools/cursors/shading.png.import index 495be5b579d..c9920ea2598 100644 --- a/assets/graphics/tools/cursors/shading.png.import +++ b/assets/graphics/tools/cursors/shading.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/shading.png-984f5bf0d673a3c8f88917a16ae424be.stex" +type="CompressedTexture2D" +uid="uid://bmvmfr51d54im" +path="res://.godot/imported/shading.png-984f5bf0d673a3c8f88917a16ae424be.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/shading.png" -dest_files=[ "res://.import/shading.png-984f5bf0d673a3c8f88917a16ae424be.stex" ] +dest_files=["res://.godot/imported/shading.png-984f5bf0d673a3c8f88917a16ae424be.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/cursors/zoom.png.import b/assets/graphics/tools/cursors/zoom.png.import index 344657753a7..38b6a3592fa 100644 --- a/assets/graphics/tools/cursors/zoom.png.import +++ b/assets/graphics/tools/cursors/zoom.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/zoom.png-f285932698b88413c8bee72a7eaeb729.stex" +type="CompressedTexture2D" +uid="uid://cishexydlicef" +path="res://.godot/imported/zoom.png-f285932698b88413c8bee72a7eaeb729.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/cursors/zoom.png" -dest_files=[ "res://.import/zoom.png-f285932698b88413c8bee72a7eaeb729.stex" ] +dest_files=["res://.godot/imported/zoom.png-f285932698b88413c8bee72a7eaeb729.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/ellipseselect.png.import b/assets/graphics/tools/ellipseselect.png.import index 3a81a7e71f1..1beee1f0f0c 100644 --- a/assets/graphics/tools/ellipseselect.png.import +++ b/assets/graphics/tools/ellipseselect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/ellipseselect.png-5f72ef70288a187b55afee23ade1e1a7.stex" +type="CompressedTexture2D" +uid="uid://bg7kmumurtgtw" +path="res://.godot/imported/ellipseselect.png-5f72ef70288a187b55afee23ade1e1a7.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/ellipseselect.png" -dest_files=[ "res://.import/ellipseselect.png-5f72ef70288a187b55afee23ade1e1a7.stex" ] +dest_files=["res://.godot/imported/ellipseselect.png-5f72ef70288a187b55afee23ade1e1a7.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/ellipsetool.png.import b/assets/graphics/tools/ellipsetool.png.import index 0688bcc0aae..45eeb12f6ce 100644 --- a/assets/graphics/tools/ellipsetool.png.import +++ b/assets/graphics/tools/ellipsetool.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/ellipsetool.png-dbe3434d15bf4170404c26ae5346e94b.stex" +type="CompressedTexture2D" +uid="uid://uvaboctgt76q" +path="res://.godot/imported/ellipsetool.png-dbe3434d15bf4170404c26ae5346e94b.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/ellipsetool.png" -dest_files=[ "res://.import/ellipsetool.png-dbe3434d15bf4170404c26ae5346e94b.stex" ] +dest_files=["res://.godot/imported/ellipsetool.png-dbe3434d15bf4170404c26ae5346e94b.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/eraser.png.import b/assets/graphics/tools/eraser.png.import index a3dc3a62b47..233e07aba03 100644 --- a/assets/graphics/tools/eraser.png.import +++ b/assets/graphics/tools/eraser.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/eraser.png-fab786bb3ac6594d489aa816194aaa35.stex" +type="CompressedTexture2D" +uid="uid://dq6xd7nc1n05f" +path="res://.godot/imported/eraser.png-fab786bb3ac6594d489aa816194aaa35.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/eraser.png" -dest_files=[ "res://.import/eraser.png-fab786bb3ac6594d489aa816194aaa35.stex" ] +dest_files=["res://.godot/imported/eraser.png-fab786bb3ac6594d489aa816194aaa35.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/lasso.png.import b/assets/graphics/tools/lasso.png.import index a92385972de..6ad91d9f5d6 100644 --- a/assets/graphics/tools/lasso.png.import +++ b/assets/graphics/tools/lasso.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/lasso.png-ec1894b24b0132d3f6a3be91da41f8dc.stex" +type="CompressedTexture2D" +uid="uid://da7rs50xsblfs" +path="res://.godot/imported/lasso.png-ec1894b24b0132d3f6a3be91da41f8dc.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/lasso.png" -dest_files=[ "res://.import/lasso.png-ec1894b24b0132d3f6a3be91da41f8dc.stex" ] +dest_files=["res://.godot/imported/lasso.png-ec1894b24b0132d3f6a3be91da41f8dc.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/linetool.png.import b/assets/graphics/tools/linetool.png.import index 36f0f9e9db1..5a6c1a8e3e4 100644 --- a/assets/graphics/tools/linetool.png.import +++ b/assets/graphics/tools/linetool.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/linetool.png-0a191874fc4cdbc2bd60402bee53bbb0.stex" +type="CompressedTexture2D" +uid="uid://cpjq2j6r4th0p" +path="res://.godot/imported/linetool.png-0a191874fc4cdbc2bd60402bee53bbb0.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/linetool.png" -dest_files=[ "res://.import/linetool.png-0a191874fc4cdbc2bd60402bee53bbb0.stex" ] +dest_files=["res://.godot/imported/linetool.png-0a191874fc4cdbc2bd60402bee53bbb0.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/magicwand.png.import b/assets/graphics/tools/magicwand.png.import index e59bacb18e2..a7de102b2a6 100644 --- a/assets/graphics/tools/magicwand.png.import +++ b/assets/graphics/tools/magicwand.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/magicwand.png-8ba9fbe50da4853c0fb18a6483f980af.stex" +type="CompressedTexture2D" +uid="uid://b3xttw1w2sk0s" +path="res://.godot/imported/magicwand.png-8ba9fbe50da4853c0fb18a6483f980af.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/magicwand.png" -dest_files=[ "res://.import/magicwand.png-8ba9fbe50da4853c0fb18a6483f980af.stex" ] +dest_files=["res://.godot/imported/magicwand.png-8ba9fbe50da4853c0fb18a6483f980af.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/move.png.import b/assets/graphics/tools/move.png.import index 3802ffd8a13..c453c473d65 100644 --- a/assets/graphics/tools/move.png.import +++ b/assets/graphics/tools/move.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/move.png-95395c868062f8af2883275731902866.stex" +type="CompressedTexture2D" +uid="uid://b7fxbxglmalit" +path="res://.godot/imported/move.png-95395c868062f8af2883275731902866.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/move.png" -dest_files=[ "res://.import/move.png-95395c868062f8af2883275731902866.stex" ] +dest_files=["res://.godot/imported/move.png-95395c868062f8af2883275731902866.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/paintselect.png.import b/assets/graphics/tools/paintselect.png.import index a07b8ea5950..5ba00c84ca7 100644 --- a/assets/graphics/tools/paintselect.png.import +++ b/assets/graphics/tools/paintselect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/paintselect.png-54b86a9f33e18f8c208a1cc6e370016d.stex" +type="CompressedTexture2D" +uid="uid://caayrm17iqoty" +path="res://.godot/imported/paintselect.png-54b86a9f33e18f8c208a1cc6e370016d.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/paintselect.png" -dest_files=[ "res://.import/paintselect.png-54b86a9f33e18f8c208a1cc6e370016d.stex" ] +dest_files=["res://.godot/imported/paintselect.png-54b86a9f33e18f8c208a1cc6e370016d.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/pan.png.import b/assets/graphics/tools/pan.png.import index e29bca6e2c0..c8ba07b1e36 100644 --- a/assets/graphics/tools/pan.png.import +++ b/assets/graphics/tools/pan.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/pan.png-6d28bfb8914e4526fac89435cef50f82.stex" +type="CompressedTexture2D" +uid="uid://bttky7v3r6kmp" +path="res://.godot/imported/pan.png-6d28bfb8914e4526fac89435cef50f82.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/pan.png" -dest_files=[ "res://.import/pan.png-6d28bfb8914e4526fac89435cef50f82.stex" ] +dest_files=["res://.godot/imported/pan.png-6d28bfb8914e4526fac89435cef50f82.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/pencil.png.import b/assets/graphics/tools/pencil.png.import index 22472d1b819..3ed728f03e1 100644 --- a/assets/graphics/tools/pencil.png.import +++ b/assets/graphics/tools/pencil.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/pencil.png-7f662d20172670ff197e6dfacc532133.stex" +type="CompressedTexture2D" +uid="uid://buabnk6icy7ug" +path="res://.godot/imported/pencil.png-7f662d20172670ff197e6dfacc532133.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/pencil.png" -dest_files=[ "res://.import/pencil.png-7f662d20172670ff197e6dfacc532133.stex" ] +dest_files=["res://.godot/imported/pencil.png-7f662d20172670ff197e6dfacc532133.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/polygonselect.png.import b/assets/graphics/tools/polygonselect.png.import index bb102074f08..7b50a992266 100644 --- a/assets/graphics/tools/polygonselect.png.import +++ b/assets/graphics/tools/polygonselect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/polygonselect.png-18ef1901643c94d3e320871eb4791d31.stex" +type="CompressedTexture2D" +uid="uid://4u6cfo1rssuj" +path="res://.godot/imported/polygonselect.png-18ef1901643c94d3e320871eb4791d31.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/polygonselect.png" -dest_files=[ "res://.import/polygonselect.png-18ef1901643c94d3e320871eb4791d31.stex" ] +dest_files=["res://.godot/imported/polygonselect.png-18ef1901643c94d3e320871eb4791d31.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/rectangletool.png.import b/assets/graphics/tools/rectangletool.png.import index a4e5b5123e0..a87811587eb 100644 --- a/assets/graphics/tools/rectangletool.png.import +++ b/assets/graphics/tools/rectangletool.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/rectangletool.png-7b28a8524c028aca32586b88ac56fff9.stex" +type="CompressedTexture2D" +uid="uid://g58owiqp6lvv" +path="res://.godot/imported/rectangletool.png-7b28a8524c028aca32586b88ac56fff9.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/rectangletool.png" -dest_files=[ "res://.import/rectangletool.png-7b28a8524c028aca32586b88ac56fff9.stex" ] +dest_files=["res://.godot/imported/rectangletool.png-7b28a8524c028aca32586b88ac56fff9.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/rectselect.png.import b/assets/graphics/tools/rectselect.png.import index 9bf682ed6e8..f531488ed71 100644 --- a/assets/graphics/tools/rectselect.png.import +++ b/assets/graphics/tools/rectselect.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/rectselect.png-76d30fd13a08951a940bd63b6e0447e7.stex" +type="CompressedTexture2D" +uid="uid://chg3ejelsgcwm" +path="res://.godot/imported/rectselect.png-76d30fd13a08951a940bd63b6e0447e7.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/rectselect.png" -dest_files=[ "res://.import/rectselect.png-76d30fd13a08951a940bd63b6e0447e7.stex" ] +dest_files=["res://.godot/imported/rectselect.png-76d30fd13a08951a940bd63b6e0447e7.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/shading.png.import b/assets/graphics/tools/shading.png.import index 8745d9009d4..4426012da5e 100644 --- a/assets/graphics/tools/shading.png.import +++ b/assets/graphics/tools/shading.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/shading.png-c61d51ae59f1838d7461ae0aadb0cfe8.stex" +type="CompressedTexture2D" +uid="uid://dbwj2nx7vj6u0" +path="res://.godot/imported/shading.png-c61d51ae59f1838d7461ae0aadb0cfe8.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/shading.png" -dest_files=[ "res://.import/shading.png-c61d51ae59f1838d7461ae0aadb0cfe8.stex" ] +dest_files=["res://.godot/imported/shading.png-c61d51ae59f1838d7461ae0aadb0cfe8.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/tool_background.png.import b/assets/graphics/tools/tool_background.png.import index 471ff2b22cf..dc1d62990ff 100644 --- a/assets/graphics/tools/tool_background.png.import +++ b/assets/graphics/tools/tool_background.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/tool_background.png-6ff92c662de40dca94545bb57f5c1e8e.stex" +type="CompressedTexture2D" +uid="uid://cnomk15kl7go0" +path="res://.godot/imported/tool_background.png-6ff92c662de40dca94545bb57f5c1e8e.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/tool_background.png" -dest_files=[ "res://.import/tool_background.png-6ff92c662de40dca94545bb57f5c1e8e.stex" ] +dest_files=["res://.godot/imported/tool_background.png-6ff92c662de40dca94545bb57f5c1e8e.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/tool_background_right.png b/assets/graphics/tools/tool_background_right.png new file mode 100644 index 00000000000..3a45ce03d62 Binary files /dev/null and b/assets/graphics/tools/tool_background_right.png differ diff --git a/assets/graphics/tools/tool_background_right.png.import b/assets/graphics/tools/tool_background_right.png.import new file mode 100644 index 00000000000..33922425d73 --- /dev/null +++ b/assets/graphics/tools/tool_background_right.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://4h6t2v7tf6r2" +path="res://.godot/imported/tool_background_right.png-b85194199086ecc86f931ab5d9e069d9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/tools/tool_background_right.png" +dest_files=["res://.godot/imported/tool_background_right.png-b85194199086ecc86f931ab5d9e069d9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/tools/zoom.png.import b/assets/graphics/tools/zoom.png.import index 8186e2b9509..bbc32ca8927 100644 --- a/assets/graphics/tools/zoom.png.import +++ b/assets/graphics/tools/zoom.png.import @@ -1,8 +1,9 @@ [remap] importer="texture" -type="StreamTexture" -path="res://.import/zoom.png-eaff4465be5bd02afba89224bc1cf3dc.stex" +type="CompressedTexture2D" +uid="uid://gie66g478yqe" +path="res://.godot/imported/zoom.png-eaff4465be5bd02afba89224bc1cf3dc.ctex" metadata={ "vram_texture": false } @@ -10,26 +11,24 @@ metadata={ [deps] source_file="res://assets/graphics/tools/zoom.png" -dest_files=[ "res://.import/zoom.png-eaff4465be5bd02afba89224bc1cf3dc.stex" ] +dest_files=["res://.godot/imported/zoom.png-eaff4465be5bd02afba89224bc1cf3dc.ctex"] [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 +compress/hdr_compression=1 compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" process/fix_alpha_border=true process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/layouts/default.tres b/assets/layouts/default.tres index be0fe146627..984567f78e2 100644 --- a/assets/layouts/default.tres +++ b/assets/layouts/default.tres @@ -1,173 +1,173 @@ -[gd_resource type="Resource" load_steps=27 format=2] +[gd_resource type="Resource" script_class="DockableLayout" load_steps=27 format=3 uid="uid://cmssfxor8u6ph"] -[ext_resource path="res://addons/dockable_container/layout_panel.gd" type="Script" id=1] -[ext_resource path="res://addons/dockable_container/layout_split.gd" type="Script" id=2] -[ext_resource path="res://addons/dockable_container/layout.gd" type="Script" id=3] +[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="1_5ntxi"] +[ext_resource type="Script" path="res://addons/dockable_container/layout_split.gd" id="2_ky8yd"] +[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="3_7wdyb"] -[sub_resource type="Resource" id=1] +[sub_resource type="Resource" id="Resource_xnnnd"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Tools" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Tools", "Reference Images") current_tab = 0 -[sub_resource type="Resource" id=2] +[sub_resource type="Resource" id="Resource_34hle"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Main Canvas" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Main Canvas") current_tab = 0 -[sub_resource type="Resource" id=3] +[sub_resource type="Resource" id="Resource_l6i6g"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Perspective Editor" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Perspective Editor") current_tab = 0 -[sub_resource type="Resource" id=4] +[sub_resource type="Resource" id="Resource_r2r5t"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 0 percent = 0.5 -first = SubResource( 2 ) -second = SubResource( 3 ) +first = SubResource("Resource_34hle") +second = SubResource("Resource_l6i6g") -[sub_resource type="Resource" id=5] +[sub_resource type="Resource" id="Resource_k7omi"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Second Canvas" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Second Canvas") current_tab = 0 -[sub_resource type="Resource" id=6] +[sub_resource type="Resource" id="Resource_l142s"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 0 percent = 0.980952 -first = SubResource( 4 ) -second = SubResource( 5 ) +first = SubResource("Resource_r2r5t") +second = SubResource("Resource_k7omi") -[sub_resource type="Resource" id=7] +[sub_resource type="Resource" id="Resource_wobi1"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Animation Timeline" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Animation Timeline") current_tab = 0 -[sub_resource type="Resource" id=8] +[sub_resource type="Resource" id="Resource_85y6p"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 1 -percent = 0.90625 -first = SubResource( 6 ) -second = SubResource( 7 ) +percent = 0.74711 +first = SubResource("Resource_l142s") +second = SubResource("Resource_wobi1") -[sub_resource type="Resource" id=9] +[sub_resource type="Resource" id="Resource_4egp5"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Canvas Preview", "Reference Images" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Canvas Preview") current_tab = 0 -[sub_resource type="Resource" id=10] +[sub_resource type="Resource" id="Resource_fcw5v"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Color Pickers" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Color Pickers") current_tab = 0 -[sub_resource type="Resource" id=11] +[sub_resource type="Resource" id="Resource_c7hpy"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Global Tool Options" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Global Tool Options") current_tab = 0 -[sub_resource type="Resource" id=12] +[sub_resource type="Resource" id="Resource_56tpw"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Recorder" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Recorder") current_tab = 0 -[sub_resource type="Resource" id=13] +[sub_resource type="Resource" id="Resource_fhmn0"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 1 percent = 0.5 -first = SubResource( 11 ) -second = SubResource( 12 ) +first = SubResource("Resource_c7hpy") +second = SubResource("Resource_56tpw") -[sub_resource type="Resource" id=14] +[sub_resource type="Resource" id="Resource_u1u2a"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 1 percent = 0.5 -first = SubResource( 10 ) -second = SubResource( 13 ) +first = SubResource("Resource_fcw5v") +second = SubResource("Resource_fhmn0") -[sub_resource type="Resource" id=15] +[sub_resource type="Resource" id="Resource_6eonw"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 1 percent = 0.911765 -first = SubResource( 9 ) -second = SubResource( 14 ) +first = SubResource("Resource_4egp5") +second = SubResource("Resource_u1u2a") -[sub_resource type="Resource" id=16] +[sub_resource type="Resource" id="Resource_6pwxm"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Left Tool Options" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Left Tool Options") current_tab = 0 -[sub_resource type="Resource" id=17] +[sub_resource type="Resource" id="Resource_24rfh"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Right Tool Options" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Right Tool Options") current_tab = 0 -[sub_resource type="Resource" id=18] +[sub_resource type="Resource" id="Resource_tcb26"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 0 percent = 0.5 -first = SubResource( 16 ) -second = SubResource( 17 ) +first = SubResource("Resource_6pwxm") +second = SubResource("Resource_24rfh") -[sub_resource type="Resource" id=19] +[sub_resource type="Resource" id="Resource_ugja0"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Palettes" ) +script = ExtResource("1_5ntxi") +names = PackedStringArray("Palettes") current_tab = 0 -[sub_resource type="Resource" id=20] +[sub_resource type="Resource" id="Resource_hr77s"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 1 percent = 0.692661 -first = SubResource( 18 ) -second = SubResource( 19 ) +first = SubResource("Resource_tcb26") +second = SubResource("Resource_ugja0") -[sub_resource type="Resource" id=21] +[sub_resource type="Resource" id="Resource_l8roh"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 1 -percent = 0.332031 -first = SubResource( 15 ) -second = SubResource( 20 ) +percent = 0.339595 +first = SubResource("Resource_6eonw") +second = SubResource("Resource_hr77s") -[sub_resource type="Resource" id=22] +[sub_resource type="Resource" id="Resource_s2xu6"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 0 percent = 0.727569 -first = SubResource( 8 ) -second = SubResource( 21 ) +first = SubResource("Resource_85y6p") +second = SubResource("Resource_l8roh") -[sub_resource type="Resource" id=23] +[sub_resource type="Resource" id="Resource_cwe4h"] resource_name = "Split" -script = ExtResource( 2 ) +script = ExtResource("2_ky8yd") direction = 0 -percent = 0.0 -first = SubResource( 1 ) -second = SubResource( 22 ) +percent = 0.0398437 +first = SubResource("Resource_xnnnd") +second = SubResource("Resource_s2xu6") [resource] resource_name = "Layout" -script = ExtResource( 3 ) -root = SubResource( 23 ) +script = ExtResource("3_7wdyb") +root = SubResource("Resource_cwe4h") hidden_tabs = { "Perspective Editor": true, "Recorder": true, diff --git a/assets/layouts/tallscreen.tres b/assets/layouts/tallscreen.tres index 9b935b4a770..7cc35c79773 100644 --- a/assets/layouts/tallscreen.tres +++ b/assets/layouts/tallscreen.tres @@ -1,145 +1,145 @@ -[gd_resource type="Resource" load_steps=23 format=2] +[gd_resource type="Resource" script_class="DockableLayout" load_steps=23 format=3 uid="uid://brcnmadkdaqok"] -[ext_resource path="res://addons/dockable_container/layout_panel.gd" type="Script" id=1] -[ext_resource path="res://addons/dockable_container/layout.gd" type="Script" id=2] -[ext_resource path="res://addons/dockable_container/layout_split.gd" type="Script" id=3] +[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="1_uy50t"] +[ext_resource type="Script" path="res://addons/dockable_container/layout_split.gd" id="2_1m5ot"] +[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="3_uod50"] -[sub_resource type="Resource" id=8] +[sub_resource type="Resource" id="Resource_k2hh0"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Main Canvas" ) +script = ExtResource("1_uy50t") +names = PackedStringArray("Main Canvas", "Reference Images", "Perspective Editor", "Recorder") current_tab = 0 -[sub_resource type="Resource" id=23] +[sub_resource type="Resource" id="Resource_t1ktk"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Second Canvas" ) +script = ExtResource("1_uy50t") +names = PackedStringArray("Second Canvas") current_tab = 0 -[sub_resource type="Resource" id=24] +[sub_resource type="Resource" id="Resource_nvw7v"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("2_1m5ot") direction = 0 percent = 0.9875 -first = SubResource( 8 ) -second = SubResource( 23 ) +first = SubResource("Resource_k2hh0") +second = SubResource("Resource_t1ktk") -[sub_resource type="Resource" id=9] +[sub_resource type="Resource" id="Resource_nqfbu"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Tools" ) +script = ExtResource("1_uy50t") +names = PackedStringArray("Tools") current_tab = 0 -[sub_resource type="Resource" id=10] +[sub_resource type="Resource" id="Resource_tube0"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Left Tool Options" ) +script = ExtResource("1_uy50t") +names = PackedStringArray("Left Tool Options") current_tab = 0 -[sub_resource type="Resource" id=11] +[sub_resource type="Resource" id="Resource_37h2m"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Right Tool Options" ) +script = ExtResource("1_uy50t") +names = PackedStringArray("Right Tool Options") current_tab = 0 -[sub_resource type="Resource" id=12] +[sub_resource type="Resource" id="Resource_1pnqq"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("2_1m5ot") direction = 0 percent = 0.5 -first = SubResource( 10 ) -second = SubResource( 11 ) +first = SubResource("Resource_tube0") +second = SubResource("Resource_37h2m") -[sub_resource type="Resource" id=13] +[sub_resource type="Resource" id="Resource_3l4wk"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Color Pickers" ) +script = ExtResource("1_uy50t") +names = PackedStringArray("Color Pickers") current_tab = 0 -[sub_resource type="Resource" id=25] +[sub_resource type="Resource" id="Resource_x153t"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Global Tool Options" ) +script = ExtResource("1_uy50t") +names = PackedStringArray("Global Tool Options") current_tab = 0 -[sub_resource type="Resource" id=28] +[sub_resource type="Resource" id="Resource_bb7vq"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("2_1m5ot") direction = 1 percent = 0.5 -first = SubResource( 13 ) -second = SubResource( 25 ) +first = SubResource("Resource_3l4wk") +second = SubResource("Resource_x153t") -[sub_resource type="Resource" id=14] +[sub_resource type="Resource" id="Resource_m77lt"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Canvas Preview" ) +script = ExtResource("1_uy50t") +names = PackedStringArray("Canvas Preview") current_tab = 0 -[sub_resource type="Resource" id=15] +[sub_resource type="Resource" id="Resource_k7yue"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("2_1m5ot") direction = 1 percent = 0.5 -first = SubResource( 28 ) -second = SubResource( 14 ) +first = SubResource("Resource_bb7vq") +second = SubResource("Resource_m77lt") -[sub_resource type="Resource" id=16] +[sub_resource type="Resource" id="Resource_g2hy1"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Palettes" ) +script = ExtResource("1_uy50t") +names = PackedStringArray("Palettes") current_tab = 0 -[sub_resource type="Resource" id=17] +[sub_resource type="Resource" id="Resource_wuga1"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("2_1m5ot") direction = 0 percent = 0.5 -first = SubResource( 15 ) -second = SubResource( 16 ) +first = SubResource("Resource_k7yue") +second = SubResource("Resource_g2hy1") -[sub_resource type="Resource" id=18] +[sub_resource type="Resource" id="Resource_1k0pg"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("2_1m5ot") direction = 0 percent = 0.501251 -first = SubResource( 12 ) -second = SubResource( 17 ) +first = SubResource("Resource_1pnqq") +second = SubResource("Resource_wuga1") -[sub_resource type="Resource" id=19] +[sub_resource type="Resource" id="Resource_5hlsb"] resource_name = "Tabs" -script = ExtResource( 1 ) -names = PoolStringArray( "Animation Timeline" ) +script = ExtResource("1_uy50t") +names = PackedStringArray("Animation Timeline") current_tab = 0 -[sub_resource type="Resource" id=20] +[sub_resource type="Resource" id="Resource_cgtbw"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("2_1m5ot") direction = 1 percent = 0.8125 -first = SubResource( 18 ) -second = SubResource( 19 ) +first = SubResource("Resource_1k0pg") +second = SubResource("Resource_5hlsb") -[sub_resource type="Resource" id=21] +[sub_resource type="Resource" id="Resource_lwm7e"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("2_1m5ot") direction = 0 percent = 0.03125 -first = SubResource( 9 ) -second = SubResource( 20 ) +first = SubResource("Resource_nqfbu") +second = SubResource("Resource_cgtbw") -[sub_resource type="Resource" id=22] +[sub_resource type="Resource" id="Resource_fwg3p"] resource_name = "Split" -script = ExtResource( 3 ) +script = ExtResource("2_1m5ot") direction = 1 percent = 0.5 -first = SubResource( 24 ) -second = SubResource( 21 ) +first = SubResource("Resource_nvw7v") +second = SubResource("Resource_lwm7e") [resource] resource_name = "Layout" -script = ExtResource( 2 ) -root = SubResource( 22 ) +script = ExtResource("3_uod50") +root = SubResource("Resource_fwg3p") hidden_tabs = { "Second Canvas": true } diff --git a/assets/themes/blue/theme.tres b/assets/themes/blue/theme.tres index 7a73d04b760..6b8e5f956d1 100644 --- a/assets/themes/blue/theme.tres +++ b/assets/themes/blue/theme.tres @@ -1,1745 +1,739 @@ -[gd_resource type="Theme" load_steps=175 format=2] +[gd_resource type="Theme" load_steps=57 format=3 uid="uid://boe68kb6pd5ws"] -[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1] -[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2] -[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=3] -[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=4] -[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5] -[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6] +[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="3"] +[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="3_kf8h4"] +[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="4"] +[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="5"] +[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="6"] -[sub_resource type="StyleBoxFlat" id=2] +[sub_resource type="StyleBoxFlat" id="22"] content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.18, 0.207, 0.279, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.14, 0.161, 0.217, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=3] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.41, 0.61, 0.91, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=4] -content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.4, 0.4225, 0.4825, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=5] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.125, 0.14375, 0.19375, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=6] -content_margin_left = 6.0 content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.41, 0.61, 0.91, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="Image" id=169] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 163, 163, 8, 218, 218, 218, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 37, 163, 163, 163, 8, 0, 0, 0, 0, 108, 108, 108, 0, 219, 219, 219, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 219, 219, 219, 37, 108, 108, 108, 0, 111, 111, 111, 0, 222, 222, 222, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 60, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 46, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 106, 224, 224, 224, 244, 221, 221, 221, 106, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 106, 224, 224, 224, 249, 224, 224, 224, 255, 222, 222, 222, 187, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 105, 224, 224, 224, 249, 224, 224, 224, 255, 223, 223, 223, 194, 221, 221, 221, 53, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 49, 222, 222, 222, 68, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 104, 224, 224, 224, 248, 224, 224, 224, 255, 223, 223, 223, 194, 222, 222, 222, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 221, 221, 221, 49, 222, 222, 222, 179, 224, 224, 224, 231, 222, 222, 222, 76, 222, 222, 222, 104, 224, 224, 224, 248, 224, 224, 224, 255, 223, 223, 223, 195, 222, 222, 222, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 65, 223, 223, 223, 226, 224, 224, 224, 255, 223, 223, 223, 235, 224, 224, 224, 248, 224, 224, 224, 255, 223, 223, 223, 196, 222, 222, 222, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 70, 224, 224, 224, 225, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 196, 222, 222, 222, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 69, 223, 223, 223, 225, 222, 222, 222, 197, 222, 222, 222, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 66, 222, 222, 222, 54, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 46, 111, 111, 111, 0, 108, 108, 108, 0, 219, 219, 219, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 219, 219, 219, 37, 108, 108, 108, 0, 0, 0, 0, 0, 163, 163, 163, 8, 218, 218, 218, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 37, 163, 163, 163, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=8] -flags = 0 -flags = 0 -image = SubResource( 169 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=170] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 164, 164, 164, 4, 222, 222, 222, 24, 221, 221, 221, 38, 222, 222, 222, 45, 222, 222, 222, 45, 221, 221, 221, 38, 222, 222, 222, 24, 164, 164, 164, 4, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 209, 209, 209, 15, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 209, 209, 209, 15, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 209, 209, 209, 15, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 15, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, 164, 4, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 69, 222, 222, 222, 182, 224, 224, 224, 234, 224, 224, 224, 234, 222, 222, 222, 182, 222, 222, 222, 69, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 164, 164, 164, 4, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 24, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 69, 224, 224, 224, 239, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 239, 221, 221, 221, 69, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 24, 56, 56, 56, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 180, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 111, 111, 111, 0, 222, 222, 222, 44, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 44, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 44, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 44, 111, 111, 111, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 182, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 182, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 56, 56, 56, 0, 222, 222, 222, 24, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 69, 224, 224, 224, 240, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 240, 221, 221, 221, 69, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 24, 56, 56, 56, 0, 0, 0, 0, 0, 164, 164, 164, 4, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 69, 222, 222, 222, 182, 224, 224, 224, 234, 224, 224, 224, 234, 222, 222, 222, 182, 222, 222, 222, 69, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 164, 164, 164, 4, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 209, 209, 209, 15, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 15, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 209, 209, 209, 15, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 209, 209, 209, 15, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 166, 166, 166, 4, 222, 222, 222, 24, 221, 221, 221, 38, 222, 222, 222, 45, 222, 222, 222, 45, 221, 221, 221, 38, 222, 222, 222, 24, 164, 164, 164, 4, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 56, 56, 56, 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] -flags = 0 -flags = 0 -image = SubResource( 170 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=171] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 164, 164, 164, 4, 222, 222, 222, 24, 221, 221, 221, 38, 222, 222, 222, 45, 222, 222, 222, 45, 221, 221, 221, 38, 222, 222, 222, 24, 164, 164, 164, 4, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 209, 209, 209, 15, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 209, 209, 209, 15, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 209, 209, 209, 15, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 15, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, 164, 4, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 164, 164, 164, 4, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 24, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 24, 56, 56, 56, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 111, 111, 111, 0, 222, 222, 222, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 44, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 44, 111, 111, 111, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 56, 56, 56, 0, 222, 222, 222, 24, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 24, 56, 56, 56, 0, 0, 0, 0, 0, 164, 164, 164, 4, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 164, 164, 164, 4, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 209, 209, 209, 15, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 15, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 209, 209, 209, 15, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 209, 209, 209, 15, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 166, 166, 166, 4, 222, 222, 222, 24, 221, 221, 221, 38, 222, 222, 222, 45, 222, 222, 222, 45, 221, 221, 221, 38, 222, 222, 222, 24, 164, 164, 164, 4, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 56, 56, 56, 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] -flags = 0 -flags = 0 -image = SubResource( 171 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=172] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 163, 163, 8, 218, 218, 218, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 37, 163, 163, 163, 8, 0, 0, 0, 0, 108, 108, 108, 0, 219, 219, 219, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 219, 219, 219, 37, 108, 108, 108, 0, 111, 111, 111, 0, 222, 222, 222, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 46, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 46, 111, 111, 111, 0, 108, 108, 108, 0, 219, 219, 219, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 219, 219, 219, 37, 108, 108, 108, 0, 0, 0, 0, 0, 163, 163, 163, 8, 218, 218, 218, 37, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 37, 163, 163, 163, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=14] -flags = 0 -flags = 0 -image = SubResource( 172 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=15] -content_margin_left = 4.0 -content_margin_right = 4.0 -content_margin_top = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) +bg_color = Color(0.15, 0.1725, 0.2325, 1) draw_center = false -border_color = Color( 0.125, 0.14375, 0.19375, 1 ) - -[sub_resource type="Image" id=173] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, 108, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 133, 133, 133, 1, 221, 221, 221, 16, 219, 219, 219, 30, 222, 222, 222, 41, 222, 222, 222, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 45, 222, 222, 222, 41, 219, 219, 219, 30, 221, 221, 221, 16, 133, 133, 133, 1, 32, 32, 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, 0, 53, 53, 53, 0, 180, 180, 180, 13, 220, 220, 220, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 41, 180, 180, 180, 13, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 23, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 23, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 209, 209, 209, 18, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 96, 223, 223, 223, 202, 224, 224, 224, 244, 224, 224, 224, 244, 223, 223, 223, 202, 221, 221, 221, 96, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 18, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 160, 160, 5, 222, 222, 222, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 146, 224, 224, 224, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 222, 222, 222, 145, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 45, 160, 160, 160, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 23, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 96, 224, 224, 224, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 221, 221, 221, 96, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 23, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 201, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 201, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 244, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 244, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 221, 221, 221, 44, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 244, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 244, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 44, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 221, 221, 221, 38, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 201, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 201, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 38, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 24, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 96, 224, 224, 224, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 221, 221, 221, 96, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 24, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 160, 160, 5, 222, 222, 222, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 146, 224, 224, 224, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 222, 222, 222, 146, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 45, 160, 160, 160, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 209, 209, 209, 18, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 96, 223, 223, 223, 202, 224, 224, 224, 244, 224, 224, 224, 244, 223, 223, 223, 202, 221, 221, 221, 96, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 209, 209, 209, 18, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 23, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 23, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 180, 180, 180, 13, 220, 220, 220, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 41, 180, 180, 180, 13, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 133, 133, 133, 1, 221, 221, 221, 16, 219, 219, 219, 30, 222, 222, 222, 41, 222, 222, 222, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 45, 222, 222, 222, 41, 219, 219, 219, 30, 221, 221, 221, 16, 133, 133, 133, 1, 32, 32, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, 108, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 26, -"mipmaps": false, -"width": 42 -} - -[sub_resource type="ImageTexture" id=17] -flags = 0 -flags = 0 -image = SubResource( 173 ) -size = Vector2( 42, 26 ) +border_color = Color(0.125, 0.14375, 0.19375, 1) -[sub_resource type="Image" id=174] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": "LumAlpha8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=19] -flags = 4 -flags = 4 -image = SubResource( 174 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=175] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 160, 160, 160, 5, 223, 223, 223, 90, 223, 223, 223, 166, 224, 224, 224, 221, 224, 224, 224, 244, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 244, 224, 224, 224, 221, 223, 223, 223, 166, 223, 223, 223, 90, 160, 160, 160, 5, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 217, 217, 217, 76, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 224, 217, 217, 217, 76, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 223, 223, 223, 126, 224, 224, 224, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 254, 223, 223, 223, 126, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 0, 222, 222, 222, 103, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 178, 222, 222, 222, 65, 165, 165, 165, 13, 165, 165, 165, 13, 222, 222, 222, 65, 222, 222, 222, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 103, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 197, 197, 27, 224, 224, 224, 242, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 121, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 223, 223, 223, 121, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 242, 175, 175, 175, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 222, 222, 222, 129, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 178, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 222, 222, 222, 178, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 129, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 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, 222, 222, 222, 64, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 240, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, 11, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 240, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 240, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, 11, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 240, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 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, 222, 222, 222, 64, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 223, 223, 223, 129, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 178, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 222, 222, 222, 178, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 129, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 197, 197, 27, 224, 224, 224, 243, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 120, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 223, 223, 223, 121, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 243, 197, 197, 197, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 0, 222, 222, 222, 104, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 178, 222, 222, 222, 65, 165, 165, 165, 13, 165, 165, 165, 13, 222, 222, 222, 65, 222, 222, 222, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 104, 49, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 223, 223, 223, 127, 224, 224, 224, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 254, 223, 223, 223, 126, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 217, 217, 217, 76, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 224, 217, 217, 217, 76, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 160, 160, 160, 5, 222, 222, 222, 90, 223, 223, 223, 166, 224, 224, 224, 221, 224, 224, 224, 244, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 244, 224, 224, 224, 221, 223, 223, 223, 166, 222, 222, 222, 90, 160, 160, 160, 5, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 26, -"mipmaps": false, -"width": 42 -} - -[sub_resource type="ImageTexture" id=21] -flags = 0 -flags = 0 -image = SubResource( 175 ) -size = Vector2( 42, 26 ) - -[sub_resource type="StyleBoxFlat" id=22] -content_margin_left = 6.0 -content_margin_right = 6.0 +[sub_resource type="StyleBoxFlat" id="15"] +content_margin_left = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) +bg_color = Color(0.15, 0.1725, 0.2325, 1) draw_center = false -border_color = Color( 0.125, 0.14375, 0.19375, 1 ) - -[sub_resource type="Image" id=176] -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, 112, 112, 112, 0, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 112, 112, 112, 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, 112, 112, 112, 0, 112, 112, 112, 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, 112, 112, 112, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 112, 112, 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 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=24] -flags = 0 -flags = 0 -image = SubResource( 176 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=177] -data = { -"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 107, 107, 108, 222, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 108, 108, 109, 222, 0, 0, 3, 255, 0, 0, 2, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 110, 110, 111, 222, 0, 0, 3, 255, 0, 0, 2, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 111, 111, 112, 222, 0, 0, 3, 255, 0, 0, 2, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 113, 113, 114, 222, 0, 0, 3, 255, 0, 0, 2, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 114, 114, 115, 222, 0, 0, 3, 255, 0, 0, 2, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 115, 117, 222, 0, 0, 3, 255, 0, 0, 2, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 117, 117, 118, 222, 0, 0, 3, 255, 0, 0, 2, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 118, 118, 119, 222, 0, 0, 3, 255, 0, 0, 2, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, 121, 222, 0, 0, 3, 255, 0, 0, 2, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 2, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=26] -flags = 0 -flags = 0 -image = SubResource( 177 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=178] -data = { -"data": PoolByteArray( 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=28] -flags = 0 -flags = 0 -image = SubResource( 178 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=179] -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, 55, 55, 55, 0, 112, 112, 112, 0, 112, 112, 112, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 219, 219, 219, 73, 224, 224, 224, 227, 224, 224, 224, 227, 219, 219, 219, 73, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 225, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 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, 112, 112, 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, 112, 112, 112, 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, 112, 112, 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, 168, 168, 168, 0, 224, 224, 224, 255, 168, 168, 168, 0, 168, 168, 168, 0, 224, 224, 224, 255, 168, 168, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 111, 111, 111, 0, 111, 111, 111, 0, 224, 224, 224, 255, 112, 112, 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, 111, 111, 111, 0, 223, 223, 223, 220, 220, 220, 220, 73, 220, 220, 220, 74, 223, 223, 223, 219, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 217, 217, 217, 67, 224, 224, 224, 255, 224, 224, 224, 255, 217, 217, 217, 67, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 224, 224, 224, 255, 224, 224, 224, 255, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 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 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=30] -flags = 0 -flags = 0 -image = SubResource( 179 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=180] -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, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 179, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 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, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 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, 220, 220, 220, 73, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 112, 112, 112, 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, 223, 223, 223, 179, 111, 111, 111, 0, 112, 112, 112, 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, 112, 112, 112, 0, 112, 112, 112, 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, 112, 112, 112, 0, 112, 112, 112, 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, 112, 112, 112, 0, 112, 112, 112, 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, 112, 112, 112, 0, 112, 112, 112, 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, 112, 112, 112, 0, 112, 112, 112, 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, 112, 112, 112, 0, 112, 112, 112, 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, 112, 112, 112, 0, 111, 111, 111, 0, 223, 223, 223, 179, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 111, 111, 111, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 -} +border_color = Color(0.125, 0.14375, 0.19375, 1) -[sub_resource type="ImageTexture" id=32] -flags = 0 -flags = 0 -image = SubResource( 180 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=181] -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, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 23, 223, 223, 223, 198, 223, 223, 223, 197, 167, 167, 167, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 22, 223, 223, 223, 212, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 211, 167, 167, 167, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 22, 223, 223, 223, 211, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 210, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 22, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 207, 223, 223, 223, 254, 223, 223, 223, 253, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 210, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 194, 223, 223, 223, 254, 223, 223, 223, 208, 222, 222, 222, 20, 223, 223, 223, 254, 223, 223, 223, 252, 223, 223, 223, 20, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 194, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 176, 222, 222, 222, 191, 167, 167, 167, 20, 112, 112, 112, 0, 223, 223, 223, 254, 223, 223, 223, 252, 112, 112, 112, 0, 166, 166, 166, 21, 223, 223, 223, 191, 223, 223, 223, 174, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 254, 223, 223, 223, 252, 112, 112, 112, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 254, 223, 223, 223, 252, 112, 112, 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, 111, 111, 111, 0, 223, 223, 223, 176, 223, 223, 223, 174, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=34] -flags = 0 -flags = 0 -image = SubResource( 181 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=182] -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, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 6, 220, 220, 220, 107, 223, 223, 223, 199, 223, 223, 223, 241, 223, 223, 223, 241, 223, 223, 223, 199, 220, 220, 220, 107, 167, 167, 167, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 26, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 205, 167, 167, 167, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 6, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 226, 213, 213, 213, 88, 222, 222, 222, 25, 222, 222, 222, 25, 213, 213, 213, 88, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 205, 167, 167, 167, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 219, 219, 219, 106, 223, 223, 223, 254, 223, 223, 223, 226, 167, 167, 167, 18, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 167, 167, 167, 18, 223, 223, 223, 226, 223, 223, 223, 254, 219, 219, 219, 106, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 197, 223, 223, 223, 254, 213, 213, 213, 88, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 216, 216, 216, 88, 223, 223, 223, 254, 223, 223, 223, 197, 112, 112, 112, 0, 0, 0, 0, 0, 112, 112, 112, 0, 167, 167, 167, 0, 223, 223, 223, 240, 223, 223, 223, 254, 223, 223, 223, 25, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 25, 223, 223, 223, 254, 223, 223, 223, 240, 111, 111, 111, 0, 104, 104, 104, 0, 215, 215, 215, 149, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 220, 220, 220, 162, 109, 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 240, 111, 111, 111, 0, 0, 0, 0, 0, 162, 162, 162, 8, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 215, 165, 165, 165, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 223, 223, 223, 86, 223, 223, 223, 254, 223, 223, 223, 197, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 207, 207, 36, 223, 223, 223, 240, 223, 223, 223, 245, 217, 217, 217, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 167, 167, 167, 18, 223, 223, 223, 225, 223, 223, 223, 254, 220, 220, 220, 107, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 0, 222, 222, 222, 86, 222, 222, 222, 99, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 25, 213, 213, 213, 88, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 205, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 205, 167, 167, 167, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 241, 223, 223, 223, 199, 220, 220, 220, 107, 167, 167, 167, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=36] -flags = 0 -flags = 0 -image = SubResource( 182 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=183] -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, 55, 55, 55, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, 164, 2, 222, 222, 222, 92, 223, 223, 223, 185, 223, 223, 223, 231, 223, 223, 223, 231, 223, 223, 223, 186, 222, 222, 222, 94, 155, 155, 155, 3, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 217, 217, 217, 43, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 211, 178, 178, 178, 48, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 44, 223, 223, 223, 239, 223, 223, 223, 254, 223, 223, 223, 226, 213, 213, 213, 88, 222, 222, 222, 25, 222, 222, 222, 25, 213, 213, 213, 88, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 241, 184, 184, 184, 49, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 8, 223, 223, 223, 217, 223, 223, 223, 254, 223, 223, 223, 226, 167, 167, 167, 18, 103, 103, 103, 0, 112, 112, 112, 0, 111, 111, 111, 0, 103, 103, 103, 0, 167, 167, 167, 18, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 222, 167, 167, 167, 10, 0, 0, 0, 0, 55, 55, 55, 0, 221, 221, 221, 115, 223, 223, 223, 254, 223, 223, 223, 254, 213, 213, 213, 88, 103, 103, 103, 0, 217, 217, 217, 71, 223, 223, 223, 226, 223, 223, 223, 226, 217, 217, 217, 71, 105, 105, 105, 0, 216, 216, 216, 88, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 120, 56, 56, 56, 0, 111, 111, 111, 0, 223, 223, 223, 215, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 25, 112, 112, 112, 0, 223, 223, 223, 223, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 223, 112, 112, 112, 0, 223, 223, 223, 25, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 217, 112, 112, 112, 0, 111, 111, 111, 0, 223, 223, 223, 218, 223, 223, 223, 254, 223, 223, 223, 254, 218, 218, 218, 22, 112, 112, 112, 0, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 224, 112, 112, 112, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 217, 111, 111, 111, 0, 55, 55, 55, 0, 222, 222, 222, 123, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 86, 110, 110, 110, 0, 217, 217, 217, 72, 223, 223, 223, 226, 223, 223, 223, 226, 217, 217, 217, 72, 110, 110, 110, 0, 223, 223, 223, 86, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 123, 55, 55, 55, 0, 0, 0, 0, 0, 167, 167, 167, 12, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 225, 167, 167, 167, 18, 103, 103, 103, 0, 112, 112, 112, 0, 112, 112, 112, 0, 103, 103, 103, 0, 167, 167, 167, 18, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 226, 167, 167, 167, 12, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 213, 213, 213, 55, 223, 223, 223, 245, 223, 223, 223, 254, 223, 223, 223, 226, 213, 213, 213, 88, 222, 222, 222, 25, 222, 222, 222, 25, 213, 213, 213, 88, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 245, 213, 213, 213, 55, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 214, 214, 214, 54, 223, 223, 223, 217, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 217, 214, 214, 214, 54, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 164, 164, 164, 4, 219, 219, 219, 98, 223, 223, 223, 189, 223, 223, 223, 233, 223, 223, 223, 233, 223, 223, 223, 189, 219, 219, 219, 98, 164, 164, 164, 4, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=38] -flags = 0 -flags = 0 -image = SubResource( 183 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=184] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 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] -flags = 0 -flags = 0 -image = SubResource( 184 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=185] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 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=42] -flags = 0 -flags = 0 -image = SubResource( 185 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=186] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 191, 191, 191, 221, 59, 59, 59, 128, 95, 95, 95, 146, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 221, 221, 221, 250, 126, 126, 126, 172, 6, 6, 6, 102, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 172, 172, 172, 207, 0, 0, 0, 100, 6, 6, 6, 102, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 171, 191, 191, 191, 221, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 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=44] -flags = 0 -flags = 0 -image = SubResource( 186 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=187] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 112, 112, 112, 0, 112, 112, 112, 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, 112, 112, 112, 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, 112, 112, 112, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 168, 168, 168, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 113, 255, 255, 255, 156, 255, 255, 255, 156, 255, 255, 255, 113, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 161, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 161, 191, 191, 191, 18, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 128, 128, 128, 0, 255, 255, 255, 112, 255, 255, 255, 174, 255, 255, 255, 124, 255, 255, 255, 19, 255, 255, 255, 19, 255, 255, 255, 124, 255, 255, 255, 174, 255, 255, 255, 112, 128, 128, 128, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 128, 128, 128, 0, 255, 255, 255, 155, 255, 255, 255, 174, 255, 255, 255, 19, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 19, 255, 255, 255, 174, 255, 255, 255, 155, 128, 128, 128, 0, 112, 112, 112, 0, 112, 112, 112, 0, 168, 168, 168, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 128, 128, 128, 0, 255, 255, 255, 174, 255, 255, 255, 174, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 174, 255, 255, 255, 174, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 128, 128, 128, 0, 255, 255, 255, 174, 255, 255, 255, 174, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 174, 255, 255, 255, 174, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 255, 224, 224, 224, 255, 112, 112, 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, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=46] -flags = 0 -flags = 0 -image = SubResource( 187 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=47] +[sub_resource type="StyleBoxFlat" id="47"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) +bg_color = Color(0.15, 0.1725, 0.2325, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.1, 0.115, 0.155, 1 ) - -[sub_resource type="Image" id=188] -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, 64, 64, 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, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 77, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 78, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 228, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 79, 191, 191, 191, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 21, 255, 255, 255, 79, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 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, 64, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=49] -flags = 0 -flags = 0 -image = SubResource( 188 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=189] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 61, 255, 255, 255, 190, 255, 255, 255, 242, 255, 255, 255, 242, 255, 255, 255, 190, 255, 255, 255, 61, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 122, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 121, 128, 128, 128, 0, 255, 255, 255, 60, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 60, 255, 255, 255, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 189, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 189, 255, 255, 255, 61, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 61, 128, 128, 128, 0, 255, 255, 255, 122, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 122, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 61, 255, 255, 255, 190, 255, 255, 255, 242, 255, 255, 255, 242, 255, 255, 255, 190, 255, 255, 255, 61, 128, 128, 128, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 10, -"mipmaps": false, -"width": 10 -} - -[sub_resource type="ImageTexture" id=51] -flags = 0 -flags = 0 -image = SubResource( 189 ) -size = Vector2( 10, 10 ) - -[sub_resource type="Image" id=190] -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, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=53] -flags = 0 -flags = 0 -image = SubResource( 190 ) -size = Vector2( 16, 16 ) +border_color = Color(0.1, 0.115, 0.155, 1) -[sub_resource type="StyleBoxFlat" id=54] +[sub_resource type="StyleBoxFlat" id="54"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 0.87, 0.4, 1 ) -shadow_color = Color( 1, 0.87, 0.4, 0.1 ) +border_color = Color(1, 0.87, 0.4, 1) +shadow_color = Color(1, 0.87, 0.4, 0.1) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=55] +[sub_resource type="StyleBoxFlat" id="55"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.3 ) +bg_color = Color(0, 0, 0, 0.3) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=56] +[sub_resource type="StyleBoxFlat" id="56"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.4 ) +bg_color = Color(0, 0, 0, 0.4) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=57] +[sub_resource type="StyleBoxFlat" id="57"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.7 ) +bg_color = Color(0, 0, 0, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=58] +[sub_resource type="StyleBoxFlat" id="58"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 0.47, 0.42, 1 ) -shadow_color = Color( 1, 0.47, 0.42, 0.2 ) +border_color = Color(1, 0.47, 0.42, 1) +shadow_color = Color(1, 0.47, 0.42, 0.2) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=59] +[sub_resource type="StyleBoxFlat" id="59"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.41, 0.61, 0.91, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.41, 0.61, 0.91, 0.9) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=60] +[sub_resource type="StyleBoxFlat" id="60"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.7 ) +bg_color = Color(0, 0, 0, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=61] +[sub_resource type="StyleBoxFlat" id="61"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.41, 0.61, 0.91, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.41, 0.61, 0.91, 0.9) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 8 -[sub_resource type="ImageTexture" id=62] - -[sub_resource type="Image" id=191] -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, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 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, 64, 64, 64, 0, 255, 255, 255, 20, 255, 255, 255, 62, 255, 255, 255, 62, 255, 255, 255, 20, 64, 64, 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, 128, 128, 128, 0, 255, 255, 255, 62, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 61, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 62, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 62, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 20, 255, 255, 255, 62, 255, 255, 255, 62, 255, 255, 255, 20, 64, 64, 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, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=64] -flags = 0 -flags = 0 -image = SubResource( 191 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=65] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 64 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 +[sub_resource type="StyleBoxLine" id="76"] +color = Color(1, 1, 1, 0.1) -[sub_resource type="Image" id=192] -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, 62, 62, 62, 0, 124, 124, 124, 0, 124, 124, 124, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 180, 180, 4, 248, 248, 248, 99, 248, 248, 248, 167, 248, 248, 248, 167, 248, 248, 248, 99, 180, 180, 180, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 247, 247, 247, 98, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 98, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 124, 0, 248, 248, 248, 166, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 166, 124, 124, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 124, 0, 248, 248, 248, 166, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 166, 124, 124, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 247, 247, 247, 98, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 98, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 180, 180, 5, 248, 248, 248, 99, 248, 248, 248, 167, 248, 248, 248, 167, 248, 248, 248, 99, 180, 180, 180, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 124, 124, 124, 0, 124, 124, 124, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=67] -flags = 0 -flags = 0 -image = SubResource( 192 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=68] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 67 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="Image" id=193] -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, 43, 43, 43, 0, 87, 87, 87, 0, 87, 87, 87, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 124, 4, 173, 173, 173, 98, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 98, 124, 124, 124, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 173, 173, 173, 98, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 98, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 173, 173, 173, 165, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 165, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 173, 173, 173, 165, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 165, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 173, 173, 173, 98, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 98, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 5, 173, 173, 173, 98, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 98, 128, 128, 128, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 87, 87, 87, 0, 87, 87, 87, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=70] -flags = 0 -flags = 0 -image = SubResource( 193 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=71] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 70 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=194] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=73] -flags = 0 -flags = 0 -image = SubResource( 194 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=74] +[sub_resource type="StyleBoxFlat" id="81"] content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 73 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=75] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 73 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=76] -color = Color( 1, 1, 1, 0.1 ) - -[sub_resource type="Image" id=195] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 166, 166, 166, 6, 219, 219, 219, 37, 222, 222, 222, 59, 222, 222, 222, 69, 222, 222, 222, 69, 222, 222, 222, 59, 219, 219, 219, 37, 166, 166, 166, 6, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 217, 217, 217, 23, 223, 223, 223, 69, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 69, 217, 217, 217, 23, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 217, 217, 217, 23, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 50, 221, 221, 221, 17, 152, 152, 152, 2, 152, 152, 152, 2, 221, 221, 221, 17, 222, 222, 222, 50, 223, 223, 223, 73, 223, 223, 223, 73, 217, 217, 217, 23, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 165, 165, 6, 223, 223, 223, 69, 223, 223, 223, 73, 222, 222, 222, 33, 110, 110, 110, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 110, 110, 110, 0, 222, 222, 222, 33, 223, 223, 223, 73, 223, 223, 223, 69, 165, 165, 165, 6, 0, 0, 0, 0, 54, 54, 54, 0, 219, 219, 219, 37, 223, 223, 223, 73, 222, 222, 222, 50, 110, 110, 110, 0, 191, 191, 191, 10, 255, 255, 255, 141, 255, 255, 255, 218, 255, 255, 255, 215, 255, 255, 255, 130, 191, 191, 191, 5, 110, 110, 110, 0, 222, 222, 222, 50, 223, 223, 223, 73, 219, 219, 219, 37, 54, 54, 54, 0, 110, 110, 110, 0, 221, 221, 221, 59, 223, 223, 223, 73, 221, 221, 221, 17, 128, 128, 128, 0, 255, 255, 255, 144, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 126, 64, 64, 64, 0, 221, 221, 221, 17, 223, 223, 223, 73, 221, 221, 221, 59, 110, 110, 110, 0, 111, 111, 111, 0, 222, 222, 222, 69, 223, 223, 223, 73, 112, 112, 112, 2, 191, 191, 191, 2, 255, 255, 255, 222, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 208, 128, 128, 128, 0, 149, 149, 149, 2, 223, 223, 223, 73, 222, 222, 222, 69, 111, 111, 111, 0, 111, 111, 111, 0, 222, 222, 222, 69, 223, 223, 223, 73, 149, 149, 149, 2, 191, 191, 191, 2, 255, 255, 255, 222, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 208, 128, 128, 128, 0, 112, 112, 112, 2, 223, 223, 223, 73, 222, 222, 222, 69, 111, 111, 111, 0, 110, 110, 110, 0, 221, 221, 221, 59, 223, 223, 223, 73, 221, 221, 221, 17, 128, 128, 128, 0, 255, 255, 255, 144, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 126, 64, 64, 64, 0, 221, 221, 221, 17, 223, 223, 223, 73, 221, 221, 221, 59, 110, 110, 110, 0, 54, 54, 54, 0, 219, 219, 219, 37, 223, 223, 223, 73, 221, 221, 221, 49, 110, 110, 110, 0, 191, 191, 191, 10, 255, 255, 255, 141, 255, 255, 255, 218, 255, 255, 255, 215, 255, 255, 255, 130, 191, 191, 191, 5, 110, 110, 110, 0, 221, 221, 221, 49, 223, 223, 223, 73, 219, 219, 219, 37, 54, 54, 54, 0, 0, 0, 0, 0, 166, 166, 166, 6, 223, 223, 223, 69, 223, 223, 223, 73, 222, 222, 222, 33, 110, 110, 110, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 110, 110, 110, 0, 222, 222, 222, 33, 223, 223, 223, 73, 223, 223, 223, 69, 166, 166, 166, 6, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 217, 217, 217, 23, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 50, 221, 221, 221, 17, 152, 152, 152, 2, 152, 152, 152, 2, 221, 221, 221, 17, 222, 222, 222, 50, 223, 223, 223, 73, 223, 223, 223, 73, 217, 217, 217, 23, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 208, 208, 208, 23, 223, 223, 223, 69, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 69, 208, 208, 208, 23, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 166, 166, 166, 6, 219, 219, 219, 37, 222, 222, 222, 59, 222, 222, 222, 69, 222, 222, 222, 69, 222, 222, 222, 59, 219, 219, 219, 37, 166, 166, 166, 6, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 110, 110, 110, 0, 111, 111, 111, 0, 111, 111, 111, 0, 110, 110, 110, 0, 54, 54, 54, 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=78] -flags = 0 -flags = 0 -image = SubResource( 195 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=196] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 167, 167, 167, 20, 223, 223, 223, 129, 223, 223, 223, 208, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 208, 223, 223, 223, 129, 167, 167, 167, 20, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 222, 222, 222, 81, 224, 224, 224, 241, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 241, 222, 222, 222, 81, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 222, 222, 222, 81, 224, 224, 224, 254, 224, 224, 224, 255, 221, 221, 221, 175, 222, 222, 222, 61, 163, 163, 163, 8, 164, 164, 164, 9, 222, 222, 222, 62, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 254, 222, 222, 222, 81, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 20, 224, 224, 224, 241, 224, 224, 224, 255, 223, 223, 223, 116, 110, 110, 110, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 110, 110, 110, 0, 223, 223, 223, 116, 224, 224, 224, 255, 224, 224, 224, 241, 167, 167, 167, 20, 0, 0, 0, 0, 55, 55, 55, 0, 223, 223, 223, 128, 224, 224, 224, 255, 222, 222, 222, 175, 110, 110, 110, 0, 191, 191, 191, 10, 255, 255, 255, 141, 255, 255, 255, 218, 255, 255, 255, 215, 255, 255, 255, 130, 191, 191, 191, 5, 110, 110, 110, 0, 222, 222, 222, 175, 224, 224, 224, 255, 223, 223, 223, 128, 55, 55, 55, 0, 111, 111, 111, 0, 223, 223, 223, 206, 224, 224, 224, 255, 222, 222, 222, 61, 128, 128, 128, 0, 255, 255, 255, 144, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 126, 64, 64, 64, 0, 221, 221, 221, 62, 224, 224, 224, 255, 223, 223, 223, 206, 111, 111, 111, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 205, 205, 205, 8, 191, 191, 191, 2, 255, 255, 255, 222, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 208, 128, 128, 128, 0, 195, 195, 195, 8, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 194, 194, 194, 8, 191, 191, 191, 2, 255, 255, 255, 222, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 208, 128, 128, 128, 0, 205, 205, 205, 8, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 111, 111, 111, 0, 223, 223, 223, 206, 224, 224, 224, 255, 222, 222, 222, 61, 128, 128, 128, 0, 255, 255, 255, 144, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 126, 64, 64, 64, 0, 222, 222, 222, 61, 224, 224, 224, 255, 223, 223, 223, 206, 111, 111, 111, 0, 56, 56, 56, 0, 223, 223, 223, 129, 224, 224, 224, 255, 222, 222, 222, 174, 110, 110, 110, 0, 191, 191, 191, 10, 255, 255, 255, 141, 255, 255, 255, 218, 255, 255, 255, 215, 255, 255, 255, 130, 191, 191, 191, 5, 109, 109, 109, 0, 221, 221, 221, 174, 224, 224, 224, 255, 223, 223, 223, 129, 56, 56, 56, 0, 0, 0, 0, 0, 167, 167, 167, 20, 224, 224, 224, 241, 224, 224, 224, 255, 223, 223, 223, 116, 110, 110, 110, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 110, 110, 110, 0, 223, 223, 223, 116, 224, 224, 224, 255, 224, 224, 224, 241, 167, 167, 167, 20, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 222, 222, 222, 82, 224, 224, 224, 254, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 62, 164, 164, 164, 9, 163, 163, 163, 8, 222, 222, 222, 61, 221, 221, 221, 175, 224, 224, 224, 255, 224, 224, 224, 254, 222, 222, 222, 82, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 223, 223, 223, 82, 224, 224, 224, 241, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 241, 223, 223, 223, 82, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 167, 167, 167, 21, 223, 223, 223, 129, 223, 223, 223, 208, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 208, 223, 223, 223, 129, 167, 167, 167, 20, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 56, 56, 56, 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=80] -flags = 0 -flags = 0 -image = SubResource( 196 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=81] -content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.4, 0.4225, 0.4825, 1 ) +bg_color = Color(0.4, 0.4225, 0.4825, 1) -[sub_resource type="StyleBoxFlat" id=82] +[sub_resource type="StyleBoxFlat" id="82"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.1, 0.115, 0.155, 1 ) - -[sub_resource type="Image" id=197] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 66, 255, 255, 255, 66, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 100, 255, 255, 255, 100, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 66, 255, 255, 255, 66, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 64, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=84] -flags = 0 -flags = 0 -image = SubResource( 197 ) -size = Vector2( 8, 64 ) +bg_color = Color(0.1, 0.115, 0.155, 1) -[sub_resource type="StyleBoxTexture" id=85] -texture = SubResource( 19 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=86] +[sub_resource type="StyleBoxFlat" id="86"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) +bg_color = Color(0.15, 0.1725, 0.2325, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.1, 0.115, 0.155, 1 ) +border_color = Color(0.1, 0.115, 0.155, 1) -[sub_resource type="StyleBoxFlat" id=87] +[sub_resource type="StyleBoxFlat" id="87"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(0.2, 0.23, 0.31, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.5, 0.51875, 0.56875, 1 ) +border_color = Color(0.5, 0.51875, 0.56875, 1) -[sub_resource type="StyleBoxFlat" id=88] +[sub_resource type="StyleBoxFlat" id="88"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(0.2, 0.23, 0.31, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.2 ) +border_color = Color(1, 1, 1, 0.2) -[sub_resource type="StyleBoxFlat" id=89] +[sub_resource type="StyleBoxFlat" id="89"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.2 ) -border_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(1, 1, 1, 0.2) +border_color = Color(0.2, 0.23, 0.31, 1) -[sub_resource type="StyleBoxFlat" id=90] +[sub_resource type="StyleBoxFlat" id="90"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.2 ) -border_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(1, 1, 1, 0.2) +border_color = Color(0.2, 0.23, 0.31, 1) -[sub_resource type="StyleBoxEmpty" id=91] +[sub_resource type="StyleBoxEmpty" id="91"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -[sub_resource type="Image" id=198] -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, 64, 64, 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, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 77, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 78, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 228, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 79, 191, 191, 191, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 21, 255, 255, 255, 79, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 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, 64, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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="StyleBoxFlat" id="3"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.15, 0.1725, 0.2325, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.41, 0.61, 0.91, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=93] -flags = 0 -flags = 0 -image = SubResource( 198 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="5"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.15, 0.1725, 0.2325, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.125, 0.14375, 0.19375, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="Image" id=199] -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, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 146, 255, 255, 255, 151, 191, 191, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 15, 255, 255, 255, 149, 255, 255, 255, 151, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 156, 255, 255, 255, 199, 255, 255, 255, 163, 191, 191, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 14, 255, 255, 255, 161, 255, 255, 255, 199, 255, 255, 255, 160, 128, 128, 128, 0, 0, 0, 0, 0, 191, 191, 191, 17, 255, 255, 255, 165, 255, 255, 255, 199, 255, 255, 255, 163, 191, 191, 191, 16, 191, 191, 191, 14, 255, 255, 255, 160, 255, 255, 255, 199, 255, 255, 255, 167, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 17, 255, 255, 255, 165, 255, 255, 255, 199, 255, 255, 255, 162, 255, 255, 255, 160, 255, 255, 255, 199, 255, 255, 255, 168, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 166, 255, 255, 255, 199, 255, 255, 255, 199, 255, 255, 255, 168, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 154, 255, 255, 255, 157, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} +[sub_resource type="StyleBoxFlat" id="2"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.18, 0.207, 0.279, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.14, 0.161, 0.217, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=95] -flags = 0 -flags = 0 -image = SubResource( 199 ) -size = Vector2( 12, 12 ) +[sub_resource type="StyleBoxFlat" id="4"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.15, 0.1725, 0.2325, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.4, 0.4225, 0.4825, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=97] +[sub_resource type="StyleBoxFlat" id="6"] content_margin_left = 6.0 +content_margin_top = 4.0 content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.15, 0.1725, 0.2325, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.41, 0.61, 0.91, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 + +[sub_resource type="StyleBoxFlat" id="97"] +content_margin_left = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) +bg_color = Color(0.15, 0.1725, 0.2325, 1) -[sub_resource type="StyleBoxFlat" id=98] +[sub_resource type="StyleBoxFlat" id="98"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 2.0 +content_margin_right = 2.0 content_margin_bottom = 2.0 -bg_color = Color( 0.231373, 0.258824, 0.337255, 1 ) +bg_color = Color(0.231373, 0.258824, 0.337255, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=99] +[sub_resource type="StyleBoxFlat" id="99"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(0.2, 0.23, 0.31, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.4, 0.4225, 0.4825, 1 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.4, 0.4225, 0.4825, 1) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="Image" id=200] -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, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 175, 223, 223, 223, 196, 167, 167, 167, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 191, 223, 223, 223, 254, 223, 223, 223, 211, 167, 167, 167, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 20, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 211, 167, 167, 167, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 223, 223, 223, 20, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 210, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 175, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 196, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 175, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 197, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 112, 112, 112, 0, 222, 222, 222, 20, 223, 223, 223, 207, 223, 223, 223, 254, 223, 223, 223, 212, 166, 166, 166, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 19, 223, 223, 223, 207, 223, 223, 223, 254, 223, 223, 223, 213, 166, 166, 166, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 190, 223, 223, 223, 254, 223, 223, 223, 214, 167, 167, 167, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 175, 223, 223, 223, 197, 167, 167, 167, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=101] -flags = 0 -flags = 0 -image = SubResource( 200 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=201] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 35, 128, 128, 128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 1, 222, 222, 222, 35, 111, 111, 111, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 184, 223, 223, 223, 254, 222, 222, 222, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 65, 223, 223, 223, 254, 223, 223, 223, 184, 112, 112, 112, 0, 56, 56, 56, 0, 223, 223, 223, 121, 223, 223, 223, 254, 223, 223, 223, 199, 166, 166, 166, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 6, 223, 223, 223, 200, 223, 223, 223, 254, 223, 223, 223, 121, 56, 56, 56, 0, 0, 0, 0, 0, 165, 165, 165, 11, 223, 223, 223, 222, 223, 223, 223, 254, 223, 223, 223, 177, 163, 163, 163, 6, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 163, 163, 163, 6, 223, 223, 223, 177, 223, 223, 223, 254, 223, 223, 223, 222, 165, 165, 165, 11, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 21, 223, 223, 223, 212, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 214, 223, 223, 223, 89, 220, 220, 220, 22, 221, 221, 221, 23, 223, 223, 223, 89, 223, 223, 223, 214, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 212, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 12, 223, 223, 223, 194, 223, 223, 223, 212, 223, 223, 223, 216, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 216, 223, 223, 223, 212, 223, 223, 223, 193, 167, 167, 167, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 12, 167, 167, 167, 21, 166, 166, 166, 6, 222, 222, 222, 107, 223, 223, 223, 191, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 191, 222, 222, 222, 106, 166, 166, 166, 6, 166, 166, 166, 21, 167, 167, 167, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 167, 167, 167, 0, 223, 223, 223, 254, 223, 223, 223, 252, 167, 167, 167, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 112, 112, 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 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=103] -flags = 0 -flags = 0 -image = SubResource( 201 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=202] -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, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 2, 220, 220, 220, 101, 223, 223, 223, 197, 223, 223, 223, 236, 222, 222, 222, 91, 221, 221, 221, 73, 218, 218, 218, 37, 147, 147, 147, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 0, 202, 202, 202, 49, 223, 223, 223, 216, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 253, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 83, 119, 119, 119, 19, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 50, 223, 223, 223, 243, 223, 223, 223, 254, 223, 223, 223, 232, 208, 208, 208, 97, 218, 218, 218, 32, 209, 209, 209, 10, 203, 203, 203, 34, 221, 221, 221, 89, 221, 221, 221, 100, 221, 221, 221, 95, 132, 132, 132, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 163, 163, 10, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 232, 166, 166, 166, 23, 101, 101, 101, 0, 111, 111, 111, 0, 112, 112, 112, 0, 94, 94, 94, 0, 165, 165, 165, 7, 222, 222, 222, 89, 221, 221, 221, 100, 221, 221, 221, 88, 166, 166, 166, 4, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 124, 223, 223, 223, 254, 223, 223, 223, 254, 208, 208, 208, 98, 99, 99, 99, 0, 216, 216, 216, 77, 223, 223, 223, 234, 222, 222, 222, 89, 208, 208, 208, 28, 99, 99, 99, 0, 211, 211, 211, 35, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 47, 56, 56, 56, 0, 111, 111, 111, 0, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 254, 219, 219, 219, 32, 112, 112, 112, 0, 223, 223, 223, 232, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 88, 111, 111, 111, 0, 209, 209, 209, 10, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 85, 111, 111, 111, 0, 112, 112, 112, 0, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 254, 217, 217, 217, 28, 112, 112, 112, 0, 223, 223, 223, 233, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 88, 111, 111, 111, 0, 208, 208, 208, 9, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 86, 111, 111, 111, 0, 54, 54, 54, 0, 220, 220, 220, 131, 223, 223, 223, 254, 223, 223, 223, 254, 215, 215, 215, 96, 105, 105, 105, 0, 219, 219, 219, 77, 223, 223, 223, 234, 222, 222, 222, 89, 208, 208, 208, 28, 94, 94, 94, 0, 203, 203, 203, 34, 221, 221, 221, 100, 221, 221, 221, 100, 217, 217, 217, 48, 53, 53, 53, 0, 0, 0, 0, 0, 166, 166, 166, 15, 223, 223, 223, 232, 223, 223, 223, 254, 223, 223, 223, 231, 166, 166, 166, 22, 101, 101, 101, 0, 111, 111, 111, 0, 112, 112, 112, 0, 94, 94, 94, 0, 164, 164, 164, 7, 221, 221, 221, 89, 221, 221, 221, 100, 222, 222, 222, 89, 160, 160, 160, 5, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 201, 201, 201, 61, 223, 223, 223, 248, 223, 223, 223, 254, 223, 223, 223, 232, 208, 208, 208, 97, 218, 218, 218, 32, 209, 209, 209, 10, 203, 203, 203, 34, 221, 221, 221, 89, 221, 221, 221, 100, 221, 221, 221, 96, 187, 187, 187, 22, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 203, 203, 203, 60, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 253, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 85, 185, 185, 185, 21, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 160, 160, 160, 5, 218, 218, 218, 107, 223, 223, 223, 201, 223, 223, 223, 238, 222, 222, 222, 91, 221, 221, 221, 75, 220, 220, 220, 39, 155, 155, 155, 1, 32, 32, 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, 53, 53, 53, 0, 111, 111, 111, 0, 112, 112, 112, 0, 111, 111, 111, 0, 111, 111, 111, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=105] -flags = 0 -flags = 0 -image = SubResource( 202 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=106] +[sub_resource type="StyleBoxFlat" id="106"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) -border_color = Color( 0.125, 0.14375, 0.19375, 1 ) +bg_color = Color(0.15, 0.1725, 0.2325, 1) +border_color = Color(0.125, 0.14375, 0.19375, 1) -[sub_resource type="StyleBoxLine" id=107] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="107"] +color = Color(1, 1, 1, 0.1) grow_begin = 7.0 -[sub_resource type="StyleBoxLine" id=108] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="108"] +color = Color(1, 1, 1, 0.1) grow_end = 7.0 -[sub_resource type="StyleBoxLine" id=109] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="109"] +color = Color(1, 1, 1, 0.1) grow_begin = 7.0 grow_end = 7.0 -[sub_resource type="Image" id=203] -data = { -"data": PoolByteArray( 204, 204, 204, 27, 222, 222, 222, 89, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 88, 204, 204, 204, 27, 222, 222, 222, 88, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 88, 221, 221, 221, 100, 221, 221, 221, 100, 166, 166, 166, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 166, 166, 166, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 166, 166, 166, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 166, 166, 166, 0, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 88, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 88, 204, 204, 204, 27, 222, 222, 222, 89, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 89, 204, 204, 204, 27 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=111] -flags = 0 -flags = 0 -image = SubResource( 203 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=112] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 111 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 4.0 -margin_right = 4.0 -margin_top = 4.0 -margin_bottom = 4.0 - -[sub_resource type="Image" id=204] -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, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=114] -flags = 0 -flags = 0 -image = SubResource( 204 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=115] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 1.0 -content_margin_bottom = 1.0 -texture = SubResource( 114 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxFlat" id=116] +[sub_resource type="StyleBoxFlat" id="116"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.125, 0.14375, 0.19375, 1 ) +bg_color = Color(0.125, 0.14375, 0.19375, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.125, 0.14375, 0.19375, 1 ) +border_color = Color(0.125, 0.14375, 0.19375, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.3 ) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="StyleBoxEmpty" id=117] +[sub_resource type="StyleBoxEmpty" id="117"] -[sub_resource type="StyleBoxFlat" id=1] +[sub_resource type="StyleBoxFlat" id="1"] content_margin_left = 1.0 -bg_color = Color( 0.12549, 0.145098, 0.192157, 1 ) +bg_color = Color(0.12549, 0.145098, 0.192157, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="Image" id=205] -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, 111, 111, 111, 0, 112, 112, 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, 167, 167, 167, 16, 223, 223, 223, 152, 223, 223, 223, 151, 167, 167, 167, 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, 167, 167, 167, 16, 223, 223, 223, 164, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 164, 167, 167, 167, 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, 167, 167, 167, 16, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 164, 222, 222, 222, 164, 222, 222, 222, 199, 223, 223, 223, 163, 167, 167, 167, 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, 167, 167, 167, 16, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 164, 165, 165, 165, 17, 165, 165, 165, 17, 222, 222, 222, 164, 222, 222, 222, 199, 223, 223, 223, 163, 167, 167, 167, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 156, 222, 222, 222, 199, 222, 222, 222, 165, 166, 166, 166, 17, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 17, 222, 222, 222, 165, 222, 222, 222, 199, 223, 223, 223, 156, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 154, 222, 222, 222, 159, 166, 166, 166, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 18, 222, 222, 222, 159, 222, 222, 222, 154, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 110, 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 150, 223, 223, 223, 152, 167, 167, 167, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 16, 223, 223, 223, 153, 222, 222, 222, 151, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 156, 222, 222, 222, 199, 223, 223, 223, 164, 167, 167, 167, 16, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 16, 223, 223, 223, 164, 222, 222, 222, 199, 222, 222, 222, 156, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 165, 165, 17, 222, 222, 222, 164, 222, 222, 222, 199, 223, 223, 223, 163, 167, 167, 167, 16, 167, 167, 167, 16, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 164, 165, 165, 165, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 17, 222, 222, 222, 165, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 165, 166, 166, 166, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 17, 223, 223, 223, 165, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 165, 166, 166, 166, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 18, 222, 222, 222, 153, 222, 222, 222, 153, 166, 166, 166, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 111, 111, 111, 0, 0, 0, 0, 0, 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=119] -flags = 0 -flags = 0 -image = SubResource( 205 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=206] -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, 55, 55, 55, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 221, 221, 221, 84, 222, 222, 222, 156, 222, 222, 222, 189, 222, 222, 222, 189, 222, 222, 222, 156, 221, 221, 221, 84, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 21, 223, 223, 223, 160, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 160, 167, 167, 167, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 223, 223, 223, 160, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 182, 187, 187, 187, 46, 222, 222, 222, 57, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 160, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 83, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 182, 167, 167, 167, 34, 64, 64, 64, 0, 187, 187, 187, 45, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 83, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 154, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 182, 183, 183, 183, 34, 58, 58, 58, 0, 151, 151, 151, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 154, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 188, 222, 222, 222, 199, 222, 222, 222, 199, 203, 203, 203, 46, 43, 43, 43, 0, 56, 56, 56, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 188, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 188, 222, 222, 222, 199, 222, 222, 222, 199, 187, 187, 187, 45, 64, 64, 64, 0, 151, 151, 151, 34, 222, 222, 222, 182, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 188, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 154, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 151, 151, 151, 33, 53, 53, 53, 0, 183, 183, 183, 34, 222, 222, 222, 182, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 154, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 221, 221, 221, 83, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 56, 56, 56, 32, 43, 43, 43, 0, 203, 203, 203, 46, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 83, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 222, 222, 222, 161, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 139, 139, 139, 45, 222, 222, 222, 57, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 161, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 21, 223, 223, 223, 161, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 161, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 221, 221, 221, 84, 222, 222, 222, 156, 222, 222, 222, 189, 222, 222, 222, 189, 222, 222, 222, 156, 221, 221, 221, 84, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=121] -flags = 0 -flags = 0 -image = SubResource( 206 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=207] -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, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 221, 221, 221, 108, 223, 223, 223, 200, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 200, 221, 221, 221, 108, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 27, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 167, 167, 167, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 202, 202, 202, 59, 220, 220, 220, 73, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 107, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 191, 191, 191, 44, 85, 85, 85, 0, 202, 202, 202, 58, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 107, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 198, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 234, 199, 199, 199, 44, 85, 85, 85, 0, 183, 183, 183, 43, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 198, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 59, 80, 80, 80, 0, 151, 151, 151, 42, 224, 224, 224, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 224, 224, 224, 255, 202, 202, 202, 58, 85, 85, 85, 0, 183, 183, 183, 43, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 198, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 183, 183, 183, 42, 82, 82, 82, 0, 199, 199, 199, 44, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 198, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 107, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 232, 151, 151, 151, 42, 80, 80, 80, 0, 210, 210, 210, 59, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 107, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 7, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 232, 186, 186, 186, 58, 220, 220, 220, 74, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 162, 162, 162, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 27, 223, 223, 223, 207, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 166, 166, 166, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 221, 221, 221, 108, 223, 223, 223, 200, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 200, 221, 221, 221, 108, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=123] -flags = 0 -flags = 0 -image = SubResource( 207 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=208] -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, 55, 55, 55, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 221, 221, 221, 84, 222, 222, 222, 156, 222, 222, 222, 189, 222, 222, 222, 189, 222, 222, 222, 156, 221, 221, 221, 84, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 21, 223, 223, 223, 160, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 160, 167, 167, 167, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 223, 223, 223, 160, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 57, 187, 187, 187, 46, 222, 222, 222, 182, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 160, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 83, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 187, 187, 187, 45, 64, 64, 64, 0, 167, 167, 167, 34, 222, 222, 222, 182, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 83, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 154, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 151, 151, 151, 33, 58, 58, 58, 0, 183, 183, 183, 34, 222, 222, 222, 182, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 154, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 188, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 56, 56, 56, 32, 43, 43, 43, 0, 203, 203, 203, 46, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 188, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 188, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 182, 151, 151, 151, 33, 64, 64, 64, 0, 187, 187, 187, 45, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 188, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 223, 223, 223, 154, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 182, 183, 183, 183, 34, 53, 53, 53, 0, 151, 151, 151, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 154, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 221, 221, 221, 83, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 203, 203, 203, 46, 43, 43, 43, 0, 56, 56, 56, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 83, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 222, 222, 222, 161, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 57, 139, 139, 139, 45, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 161, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 21, 223, 223, 223, 161, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 161, 166, 166, 166, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 5, 221, 221, 221, 84, 222, 222, 222, 156, 222, 222, 222, 189, 222, 222, 222, 189, 222, 222, 222, 156, 221, 221, 221, 84, 162, 162, 162, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=125] -flags = 0 -flags = 0 -image = SubResource( 208 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=209] -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, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 221, 221, 221, 108, 223, 223, 223, 200, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 200, 221, 221, 221, 108, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 27, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 167, 167, 167, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 73, 202, 202, 202, 59, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 107, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 202, 202, 202, 58, 85, 85, 85, 0, 191, 191, 191, 44, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 107, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 198, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 183, 183, 183, 42, 85, 85, 85, 0, 199, 199, 199, 44, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 198, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 232, 151, 151, 151, 42, 80, 80, 80, 0, 210, 210, 210, 59, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 223, 223, 223, 241, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 183, 183, 183, 43, 85, 85, 85, 0, 202, 202, 202, 58, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 241, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 0, 224, 224, 224, 198, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 233, 199, 199, 199, 44, 82, 82, 82, 0, 183, 183, 183, 43, 224, 224, 224, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 198, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 220, 220, 220, 107, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 59, 80, 80, 80, 0, 151, 151, 151, 42, 224, 224, 224, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 107, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 7, 223, 223, 223, 206, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 74, 186, 186, 186, 58, 224, 224, 224, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 162, 162, 162, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 27, 223, 223, 223, 207, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 206, 166, 166, 166, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 162, 162, 6, 221, 221, 221, 108, 223, 223, 223, 200, 224, 224, 224, 242, 224, 224, 224, 242, 223, 223, 223, 200, 221, 221, 221, 108, 162, 162, 162, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 111, 111, 111, 0, 112, 112, 112, 0, 112, 112, 112, 0, 111, 111, 111, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=127] -flags = 0 -flags = 0 -image = SubResource( 209 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=210] -data = { -"data": PoolByteArray( 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 89, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 89, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 128, 128, 128, 0, 128, 128, 128, 0, 64, 64, 64, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0, 128, 128, 128, 0, 255, 255, 255, 88, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 89, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 88, 128, 128, 128, 0, 64, 64, 64, 0, 255, 255, 255, 28, 255, 255, 255, 89, 255, 255, 255, 89, 255, 255, 255, 28, 64, 64, 64, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 6 -} - -[sub_resource type="ImageTexture" id=129] -flags = 0 -flags = 0 -image = SubResource( 210 ) -size = Vector2( 6, 16 ) - -[sub_resource type="Image" id=211] -data = { -"data": PoolByteArray( 54, 54, 54, 0, 218, 218, 218, 72, 224, 224, 224, 227, 224, 224, 224, 227, 218, 218, 218, 72, 54, 54, 54, 0, 112, 112, 112, 0, 224, 224, 224, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 224, 112, 112, 112, 0, 111, 111, 111, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 225, 112, 112, 112, 0, 54, 54, 54, 0, 219, 219, 219, 72, 224, 224, 224, 227, 224, 224, 224, 227, 219, 219, 219, 72, 54, 54, 54, 0, 0, 0, 0, 0, 54, 54, 54, 0, 112, 112, 112, 0, 112, 112, 112, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 112, 112, 112, 0, 112, 112, 112, 0, 54, 54, 54, 0, 0, 0, 0, 0, 54, 54, 54, 0, 218, 218, 218, 72, 224, 224, 224, 227, 224, 224, 224, 227, 218, 218, 218, 72, 54, 54, 54, 0, 112, 112, 112, 0, 224, 224, 224, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 224, 112, 112, 112, 0, 111, 111, 111, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 225, 112, 112, 112, 0, 54, 54, 54, 0, 219, 219, 219, 72, 224, 224, 224, 227, 224, 224, 224, 227, 219, 219, 219, 72, 54, 54, 54, 0, 0, 0, 0, 0, 54, 54, 54, 0, 112, 112, 112, 0, 112, 112, 112, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 112, 112, 112, 0, 112, 112, 112, 0, 54, 54, 54, 0, 0, 0, 0, 0, 54, 54, 54, 0, 218, 218, 218, 72, 224, 224, 224, 227, 224, 224, 224, 227, 218, 218, 218, 72, 54, 54, 54, 0, 112, 112, 112, 0, 224, 224, 224, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 224, 112, 112, 112, 0, 111, 111, 111, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 225, 112, 112, 112, 0, 54, 54, 54, 0, 219, 219, 219, 72, 224, 224, 224, 227, 224, 224, 224, 227, 219, 219, 219, 72, 54, 54, 54, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 6 -} - -[sub_resource type="ImageTexture" id=131] -flags = 0 -flags = 0 -image = SubResource( 211 ) -size = Vector2( 6, 16 ) - -[sub_resource type="StyleBoxFlat" id=132] -content_margin_left = 5.0 -content_margin_right = 5.0 +[sub_resource type="StyleBoxFlat" id="133"] +content_margin_left = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(0.15, 0.1725, 0.2325, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.1, 0.115, 0.155, 1 ) +border_color = Color(0.125, 0.14375, 0.19375, 1) +expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=133] +[sub_resource type="StyleBoxFlat" id="134"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.15, 0.1725, 0.2325, 1 ) +bg_color = Color(0.18, 0.207, 0.279, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.125, 0.14375, 0.19375, 1 ) +border_color = Color(0.14, 0.161, 0.217, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=134] +[sub_resource type="StyleBoxFlat" id="135"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.18, 0.207, 0.279, 1 ) +bg_color = Color(0.2, 0.23, 0.31, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.14, 0.161, 0.217, 1 ) +border_color = Color(0.1, 0.115, 0.155, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=135] -content_margin_left = 10.0 -content_margin_right = 10.0 +[sub_resource type="StyleBoxFlat" id="132"] +content_margin_left = 5.0 content_margin_top = 5.0 +content_margin_right = 5.0 content_margin_bottom = 5.0 -bg_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(0.2, 0.23, 0.31, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.1, 0.115, 0.155, 1 ) -expand_margin_bottom = 1.0 - -[sub_resource type="Image" id=212] -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, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 66, 255, 255, 255, 73, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 73, 255, 255, 255, 65, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 73, 255, 255, 255, 100, 255, 255, 255, 82, 191, 191, 191, 8, 191, 191, 191, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 73, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 83, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 83, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 9, 255, 255, 255, 83, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 83, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 9, 255, 255, 255, 77, 255, 255, 255, 76, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=137] -flags = 0 -flags = 0 -image = SubResource( 212 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=213] -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, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 66, 255, 255, 255, 73, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 73, 255, 255, 255, 100, 255, 255, 255, 82, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 83, 255, 255, 255, 100, 255, 255, 255, 82, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 9, 255, 255, 255, 83, 255, 255, 255, 100, 255, 255, 255, 76, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 76, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 83, 191, 191, 191, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 72, 255, 255, 255, 100, 255, 255, 255, 83, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 66, 255, 255, 255, 73, 191, 191, 191, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=139] -flags = 0 -flags = 0 -image = SubResource( 213 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=214] -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, 191, 191, 191, 0, 255, 255, 255, 17, 255, 255, 255, 17, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 17, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 17, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 255, 255, 255, 17, 255, 255, 255, 17, 191, 191, 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, 0, 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": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=141] -flags = 0 -flags = 0 -image = SubResource( 214 ) -size = Vector2( 8, 8 ) - -[sub_resource type="Image" id=215] -data = { -"data": PoolByteArray( 255, 255, 255, 35, 255, 255, 255, 38, 191, 191, 191, 4, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 50, 255, 255, 255, 41, 191, 191, 191, 4, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50, 191, 191, 191, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 41, 191, 191, 191, 4, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 0, 0, 0, 0, 191, 191, 191, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 191, 191, 191, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 41, 191, 191, 191, 4, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 50, 255, 255, 255, 41, 191, 191, 191, 4, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 35, 255, 255, 255, 38, 191, 191, 191, 4, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 50, 255, 255, 255, 50 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=143] -flags = 0 -flags = 0 -image = SubResource( 215 ) -size = Vector2( 8, 8 ) +border_width_bottom = 1 +border_color = Color(0.1, 0.115, 0.155, 1) -[sub_resource type="StyleBoxFlat" id=144] +[sub_resource type="StyleBoxFlat" id="144"] content_margin_left = 1.0 -content_margin_right = 1.0 content_margin_top = 1.0 +content_margin_right = 1.0 content_margin_bottom = 1.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 1 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(1, 1, 1, 1) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="StyleBoxFlat" id=96] -bg_color = Color( 0.12549, 0.145098, 0.192157, 1 ) - -[sub_resource type="Image" id=216] -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, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 98, 255, 255, 255, 109, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 109, 255, 255, 255, 98, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 109, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 191, 191, 191, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 109, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 124, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 124, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 115, 255, 255, 255, 115, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 14, -"mipmaps": false, -"width": 14 -} - -[sub_resource type="ImageTexture" id=146] -flags = 0 -flags = 0 -image = SubResource( 216 ) -size = Vector2( 14, 14 ) - -[sub_resource type="Image" id=217] -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, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 115, 255, 255, 255, 114, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 124, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 114, 255, 255, 255, 150, 255, 255, 255, 124, 191, 191, 191, 13, 191, 191, 191, 13, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 114, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 115, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 115, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 114, 191, 191, 191, 12, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 12, 255, 255, 255, 115, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 114, 255, 255, 255, 150, 255, 255, 255, 123, 191, 191, 191, 12, 191, 191, 191, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 114, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 124, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 124, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 124, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 13, 255, 255, 255, 115, 255, 255, 255, 115, 191, 191, 191, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 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": 14, -"mipmaps": false, -"width": 14 -} +[sub_resource type="StyleBoxFlat" id="96"] +bg_color = Color(0.12549, 0.145098, 0.192157, 1) -[sub_resource type="ImageTexture" id=148] -flags = 0 -flags = 0 -image = SubResource( 217 ) -size = Vector2( 14, 14 ) - -[sub_resource type="StyleBoxFlat" id=149] +[sub_resource type="StyleBoxFlat" id="149"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.4, 0.4225, 0.4825, 1 ) -border_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(0.4, 0.4225, 0.4825, 1) +border_color = Color(0.2, 0.23, 0.31, 1) -[sub_resource type="StyleBoxFlat" id=150] +[sub_resource type="StyleBoxFlat" id="150"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(0.2, 0.23, 0.31, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.4, 0.4225, 0.4825, 1 ) +border_color = Color(0.4, 0.4225, 0.4825, 1) -[sub_resource type="StyleBoxEmpty" id=151] +[sub_resource type="StyleBoxEmpty" id="151"] -[sub_resource type="StyleBoxEmpty" id=152] +[sub_resource type="StyleBoxEmpty" id="152"] -[sub_resource type="StyleBoxFlat" id=153] +[sub_resource type="StyleBoxFlat" id="153"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.08 ) -border_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(1, 1, 1, 0.08) +border_color = Color(0.2, 0.23, 0.31, 1) -[sub_resource type="StyleBoxFlat" id=154] +[sub_resource type="StyleBoxFlat" id="154"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.1, 0.115, 0.155, 1 ) -border_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(0.1, 0.115, 0.155, 1) +border_color = Color(0.2, 0.23, 0.31, 1) -[sub_resource type="StyleBoxTexture" id=155] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 64 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxTexture" id=156] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 67 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=157] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 70 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxTexture" id=158] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 73 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=159] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 73 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=160] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="160"] +color = Color(1, 1, 1, 0.1) grow_begin = 0.0 grow_end = 0.0 vertical = true -[sub_resource type="StyleBoxFlat" id=161] +[sub_resource type="StyleBoxFlat" id="161"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.4, 0.423529, 0.482353, 1 ) +bg_color = Color(0.4, 0.423529, 0.482353, 1) -[sub_resource type="StyleBoxFlat" id=162] +[sub_resource type="StyleBoxFlat" id="162"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.101961, 0.113725, 0.156863, 1 ) - -[sub_resource type="Image" id=218] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 64, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 64, 128, 128, 128, 0, 128, 128, 128, 0, 255, 255, 255, 64, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 64, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 8, -"mipmaps": false, -"width": 64 -} - -[sub_resource type="ImageTexture" id=164] -flags = 0 -flags = 0 -image = SubResource( 218 ) -size = Vector2( 64, 8 ) +bg_color = Color(0.101961, 0.113725, 0.156863, 1) -[sub_resource type="Image" id=219] -data = { -"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=166] -flags = 0 -flags = 0 -image = SubResource( 219 ) -size = Vector2( 8, 8 ) - -[sub_resource type="StyleBoxTexture" id=167] -texture = SubResource( 166 ) -region_rect = Rect2( 0, 0, 8, 8 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=168] +[sub_resource type="StyleBoxFlat" id="168"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.2, 0.23, 0.31, 1 ) +bg_color = Color(0.2, 0.23, 0.31, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.2, 0.23, 0.31, 1 ) +border_color = Color(0.2, 0.23, 0.31, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.3 ) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 [resource] resource_name = "Blue" -default_font = ExtResource( 1 ) +default_font = ExtResource("3_kf8h4") +default_font_size = 16 BoxContainer/constants/separation = 4 -Button/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -Button/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -Button/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 ) -Button/colors/font_color_pressed = Color( 0.41, 0.61, 0.91, 1 ) -Button/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) -Button/colors/icon_color_pressed = Color( 0.4715, 0.7015, 1.0465, 1 ) +Button/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +Button/colors/font_color_disabled = Color(1, 1, 1, 0.3) +Button/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1) +Button/colors/font_color_pressed = Color(0.41, 0.61, 0.91, 1) +Button/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) +Button/colors/icon_color_pressed = Color(0.4715, 0.7015, 1.0465, 1) Button/constants/hseparation = 2 -Button/fonts/font = ExtResource( 1 ) -Button/styles/disabled = SubResource( 2 ) -Button/styles/focus = SubResource( 3 ) -Button/styles/hover = SubResource( 4 ) -Button/styles/normal = SubResource( 5 ) -Button/styles/pressed = SubResource( 6 ) -CheckBox/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -CheckBox/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -CheckBox/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 ) -CheckBox/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 ) -CheckBox/colors/font_color_pressed = Color( 0.41, 0.61, 0.91, 1 ) -CheckBox/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +Button/styles/disabled = SubResource("22") +Button/styles/focus = SubResource("22") +Button/styles/hover = SubResource("22") +Button/styles/normal = SubResource("22") +Button/styles/pressed = SubResource("22") +CheckBox/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +CheckBox/colors/font_color_disabled = Color(1, 1, 1, 0.3) +CheckBox/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1) +CheckBox/colors/font_color_hover_pressed = Color(1, 1, 1, 1) +CheckBox/colors/font_color_pressed = Color(0.41, 0.61, 0.91, 1) +CheckBox/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) CheckBox/constants/check_vadjust = 0 CheckBox/constants/hseparation = 4 -CheckBox/fonts/font = ExtResource( 1 ) -CheckBox/icons/checked = SubResource( 8 ) -CheckBox/icons/radio_checked = SubResource( 10 ) -CheckBox/icons/radio_unchecked = SubResource( 12 ) -CheckBox/icons/unchecked = SubResource( 14 ) -CheckBox/styles/disabled = SubResource( 15 ) +CheckBox/styles/disabled = SubResource("15") CheckBox/styles/focus = null -CheckBox/styles/hover = SubResource( 15 ) +CheckBox/styles/hover = SubResource("15") CheckBox/styles/hover_pressed = null -CheckBox/styles/normal = SubResource( 15 ) -CheckBox/styles/pressed = SubResource( 15 ) -CheckButton/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -CheckButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -CheckButton/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 ) -CheckButton/colors/font_color_pressed = Color( 0.41, 0.61, 0.91, 1 ) -CheckButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +CheckBox/styles/normal = SubResource("15") +CheckBox/styles/pressed = SubResource("15") +CheckButton/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +CheckButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +CheckButton/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1) +CheckButton/colors/font_color_pressed = Color(0.41, 0.61, 0.91, 1) +CheckButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) CheckButton/constants/check_vadjust = 0 CheckButton/constants/hseparation = 4 -CheckButton/icons/off = SubResource( 17 ) -CheckButton/icons/off_disabled = SubResource( 19 ) -CheckButton/icons/on = SubResource( 21 ) -CheckButton/icons/on_disabled = SubResource( 19 ) -CheckButton/styles/disabled = SubResource( 22 ) -CheckButton/styles/hover = SubResource( 22 ) -CheckButton/styles/normal = SubResource( 22 ) -CheckButton/styles/pressed = SubResource( 22 ) -CollapsibleContainer/icons/arrow_normal = ExtResource( 6 ) +CheckButton/styles/disabled = SubResource("22") +CheckButton/styles/hover = SubResource("22") +CheckButton/styles/normal = SubResource("22") +CheckButton/styles/pressed = SubResource("22") +CollapsibleContainer/icons/arrow_normal = ExtResource("6") ColorPicker/constants/h_width = 30 ColorPicker/constants/label_width = 10 ColorPicker/constants/margin = 8 ColorPicker/constants/sv_height = 256 ColorPicker/constants/sv_width = 256 -ColorPicker/icons/add_preset = SubResource( 24 ) -ColorPicker/icons/overbright_indicator = SubResource( 26 ) -ColorPicker/icons/preset_bg = SubResource( 28 ) -ColorPicker/icons/screen_picker = SubResource( 30 ) -ColorPickerButton/icons/bg = SubResource( 28 ) -FileDialog/colors/files_disabled = Color( 1, 1, 1, 0.3 ) -FileDialog/colors/folder_icon_modulate = Color( 0.587, 0.727, 0.937, 1 ) -FileDialog/icons/folder = SubResource( 32 ) -FileDialog/icons/parent_folder = SubResource( 34 ) -FileDialog/icons/reload = SubResource( 36 ) -FileDialog/icons/toggle_hidden = SubResource( 38 ) -GraphEdit/colors/activity = Color( 0.41, 0.61, 0.91, 1 ) -GraphEdit/colors/grid_major = Color( 1, 1, 1, 0.15 ) -GraphEdit/colors/grid_minor = Color( 1, 1, 1, 0.07 ) -GraphEdit/colors/selection_fill = Color( 0.41, 0.61, 0.91, 0.3 ) -GraphEdit/colors/selection_stroke = Color( 0.41, 0.61, 0.91, 0.8 ) +FileDialog/colors/files_disabled = Color(1, 1, 1, 0.3) +FileDialog/colors/folder_icon_modulate = Color(0.587, 0.727, 0.937, 1) +GraphEdit/colors/activity = Color(0.41, 0.61, 0.91, 1) +GraphEdit/colors/grid_major = Color(1, 1, 1, 0.15) +GraphEdit/colors/grid_minor = Color(1, 1, 1, 0.07) +GraphEdit/colors/selection_fill = Color(0.41, 0.61, 0.91, 0.3) +GraphEdit/colors/selection_stroke = Color(0.41, 0.61, 0.91, 0.8) GraphEdit/constants/bezier_len_neg = 160 GraphEdit/constants/bezier_len_pos = 80 -GraphEdit/icons/minus = SubResource( 40 ) -GraphEdit/icons/more = SubResource( 42 ) -GraphEdit/icons/reset = SubResource( 44 ) -GraphEdit/icons/snap = SubResource( 46 ) -GraphEdit/styles/bg = SubResource( 47 ) -GraphNode/colors/close_color = Color( 1, 1, 1, 0.7 ) -GraphNode/colors/resizer_color = Color( 1, 1, 1, 0.7 ) -GraphNode/colors/title_color = Color( 1, 1, 1, 1 ) +GraphEdit/styles/bg = SubResource("47") +GraphNode/colors/close_color = Color(1, 1, 1, 0.7) +GraphNode/colors/resizer_color = Color(1, 1, 1, 0.7) +GraphNode/colors/title_color = Color(1, 1, 1, 1) GraphNode/constants/close_h_offset = 20 GraphNode/constants/close_offset = 20 GraphNode/constants/port_offset = 14 GraphNode/constants/separation = 1 GraphNode/constants/title_h_offset = -16 GraphNode/constants/title_offset = 20 -GraphNode/icons/close = SubResource( 49 ) -GraphNode/icons/port = SubResource( 51 ) -GraphNode/icons/resizer = SubResource( 53 ) -GraphNode/styles/breakpoint = SubResource( 54 ) -GraphNode/styles/comment = SubResource( 55 ) -GraphNode/styles/commentfocus = SubResource( 56 ) -GraphNode/styles/frame = SubResource( 57 ) -GraphNode/styles/position = SubResource( 58 ) -GraphNode/styles/selectedframe = SubResource( 59 ) -GraphNode/styles/state_machine_frame = SubResource( 60 ) -GraphNode/styles/state_machine_selectedframe = SubResource( 61 ) +GraphNode/styles/breakpoint = SubResource("54") +GraphNode/styles/comment = SubResource("55") +GraphNode/styles/commentfocus = SubResource("56") +GraphNode/styles/frame = SubResource("57") +GraphNode/styles/position = SubResource("58") +GraphNode/styles/selectedframe = SubResource("59") +GraphNode/styles/state_machine_frame = SubResource("60") +GraphNode/styles/state_machine_selectedframe = SubResource("61") GridContainer/constants/hseparation = 4 GridContainer/constants/vseparation = 4 HBoxContainer/constants/separation = 4 -HScrollBar/icons/decrement = SubResource( 62 ) -HScrollBar/icons/decrement_highlight = SubResource( 62 ) -HScrollBar/icons/increment = SubResource( 62 ) -HScrollBar/icons/increment_highlight = SubResource( 62 ) -HScrollBar/styles/grabber = SubResource( 65 ) -HScrollBar/styles/grabber_highlight = SubResource( 68 ) -HScrollBar/styles/grabber_pressed = SubResource( 71 ) -HScrollBar/styles/scroll = SubResource( 74 ) -HScrollBar/styles/scroll_focus = SubResource( 75 ) -HSeparator/styles/separator = SubResource( 76 ) -HSlider/icons/grabber = SubResource( 78 ) -HSlider/icons/grabber_highlight = SubResource( 80 ) -HSlider/styles/grabber_area = SubResource( 81 ) -HSlider/styles/slider = SubResource( 82 ) +HSeparator/styles/separator = SubResource("76") +HSlider/styles/grabber_area = SubResource("81") +HSlider/styles/slider = SubResource("82") HSplitContainer/constants/separation = 8 -HSplitContainer/icons/grabber = SubResource( 84 ) -HSplitContainer/styles/bg = SubResource( 85 ) -Header/base_type = "Label" -Header/colors/font_color = Color( 0.85098, 0.85098, 0.85098, 1 ) -Header/fonts/font = ExtResource( 2 ) -Icons/colors/modulate_color = Color( 0.74902, 0.74902, 0.74902, 1 ) -ItemList/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -ItemList/colors/font_color_selected = Color( 1, 1, 1, 1 ) -ItemList/colors/guide_color = Color( 1, 1, 1, 0.05 ) +Header/base_type = &"Label" +Header/colors/font_color = Color(0.85098, 0.85098, 0.85098, 1) +Icons/colors/modulate_color = Color(0.74902, 0.74902, 0.74902, 1) +ItemList/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +ItemList/colors/font_color_selected = Color(1, 1, 1, 1) +ItemList/colors/guide_color = Color(1, 1, 1, 0.05) ItemList/constants/hseparation = 3 ItemList/constants/icon_margin = 4 ItemList/constants/line_separation = 3 ItemList/constants/vseparation = 3 -ItemList/styles/bg = SubResource( 86 ) -ItemList/styles/bg_focus = SubResource( 87 ) -ItemList/styles/cursor = SubResource( 88 ) -ItemList/styles/cursor_unfocused = SubResource( 88 ) -ItemList/styles/selected = SubResource( 89 ) -ItemList/styles/selected_focus = SubResource( 90 ) -Label/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -Label/colors/font_color_shadow = Color( 0, 0, 0, 0 ) +ItemList/styles/bg = SubResource("86") +ItemList/styles/bg_focus = SubResource("87") +ItemList/styles/cursor = SubResource("88") +ItemList/styles/cursor_unfocused = SubResource("88") +ItemList/styles/selected = SubResource("89") +ItemList/styles/selected_focus = SubResource("90") +Label/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +Label/colors/font_color_shadow = Color(0, 0, 0, 0) Label/constants/line_spacing = 3 Label/constants/shadow_as_outline = 0 Label/constants/shadow_offset_x = 1 Label/constants/shadow_offset_y = 1 -Label/styles/normal = SubResource( 91 ) -LineEdit/colors/clear_button_color = Color( 0.8, 0.8075, 0.8275, 1 ) -LineEdit/colors/clear_button_color_pressed = Color( 0.41, 0.61, 0.91, 1 ) -LineEdit/colors/cursor_color = Color( 0.8, 0.8075, 0.8275, 1 ) -LineEdit/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -LineEdit/colors/font_color_selected = Color( 1, 1, 1, 1 ) -LineEdit/colors/read_only = Color( 1, 1, 1, 0.3 ) -LineEdit/colors/selection_color = Color( 0.41, 0.61, 0.91, 0.4 ) +Label/styles/normal = SubResource("91") +LineEdit/colors/clear_button_color = Color(0.8, 0.8075, 0.8275, 1) +LineEdit/colors/clear_button_color_pressed = Color(0.41, 0.61, 0.91, 1) +LineEdit/colors/cursor_color = Color(0.8, 0.8075, 0.8275, 1) +LineEdit/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +LineEdit/colors/font_color_selected = Color(1, 1, 1, 1) +LineEdit/colors/read_only = Color(1, 1, 1, 0.3) +LineEdit/colors/selection_color = Color(0.41, 0.61, 0.91, 0.4) LineEdit/constants/minimum_spaces = 12 -LineEdit/fonts/font = ExtResource( 1 ) -LineEdit/icons/clear = SubResource( 93 ) -LineEdit/styles/focus = SubResource( 3 ) -LineEdit/styles/normal = SubResource( 5 ) -LineEdit/styles/read_only = SubResource( 2 ) -LinkButton/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -LinkButton/styles/focus = SubResource( 91 ) +LineEdit/styles/focus = SubResource("3") +LineEdit/styles/normal = SubResource("5") +LineEdit/styles/read_only = SubResource("2") +LinkButton/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +LinkButton/styles/focus = SubResource("91") MarginContainer/constants/margin_bottom = 0 MarginContainer/constants/margin_left = 0 MarginContainer/constants/margin_right = 0 MarginContainer/constants/margin_top = 0 -MenuButton/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -MenuButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -MenuButton/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 ) -MenuButton/colors/font_color_pressed = Color( 1, 1, 1, 1 ) +MenuButton/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +MenuButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +MenuButton/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1) +MenuButton/colors/font_color_pressed = Color(1, 1, 1, 1) MenuButton/constants/hseparation = 3 -MenuButton/fonts/font = ExtResource( 1 ) -MenuButton/styles/disabled = SubResource( 22 ) -MenuButton/styles/focus = SubResource( 22 ) -MenuButton/styles/hover = SubResource( 22 ) -MenuButton/styles/normal = SubResource( 22 ) -MenuButton/styles/pressed = SubResource( 22 ) -Misc/colors/clear_color = Color( 0.231373, 0.258824, 0.337255, 1 ) -OptionButton/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -OptionButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -OptionButton/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 ) -OptionButton/colors/font_color_pressed = Color( 0.41, 0.61, 0.91, 1 ) -OptionButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +MenuButton/styles/disabled = SubResource("22") +MenuButton/styles/focus = SubResource("22") +MenuButton/styles/hover = SubResource("22") +MenuButton/styles/normal = SubResource("22") +MenuButton/styles/pressed = SubResource("22") +Misc/colors/clear_color = Color(0.231373, 0.258824, 0.337255, 1) +OptionButton/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +OptionButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +OptionButton/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1) +OptionButton/colors/font_color_pressed = Color(0.41, 0.61, 0.91, 1) +OptionButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) OptionButton/constants/arrow_margin = 4 OptionButton/constants/hseparation = 4 OptionButton/constants/modulate_arrow = 1 -OptionButton/icons/arrow = SubResource( 95 ) -OptionButton/styles/disabled = SubResource( 2 ) -OptionButton/styles/focus = SubResource( 3 ) -OptionButton/styles/hover = SubResource( 4 ) -OptionButton/styles/normal = SubResource( 5 ) -OptionButton/styles/pressed = SubResource( 6 ) -Panel/styles/panel = SubResource( 97 ) -PanelContainer/styles/panel = SubResource( 98 ) -PopupDialog/styles/panel = SubResource( 99 ) -PopupMenu/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -PopupMenu/colors/font_color_accel = Color( 1, 1, 1, 0.3 ) -PopupMenu/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -PopupMenu/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 ) +OptionButton/styles/disabled = SubResource("2") +OptionButton/styles/focus = SubResource("3") +OptionButton/styles/hover = SubResource("4") +OptionButton/styles/normal = SubResource("5") +OptionButton/styles/pressed = SubResource("6") +Panel/styles/panel = SubResource("97") +PanelContainer/styles/panel = SubResource("98") +Popup/styles/panel = SubResource("99") +PopupMenu/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +PopupMenu/colors/font_color_accel = Color(1, 1, 1, 0.3) +PopupMenu/colors/font_color_disabled = Color(1, 1, 1, 0.3) +PopupMenu/colors/font_color_hover = Color(0.88, 0.8845, 0.8965, 1) PopupMenu/constants/vseparation = 5 -PopupMenu/icons/checked = SubResource( 8 ) -PopupMenu/icons/radio_checked = SubResource( 10 ) -PopupMenu/icons/radio_unchecked = SubResource( 12 ) -PopupMenu/icons/submenu = SubResource( 101 ) -PopupMenu/icons/unchecked = SubResource( 14 ) -PopupMenu/icons/visibility_hidden = SubResource( 103 ) -PopupMenu/icons/visibility_visible = SubResource( 38 ) -PopupMenu/icons/visibility_xray = SubResource( 105 ) -PopupMenu/styles/disabled = SubResource( 22 ) -PopupMenu/styles/focus = SubResource( 22 ) -PopupMenu/styles/hover = SubResource( 106 ) -PopupMenu/styles/labeled_separator_left = SubResource( 107 ) -PopupMenu/styles/labeled_separator_right = SubResource( 108 ) -PopupMenu/styles/normal = SubResource( 22 ) -PopupMenu/styles/panel = SubResource( 99 ) -PopupMenu/styles/pressed = SubResource( 22 ) -PopupMenu/styles/separator = SubResource( 109 ) -PopupPanel/styles/panel = SubResource( 99 ) -ProgressBar/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -ProgressBar/styles/bg = SubResource( 112 ) -ProgressBar/styles/fg = SubResource( 115 ) -ProjectSettingsEditor/styles/panel = SubResource( 116 ) -RichTextLabel/colors/default_color = Color( 0.8, 0.8075, 0.8275, 1 ) -RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 ) +PopupMenu/styles/disabled = SubResource("22") +PopupMenu/styles/focus = SubResource("22") +PopupMenu/styles/hover = SubResource("106") +PopupMenu/styles/labeled_separator_left = SubResource("107") +PopupMenu/styles/labeled_separator_right = SubResource("108") +PopupMenu/styles/normal = SubResource("22") +PopupMenu/styles/panel = SubResource("99") +PopupMenu/styles/pressed = SubResource("22") +PopupMenu/styles/separator = SubResource("109") +PopupPanel/styles/panel = SubResource("99") +ProgressBar/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +ProjectSettingsEditor/styles/panel = SubResource("116") +RichTextLabel/colors/default_color = Color(0.8, 0.8075, 0.8275, 1) +RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0) RichTextLabel/constants/shadow_as_outline = 0 RichTextLabel/constants/shadow_offset_x = 1 RichTextLabel/constants/shadow_offset_y = 1 -RichTextLabel/styles/focus = SubResource( 117 ) -RichTextLabel/styles/normal = SubResource( 47 ) -RulerButton/base_type = "Button" -RulerButton/styles/focus = SubResource( 1 ) -RulerButton/styles/hover = SubResource( 1 ) -RulerButton/styles/normal = SubResource( 1 ) -RulerButton/styles/pressed = SubResource( 1 ) -SpinBox/icons/updown = SubResource( 119 ) -TabContainer/colors/font_color_bg = Color( 1, 1, 1, 0.3 ) -TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) -TabContainer/colors/font_color_fg = Color( 0.8, 0.8075, 0.8275, 1 ) +RichTextLabel/styles/focus = SubResource("117") +RichTextLabel/styles/normal = SubResource("47") +RulerButton/base_type = &"Button" +RulerButton/styles/focus = SubResource("1") +RulerButton/styles/hover = SubResource("1") +RulerButton/styles/normal = SubResource("1") +RulerButton/styles/pressed = SubResource("1") +TabBar/colors/font_color_bg = Color(1, 1, 1, 0.3) +TabBar/colors/font_color_fg = Color(0.8, 0.8075, 0.8275, 1) +TabBar/constants/hseparation = 4 +TabBar/styles/button = SubResource("22") +TabBar/styles/button_pressed = SubResource("22") +TabBar/styles/tab_bg = SubResource("133") +TabBar/styles/tab_disabled = SubResource("134") +TabBar/styles/tab_fg = SubResource("135") +TabContainer/colors/font_color_bg = Color(1, 1, 1, 0.3) +TabContainer/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2) +TabContainer/colors/font_color_fg = Color(0.8, 0.8075, 0.8275, 1) TabContainer/constants/hseparation = 4 TabContainer/constants/label_valign_bg = 2 TabContainer/constants/label_valign_fg = 0 TabContainer/constants/side_margin = 0 TabContainer/constants/top_margin = 24 -TabContainer/fonts/font = ExtResource( 1 ) -TabContainer/icons/decrement = SubResource( 121 ) -TabContainer/icons/decrement_highlight = SubResource( 123 ) -TabContainer/icons/increment = SubResource( 125 ) -TabContainer/icons/increment_highlight = SubResource( 127 ) -TabContainer/icons/menu = SubResource( 129 ) -TabContainer/icons/menu_highlight = SubResource( 131 ) -TabContainer/styles/panel = SubResource( 132 ) -TabContainer/styles/tab_bg = SubResource( 133 ) -TabContainer/styles/tab_disabled = SubResource( 134 ) -TabContainer/styles/tab_fg = SubResource( 135 ) -Tabs/colors/font_color_bg = Color( 1, 1, 1, 0.3 ) -Tabs/colors/font_color_fg = Color( 0.8, 0.8075, 0.8275, 1 ) -Tabs/constants/hseparation = 4 -Tabs/icons/close = SubResource( 93 ) -Tabs/icons/decrement = SubResource( 121 ) -Tabs/icons/decrement_highlight = SubResource( 123 ) -Tabs/icons/increment = SubResource( 125 ) -Tabs/icons/increment_highlight = SubResource( 127 ) -Tabs/styles/button = SubResource( 22 ) -Tabs/styles/button_pressed = SubResource( 22 ) -Tabs/styles/tab_bg = SubResource( 133 ) -Tabs/styles/tab_disabled = SubResource( 134 ) -Tabs/styles/tab_fg = SubResource( 135 ) -TextEdit/colors/caret_color = Color( 0.8, 0.8075, 0.8275, 1 ) -TextEdit/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -TextEdit/colors/selection_color = Color( 0.41, 0.61, 0.91, 0.4 ) -TextEdit/icons/fold = SubResource( 137 ) -TextEdit/icons/folded = SubResource( 139 ) -TextEdit/icons/space = SubResource( 141 ) -TextEdit/icons/tab = SubResource( 143 ) -TextEdit/styles/focus = SubResource( 4 ) -TextEdit/styles/normal = SubResource( 5 ) -TextEdit/styles/read_only = SubResource( 2 ) -ToolButton/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -ToolButton/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 ) -ToolButton/colors/font_color_pressed = Color( 0.41, 0.61, 0.91, 1 ) -ToolButton/styles/disabled = SubResource( 22 ) -ToolButton/styles/focus = SubResource( 22 ) -ToolButton/styles/hover = SubResource( 22 ) -ToolButton/styles/normal = SubResource( 22 ) -ToolButton/styles/pressed = SubResource( 22 ) -TooltipLabel/colors/font_color = Color( 0.2, 0.1925, 0.1725, 1 ) -TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 0.1 ) -TooltipPanel/styles/panel = SubResource( 144 ) -TopMenuPanel/base_type = "Panel" -TopMenuPanel/styles/panel = SubResource( 96 ) -Tree/colors/custom_button_font_highlight = Color( 0.88, 0.8845, 0.8965, 1 ) -Tree/colors/drop_position_color = Color( 0.41, 0.61, 0.91, 1 ) -Tree/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 ) -Tree/colors/font_color_selected = Color( 1, 1, 1, 1 ) -Tree/colors/guide_color = Color( 1, 1, 1, 0.05 ) -Tree/colors/relationship_line_color = Color( 1, 1, 1, 0.1 ) -Tree/colors/title_button_color = Color( 0.8, 0.8075, 0.8275, 1 ) +TabContainer/styles/panel = SubResource("132") +TabContainer/styles/tab_bg = SubResource("133") +TabContainer/styles/tab_disabled = SubResource("134") +TabContainer/styles/tab_fg = SubResource("135") +TextEdit/colors/caret_color = Color(0.8, 0.8075, 0.8275, 1) +TextEdit/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +TextEdit/colors/selection_color = Color(0.41, 0.61, 0.91, 0.4) +TextEdit/styles/focus = SubResource("4") +TextEdit/styles/normal = SubResource("5") +TextEdit/styles/read_only = SubResource("2") +TooltipLabel/colors/font_color = Color(0.2, 0.1925, 0.1725, 1) +TooltipLabel/colors/font_color_shadow = Color(0, 0, 0, 0.1) +TooltipPanel/styles/panel = SubResource("144") +TopMenuPanel/base_type = &"Panel" +TopMenuPanel/styles/panel = SubResource("96") +Tree/colors/custom_button_font_highlight = Color(0.88, 0.8845, 0.8965, 1) +Tree/colors/drop_position_color = Color(0.41, 0.61, 0.91, 1) +Tree/colors/font_color = Color(0.8, 0.8075, 0.8275, 1) +Tree/colors/font_color_selected = Color(1, 1, 1, 1) +Tree/colors/guide_color = Color(1, 1, 1, 0.05) +Tree/colors/relationship_line_color = Color(1, 1, 1, 0.1) +Tree/colors/title_button_color = Color(0.8, 0.8075, 0.8275, 1) Tree/constants/button_margin = 4 Tree/constants/draw_guides = 0 Tree/constants/draw_relationship_lines = 1 @@ -1748,57 +742,35 @@ Tree/constants/item_margin = 12 Tree/constants/scroll_border = 40 Tree/constants/scroll_speed = 12 Tree/constants/vseparation = 4 -Tree/icons/arrow = SubResource( 137 ) -Tree/icons/arrow_collapsed = SubResource( 139 ) -Tree/icons/checked = SubResource( 8 ) -Tree/icons/select_arrow = SubResource( 146 ) -Tree/icons/unchecked = SubResource( 14 ) -Tree/icons/updown = SubResource( 148 ) -Tree/styles/bg = SubResource( 47 ) -Tree/styles/bg_focus = SubResource( 87 ) -Tree/styles/button_pressed = SubResource( 149 ) -Tree/styles/cursor = SubResource( 150 ) -Tree/styles/cursor_unfocused = SubResource( 150 ) -Tree/styles/custom_button = SubResource( 151 ) -Tree/styles/custom_button_hover = SubResource( 5 ) -Tree/styles/custom_button_pressed = SubResource( 152 ) -Tree/styles/hover = SubResource( 153 ) -Tree/styles/selected = SubResource( 89 ) -Tree/styles/selected_focus = SubResource( 90 ) -Tree/styles/title_button_hover = SubResource( 154 ) -Tree/styles/title_button_normal = SubResource( 154 ) -Tree/styles/title_button_pressed = SubResource( 154 ) +Tree/styles/bg = SubResource("47") +Tree/styles/bg_focus = SubResource("87") +Tree/styles/button_pressed = SubResource("149") +Tree/styles/cursor = SubResource("150") +Tree/styles/cursor_unfocused = SubResource("150") +Tree/styles/custom_button = SubResource("151") +Tree/styles/custom_button_hover = SubResource("5") +Tree/styles/custom_button_pressed = SubResource("152") +Tree/styles/hover = SubResource("153") +Tree/styles/selected = SubResource("89") +Tree/styles/selected_focus = SubResource("90") +Tree/styles/title_button_hover = SubResource("154") +Tree/styles/title_button_normal = SubResource("154") +Tree/styles/title_button_pressed = SubResource("154") VBoxContainer/constants/separation = 4 -VScrollBar/icons/decrement = SubResource( 62 ) -VScrollBar/icons/decrement_highlight = SubResource( 62 ) -VScrollBar/icons/increment = SubResource( 62 ) -VScrollBar/icons/increment_highlight = SubResource( 62 ) -VScrollBar/styles/grabber = SubResource( 155 ) -VScrollBar/styles/grabber_highlight = SubResource( 156 ) -VScrollBar/styles/grabber_pressed = SubResource( 157 ) -VScrollBar/styles/scroll = SubResource( 158 ) -VScrollBar/styles/scroll_focus = SubResource( 159 ) -VSeparator/styles/separator = SubResource( 160 ) -VSlider/icons/grabber = SubResource( 78 ) -VSlider/icons/grabber_highlight = SubResource( 80 ) -VSlider/styles/grabber_area = SubResource( 161 ) -VSlider/styles/slider = SubResource( 162 ) +VSeparator/styles/separator = SubResource("160") +VSlider/styles/grabber_area = SubResource("161") +VSlider/styles/slider = SubResource("162") VSplitContainer/constants/separation = 8 -VSplitContainer/icons/grabber = SubResource( 164 ) -VSplitContainer/styles/bg = SubResource( 167 ) -ValueSlider/colors/progress_color = Color( 0.4, 0.423529, 0.482353, 1 ) -ValueSlider/colors/under_color = Color( 0.101961, 0.113725, 0.156863, 1 ) -ValueSlider/icons/arrow_hover = ExtResource( 3 ) -ValueSlider/icons/arrow_normal = ExtResource( 6 ) -ValueSlider/icons/arrow_pressed = ExtResource( 5 ) +ValueSlider/colors/progress_color = Color(0.4, 0.423529, 0.482353, 1) +ValueSlider/colors/under_color = Color(0.101961, 0.113725, 0.156863, 1) +ValueSlider/icons/arrow_hover = ExtResource("3") +ValueSlider/icons/arrow_normal = ExtResource("6") +ValueSlider/icons/arrow_pressed = ExtResource("5") ValueSlider/icons/texture_over = null -ValueSlider/icons/texture_progress = ExtResource( 4 ) -ValueSlider/icons/texture_under = ExtResource( 4 ) -WindowDialog/colors/title_color = Color( 0.8, 0.8075, 0.8275, 1 ) -WindowDialog/constants/close_h_ofs = 22 -WindowDialog/constants/close_v_ofs = 20 -WindowDialog/constants/title_height = 24 -WindowDialog/fonts/title_font = ExtResource( 1 ) -WindowDialog/icons/close = SubResource( 93 ) -WindowDialog/icons/close_highlight = SubResource( 93 ) -WindowDialog/styles/panel = SubResource( 168 ) +ValueSlider/icons/texture_progress = ExtResource("4") +ValueSlider/icons/texture_under = ExtResource("4") +Window/colors/title_color = Color(0.8, 0.8075, 0.8275, 1) +Window/constants/close_h_ofs = 22 +Window/constants/close_v_ofs = 20 +Window/constants/title_height = 24 +Window/styles/panel = SubResource("168") diff --git a/assets/themes/caramel/theme.tres b/assets/themes/caramel/theme.tres index 9c04b7b7e80..0f06848edda 100644 --- a/assets/themes/caramel/theme.tres +++ b/assets/themes/caramel/theme.tres @@ -1,1833 +1,816 @@ -[gd_resource type="Theme" load_steps=178 format=2] +[gd_resource type="Theme" load_steps=60 format=3 uid="uid://68ofdy0fw0t8"] -[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1] -[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2] -[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=3] -[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=4] -[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=5] -[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=6] +[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="3"] +[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="3_vvu0m"] +[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="4"] +[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="5"] +[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="6"] -[sub_resource type="StyleBoxFlat" id=2] +[sub_resource type="StyleBoxFlat" id="23"] content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.541176, 0.45098, 0.345098, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.964453, 0.841227, 0.697115, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=3] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.711914, 0.579886, 0.42548, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 1, 0.819608, 0.00392157, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=4] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.713726, 0.580392, 0.423529, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.711914, 0.579886, 0.42548, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=5] -content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.711914, 0.579886, 0.42548, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.593262, 0.483238, 0.354567, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=6] -content_margin_left = 6.0 content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.711914, 0.579886, 0.42548, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 1, 0.819608, 0.00392157, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="Image" id=172] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 8, 87, 87, 87, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 37, 64, 64, 64, 8, 0, 0, 0, 0, 43, 43, 43, 0, 86, 86, 86, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 37, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 60, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 46, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 106, 90, 90, 90, 244, 85, 85, 85, 106, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 106, 90, 90, 90, 249, 90, 90, 90, 255, 89, 89, 89, 187, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 105, 90, 90, 90, 249, 90, 90, 90, 255, 88, 88, 88, 194, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 49, 87, 87, 87, 68, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 104, 90, 90, 90, 248, 90, 90, 90, 255, 88, 88, 88, 194, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 49, 88, 88, 88, 179, 90, 90, 90, 231, 87, 87, 87, 76, 87, 87, 87, 104, 90, 90, 90, 248, 90, 90, 90, 255, 89, 89, 89, 195, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 65, 89, 89, 89, 226, 90, 90, 90, 255, 90, 90, 90, 235, 90, 90, 90, 248, 90, 90, 90, 255, 89, 89, 89, 196, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 70, 90, 90, 90, 225, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 196, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 69, 89, 89, 89, 225, 87, 87, 87, 197, 86, 86, 86, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 66, 85, 85, 85, 54, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 46, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 37, 43, 43, 43, 0, 0, 0, 0, 0, 64, 64, 64, 8, 87, 87, 87, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 37, 64, 64, 64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=8] -flags = 0 -flags = 0 -image = SubResource( 172 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=173] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 16, 16, 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, 13, 13, 13, 0, 56, 56, 56, 4, 77, 77, 77, 24, 87, 87, 87, 38, 87, 87, 87, 45, 87, 87, 87, 45, 87, 87, 87, 38, 77, 77, 77, 24, 56, 56, 56, 4, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 66, 66, 66, 15, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 66, 66, 66, 15, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 66, 66, 66, 15, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 66, 66, 66, 15, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 4, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 69, 88, 88, 88, 182, 89, 89, 89, 234, 89, 89, 89, 234, 88, 88, 88, 182, 87, 87, 87, 69, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 56, 56, 56, 4, 0, 0, 0, 0, 16, 16, 16, 0, 77, 77, 77, 24, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 89, 89, 89, 239, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 239, 85, 85, 85, 69, 86, 86, 86, 47, 86, 86, 86, 47, 77, 77, 77, 24, 16, 16, 16, 0, 45, 45, 45, 0, 88, 88, 88, 38, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 180, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 180, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 38, 45, 45, 45, 0, 43, 43, 43, 0, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 232, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 232, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 234, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 43, 43, 43, 0, 45, 45, 45, 0, 88, 88, 88, 38, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 182, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 182, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 38, 45, 45, 45, 0, 16, 16, 16, 0, 77, 77, 77, 24, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 90, 90, 90, 240, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 240, 85, 85, 85, 69, 86, 86, 86, 47, 86, 86, 86, 47, 77, 77, 77, 24, 16, 16, 16, 0, 0, 0, 0, 0, 56, 56, 56, 4, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 69, 88, 88, 88, 182, 89, 89, 89, 234, 89, 89, 89, 234, 88, 88, 88, 182, 87, 87, 87, 69, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 56, 56, 56, 4, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 67, 67, 67, 15, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 67, 67, 67, 15, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 67, 67, 67, 15, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 67, 67, 67, 15, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 64, 64, 64, 4, 77, 77, 77, 24, 87, 87, 87, 38, 87, 87, 87, 45, 87, 87, 87, 45, 87, 87, 87, 38, 77, 77, 77, 24, 56, 56, 56, 4, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 16, 16, 16, 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] -flags = 0 -flags = 0 -image = SubResource( 173 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=174] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 16, 16, 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, 13, 13, 13, 0, 56, 56, 56, 4, 77, 77, 77, 24, 87, 87, 87, 38, 87, 87, 87, 45, 87, 87, 87, 45, 87, 87, 87, 38, 77, 77, 77, 24, 56, 56, 56, 4, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 66, 66, 66, 15, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 66, 66, 66, 15, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 66, 66, 66, 15, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 66, 66, 66, 15, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 4, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 56, 56, 56, 4, 0, 0, 0, 0, 16, 16, 16, 0, 77, 77, 77, 24, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 77, 77, 77, 24, 16, 16, 16, 0, 45, 45, 45, 0, 88, 88, 88, 38, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 38, 45, 45, 45, 0, 43, 43, 43, 0, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 43, 43, 43, 0, 45, 45, 45, 0, 88, 88, 88, 38, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 38, 45, 45, 45, 0, 16, 16, 16, 0, 77, 77, 77, 24, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 77, 77, 77, 24, 16, 16, 16, 0, 0, 0, 0, 0, 56, 56, 56, 4, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 56, 56, 56, 4, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 67, 67, 67, 15, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 67, 67, 67, 15, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 67, 67, 67, 15, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 44, 67, 67, 67, 15, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 64, 64, 64, 4, 77, 77, 77, 24, 87, 87, 87, 38, 87, 87, 87, 45, 87, 87, 87, 45, 87, 87, 87, 38, 77, 77, 77, 24, 56, 56, 56, 4, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 16, 16, 16, 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] -flags = 0 -flags = 0 -image = SubResource( 174 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=175] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 8, 87, 87, 87, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 37, 64, 64, 64, 8, 0, 0, 0, 0, 43, 43, 43, 0, 86, 86, 86, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 37, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 46, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 46, 43, 43, 43, 0, 43, 43, 43, 0, 86, 86, 86, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 37, 43, 43, 43, 0, 0, 0, 0, 0, 64, 64, 64, 8, 87, 87, 87, 37, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 37, 64, 64, 64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=14] -flags = 0 -flags = 0 -image = SubResource( 175 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=15] -content_margin_left = 4.0 -content_margin_right = 4.0 -content_margin_top = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.711914, 0.579886, 0.42548, 1 ) draw_center = false -border_color = Color( 0.593262, 0.483238, 0.354567, 1 ) - -[sub_resource type="StyleBoxFlat" id=16] -bg_color = Color( 0.6, 0.6, 0.6, 0 ) - -[sub_resource type="Image" id=176] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 1, 87, 87, 87, 16, 86, 86, 86, 30, 86, 86, 86, 41, 86, 86, 86, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 45, 86, 86, 86, 41, 86, 86, 86, 30, 87, 87, 87, 16, 63, 63, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 50, 50, 50, 13, 85, 85, 85, 41, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 41, 50, 50, 50, 13, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 84, 84, 84, 23, 87, 87, 87, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 47, 84, 84, 84, 23, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 86, 86, 86, 18, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 96, 88, 88, 88, 202, 90, 90, 90, 244, 90, 90, 90, 244, 88, 88, 88, 202, 86, 86, 86, 96, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 18, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 5, 87, 87, 87, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 146, 90, 90, 90, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 253, 87, 87, 87, 145, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 45, 64, 64, 64, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 78, 78, 78, 23, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 96, 90, 90, 90, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 253, 86, 86, 86, 96, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 78, 78, 78, 23, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 86, 86, 86, 38, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 201, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 201, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 38, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 87, 87, 87, 44, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 244, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 244, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 86, 86, 86, 44, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 244, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 244, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 86, 86, 86, 38, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 201, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 201, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 38, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 77, 77, 77, 24, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 96, 90, 90, 90, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 253, 86, 86, 86, 96, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 77, 77, 77, 24, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 5, 87, 87, 87, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 146, 90, 90, 90, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 253, 86, 86, 86, 146, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 45, 64, 64, 64, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 86, 86, 86, 18, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 96, 88, 88, 88, 202, 90, 90, 90, 244, 90, 90, 90, 244, 88, 88, 88, 202, 86, 86, 86, 96, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 18, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 84, 84, 84, 23, 87, 87, 87, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 47, 84, 84, 84, 23, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 50, 50, 50, 13, 85, 85, 85, 41, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 41, 50, 50, 50, 13, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 1, 87, 87, 87, 16, 86, 86, 86, 30, 86, 86, 86, 41, 86, 86, 86, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 45, 86, 86, 86, 41, 86, 86, 86, 30, 87, 87, 87, 16, 63, 63, 63, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 26, -"mipmaps": false, -"width": 42 -} - -[sub_resource type="ImageTexture" id=18] -flags = 0 -flags = 0 -image = SubResource( 176 ) -size = Vector2( 42, 26 ) - -[sub_resource type="Image" id=177] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": "LumAlpha8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=20] -flags = 4 -flags = 4 -image = SubResource( 177 ) -size = Vector2( 16, 16 ) +border_color = Color(0.593262, 0.483238, 0.354567, 1) -[sub_resource type="Image" id=178] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 64, 64, 64, 5, 89, 89, 89, 90, 89, 89, 89, 166, 90, 90, 90, 221, 90, 90, 90, 244, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 244, 90, 90, 90, 221, 89, 89, 89, 166, 89, 89, 89, 90, 64, 64, 64, 5, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 76, 89, 89, 89, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 224, 89, 89, 89, 76, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 126, 90, 90, 90, 254, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 254, 89, 89, 89, 126, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 88, 88, 88, 103, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 178, 87, 87, 87, 65, 65, 65, 65, 13, 65, 65, 65, 13, 87, 87, 87, 65, 89, 89, 89, 178, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 103, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 27, 90, 90, 90, 242, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 121, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 121, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 242, 44, 44, 44, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 129, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 178, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 178, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 129, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 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, 88, 88, 88, 64, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 206, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 240, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 82, 82, 82, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 11, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 240, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 240, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 82, 82, 82, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 11, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 240, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 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, 88, 88, 88, 64, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 88, 88, 88, 129, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 178, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 88, 88, 88, 178, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 129, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 27, 90, 90, 90, 243, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 120, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 121, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 243, 87, 87, 87, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 88, 88, 88, 104, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 178, 87, 87, 87, 65, 65, 65, 65, 13, 65, 65, 65, 13, 87, 87, 87, 65, 89, 89, 89, 178, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 104, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 127, 90, 90, 90, 254, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 254, 89, 89, 89, 126, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 76, 90, 90, 90, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 224, 89, 89, 89, 76, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 64, 64, 64, 5, 89, 89, 89, 90, 89, 89, 89, 166, 90, 90, 90, 221, 90, 90, 90, 244, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 244, 90, 90, 90, 221, 89, 89, 89, 166, 89, 89, 89, 90, 64, 64, 64, 5, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 26, -"mipmaps": false, -"width": 42 -} - -[sub_resource type="ImageTexture" id=22] -flags = 0 -flags = 0 -image = SubResource( 178 ) -size = Vector2( 42, 26 ) - -[sub_resource type="StyleBoxFlat" id=23] -content_margin_left = 6.0 -content_margin_right = 6.0 +[sub_resource type="StyleBoxFlat" id="15"] +content_margin_left = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 +bg_color = Color(0.711914, 0.579886, 0.42548, 1) draw_center = false -border_color = Color( 0.593262, 0.483238, 0.354567, 1 ) +border_color = Color(0.593262, 0.483238, 0.354567, 1) -[sub_resource type="Image" id=179] -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, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 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="StyleBoxFlat" id="16"] +bg_color = Color(0.6, 0.6, 0.6, 0) -[sub_resource type="ImageTexture" id=25] -flags = 0 -flags = 0 -image = SubResource( 179 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=180] -data = { -"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 107, 107, 108, 222, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 108, 108, 109, 222, 0, 0, 3, 255, 0, 0, 2, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 110, 110, 111, 222, 0, 0, 3, 255, 0, 0, 2, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 111, 111, 112, 222, 0, 0, 3, 255, 0, 0, 2, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 113, 113, 114, 222, 0, 0, 3, 255, 0, 0, 2, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 114, 114, 115, 222, 0, 0, 3, 255, 0, 0, 2, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 115, 115, 117, 222, 0, 0, 3, 255, 0, 0, 2, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 117, 117, 118, 222, 0, 0, 3, 255, 0, 0, 2, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 118, 118, 119, 222, 0, 0, 3, 255, 0, 0, 2, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, 121, 222, 0, 0, 3, 255, 0, 0, 2, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 2, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=27] -flags = 0 -flags = 0 -image = SubResource( 180 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=181] -data = { -"data": PoolByteArray( 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=29] -flags = 0 -flags = 0 -image = SubResource( 181 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=182] -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, 20, 20, 20, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 85, 85, 85, 73, 90, 90, 90, 227, 90, 90, 90, 227, 86, 86, 86, 73, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 225, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 225, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 68, 68, 0, 90, 90, 90, 255, 68, 68, 68, 0, 68, 68, 68, 0, 90, 90, 90, 255, 68, 68, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 220, 88, 88, 88, 73, 87, 87, 87, 74, 89, 89, 89, 219, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 88, 88, 88, 67, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 67, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 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=31] -flags = 0 -flags = 0 -image = SubResource( 182 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=32] +[sub_resource type="StyleBoxFlat" id="32"] border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 -border_color = Color( 0.372549, 0.360784, 0.301961, 1 ) +border_color = Color(0.372549, 0.360784, 0.301961, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="Image" id=183] -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, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 179, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 179, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 73, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 179, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 89, 89, 89, 179, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 179, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=34] -flags = 0 -flags = 0 -image = SubResource( 183 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=184] -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, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 23, 89, 89, 89, 198, 89, 89, 89, 197, 66, 66, 66, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 22, 89, 89, 89, 212, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 211, 65, 65, 65, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 22, 89, 89, 89, 211, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 210, 67, 67, 67, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 22, 89, 89, 89, 210, 89, 89, 89, 254, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 253, 89, 89, 89, 208, 89, 89, 89, 254, 89, 89, 89, 210, 66, 66, 66, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 194, 89, 89, 89, 254, 89, 89, 89, 208, 88, 88, 88, 20, 89, 89, 89, 254, 89, 89, 89, 252, 88, 88, 88, 20, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 194, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 176, 89, 89, 89, 191, 66, 66, 66, 20, 45, 45, 45, 0, 89, 89, 89, 254, 89, 89, 89, 252, 45, 45, 45, 0, 67, 67, 67, 21, 89, 89, 89, 191, 89, 89, 89, 174, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 254, 89, 89, 89, 252, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 254, 89, 89, 89, 252, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 176, 89, 89, 89, 174, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=36] -flags = 0 -flags = 0 -image = SubResource( 184 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=185] -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, 22, 22, 22, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 6, 88, 88, 88, 107, 89, 89, 89, 199, 89, 89, 89, 241, 89, 89, 89, 241, 89, 89, 89, 199, 88, 88, 88, 107, 64, 64, 64, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 26, 89, 89, 89, 205, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 205, 66, 66, 66, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 6, 89, 89, 89, 205, 89, 89, 89, 254, 89, 89, 89, 226, 88, 88, 88, 88, 87, 87, 87, 25, 87, 87, 87, 25, 88, 88, 88, 88, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 205, 64, 64, 64, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 86, 86, 86, 106, 89, 89, 89, 254, 89, 89, 89, 226, 66, 66, 66, 18, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 66, 66, 66, 18, 89, 89, 89, 226, 89, 89, 89, 254, 86, 86, 86, 106, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 197, 89, 89, 89, 254, 87, 87, 87, 88, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 84, 84, 84, 88, 89, 89, 89, 254, 89, 89, 89, 197, 44, 44, 44, 0, 0, 0, 0, 0, 45, 45, 45, 0, 67, 67, 67, 0, 89, 89, 89, 240, 89, 89, 89, 254, 88, 88, 88, 25, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 25, 89, 89, 89, 254, 89, 89, 89, 240, 45, 45, 45, 0, 38, 38, 38, 0, 82, 82, 82, 149, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 162, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 24, 89, 89, 89, 254, 89, 89, 89, 240, 45, 45, 45, 0, 0, 0, 0, 0, 62, 62, 62, 8, 89, 89, 89, 205, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 215, 66, 66, 66, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 80, 80, 80, 86, 89, 89, 89, 254, 89, 89, 89, 197, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 36, 89, 89, 89, 240, 89, 89, 89, 245, 87, 87, 87, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 65, 65, 65, 18, 89, 89, 89, 225, 89, 89, 89, 254, 88, 88, 88, 107, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 88, 88, 88, 86, 88, 88, 88, 99, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 87, 87, 87, 25, 88, 88, 88, 88, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 205, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 205, 67, 67, 67, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 241, 89, 89, 89, 199, 88, 88, 88, 107, 64, 64, 64, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 44, 44, 44, 0, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=38] -flags = 0 -flags = 0 -image = SubResource( 185 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=186] -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, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 2, 87, 87, 87, 92, 89, 89, 89, 185, 89, 89, 89, 231, 89, 89, 89, 231, 89, 89, 89, 186, 86, 86, 86, 94, 59, 59, 59, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 87, 87, 87, 43, 89, 89, 89, 208, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 211, 54, 54, 54, 48, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 44, 89, 89, 89, 239, 89, 89, 89, 254, 89, 89, 89, 226, 88, 88, 88, 88, 87, 87, 87, 25, 87, 87, 87, 25, 88, 88, 88, 88, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 241, 52, 52, 52, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 8, 89, 89, 89, 217, 89, 89, 89, 254, 89, 89, 89, 226, 66, 66, 66, 18, 43, 43, 43, 0, 45, 45, 45, 0, 44, 44, 44, 0, 43, 43, 43, 0, 66, 66, 66, 18, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 222, 64, 64, 64, 10, 0, 0, 0, 0, 22, 22, 22, 0, 88, 88, 88, 115, 89, 89, 89, 254, 89, 89, 89, 254, 87, 87, 87, 88, 42, 42, 42, 0, 86, 86, 86, 71, 89, 89, 89, 226, 89, 89, 89, 226, 86, 86, 86, 71, 39, 39, 39, 0, 84, 84, 84, 88, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 120, 22, 22, 22, 0, 45, 45, 45, 0, 89, 89, 89, 215, 89, 89, 89, 254, 89, 89, 89, 254, 87, 87, 87, 25, 44, 44, 44, 0, 89, 89, 89, 223, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 223, 44, 44, 44, 0, 87, 87, 87, 25, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 217, 45, 45, 45, 0, 45, 45, 45, 0, 89, 89, 89, 218, 89, 89, 89, 254, 89, 89, 89, 254, 84, 84, 84, 22, 44, 44, 44, 0, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 224, 45, 45, 45, 0, 86, 86, 86, 24, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 217, 45, 45, 45, 0, 22, 22, 22, 0, 88, 88, 88, 123, 89, 89, 89, 254, 89, 89, 89, 254, 80, 80, 80, 86, 38, 38, 38, 0, 88, 88, 88, 72, 89, 89, 89, 226, 89, 89, 89, 226, 88, 88, 88, 72, 38, 38, 38, 0, 80, 80, 80, 86, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 123, 22, 22, 22, 0, 0, 0, 0, 0, 65, 65, 65, 12, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 225, 66, 66, 66, 18, 43, 43, 43, 0, 45, 45, 45, 0, 45, 45, 45, 0, 43, 43, 43, 0, 65, 65, 65, 18, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 226, 65, 65, 65, 12, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 75, 75, 75, 55, 89, 89, 89, 245, 89, 89, 89, 254, 89, 89, 89, 226, 88, 88, 88, 88, 87, 87, 87, 25, 87, 87, 87, 25, 88, 88, 88, 88, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 245, 75, 75, 75, 55, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 88, 88, 88, 54, 89, 89, 89, 217, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 217, 88, 88, 88, 54, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 56, 56, 56, 4, 87, 87, 87, 98, 89, 89, 89, 189, 89, 89, 89, 233, 89, 89, 89, 233, 89, 89, 89, 189, 87, 87, 87, 98, 56, 56, 56, 4, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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] -flags = 0 -flags = 0 -image = SubResource( 186 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=187] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 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=42] -flags = 0 -flags = 0 -image = SubResource( 187 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=188] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 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=44] -flags = 0 -flags = 0 -image = SubResource( 188 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=189] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 30, 30, 30, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 73, 93, 93, 93, 149, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 93, 93, 93, 149, 0, 0, 0, 73, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 92, 92, 92, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 92, 92, 92, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 191, 191, 191, 221, 59, 59, 59, 128, 95, 95, 95, 146, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 55, 128, 128, 128, 178, 224, 224, 224, 255, 224, 224, 224, 255, 221, 221, 221, 250, 126, 126, 126, 172, 6, 6, 6, 102, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 178, 0, 0, 0, 55, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 172, 172, 172, 207, 0, 0, 0, 100, 6, 6, 6, 102, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 82, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 128, 128, 128, 171, 191, 191, 191, 221, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 94, 0, 0, 0, 95, 219, 219, 219, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 219, 219, 219, 246, 0, 0, 0, 95, 0, 0, 0, 83, 201, 201, 201, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 225, 0, 0, 0, 83, 0, 0, 0, 56, 129, 129, 129, 178, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 129, 129, 129, 178, 0, 0, 0, 56, 0, 0, 0, 17, 30, 30, 30, 111, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 30, 30, 30, 111, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 57, 94, 94, 94, 149, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 94, 94, 94, 149, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 74, 94, 94, 94, 150, 218, 218, 218, 246, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 218, 218, 218, 246, 94, 94, 94, 150, 0, 0, 0, 74, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 57, 31, 31, 31, 111, 129, 129, 129, 179, 202, 202, 202, 226, 219, 219, 219, 247, 219, 219, 219, 247, 202, 202, 202, 226, 129, 129, 129, 179, 30, 30, 30, 111, 0, 0, 0, 57, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 56, 0, 0, 0, 84, 0, 0, 0, 95, 0, 0, 0, 95, 0, 0, 0, 84, 0, 0, 0, 56, 0, 0, 0, 17, 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=46] -flags = 0 -flags = 0 -image = SubResource( 189 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=190] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 68, 68, 68, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 32, 32, 32, 0, 32, 32, 32, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 19, 62, 62, 62, 113, 64, 64, 64, 156, 64, 64, 64, 156, 62, 62, 62, 113, 46, 46, 46, 19, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 47, 47, 47, 18, 64, 64, 64, 161, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 161, 47, 47, 47, 18, 0, 0, 0, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 30, 30, 30, 0, 62, 62, 62, 112, 64, 64, 64, 174, 64, 64, 64, 124, 61, 61, 61, 19, 61, 61, 61, 19, 64, 64, 64, 124, 64, 64, 64, 174, 62, 62, 62, 112, 30, 30, 30, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 32, 32, 32, 0, 64, 64, 64, 155, 64, 64, 64, 174, 62, 62, 62, 19, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 19, 64, 64, 64, 174, 64, 64, 64, 155, 32, 32, 32, 0, 45, 45, 45, 0, 45, 45, 45, 0, 68, 68, 68, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 32, 32, 32, 0, 64, 64, 64, 174, 64, 64, 64, 174, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 64, 64, 64, 174, 64, 64, 64, 174, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 32, 32, 32, 0, 64, 64, 64, 174, 64, 64, 64, 174, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 64, 64, 64, 174, 64, 64, 64, 174, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 90, 90, 90, 255, 90, 90, 90, 255, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=48] -flags = 0 -flags = 0 -image = SubResource( 190 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=49] +[sub_resource type="StyleBoxFlat" id="49"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.711914, 0.579886, 0.42548, 1 ) +bg_color = Color(0.711914, 0.579886, 0.42548, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.474609, 0.386591, 0.283653, 1 ) - -[sub_resource type="Image" id=191] -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, 64, 64, 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, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 77, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 78, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 189, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 188, 191, 191, 191, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 18, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 190, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 187, 191, 191, 191, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 78, 255, 255, 255, 228, 255, 255, 255, 191, 191, 191, 191, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 20, 255, 255, 255, 191, 255, 255, 255, 228, 255, 255, 255, 77, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 255, 255, 255, 79, 191, 191, 191, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 21, 255, 255, 255, 79, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 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, 64, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=51] -flags = 0 -flags = 0 -image = SubResource( 191 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=192] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 61, 255, 255, 255, 190, 255, 255, 255, 242, 255, 255, 255, 242, 255, 255, 255, 190, 255, 255, 255, 61, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 122, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 121, 128, 128, 128, 0, 255, 255, 255, 60, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 60, 255, 255, 255, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 189, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 241, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 241, 255, 255, 255, 189, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 189, 255, 255, 255, 61, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 61, 128, 128, 128, 0, 255, 255, 255, 122, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 122, 128, 128, 128, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 61, 255, 255, 255, 190, 255, 255, 255, 242, 255, 255, 255, 242, 255, 255, 255, 190, 255, 255, 255, 61, 128, 128, 128, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 10, -"mipmaps": false, -"width": 10 -} - -[sub_resource type="ImageTexture" id=53] -flags = 0 -flags = 0 -image = SubResource( 192 ) -size = Vector2( 10, 10 ) - -[sub_resource type="Image" id=193] -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, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 191, 191, 191, 0, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 -} +border_color = Color(0.474609, 0.386591, 0.283653, 1) -[sub_resource type="ImageTexture" id=55] -flags = 0 -flags = 0 -image = SubResource( 193 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=56] +[sub_resource type="StyleBoxFlat" id="56"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.65, 0.5655, 0.26, 1 ) -shadow_color = Color( 0.65, 0.5655, 0.26, 0.1 ) +border_color = Color(0.65, 0.5655, 0.26, 1) +shadow_color = Color(0.65, 0.5655, 0.26, 0.1) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=57] +[sub_resource type="StyleBoxFlat" id="57"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.3 ) +bg_color = Color(1, 1, 1, 0.3) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 0.9 ) +border_color = Color(0, 0, 0, 0.9) -[sub_resource type="StyleBoxFlat" id=58] +[sub_resource type="StyleBoxFlat" id="58"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.4 ) +bg_color = Color(1, 1, 1, 0.4) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 0.9 ) +border_color = Color(0, 0, 0, 0.9) -[sub_resource type="StyleBoxFlat" id=59] +[sub_resource type="StyleBoxFlat" id="59"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.7 ) +bg_color = Color(1, 1, 1, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 0.9 ) +border_color = Color(0, 0, 0, 0.9) -[sub_resource type="StyleBoxFlat" id=60] +[sub_resource type="StyleBoxFlat" id="60"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.75, 0.3525, 0.315, 1 ) -shadow_color = Color( 0.75, 0.3525, 0.315, 0.2 ) +border_color = Color(0.75, 0.3525, 0.315, 1) +shadow_color = Color(0.75, 0.3525, 0.315, 0.2) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=61] +[sub_resource type="StyleBoxFlat" id="61"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 0.819608, 0.00392157, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.1 ) +border_color = Color(1, 0.819608, 0.00392157, 0.9) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=62] +[sub_resource type="StyleBoxFlat" id="62"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.7 ) +bg_color = Color(1, 1, 1, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 0.9 ) +border_color = Color(0, 0, 0, 0.9) -[sub_resource type="StyleBoxFlat" id=63] +[sub_resource type="StyleBoxFlat" id="63"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 0.819608, 0.00392157, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.1 ) +border_color = Color(1, 0.819608, 0.00392157, 0.9) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 8 -[sub_resource type="ImageTexture" id=64] - -[sub_resource type="Image" id=194] -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, 9, 9, 9, 0, 30, 30, 30, 0, 30, 30, 30, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 43, 43, 43, 20, 61, 61, 61, 62, 61, 61, 61, 62, 43, 43, 43, 20, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 62, 62, 62, 62, 61, 61, 61, 70, 61, 61, 61, 70, 62, 62, 62, 61, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 61, 61, 61, 62, 61, 61, 61, 70, 61, 61, 61, 70, 62, 62, 62, 62, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 43, 43, 43, 20, 61, 61, 61, 62, 61, 61, 61, 62, 43, 43, 43, 20, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 30, 30, 30, 0, 30, 30, 30, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=66] -flags = 0 -flags = 0 -image = SubResource( 194 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=67] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 66 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=195] -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, 23, 23, 23, 0, 47, 47, 47, 0, 47, 47, 47, 0, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 68, 68, 4, 94, 94, 94, 99, 95, 95, 95, 167, 95, 95, 95, 167, 94, 94, 94, 99, 68, 68, 68, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 94, 94, 94, 98, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 98, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 0, 95, 95, 95, 166, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 166, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 0, 95, 95, 95, 166, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 166, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 94, 94, 94, 98, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 98, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 5, 94, 94, 94, 99, 95, 95, 95, 167, 95, 95, 95, 167, 94, 94, 94, 99, 64, 64, 64, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 47, 47, 47, 0, 47, 47, 47, 0, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=69] -flags = 0 -flags = 0 -image = SubResource( 195 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=70] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 69 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="Image" id=196] -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, 43, 43, 43, 0, 87, 87, 87, 0, 87, 87, 87, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 124, 4, 173, 173, 173, 98, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 98, 124, 124, 124, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 173, 173, 173, 98, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 98, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 173, 173, 173, 165, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 165, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 173, 173, 173, 165, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 165, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 173, 173, 173, 98, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 98, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 5, 173, 173, 173, 98, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 98, 128, 128, 128, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 87, 87, 87, 0, 87, 87, 87, 0, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=72] -flags = 0 -flags = 0 -image = SubResource( 196 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=73] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 72 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=197] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=75] -flags = 0 -flags = 0 -image = SubResource( 197 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=76] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 75 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=77] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 75 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=78] -color = Color( 0, 0, 0, 0.1 ) - -[sub_resource type="Image" id=198] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 43, 43, 43, 0, 44, 44, 44, 0, 44, 44, 44, 0, 43, 43, 43, 0, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 66, 66, 66, 6, 84, 84, 84, 37, 87, 87, 87, 59, 87, 87, 87, 69, 87, 87, 87, 69, 87, 87, 87, 59, 84, 84, 84, 37, 66, 66, 66, 6, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 79, 79, 79, 23, 87, 87, 87, 69, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 69, 79, 79, 79, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 79, 79, 79, 23, 88, 88, 88, 73, 87, 87, 87, 73, 83, 83, 83, 50, 86, 86, 86, 17, 64, 64, 64, 2, 64, 64, 64, 2, 86, 86, 86, 17, 83, 83, 83, 50, 87, 87, 87, 73, 88, 88, 88, 73, 79, 79, 79, 23, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 6, 87, 87, 87, 69, 87, 87, 87, 73, 86, 86, 86, 33, 39, 39, 39, 0, 16, 16, 16, 0, 32, 32, 32, 0, 32, 32, 32, 0, 16, 16, 16, 0, 39, 39, 39, 0, 86, 86, 86, 33, 87, 87, 87, 73, 87, 87, 87, 69, 61, 61, 61, 6, 0, 0, 0, 0, 20, 20, 20, 0, 84, 84, 84, 37, 87, 87, 87, 73, 83, 83, 83, 50, 39, 39, 39, 0, 34, 34, 34, 10, 47, 47, 47, 141, 64, 64, 64, 218, 64, 64, 64, 215, 63, 63, 63, 130, 29, 29, 29, 5, 39, 39, 39, 0, 83, 83, 83, 50, 87, 87, 87, 73, 84, 84, 84, 37, 20, 20, 20, 0, 43, 43, 43, 0, 87, 87, 87, 59, 87, 87, 87, 73, 86, 86, 86, 17, 29, 29, 29, 0, 60, 60, 60, 144, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 126, 15, 15, 15, 0, 86, 86, 86, 17, 87, 87, 87, 73, 87, 87, 87, 59, 43, 43, 43, 0, 44, 44, 44, 0, 88, 88, 88, 69, 87, 87, 87, 73, 32, 32, 32, 2, 31, 31, 31, 2, 64, 64, 64, 222, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 208, 31, 31, 31, 0, 44, 44, 44, 2, 87, 87, 87, 73, 88, 88, 88, 69, 44, 44, 44, 0, 44, 44, 44, 0, 88, 88, 88, 69, 87, 87, 87, 73, 44, 44, 44, 2, 31, 31, 31, 2, 64, 64, 64, 222, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 208, 31, 31, 31, 0, 32, 32, 32, 2, 87, 87, 87, 73, 88, 88, 88, 69, 44, 44, 44, 0, 43, 43, 43, 0, 87, 87, 87, 59, 87, 87, 87, 73, 86, 86, 86, 17, 29, 29, 29, 0, 60, 60, 60, 144, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 126, 15, 15, 15, 0, 86, 86, 86, 17, 87, 87, 87, 73, 87, 87, 87, 59, 43, 43, 43, 0, 20, 20, 20, 0, 84, 84, 84, 37, 87, 87, 87, 73, 83, 83, 83, 49, 39, 39, 39, 0, 34, 34, 34, 10, 47, 47, 47, 141, 64, 64, 64, 218, 64, 64, 64, 215, 63, 63, 63, 130, 36, 36, 36, 5, 39, 39, 39, 0, 83, 83, 83, 49, 87, 87, 87, 73, 84, 84, 84, 37, 20, 20, 20, 0, 0, 0, 0, 0, 66, 66, 66, 6, 87, 87, 87, 69, 87, 87, 87, 73, 86, 86, 86, 33, 39, 39, 39, 0, 16, 16, 16, 0, 32, 32, 32, 0, 32, 32, 32, 0, 16, 16, 16, 0, 39, 39, 39, 0, 86, 86, 86, 33, 87, 87, 87, 73, 87, 87, 87, 69, 66, 66, 66, 6, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 79, 79, 79, 23, 88, 88, 88, 73, 87, 87, 87, 73, 83, 83, 83, 50, 86, 86, 86, 17, 64, 64, 64, 2, 64, 64, 64, 2, 86, 86, 86, 17, 83, 83, 83, 50, 87, 87, 87, 73, 88, 88, 88, 73, 79, 79, 79, 23, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, 88, 88, 88, 23, 87, 87, 87, 69, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 69, 88, 88, 88, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 66, 66, 66, 6, 84, 84, 84, 37, 87, 87, 87, 59, 87, 87, 87, 69, 87, 87, 87, 69, 87, 87, 87, 59, 84, 84, 84, 37, 66, 66, 66, 6, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 0, 43, 43, 43, 0, 44, 44, 44, 0, 44, 44, 44, 0, 43, 43, 43, 0, 20, 20, 20, 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=80] -flags = 0 -flags = 0 -image = SubResource( 198 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=199] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 66, 66, 66, 20, 88, 88, 88, 129, 89, 89, 89, 208, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 208, 88, 88, 88, 129, 66, 66, 66, 20, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 86, 86, 86, 81, 90, 90, 90, 241, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 241, 86, 86, 86, 81, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 87, 87, 87, 81, 90, 90, 90, 254, 90, 90, 90, 255, 89, 89, 89, 175, 88, 88, 88, 61, 64, 64, 64, 8, 68, 68, 68, 9, 87, 87, 87, 62, 88, 88, 88, 175, 90, 90, 90, 255, 90, 90, 90, 254, 87, 87, 87, 81, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 20, 90, 90, 90, 241, 90, 90, 90, 255, 89, 89, 89, 116, 44, 44, 44, 0, 16, 16, 16, 0, 32, 32, 32, 0, 32, 32, 32, 0, 16, 16, 16, 0, 44, 44, 44, 0, 89, 89, 89, 116, 90, 90, 90, 255, 90, 90, 90, 241, 67, 67, 67, 20, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 128, 90, 90, 90, 255, 88, 88, 88, 175, 44, 44, 44, 0, 34, 34, 34, 10, 47, 47, 47, 141, 64, 64, 64, 218, 64, 64, 64, 215, 63, 63, 63, 130, 29, 29, 29, 5, 44, 44, 44, 0, 88, 88, 88, 175, 90, 90, 90, 255, 89, 89, 89, 128, 22, 22, 22, 0, 45, 45, 45, 0, 90, 90, 90, 206, 90, 90, 90, 255, 88, 88, 88, 61, 29, 29, 29, 0, 60, 60, 60, 144, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 126, 15, 15, 15, 0, 89, 89, 89, 62, 90, 90, 90, 255, 90, 90, 90, 206, 45, 45, 45, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 75, 75, 75, 8, 31, 31, 31, 2, 64, 64, 64, 222, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 208, 31, 31, 31, 0, 86, 86, 86, 8, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 83, 83, 83, 8, 31, 31, 31, 2, 64, 64, 64, 222, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 208, 31, 31, 31, 0, 75, 75, 75, 8, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 45, 45, 45, 0, 90, 90, 90, 206, 90, 90, 90, 255, 88, 88, 88, 61, 29, 29, 29, 0, 60, 60, 60, 144, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 126, 15, 15, 15, 0, 88, 88, 88, 61, 90, 90, 90, 255, 90, 90, 90, 206, 45, 45, 45, 0, 21, 21, 21, 0, 88, 88, 88, 129, 90, 90, 90, 255, 88, 88, 88, 174, 43, 43, 43, 0, 34, 34, 34, 10, 47, 47, 47, 141, 64, 64, 64, 218, 64, 64, 64, 215, 63, 63, 63, 130, 36, 36, 36, 5, 44, 44, 44, 0, 89, 89, 89, 174, 90, 90, 90, 255, 88, 88, 88, 129, 21, 21, 21, 0, 0, 0, 0, 0, 66, 66, 66, 20, 90, 90, 90, 241, 90, 90, 90, 255, 89, 89, 89, 116, 44, 44, 44, 0, 16, 16, 16, 0, 32, 32, 32, 0, 32, 32, 32, 0, 16, 16, 16, 0, 44, 44, 44, 0, 89, 89, 89, 116, 90, 90, 90, 255, 90, 90, 90, 241, 66, 66, 66, 20, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 85, 85, 85, 82, 90, 90, 90, 254, 90, 90, 90, 255, 88, 88, 88, 175, 87, 87, 87, 62, 68, 68, 68, 9, 64, 64, 64, 8, 88, 88, 88, 61, 89, 89, 89, 175, 90, 90, 90, 255, 90, 90, 90, 254, 85, 85, 85, 82, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 87, 87, 87, 82, 90, 90, 90, 241, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 241, 87, 87, 87, 82, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 66, 66, 66, 21, 88, 88, 88, 129, 89, 89, 89, 208, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 208, 88, 88, 88, 129, 66, 66, 66, 20, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 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="StyleBoxLine" id="78"] +color = Color(0, 0, 0, 0.1) -[sub_resource type="ImageTexture" id=82] -flags = 0 -flags = 0 -image = SubResource( 199 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=83] +[sub_resource type="StyleBoxFlat" id="83"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.711914, 0.579886, 0.42548, 1 ) +bg_color = Color(0.711914, 0.579886, 0.42548, 1) -[sub_resource type="StyleBoxFlat" id=84] +[sub_resource type="StyleBoxFlat" id="84"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.474609, 0.386591, 0.283653, 1 ) - -[sub_resource type="Image" id=200] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 60, 60, 60, 66, 60, 60, 60, 66, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 63, 63, 63, 100, 63, 63, 63, 100, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 60, 60, 60, 66, 60, 60, 60, 66, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 64, -"mipmaps": false, -"width": 8 -} +bg_color = Color(0.474609, 0.386591, 0.283653, 1) -[sub_resource type="ImageTexture" id=86] -flags = 0 -flags = 0 -image = SubResource( 200 ) -size = Vector2( 8, 64 ) - -[sub_resource type="StyleBoxTexture" id=87] -texture = SubResource( 20 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=88] +[sub_resource type="StyleBoxFlat" id="88"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.711914, 0.579886, 0.42548, 1 ) +bg_color = Color(0.711914, 0.579886, 0.42548, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.474609, 0.386591, 0.283653, 1 ) +border_color = Color(0.474609, 0.386591, 0.283653, 1) -[sub_resource type="StyleBoxFlat" id=89] +[sub_resource type="StyleBoxFlat" id="89"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0.949219, 0.773181, 0.567307, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.593262, 0.483238, 0.354567, 1 ) +border_color = Color(0.593262, 0.483238, 0.354567, 1) -[sub_resource type="StyleBoxFlat" id=90] +[sub_resource type="StyleBoxFlat" id="90"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0.949219, 0.773181, 0.567307, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 0.2 ) +border_color = Color(0, 0, 0, 0.2) -[sub_resource type="StyleBoxFlat" id=91] +[sub_resource type="StyleBoxFlat" id="91"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0, 0, 0, 0.2 ) -border_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0, 0, 0, 0.2) +border_color = Color(0.949219, 0.773181, 0.567307, 1) -[sub_resource type="StyleBoxFlat" id=92] +[sub_resource type="StyleBoxFlat" id="92"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0, 0, 0, 0.2 ) -border_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0, 0, 0, 0.2) +border_color = Color(0.949219, 0.773181, 0.567307, 1) -[sub_resource type="StyleBoxEmpty" id=93] +[sub_resource type="StyleBoxEmpty" id="93"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -[sub_resource type="Image" id=201] -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, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 0, 59, 59, 59, 77, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 19, 59, 59, 59, 77, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 0, 62, 62, 62, 78, 64, 64, 64, 228, 64, 64, 64, 188, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 19, 64, 64, 64, 188, 64, 64, 64, 228, 62, 62, 62, 78, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 19, 64, 64, 64, 189, 64, 64, 64, 229, 64, 64, 64, 188, 47, 47, 47, 18, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 18, 64, 64, 64, 188, 64, 64, 64, 229, 64, 64, 64, 189, 46, 46, 46, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 20, 64, 64, 64, 190, 64, 64, 64, 229, 64, 64, 64, 187, 48, 48, 48, 18, 48, 48, 48, 18, 64, 64, 64, 187, 64, 64, 64, 229, 64, 64, 64, 190, 48, 48, 48, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 20, 64, 64, 64, 190, 64, 64, 64, 229, 63, 63, 63, 186, 64, 64, 64, 187, 64, 64, 64, 229, 64, 64, 64, 190, 48, 48, 48, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 20, 64, 64, 64, 191, 64, 64, 64, 229, 64, 64, 64, 229, 64, 64, 64, 191, 47, 47, 47, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 19, 64, 64, 64, 189, 64, 64, 64, 229, 64, 64, 64, 229, 64, 64, 64, 189, 48, 48, 48, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 19, 64, 64, 64, 188, 64, 64, 64, 229, 64, 64, 64, 189, 64, 64, 64, 189, 64, 64, 64, 229, 64, 64, 64, 188, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 18, 64, 64, 64, 188, 64, 64, 64, 229, 64, 64, 64, 190, 47, 47, 47, 20, 47, 47, 47, 20, 64, 64, 64, 190, 64, 64, 64, 229, 64, 64, 64, 187, 48, 48, 48, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 18, 64, 64, 64, 187, 64, 64, 64, 229, 64, 64, 64, 190, 48, 48, 48, 20, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 20, 64, 64, 64, 190, 64, 64, 64, 229, 64, 64, 64, 187, 48, 48, 48, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 0, 63, 63, 63, 78, 64, 64, 64, 228, 64, 64, 64, 191, 48, 48, 48, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 20, 64, 64, 64, 191, 64, 64, 64, 228, 64, 64, 64, 77, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 61, 61, 61, 79, 46, 46, 46, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 21, 61, 61, 61, 79, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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="StyleBoxFlat" id="3"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.711914, 0.579886, 0.42548, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(1, 0.819608, 0.00392157, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=95] -flags = 0 -flags = 0 -image = SubResource( 201 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="5"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.711914, 0.579886, 0.42548, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.593262, 0.483238, 0.354567, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="Image" id=202] -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, 32, 32, 32, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 31, 31, 31, 0, 0, 0, 0, 0, 32, 32, 32, 0, 64, 64, 64, 146, 63, 63, 63, 151, 47, 47, 47, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 15, 64, 64, 64, 149, 63, 63, 63, 151, 31, 31, 31, 0, 32, 32, 32, 0, 64, 64, 64, 156, 64, 64, 64, 199, 64, 64, 64, 163, 48, 48, 48, 16, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 14, 64, 64, 64, 161, 64, 64, 64, 199, 64, 64, 64, 160, 32, 32, 32, 0, 0, 0, 0, 0, 47, 47, 47, 17, 63, 63, 63, 165, 64, 64, 64, 199, 63, 63, 63, 163, 46, 46, 46, 16, 47, 47, 47, 14, 64, 64, 64, 160, 64, 64, 64, 199, 64, 64, 64, 167, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 17, 63, 63, 63, 165, 64, 64, 64, 199, 64, 64, 64, 162, 63, 63, 63, 160, 64, 64, 64, 199, 64, 64, 64, 168, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 18, 64, 64, 64, 166, 64, 64, 64, 199, 64, 64, 64, 199, 64, 64, 64, 168, 47, 47, 47, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 18, 63, 63, 63, 154, 64, 64, 64, 157, 47, 47, 47, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 32, 32, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} +[sub_resource type="StyleBoxFlat" id="2"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.541176, 0.45098, 0.345098, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.964453, 0.841227, 0.697115, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=97] -flags = 0 -flags = 0 -image = SubResource( 202 ) -size = Vector2( 12, 12 ) +[sub_resource type="StyleBoxFlat" id="4"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.713726, 0.580392, 0.423529, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.711914, 0.579886, 0.42548, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=99] +[sub_resource type="StyleBoxFlat" id="6"] content_margin_left = 6.0 +content_margin_top = 4.0 content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.711914, 0.579886, 0.42548, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(1, 0.819608, 0.00392157, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 + +[sub_resource type="StyleBoxFlat" id="99"] +content_margin_left = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.713726, 0.580392, 0.423529, 1 ) +bg_color = Color(0.713726, 0.580392, 0.423529, 1) -[sub_resource type="StyleBoxFlat" id=100] +[sub_resource type="StyleBoxFlat" id="100"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 2.0 +content_margin_right = 2.0 content_margin_bottom = 2.0 -bg_color = Color( 0.866667, 0.701961, 0.439216, 1 ) +bg_color = Color(0.866667, 0.701961, 0.439216, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=101] +[sub_resource type="StyleBoxFlat" id="101"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0.949219, 0.773181, 0.567307, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.711914, 0.579886, 0.42548, 1 ) -shadow_color = Color( 0, 0, 0, 0.1 ) +border_color = Color(0.711914, 0.579886, 0.42548, 1) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 4 -[sub_resource type="Image" id=203] -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, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 175, 88, 88, 88, 196, 66, 66, 66, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 191, 89, 89, 89, 254, 89, 89, 89, 211, 66, 66, 66, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 20, 89, 89, 89, 208, 89, 89, 89, 254, 89, 89, 89, 211, 66, 66, 66, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 88, 88, 88, 20, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 210, 66, 66, 66, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 175, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 196, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 175, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 197, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 88, 88, 88, 20, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 212, 67, 67, 67, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 19, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 213, 66, 66, 66, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 190, 89, 89, 89, 254, 89, 89, 89, 214, 66, 66, 66, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 175, 89, 89, 89, 197, 66, 66, 66, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=103] -flags = 0 -flags = 0 -image = SubResource( 203 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=204] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 85, 85, 85, 35, 64, 64, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 1, 85, 85, 85, 35, 44, 44, 44, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 184, 89, 89, 89, 254, 88, 88, 88, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 65, 89, 89, 89, 254, 89, 89, 89, 184, 45, 45, 45, 0, 21, 21, 21, 0, 88, 88, 88, 121, 89, 89, 89, 254, 89, 89, 89, 199, 66, 66, 66, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 6, 89, 89, 89, 200, 89, 89, 89, 254, 88, 88, 88, 121, 21, 21, 21, 0, 0, 0, 0, 0, 66, 66, 66, 11, 89, 89, 89, 222, 89, 89, 89, 254, 88, 88, 88, 177, 62, 62, 62, 6, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 62, 62, 62, 6, 88, 88, 88, 177, 89, 89, 89, 254, 89, 89, 89, 222, 66, 66, 66, 11, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 21, 89, 89, 89, 212, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 214, 79, 79, 79, 89, 88, 88, 88, 22, 86, 86, 86, 23, 79, 79, 79, 89, 89, 89, 89, 214, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 212, 67, 67, 67, 21, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 12, 88, 88, 88, 194, 89, 89, 89, 212, 89, 89, 89, 216, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 216, 89, 89, 89, 212, 88, 88, 88, 193, 65, 65, 65, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 12, 65, 65, 65, 21, 66, 66, 66, 6, 87, 87, 87, 107, 90, 90, 90, 191, 89, 89, 89, 254, 89, 89, 89, 254, 90, 90, 90, 191, 87, 87, 87, 106, 66, 66, 66, 6, 67, 67, 67, 21, 66, 66, 66, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 67, 67, 67, 0, 89, 89, 89, 254, 89, 89, 89, 252, 67, 67, 67, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 45, 45, 45, 0, 0, 0, 0, 0, 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=105] -flags = 0 -flags = 0 -image = SubResource( 204 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=205] -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, 19, 19, 19, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 2, 84, 84, 84, 101, 88, 88, 88, 197, 89, 89, 89, 236, 88, 88, 88, 91, 89, 89, 89, 73, 86, 86, 86, 37, 51, 51, 51, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 0, 80, 80, 80, 49, 89, 89, 89, 216, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 253, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 83, 54, 54, 54, 19, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 72, 72, 50, 89, 89, 89, 243, 89, 89, 89, 254, 89, 89, 89, 232, 81, 81, 81, 97, 84, 84, 84, 32, 86, 86, 86, 10, 87, 87, 87, 34, 89, 89, 89, 89, 89, 89, 89, 100, 89, 89, 89, 95, 41, 41, 41, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 10, 89, 89, 89, 224, 89, 89, 89, 254, 89, 89, 89, 232, 64, 64, 64, 23, 38, 38, 38, 0, 44, 44, 44, 0, 44, 44, 44, 0, 40, 40, 40, 0, 65, 65, 65, 7, 88, 88, 88, 89, 89, 89, 89, 100, 89, 89, 89, 88, 64, 64, 64, 4, 0, 0, 0, 0, 20, 20, 20, 0, 86, 86, 86, 124, 89, 89, 89, 254, 89, 89, 89, 254, 81, 81, 81, 98, 36, 36, 36, 0, 81, 81, 81, 77, 89, 89, 89, 234, 88, 88, 88, 89, 79, 79, 79, 28, 35, 35, 35, 0, 79, 79, 79, 35, 89, 89, 89, 100, 89, 89, 89, 100, 85, 85, 85, 47, 20, 20, 20, 0, 44, 44, 44, 0, 89, 89, 89, 224, 89, 89, 89, 254, 89, 89, 89, 254, 84, 84, 84, 32, 44, 44, 44, 0, 89, 89, 89, 232, 89, 89, 89, 254, 89, 89, 89, 100, 89, 89, 89, 88, 45, 45, 45, 0, 86, 86, 86, 10, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 85, 44, 44, 44, 0, 45, 45, 45, 0, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 254, 79, 79, 79, 28, 44, 44, 44, 0, 88, 88, 88, 233, 89, 89, 89, 254, 89, 89, 89, 100, 89, 89, 89, 88, 45, 45, 45, 0, 85, 85, 85, 9, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 86, 44, 44, 44, 0, 21, 21, 21, 0, 86, 86, 86, 131, 89, 89, 89, 254, 89, 89, 89, 254, 74, 74, 74, 96, 33, 33, 33, 0, 84, 84, 84, 77, 89, 89, 89, 234, 88, 88, 88, 89, 79, 79, 79, 28, 40, 40, 40, 0, 87, 87, 87, 34, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 48, 23, 23, 23, 0, 0, 0, 0, 0, 63, 63, 63, 15, 89, 89, 89, 232, 89, 89, 89, 254, 89, 89, 89, 231, 64, 64, 64, 22, 38, 38, 38, 0, 44, 44, 44, 0, 44, 44, 44, 0, 40, 40, 40, 0, 64, 64, 64, 7, 88, 88, 88, 89, 89, 89, 89, 100, 89, 89, 89, 89, 64, 64, 64, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 0, 66, 66, 66, 61, 89, 89, 89, 248, 89, 89, 89, 254, 89, 89, 89, 232, 81, 81, 81, 97, 84, 84, 84, 32, 86, 86, 86, 10, 87, 87, 87, 34, 89, 89, 89, 89, 89, 89, 89, 100, 89, 89, 89, 96, 45, 45, 45, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 78, 78, 78, 60, 89, 89, 89, 224, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 253, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 85, 49, 49, 49, 21, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 0, 46, 46, 46, 5, 83, 83, 83, 107, 88, 88, 88, 201, 89, 89, 89, 238, 89, 89, 89, 91, 89, 89, 89, 75, 82, 82, 82, 39, 43, 43, 43, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=107] -flags = 0 -flags = 0 -image = SubResource( 205 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=108] +[sub_resource type="StyleBoxFlat" id="108"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.711914, 0.579886, 0.42548, 1 ) -border_color = Color( 0.593262, 0.483238, 0.354567, 1 ) +bg_color = Color(0.711914, 0.579886, 0.42548, 1) +border_color = Color(0.593262, 0.483238, 0.354567, 1) -[sub_resource type="StyleBoxLine" id=109] -color = Color( 0, 0, 0, 0.1 ) +[sub_resource type="StyleBoxLine" id="109"] +color = Color(0, 0, 0, 0.1) grow_begin = 7.0 -[sub_resource type="StyleBoxLine" id=110] -color = Color( 0, 0, 0, 0.1 ) +[sub_resource type="StyleBoxLine" id="110"] +color = Color(0, 0, 0, 0.1) grow_end = 7.0 -[sub_resource type="StyleBoxLine" id=111] -color = Color( 0, 0, 0, 0.1 ) +[sub_resource type="StyleBoxLine" id="111"] +color = Color(0, 0, 0, 0.1) grow_begin = 7.0 grow_end = 7.0 -[sub_resource type="Image" id=206] -data = { -"data": PoolByteArray( 86, 86, 86, 27, 88, 88, 88, 89, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 88, 86, 86, 86, 27, 89, 89, 89, 88, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 88, 89, 89, 89, 100, 89, 89, 89, 100, 67, 67, 67, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 67, 67, 67, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 67, 67, 67, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 67, 67, 67, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 88, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 88, 86, 86, 86, 27, 88, 88, 88, 89, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 89, 86, 86, 86, 27 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=113] -flags = 0 -flags = 0 -image = SubResource( 206 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=114] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 113 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 4.0 -margin_right = 4.0 -margin_top = 4.0 -margin_bottom = 4.0 - -[sub_resource type="Image" id=207] -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, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 70, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 70, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 70, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 70, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=116] -flags = 0 -flags = 0 -image = SubResource( 207 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=117] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 1.0 -content_margin_bottom = 1.0 -texture = SubResource( 116 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxFlat" id=118] +[sub_resource type="StyleBoxFlat" id="118"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.593262, 0.483238, 0.354567, 1 ) +bg_color = Color(0.593262, 0.483238, 0.354567, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.593262, 0.483238, 0.354567, 1 ) +border_color = Color(0.593262, 0.483238, 0.354567, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.1 ) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 4 -[sub_resource type="StyleBoxEmpty" id=119] +[sub_resource type="StyleBoxEmpty" id="119"] -[sub_resource type="StyleBoxFlat" id=1] -bg_color = Color( 0.54, 0.43668, 0.3186, 1 ) +[sub_resource type="StyleBoxFlat" id="1"] +bg_color = Color(0.54, 0.43668, 0.3186, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="Image" id=208] -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, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 16, 88, 88, 88, 152, 88, 88, 88, 151, 65, 65, 65, 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, 65, 65, 65, 16, 88, 88, 88, 164, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 164, 65, 65, 65, 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, 66, 66, 66, 16, 89, 89, 89, 163, 89, 89, 89, 199, 88, 88, 88, 164, 88, 88, 88, 164, 89, 89, 89, 199, 89, 89, 89, 163, 66, 66, 66, 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, 65, 65, 65, 16, 88, 88, 88, 163, 89, 89, 89, 199, 89, 89, 89, 164, 66, 66, 66, 17, 66, 66, 66, 17, 89, 89, 89, 164, 89, 89, 89, 199, 88, 88, 88, 163, 65, 65, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 156, 89, 89, 89, 199, 89, 89, 89, 165, 68, 68, 68, 17, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 17, 89, 89, 89, 165, 89, 89, 89, 199, 89, 89, 89, 156, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 154, 89, 89, 89, 159, 66, 66, 66, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 18, 89, 89, 89, 159, 89, 89, 89, 154, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 150, 88, 88, 88, 152, 65, 65, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 16, 89, 89, 89, 153, 89, 89, 89, 151, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 156, 89, 89, 89, 199, 88, 88, 88, 164, 65, 65, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 16, 88, 88, 88, 164, 89, 89, 89, 199, 89, 89, 89, 156, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 65, 17, 89, 89, 89, 164, 89, 89, 89, 199, 89, 89, 89, 163, 66, 66, 66, 16, 66, 66, 66, 16, 89, 89, 89, 163, 89, 89, 89, 199, 88, 88, 88, 164, 65, 65, 65, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 68, 68, 17, 89, 89, 89, 165, 89, 89, 89, 199, 88, 88, 88, 163, 88, 88, 88, 163, 89, 89, 89, 199, 89, 89, 89, 165, 67, 67, 67, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 17, 89, 89, 89, 165, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 165, 66, 66, 66, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 18, 88, 88, 88, 153, 88, 88, 88, 153, 66, 66, 66, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 44, 44, 44, 0, 0, 0, 0, 0, 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=121] -flags = 0 -flags = 0 -image = SubResource( 208 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=209] -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, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 88, 88, 88, 84, 89, 89, 89, 156, 89, 89, 89, 189, 89, 89, 89, 189, 89, 89, 89, 156, 88, 88, 88, 84, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 21, 89, 89, 89, 160, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 160, 65, 65, 65, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 89, 89, 89, 160, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 182, 55, 55, 55, 46, 86, 86, 86, 57, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 160, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 83, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 182, 54, 54, 54, 34, 0, 0, 0, 0, 54, 54, 54, 45, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 83, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 154, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 182, 86, 86, 86, 34, 21, 21, 21, 0, 22, 22, 22, 33, 89, 89, 89, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 154, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 188, 89, 89, 89, 199, 89, 89, 89, 199, 86, 86, 86, 46, 21, 21, 21, 0, 22, 22, 22, 32, 89, 89, 89, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 188, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 188, 89, 89, 89, 199, 89, 89, 89, 199, 54, 54, 54, 45, 0, 0, 0, 0, 22, 22, 22, 34, 89, 89, 89, 182, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 188, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 154, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 181, 22, 22, 22, 33, 11, 11, 11, 0, 86, 86, 86, 34, 89, 89, 89, 182, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 154, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 87, 87, 87, 83, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 181, 22, 22, 22, 32, 21, 21, 21, 0, 86, 86, 86, 46, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 87, 87, 87, 83, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 5, 89, 89, 89, 161, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 181, 56, 56, 56, 45, 87, 87, 87, 57, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 161, 67, 67, 67, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 21, 89, 89, 89, 161, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 161, 67, 67, 67, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 88, 88, 88, 84, 89, 89, 89, 156, 89, 89, 89, 189, 89, 89, 89, 189, 89, 89, 89, 156, 88, 88, 88, 84, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=123] -flags = 0 -flags = 0 -image = SubResource( 209 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=210] -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, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 88, 88, 88, 108, 89, 89, 89, 200, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 200, 88, 88, 88, 108, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 27, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 67, 67, 67, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 86, 86, 86, 59, 88, 88, 88, 73, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 107, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 78, 78, 78, 44, 43, 43, 43, 0, 86, 86, 86, 58, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 107, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 198, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 234, 70, 70, 70, 44, 26, 26, 26, 0, 86, 86, 86, 43, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 198, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 90, 90, 90, 255, 79, 79, 79, 59, 16, 16, 16, 0, 22, 22, 22, 42, 90, 90, 90, 232, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 90, 90, 90, 255, 86, 86, 86, 58, 43, 43, 43, 0, 86, 86, 86, 43, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 198, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 86, 86, 86, 42, 29, 29, 29, 0, 69, 69, 69, 44, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 198, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 88, 88, 88, 107, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 232, 22, 22, 22, 42, 16, 16, 16, 0, 79, 79, 79, 59, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 107, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 7, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 232, 55, 55, 55, 58, 87, 87, 87, 74, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 66, 66, 66, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 27, 89, 89, 89, 207, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 66, 66, 66, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 88, 88, 88, 108, 89, 89, 89, 200, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 200, 88, 88, 88, 108, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=125] -flags = 0 -flags = 0 -image = SubResource( 210 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=211] -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, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 88, 88, 88, 84, 89, 89, 89, 156, 89, 89, 89, 189, 89, 89, 89, 189, 89, 89, 89, 156, 88, 88, 88, 84, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 21, 89, 89, 89, 160, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 160, 65, 65, 65, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 89, 89, 89, 160, 89, 89, 89, 199, 89, 89, 89, 199, 86, 86, 86, 57, 55, 55, 55, 46, 89, 89, 89, 182, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 160, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 83, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 54, 54, 54, 45, 0, 0, 0, 0, 54, 54, 54, 34, 89, 89, 89, 182, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 83, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 154, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 181, 22, 22, 22, 33, 21, 21, 21, 0, 86, 86, 86, 34, 89, 89, 89, 182, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 154, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 188, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 181, 22, 22, 22, 32, 21, 21, 21, 0, 86, 86, 86, 46, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 188, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 0, 89, 89, 89, 188, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 182, 22, 22, 22, 33, 0, 0, 0, 0, 54, 54, 54, 45, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 188, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 154, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 182, 86, 86, 86, 34, 11, 11, 11, 0, 22, 22, 22, 33, 89, 89, 89, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 154, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 87, 87, 87, 83, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 86, 86, 86, 46, 21, 21, 21, 0, 22, 22, 22, 32, 89, 89, 89, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 87, 87, 87, 83, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 5, 89, 89, 89, 161, 89, 89, 89, 199, 89, 89, 89, 199, 87, 87, 87, 57, 56, 56, 56, 45, 89, 89, 89, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 161, 67, 67, 67, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 21, 89, 89, 89, 161, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 161, 67, 67, 67, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 5, 88, 88, 88, 84, 89, 89, 89, 156, 89, 89, 89, 189, 89, 89, 89, 189, 89, 89, 89, 156, 88, 88, 88, 84, 61, 61, 61, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=127] -flags = 0 -flags = 0 -image = SubResource( 211 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=212] -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, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 88, 88, 88, 108, 89, 89, 89, 200, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 200, 88, 88, 88, 108, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 67, 27, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 67, 67, 67, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 73, 86, 86, 86, 59, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 22, 0, 89, 89, 89, 107, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 86, 86, 86, 58, 43, 43, 43, 0, 78, 78, 78, 44, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 107, 22, 22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 198, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 86, 86, 86, 42, 26, 26, 26, 0, 70, 70, 70, 44, 90, 90, 90, 234, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 198, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 232, 22, 22, 22, 42, 16, 16, 16, 0, 79, 79, 79, 59, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 241, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 86, 86, 86, 43, 43, 43, 43, 0, 86, 86, 86, 58, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 241, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 198, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 233, 69, 69, 69, 44, 29, 29, 29, 0, 86, 86, 86, 43, 90, 90, 90, 233, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 198, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 88, 88, 88, 107, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 79, 79, 79, 59, 16, 16, 16, 0, 22, 22, 22, 42, 90, 90, 90, 232, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 107, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 7, 89, 89, 89, 206, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 74, 55, 55, 55, 58, 90, 90, 90, 232, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 66, 66, 66, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 27, 89, 89, 89, 207, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 206, 66, 66, 66, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 6, 88, 88, 88, 108, 89, 89, 89, 200, 90, 90, 90, 242, 90, 90, 90, 242, 89, 89, 89, 200, 88, 88, 88, 108, 62, 62, 62, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 44, 44, 44, 0, 45, 45, 45, 0, 45, 45, 45, 0, 44, 44, 44, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=129] -flags = 0 -flags = 0 -image = SubResource( 212 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=213] -data = { -"data": PoolByteArray( 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0, 32, 32, 32, 0, 63, 63, 63, 88, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 31, 31, 31, 0, 63, 63, 63, 89, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0, 0, 0, 0, 0, 13, 13, 13, 0, 31, 31, 31, 0, 31, 31, 31, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 31, 31, 31, 0, 31, 31, 31, 0, 13, 13, 13, 0, 0, 0, 0, 0, 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0, 32, 32, 32, 0, 63, 63, 63, 88, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 31, 31, 31, 0, 63, 63, 63, 89, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0, 0, 0, 0, 0, 13, 13, 13, 0, 31, 31, 31, 0, 31, 31, 31, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 31, 31, 31, 0, 31, 31, 31, 0, 13, 13, 13, 0, 0, 0, 0, 0, 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0, 32, 32, 32, 0, 63, 63, 63, 88, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 31, 31, 31, 0, 63, 63, 63, 89, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 88, 32, 32, 32, 0, 13, 13, 13, 0, 54, 54, 54, 28, 63, 63, 63, 89, 63, 63, 63, 89, 54, 54, 54, 28, 13, 13, 13, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 6 -} - -[sub_resource type="ImageTexture" id=131] -flags = 0 -flags = 0 -image = SubResource( 213 ) -size = Vector2( 6, 16 ) - -[sub_resource type="Image" id=214] -data = { -"data": PoolByteArray( 22, 22, 22, 0, 87, 87, 87, 72, 90, 90, 90, 227, 90, 90, 90, 227, 87, 87, 87, 72, 22, 22, 22, 0, 45, 45, 45, 0, 90, 90, 90, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 224, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 226, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 44, 44, 44, 0, 21, 21, 21, 0, 86, 86, 86, 72, 90, 90, 90, 227, 90, 90, 90, 227, 86, 86, 86, 72, 21, 21, 21, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 22, 22, 22, 0, 87, 87, 87, 72, 90, 90, 90, 227, 90, 90, 90, 227, 87, 87, 87, 72, 22, 22, 22, 0, 45, 45, 45, 0, 90, 90, 90, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 224, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 226, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 44, 44, 44, 0, 21, 21, 21, 0, 86, 86, 86, 72, 90, 90, 90, 227, 90, 90, 90, 227, 86, 86, 86, 72, 21, 21, 21, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 0, 45, 45, 45, 0, 45, 45, 45, 0, 21, 21, 21, 0, 0, 0, 0, 0, 22, 22, 22, 0, 87, 87, 87, 72, 90, 90, 90, 227, 90, 90, 90, 227, 87, 87, 87, 72, 22, 22, 22, 0, 45, 45, 45, 0, 90, 90, 90, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 224, 45, 45, 45, 0, 45, 45, 45, 0, 90, 90, 90, 226, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 44, 44, 44, 0, 21, 21, 21, 0, 86, 86, 86, 72, 90, 90, 90, 227, 90, 90, 90, 227, 86, 86, 86, 72, 21, 21, 21, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 6 -} - -[sub_resource type="ImageTexture" id=133] -flags = 0 -flags = 0 -image = SubResource( 214 ) -size = Vector2( 6, 16 ) +[sub_resource type="StyleBoxFlat" id="138"] +bg_color = Color(1, 0.898039, 0.501961, 1) +border_width_left = 5 +border_width_top = 10 +border_width_right = 5 +border_width_bottom = 5 +border_color = Color(1, 0.898039, 0.501961, 1) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 +anti_aliasing = false -[sub_resource type="StyleBoxFlat" id=134] -content_margin_left = 5.0 -content_margin_right = 5.0 +[sub_resource type="StyleBoxFlat" id="135"] +content_margin_left = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0.711914, 0.579886, 0.42548, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.474609, 0.386591, 0.283653, 1 ) +border_color = Color(0.593262, 0.483238, 0.354567, 1) +expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=135] +[sub_resource type="StyleBoxFlat" id="136"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.711914, 0.579886, 0.42548, 1 ) +bg_color = Color(0.954297, 0.795863, 0.610576, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.593262, 0.483238, 0.354567, 1 ) +border_color = Color(0.964453, 0.841227, 0.697115, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=136] +[sub_resource type="StyleBoxFlat" id="137"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.954297, 0.795863, 0.610576, 1 ) +bg_color = Color(0.949219, 0.773181, 0.567307, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.964453, 0.841227, 0.697115, 1 ) +border_color = Color(0.474609, 0.386591, 0.283653, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=137] -content_margin_left = 10.0 -content_margin_right = 10.0 +[sub_resource type="StyleBoxFlat" id="134"] +content_margin_left = 5.0 content_margin_top = 5.0 +content_margin_right = 5.0 content_margin_bottom = 5.0 -bg_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0.949219, 0.773181, 0.567307, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.474609, 0.386591, 0.283653, 1 ) -expand_margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=138] -bg_color = Color( 1, 0.898039, 0.501961, 1 ) -border_width_left = 5 -border_width_top = 10 -border_width_right = 5 -border_width_bottom = 5 -border_color = Color( 1, 0.898039, 0.501961, 1 ) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 -anti_aliasing = false - -[sub_resource type="Image" id=215] -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, 30, 30, 30, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 61, 61, 61, 66, 61, 61, 61, 73, 47, 47, 47, 8, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 8, 61, 61, 61, 73, 61, 61, 61, 65, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 61, 61, 61, 73, 63, 63, 63, 100, 63, 63, 63, 82, 47, 47, 47, 8, 47, 47, 47, 8, 63, 63, 63, 82, 63, 63, 63, 100, 61, 61, 61, 73, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 8, 62, 62, 62, 83, 63, 63, 63, 100, 63, 63, 63, 82, 63, 63, 63, 82, 63, 63, 63, 100, 62, 62, 62, 83, 45, 45, 45, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 9, 62, 62, 62, 83, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 83, 45, 45, 45, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 9, 63, 63, 63, 77, 62, 62, 62, 76, 45, 45, 45, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=140] -flags = 0 -flags = 0 -image = SubResource( 215 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=216] -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, 30, 30, 30, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 61, 61, 61, 66, 61, 61, 61, 73, 47, 47, 47, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 61, 61, 61, 73, 63, 63, 63, 100, 63, 63, 63, 82, 47, 47, 47, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 8, 62, 62, 62, 83, 63, 63, 63, 100, 63, 63, 63, 82, 43, 43, 43, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 9, 62, 62, 62, 83, 63, 63, 63, 100, 61, 61, 61, 76, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 8, 63, 63, 63, 82, 63, 63, 63, 100, 63, 63, 63, 76, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 8, 63, 63, 63, 82, 63, 63, 63, 100, 62, 62, 62, 83, 46, 46, 46, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 62, 62, 62, 72, 63, 63, 63, 100, 62, 62, 62, 83, 45, 45, 45, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 61, 61, 61, 66, 61, 61, 61, 73, 45, 45, 45, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=142] -flags = 0 -flags = 0 -image = SubResource( 216 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=217] -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, 62, 62, 62, 17, 62, 62, 62, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 17, 62, 62, 62, 49, 62, 62, 62, 49, 60, 60, 60, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 17, 62, 62, 62, 49, 62, 62, 62, 49, 60, 60, 60, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 17, 62, 62, 62, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=144] -flags = 0 -flags = 0 -image = SubResource( 217 ) -size = Vector2( 8, 8 ) - -[sub_resource type="Image" id=218] -data = { -"data": PoolByteArray( 56, 56, 56, 35, 59, 59, 59, 38, 46, 46, 46, 4, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50, 59, 59, 59, 38, 61, 61, 61, 50, 62, 62, 62, 41, 47, 47, 47, 4, 0, 0, 0, 0, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50, 46, 46, 46, 4, 61, 61, 61, 41, 61, 61, 61, 50, 62, 62, 62, 41, 41, 41, 41, 4, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50, 0, 0, 0, 0, 45, 45, 45, 4, 61, 61, 61, 41, 61, 61, 61, 50, 60, 60, 60, 38, 60, 60, 60, 0, 61, 61, 61, 50, 61, 61, 61, 50, 0, 0, 0, 0, 47, 47, 47, 4, 62, 62, 62, 41, 61, 61, 61, 50, 59, 59, 59, 38, 59, 59, 59, 0, 61, 61, 61, 50, 61, 61, 61, 50, 47, 47, 47, 4, 62, 62, 62, 41, 61, 61, 61, 50, 61, 61, 61, 41, 46, 46, 46, 4, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50, 60, 60, 60, 38, 61, 61, 61, 50, 61, 61, 61, 41, 45, 45, 45, 4, 0, 0, 0, 0, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50, 56, 56, 56, 35, 59, 59, 59, 38, 44, 44, 44, 4, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 61, 61, 61, 50, 61, 61, 61, 50 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=146] -flags = 0 -flags = 0 -image = SubResource( 218 ) -size = Vector2( 8, 8 ) +border_width_bottom = 1 +border_color = Color(0.474609, 0.386591, 0.283653, 1) -[sub_resource type="StyleBoxFlat" id=147] +[sub_resource type="StyleBoxFlat" id="147"] content_margin_left = 1.0 -content_margin_right = 1.0 content_margin_top = 1.0 +content_margin_right = 1.0 content_margin_bottom = 1.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 1 ) -shadow_color = Color( 0, 0, 0, 0.1 ) +border_color = Color(0, 0, 0, 1) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 4 -[sub_resource type="StyleBoxFlat" id=98] -bg_color = Color( 0.709804, 0.517647, 0.188235, 1 ) - -[sub_resource type="Image" id=219] -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, 0, 0, 0, 0, 30, 30, 30, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 62, 62, 62, 98, 62, 62, 62, 109, 46, 46, 46, 12, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 12, 62, 62, 62, 109, 62, 62, 62, 98, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 63, 63, 63, 109, 64, 64, 64, 150, 64, 64, 64, 123, 47, 47, 47, 12, 47, 47, 47, 12, 64, 64, 64, 123, 64, 64, 64, 150, 63, 63, 63, 109, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 13, 64, 64, 64, 124, 64, 64, 64, 150, 64, 64, 64, 123, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 124, 46, 46, 46, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 13, 64, 64, 64, 124, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 124, 49, 49, 49, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 13, 64, 64, 64, 115, 64, 64, 64, 115, 48, 48, 48, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 32, 32, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 14, -"mipmaps": false, -"width": 14 -} +[sub_resource type="StyleBoxFlat" id="98"] +bg_color = Color(0.709804, 0.517647, 0.188235, 1) -[sub_resource type="ImageTexture" id=149] -flags = 0 -flags = 0 -image = SubResource( 219 ) -size = Vector2( 14, 14 ) - -[sub_resource type="Image" id=220] -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, 31, 31, 31, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 12, 63, 63, 63, 115, 63, 63, 63, 114, 46, 46, 46, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 12, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 123, 47, 47, 47, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 45, 45, 12, 64, 64, 64, 123, 64, 64, 64, 150, 63, 63, 63, 124, 63, 63, 63, 124, 64, 64, 64, 150, 64, 64, 64, 123, 45, 45, 45, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 63, 63, 63, 114, 64, 64, 64, 150, 64, 64, 64, 124, 48, 48, 48, 13, 48, 48, 48, 13, 64, 64, 64, 124, 64, 64, 64, 150, 63, 63, 63, 114, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 62, 62, 62, 105, 63, 63, 63, 115, 48, 48, 48, 13, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 13, 64, 64, 64, 115, 62, 62, 62, 105, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 0, 62, 62, 62, 105, 63, 63, 63, 114, 46, 46, 46, 12, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 12, 63, 63, 63, 115, 62, 62, 62, 105, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 31, 31, 0, 63, 63, 63, 114, 64, 64, 64, 150, 64, 64, 64, 123, 47, 47, 47, 12, 47, 47, 47, 12, 64, 64, 64, 123, 64, 64, 64, 150, 63, 63, 63, 114, 31, 31, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 13, 64, 64, 64, 124, 64, 64, 64, 150, 64, 64, 64, 123, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 124, 46, 46, 46, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 13, 64, 64, 64, 124, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 124, 49, 49, 49, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 13, 64, 64, 64, 115, 64, 64, 64, 115, 48, 48, 48, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 0, 32, 32, 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 ), -"format": "RGBA8", -"height": 14, -"mipmaps": false, -"width": 14 -} - -[sub_resource type="ImageTexture" id=151] -flags = 0 -flags = 0 -image = SubResource( 220 ) -size = Vector2( 14, 14 ) - -[sub_resource type="StyleBoxFlat" id=152] +[sub_resource type="StyleBoxFlat" id="152"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.711914, 0.579886, 0.42548, 1 ) -border_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0.711914, 0.579886, 0.42548, 1) +border_color = Color(0.949219, 0.773181, 0.567307, 1) -[sub_resource type="StyleBoxFlat" id=153] +[sub_resource type="StyleBoxFlat" id="153"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0.949219, 0.773181, 0.567307, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.711914, 0.579886, 0.42548, 1 ) +border_color = Color(0.711914, 0.579886, 0.42548, 1) -[sub_resource type="StyleBoxEmpty" id=154] +[sub_resource type="StyleBoxEmpty" id="154"] -[sub_resource type="StyleBoxEmpty" id=155] +[sub_resource type="StyleBoxEmpty" id="155"] -[sub_resource type="StyleBoxFlat" id=156] +[sub_resource type="StyleBoxFlat" id="156"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0, 0, 0, 0.08 ) -border_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0, 0, 0, 0.08) +border_color = Color(0.949219, 0.773181, 0.567307, 1) -[sub_resource type="StyleBoxFlat" id=157] +[sub_resource type="StyleBoxFlat" id="157"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.474609, 0.386591, 0.283653, 1 ) -border_color = Color( 0.949219, 0.773181, 0.567307, 1 ) - -[sub_resource type="StyleBoxTexture" id=158] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 66 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxTexture" id=159] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 69 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 +bg_color = Color(0.474609, 0.386591, 0.283653, 1) +border_color = Color(0.949219, 0.773181, 0.567307, 1) -[sub_resource type="StyleBoxTexture" id=160] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 72 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxTexture" id=161] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 75 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=162] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 75 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=163] -color = Color( 0, 0, 0, 0.1 ) +[sub_resource type="StyleBoxLine" id="163"] +color = Color(0, 0, 0, 0.1) grow_begin = 0.0 grow_end = 0.0 vertical = true -[sub_resource type="StyleBoxFlat" id=164] +[sub_resource type="StyleBoxFlat" id="164"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.713726, 0.580392, 0.423529, 1 ) +bg_color = Color(0.713726, 0.580392, 0.423529, 1) -[sub_resource type="StyleBoxFlat" id=165] +[sub_resource type="StyleBoxFlat" id="165"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.47451, 0.388235, 0.282353, 1 ) - -[sub_resource type="Image" id=221] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 29, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 29, 29, 29, 0, 0, 0, 0, 0, 29, 29, 29, 0, 60, 60, 60, 64, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 60, 60, 60, 64, 29, 29, 29, 0, 29, 29, 29, 0, 60, 60, 60, 64, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 60, 60, 60, 64, 29, 29, 29, 0, 0, 0, 0, 0, 29, 29, 29, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 32, 32, 32, 0, 29, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 8, -"mipmaps": false, -"width": 64 -} - -[sub_resource type="ImageTexture" id=167] -flags = 0 -flags = 0 -image = SubResource( 221 ) -size = Vector2( 64, 8 ) +bg_color = Color(0.47451, 0.388235, 0.282353, 1) -[sub_resource type="Image" id=222] -data = { -"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=169] -flags = 0 -flags = 0 -image = SubResource( 222 ) -size = Vector2( 8, 8 ) - -[sub_resource type="StyleBoxTexture" id=170] -texture = SubResource( 169 ) -region_rect = Rect2( 0, 0, 8, 8 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=171] +[sub_resource type="StyleBoxFlat" id="171"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +bg_color = Color(0.949219, 0.773181, 0.567307, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.949219, 0.773181, 0.567307, 1 ) +border_color = Color(0.949219, 0.773181, 0.567307, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.1 ) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 4 [resource] resource_name = "Caramel" -default_font = ExtResource( 1 ) +default_font = ExtResource("3_vvu0m") +default_font_size = 16 BoxContainer/constants/separation = 4 -Button/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -Button/colors/font_color_disabled = Color( 0, 0, 0, 0.3 ) -Button/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 ) -Button/colors/font_color_pressed = Color( 1, 0.819608, 0.00392157, 1 ) -Button/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 ) -Button/colors/icon_color_pressed = Color( 3.5, 2.86863, 0.0137255, 1 ) +Button/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +Button/colors/font_color_disabled = Color(0, 0, 0, 0.3) +Button/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1) +Button/colors/font_color_pressed = Color(1, 0.819608, 0.00392157, 1) +Button/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1) +Button/colors/icon_color_pressed = Color(3.5, 2.86863, 0.0137255, 1) Button/constants/hseparation = 2 -Button/fonts/font = ExtResource( 1 ) -Button/styles/disabled = SubResource( 2 ) -Button/styles/focus = SubResource( 3 ) -Button/styles/hover = SubResource( 4 ) -Button/styles/normal = SubResource( 5 ) -Button/styles/pressed = SubResource( 6 ) -CheckBox/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -CheckBox/colors/font_color_disabled = Color( 0, 0, 0, 0.3 ) -CheckBox/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 ) -CheckBox/colors/font_color_hover_pressed = Color( 0, 0, 0, 1 ) -CheckBox/colors/font_color_pressed = Color( 1, 0.819608, 0.00392157, 1 ) -CheckBox/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 ) +Button/styles/disabled = SubResource("23") +Button/styles/focus = SubResource("23") +Button/styles/hover = SubResource("23") +Button/styles/normal = SubResource("23") +Button/styles/pressed = SubResource("23") +CheckBox/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +CheckBox/colors/font_color_disabled = Color(0, 0, 0, 0.3) +CheckBox/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1) +CheckBox/colors/font_color_hover_pressed = Color(0, 0, 0, 1) +CheckBox/colors/font_color_pressed = Color(1, 0.819608, 0.00392157, 1) +CheckBox/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1) CheckBox/constants/check_vadjust = 0 CheckBox/constants/hseparation = 4 -CheckBox/fonts/font = ExtResource( 1 ) -CheckBox/icons/checked = SubResource( 8 ) -CheckBox/icons/radio_checked = SubResource( 10 ) -CheckBox/icons/radio_unchecked = SubResource( 12 ) -CheckBox/icons/unchecked = SubResource( 14 ) -CheckBox/styles/disabled = SubResource( 15 ) +CheckBox/styles/disabled = SubResource("15") CheckBox/styles/focus = null -CheckBox/styles/hover = SubResource( 15 ) -CheckBox/styles/hover_pressed = SubResource( 16 ) -CheckBox/styles/normal = SubResource( 15 ) -CheckBox/styles/pressed = SubResource( 15 ) -CheckButton/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -CheckButton/colors/font_color_disabled = Color( 0, 0, 0, 0.3 ) -CheckButton/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 ) -CheckButton/colors/font_color_pressed = Color( 1, 0.819608, 0.00392157, 1 ) -CheckButton/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 ) +CheckBox/styles/hover = SubResource("15") +CheckBox/styles/hover_pressed = SubResource("16") +CheckBox/styles/normal = SubResource("15") +CheckBox/styles/pressed = SubResource("15") +CheckButton/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +CheckButton/colors/font_color_disabled = Color(0, 0, 0, 0.3) +CheckButton/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1) +CheckButton/colors/font_color_pressed = Color(1, 0.819608, 0.00392157, 1) +CheckButton/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1) CheckButton/constants/check_vadjust = 0 CheckButton/constants/hseparation = 4 -CheckButton/icons/off = SubResource( 18 ) -CheckButton/icons/off_disabled = SubResource( 20 ) -CheckButton/icons/on = SubResource( 22 ) -CheckButton/icons/on_disabled = SubResource( 20 ) -CheckButton/styles/disabled = SubResource( 23 ) -CheckButton/styles/hover = SubResource( 23 ) -CheckButton/styles/normal = SubResource( 23 ) -CheckButton/styles/pressed = SubResource( 23 ) -CollapsibleContainer/icons/arrow_normal = ExtResource( 5 ) +CheckButton/styles/disabled = SubResource("23") +CheckButton/styles/hover = SubResource("23") +CheckButton/styles/normal = SubResource("23") +CheckButton/styles/pressed = SubResource("23") +CollapsibleContainer/icons/arrow_normal = ExtResource("5") ColorPicker/constants/h_width = 30 ColorPicker/constants/label_width = 10 ColorPicker/constants/margin = 8 ColorPicker/constants/sv_height = 256 ColorPicker/constants/sv_width = 256 -ColorPicker/icons/add_preset = SubResource( 25 ) -ColorPicker/icons/color_hue = null -ColorPicker/icons/color_sample = null -ColorPicker/icons/overbright_indicator = SubResource( 27 ) -ColorPicker/icons/preset_bg = SubResource( 29 ) -ColorPicker/icons/screen_picker = SubResource( 31 ) -ColorPickerButton/colors/font_color = Color( 1, 1, 1, 1 ) -ColorPickerButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.3 ) -ColorPickerButton/colors/font_color_hover = Color( 1, 1, 1, 1 ) -ColorPickerButton/colors/font_color_pressed = Color( 0.8, 0.8, 0.8, 1 ) +ColorPickerButton/colors/font_color = Color(1, 1, 1, 1) +ColorPickerButton/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.3) +ColorPickerButton/colors/font_color_hover = Color(1, 1, 1, 1) +ColorPickerButton/colors/font_color_pressed = Color(0.8, 0.8, 0.8, 1) ColorPickerButton/constants/hseparation = 2 -ColorPickerButton/fonts/font = ExtResource( 1 ) -ColorPickerButton/icons/bg = SubResource( 29 ) ColorPickerButton/styles/disabled = null ColorPickerButton/styles/focus = null ColorPickerButton/styles/hover = null -ColorPickerButton/styles/normal = SubResource( 32 ) +ColorPickerButton/styles/normal = SubResource("32") ColorPickerButton/styles/pressed = null Dialogs/constants/button_margin = 32 Dialogs/constants/margin = 8 -FileDialog/colors/files_disabled = Color( 0, 0, 0, 0.3 ) -FileDialog/colors/folder_icon_modulate = Color( 1.975, 1.84873, 1.27775, 1 ) -FileDialog/icons/folder = SubResource( 34 ) -FileDialog/icons/parent_folder = SubResource( 36 ) -FileDialog/icons/reload = SubResource( 38 ) -FileDialog/icons/toggle_hidden = SubResource( 40 ) -GraphEdit/colors/activity = Color( 1, 0.819608, 0.00392157, 1 ) -GraphEdit/colors/grid_major = Color( 0, 0, 0, 0.15 ) -GraphEdit/colors/grid_minor = Color( 0, 0, 0, 0.07 ) -GraphEdit/colors/selection_fill = Color( 1, 0.819608, 0.00392157, 0.3 ) -GraphEdit/colors/selection_stroke = Color( 1, 0.819608, 0.00392157, 0.8 ) +FileDialog/colors/files_disabled = Color(0, 0, 0, 0.3) +FileDialog/colors/folder_icon_modulate = Color(1.975, 1.84873, 1.27775, 1) +GraphEdit/colors/activity = Color(1, 0.819608, 0.00392157, 1) +GraphEdit/colors/grid_major = Color(0, 0, 0, 0.15) +GraphEdit/colors/grid_minor = Color(0, 0, 0, 0.07) +GraphEdit/colors/selection_fill = Color(1, 0.819608, 0.00392157, 0.3) +GraphEdit/colors/selection_stroke = Color(1, 0.819608, 0.00392157, 0.8) GraphEdit/constants/bezier_len_neg = 160 GraphEdit/constants/bezier_len_pos = 80 -GraphEdit/icons/minus = SubResource( 42 ) -GraphEdit/icons/more = SubResource( 44 ) -GraphEdit/icons/reset = SubResource( 46 ) -GraphEdit/icons/snap = SubResource( 48 ) -GraphEdit/styles/bg = SubResource( 49 ) -GraphNode/colors/close_color = Color( 0, 0, 0, 0.7 ) -GraphNode/colors/resizer_color = Color( 0, 0, 0, 0.7 ) -GraphNode/colors/title_color = Color( 0, 0, 0, 1 ) +GraphEdit/styles/bg = SubResource("49") +GraphNode/colors/close_color = Color(0, 0, 0, 0.7) +GraphNode/colors/resizer_color = Color(0, 0, 0, 0.7) +GraphNode/colors/title_color = Color(0, 0, 0, 1) GraphNode/constants/close_h_offset = 20 GraphNode/constants/close_offset = 20 GraphNode/constants/port_offset = 14 GraphNode/constants/separation = 1 GraphNode/constants/title_h_offset = -16 GraphNode/constants/title_offset = 20 -GraphNode/icons/close = SubResource( 51 ) -GraphNode/icons/port = SubResource( 53 ) -GraphNode/icons/resizer = SubResource( 55 ) -GraphNode/styles/breakpoint = SubResource( 56 ) -GraphNode/styles/comment = SubResource( 57 ) -GraphNode/styles/commentfocus = SubResource( 58 ) -GraphNode/styles/frame = SubResource( 59 ) -GraphNode/styles/position = SubResource( 60 ) -GraphNode/styles/selectedframe = SubResource( 61 ) -GraphNode/styles/state_machine_frame = SubResource( 62 ) -GraphNode/styles/state_machine_selectedframe = SubResource( 63 ) +GraphNode/styles/breakpoint = SubResource("56") +GraphNode/styles/comment = SubResource("57") +GraphNode/styles/commentfocus = SubResource("58") +GraphNode/styles/frame = SubResource("59") +GraphNode/styles/position = SubResource("60") +GraphNode/styles/selectedframe = SubResource("61") +GraphNode/styles/state_machine_frame = SubResource("62") +GraphNode/styles/state_machine_selectedframe = SubResource("63") GridContainer/constants/hseparation = 4 GridContainer/constants/vseparation = 4 HBoxContainer/constants/separation = 4 -HScrollBar/icons/decrement = SubResource( 64 ) -HScrollBar/icons/decrement_highlight = SubResource( 64 ) -HScrollBar/icons/increment = SubResource( 64 ) -HScrollBar/icons/increment_highlight = SubResource( 64 ) -HScrollBar/styles/grabber = SubResource( 67 ) -HScrollBar/styles/grabber_highlight = SubResource( 70 ) -HScrollBar/styles/grabber_pressed = SubResource( 73 ) -HScrollBar/styles/scroll = SubResource( 76 ) -HScrollBar/styles/scroll_focus = SubResource( 77 ) HSeparator/constants/separation = 4 -HSeparator/styles/separator = SubResource( 78 ) -HSlider/icons/grabber = SubResource( 80 ) -HSlider/icons/grabber_disabled = null -HSlider/icons/grabber_highlight = SubResource( 82 ) -HSlider/icons/tick = null +HSeparator/styles/separator = SubResource("78") HSlider/styles/focus = null -HSlider/styles/grabber_area = SubResource( 83 ) +HSlider/styles/grabber_area = SubResource("83") HSlider/styles/grabber_disabled = null HSlider/styles/grabber_highlight = null -HSlider/styles/slider = SubResource( 84 ) +HSlider/styles/slider = SubResource("84") HSplitContainer/constants/autohide = 1 HSplitContainer/constants/separation = 8 -HSplitContainer/icons/grabber = SubResource( 86 ) -HSplitContainer/styles/bg = SubResource( 87 ) -Header/base_type = "Label" -Header/colors/font_color = Color( 0.18, 0.14433, 0.1062, 1 ) -Header/fonts/font = ExtResource( 2 ) -Icons/colors/modulate_color = Color( 0.2, 0.2, 0.2, 1 ) -ItemList/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -ItemList/colors/font_color_selected = Color( 0, 0, 0, 1 ) -ItemList/colors/guide_color = Color( 0, 0, 0, 0.05 ) +Header/base_type = &"Label" +Header/colors/font_color = Color(0.18, 0.14433, 0.1062, 1) +Icons/colors/modulate_color = Color(0.2, 0.2, 0.2, 1) +ItemList/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +ItemList/colors/font_color_selected = Color(0, 0, 0, 1) +ItemList/colors/guide_color = Color(0, 0, 0, 0.05) ItemList/constants/hseparation = 3 ItemList/constants/icon_margin = 4 ItemList/constants/line_separation = 3 ItemList/constants/vseparation = 3 -ItemList/fonts/font = ExtResource( 1 ) -ItemList/styles/bg = SubResource( 88 ) -ItemList/styles/bg_focus = SubResource( 89 ) -ItemList/styles/cursor = SubResource( 90 ) -ItemList/styles/cursor_unfocused = SubResource( 90 ) -ItemList/styles/selected = SubResource( 91 ) -ItemList/styles/selected_focus = SubResource( 92 ) -Label/colors/font_color = Color( 0.239216, 0.192157, 0.141176, 1 ) -Label/colors/font_color_shadow = Color( 0, 0, 0, 0 ) -Label/colors/font_outline_modulate = Color( 0, 0, 0, 1 ) +ItemList/styles/bg = SubResource("88") +ItemList/styles/bg_focus = SubResource("89") +ItemList/styles/cursor = SubResource("90") +ItemList/styles/cursor_unfocused = SubResource("90") +ItemList/styles/selected = SubResource("91") +ItemList/styles/selected_focus = SubResource("92") +Label/colors/font_color = Color(0.239216, 0.192157, 0.141176, 1) +Label/colors/font_color_shadow = Color(0, 0, 0, 0) +Label/colors/font_outline_modulate = Color(0, 0, 0, 1) Label/constants/line_spacing = 3 Label/constants/shadow_as_outline = 0 Label/constants/shadow_offset_x = 1 Label/constants/shadow_offset_y = 1 -Label/fonts/font = ExtResource( 1 ) -Label/styles/normal = SubResource( 93 ) -LineEdit/colors/clear_button_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -LineEdit/colors/clear_button_color_pressed = Color( 1, 0.819608, 0.00392157, 1 ) -LineEdit/colors/cursor_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -LineEdit/colors/font_color = Color( 0.24, 0.19, 0.14, 1 ) -LineEdit/colors/font_color_selected = Color( 0, 0, 0, 1 ) -LineEdit/colors/read_only = Color( 0, 0, 0, 0.3 ) -LineEdit/colors/selection_color = Color( 1, 0.819608, 0.00392157, 0.4 ) +Label/styles/normal = SubResource("93") +LineEdit/colors/clear_button_color = Color(0.237305, 0.193295, 0.141827, 1) +LineEdit/colors/clear_button_color_pressed = Color(1, 0.819608, 0.00392157, 1) +LineEdit/colors/cursor_color = Color(0.237305, 0.193295, 0.141827, 1) +LineEdit/colors/font_color = Color(0.24, 0.19, 0.14, 1) +LineEdit/colors/font_color_selected = Color(0, 0, 0, 1) +LineEdit/colors/read_only = Color(0, 0, 0, 0.3) +LineEdit/colors/selection_color = Color(1, 0.819608, 0.00392157, 0.4) LineEdit/constants/minimum_spaces = 12 -LineEdit/fonts/font = ExtResource( 1 ) -LineEdit/icons/clear = SubResource( 95 ) -LineEdit/styles/focus = SubResource( 3 ) -LineEdit/styles/normal = SubResource( 5 ) -LineEdit/styles/read_only = SubResource( 2 ) -LinkButton/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -LinkButton/styles/focus = SubResource( 93 ) +LineEdit/styles/focus = SubResource("3") +LineEdit/styles/normal = SubResource("5") +LineEdit/styles/read_only = SubResource("2") +LinkButton/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +LinkButton/styles/focus = SubResource("93") MarginContainer/constants/margin_bottom = 0 MarginContainer/constants/margin_left = 0 MarginContainer/constants/margin_right = 0 MarginContainer/constants/margin_top = 0 -MenuButton/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -MenuButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -MenuButton/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 ) -MenuButton/colors/font_color_pressed = Color( 1, 1, 1, 1 ) +MenuButton/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +MenuButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +MenuButton/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1) +MenuButton/colors/font_color_pressed = Color(1, 1, 1, 1) MenuButton/constants/hseparation = 3 -MenuButton/fonts/font = ExtResource( 1 ) -MenuButton/styles/disabled = SubResource( 23 ) -MenuButton/styles/focus = SubResource( 23 ) -MenuButton/styles/hover = SubResource( 23 ) -MenuButton/styles/normal = SubResource( 23 ) -MenuButton/styles/pressed = SubResource( 23 ) -Misc/colors/clear_color = Color( 0.866667, 0.701961, 0.439216, 1 ) -OptionButton/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -OptionButton/colors/font_color_disabled = Color( 0, 0, 0, 0.3 ) -OptionButton/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 ) -OptionButton/colors/font_color_pressed = Color( 1, 0.819608, 0.00392157, 1 ) -OptionButton/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 ) +MenuButton/styles/disabled = SubResource("23") +MenuButton/styles/focus = SubResource("23") +MenuButton/styles/hover = SubResource("23") +MenuButton/styles/normal = SubResource("23") +MenuButton/styles/pressed = SubResource("23") +Misc/colors/clear_color = Color(0.866667, 0.701961, 0.439216, 1) +OptionButton/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +OptionButton/colors/font_color_disabled = Color(0, 0, 0, 0.3) +OptionButton/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1) +OptionButton/colors/font_color_pressed = Color(1, 0.819608, 0.00392157, 1) +OptionButton/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1) OptionButton/constants/arrow_margin = 4 OptionButton/constants/hseparation = 4 OptionButton/constants/modulate_arrow = 1 -OptionButton/fonts/font = ExtResource( 1 ) -OptionButton/icons/arrow = SubResource( 97 ) -OptionButton/styles/disabled = SubResource( 2 ) -OptionButton/styles/focus = SubResource( 3 ) -OptionButton/styles/hover = SubResource( 4 ) -OptionButton/styles/normal = SubResource( 5 ) -OptionButton/styles/pressed = SubResource( 6 ) -Panel/styles/panel = SubResource( 99 ) -PanelContainer/styles/panel = SubResource( 100 ) -PopupDialog/styles/panel = SubResource( 101 ) -PopupMenu/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -PopupMenu/colors/font_color_accel = Color( 0, 0, 0, 0.3 ) -PopupMenu/colors/font_color_disabled = Color( 0, 0, 0, 0.3 ) -PopupMenu/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 ) +OptionButton/styles/disabled = SubResource("2") +OptionButton/styles/focus = SubResource("3") +OptionButton/styles/hover = SubResource("4") +OptionButton/styles/normal = SubResource("5") +OptionButton/styles/pressed = SubResource("6") +Panel/styles/panel = SubResource("99") +PanelContainer/styles/panel = SubResource("100") +Popup/styles/panel = SubResource("101") +PopupMenu/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +PopupMenu/colors/font_color_accel = Color(0, 0, 0, 0.3) +PopupMenu/colors/font_color_disabled = Color(0, 0, 0, 0.3) +PopupMenu/colors/font_color_hover = Color(0.142383, 0.115977, 0.085096, 1) PopupMenu/constants/hseparation = 4 PopupMenu/constants/vseparation = 5 -PopupMenu/fonts/font = ExtResource( 1 ) -PopupMenu/icons/checked = SubResource( 8 ) -PopupMenu/icons/radio_checked = SubResource( 10 ) -PopupMenu/icons/radio_unchecked = SubResource( 12 ) -PopupMenu/icons/submenu = SubResource( 103 ) -PopupMenu/icons/unchecked = SubResource( 14 ) -PopupMenu/icons/visibility_hidden = SubResource( 105 ) -PopupMenu/icons/visibility_visible = SubResource( 40 ) -PopupMenu/icons/visibility_xray = SubResource( 107 ) -PopupMenu/styles/disabled = SubResource( 23 ) -PopupMenu/styles/focus = SubResource( 23 ) -PopupMenu/styles/hover = SubResource( 108 ) -PopupMenu/styles/labeled_separator_left = SubResource( 109 ) -PopupMenu/styles/labeled_separator_right = SubResource( 110 ) -PopupMenu/styles/normal = SubResource( 23 ) -PopupMenu/styles/panel = SubResource( 101 ) +PopupMenu/styles/disabled = SubResource("23") +PopupMenu/styles/focus = SubResource("23") +PopupMenu/styles/hover = SubResource("108") +PopupMenu/styles/labeled_separator_left = SubResource("109") +PopupMenu/styles/labeled_separator_right = SubResource("110") +PopupMenu/styles/normal = SubResource("23") +PopupMenu/styles/panel = SubResource("101") PopupMenu/styles/panel_disabled = null -PopupMenu/styles/pressed = SubResource( 23 ) -PopupMenu/styles/separator = SubResource( 111 ) -PopupPanel/styles/panel = SubResource( 101 ) -ProgressBar/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -ProgressBar/styles/bg = SubResource( 114 ) -ProgressBar/styles/fg = SubResource( 117 ) -ProjectSettingsEditor/styles/panel = SubResource( 118 ) -RichTextLabel/colors/default_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 ) +PopupMenu/styles/pressed = SubResource("23") +PopupMenu/styles/separator = SubResource("111") +PopupPanel/styles/panel = SubResource("101") +ProgressBar/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +ProjectSettingsEditor/styles/panel = SubResource("118") +RichTextLabel/colors/default_color = Color(0.237305, 0.193295, 0.141827, 1) +RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0) RichTextLabel/constants/shadow_as_outline = 0 RichTextLabel/constants/shadow_offset_x = 1 RichTextLabel/constants/shadow_offset_y = 1 -RichTextLabel/styles/focus = SubResource( 119 ) -RichTextLabel/styles/normal = SubResource( 49 ) -RulerButton/base_type = "Button" -RulerButton/styles/focus = SubResource( 1 ) -RulerButton/styles/hover = SubResource( 1 ) -RulerButton/styles/normal = SubResource( 1 ) -RulerButton/styles/pressed = SubResource( 1 ) -SpinBox/icons/updown = SubResource( 121 ) -TabContainer/colors/font_color_bg = Color( 0, 0, 0, 0.3 ) -TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) -TabContainer/colors/font_color_fg = Color( 0.237305, 0.193295, 0.141827, 1 ) +RichTextLabel/styles/focus = SubResource("119") +RichTextLabel/styles/normal = SubResource("49") +RulerButton/base_type = &"Button" +RulerButton/styles/focus = SubResource("1") +RulerButton/styles/hover = SubResource("1") +RulerButton/styles/normal = SubResource("1") +RulerButton/styles/pressed = SubResource("1") +TabBar/colors/font_color_bg = Color(0, 0, 0, 0.3) +TabBar/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2) +TabBar/colors/font_color_fg = Color(0.237305, 0.193295, 0.141827, 1) +TabBar/constants/hseparation = 4 +TabBar/constants/label_valign_bg = 2 +TabBar/constants/label_valign_fg = 0 +TabBar/constants/top_margin = 24 +TabBar/styles/button = SubResource("23") +TabBar/styles/button_pressed = SubResource("23") +TabBar/styles/panel = SubResource("138") +TabBar/styles/tab_bg = SubResource("135") +TabBar/styles/tab_disabled = SubResource("136") +TabBar/styles/tab_fg = SubResource("137") +TabContainer/colors/font_color_bg = Color(0, 0, 0, 0.3) +TabContainer/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2) +TabContainer/colors/font_color_fg = Color(0.237305, 0.193295, 0.141827, 1) TabContainer/constants/hseparation = 4 TabContainer/constants/label_valign_bg = 2 TabContainer/constants/label_valign_fg = 0 TabContainer/constants/side_margin = 0 TabContainer/constants/top_margin = 24 -TabContainer/fonts/font = ExtResource( 1 ) -TabContainer/icons/decrement = SubResource( 123 ) -TabContainer/icons/decrement_highlight = SubResource( 125 ) -TabContainer/icons/increment = SubResource( 127 ) -TabContainer/icons/increment_highlight = SubResource( 129 ) -TabContainer/icons/menu = SubResource( 131 ) -TabContainer/icons/menu_highlight = SubResource( 133 ) -TabContainer/styles/panel = SubResource( 134 ) -TabContainer/styles/tab_bg = SubResource( 135 ) -TabContainer/styles/tab_disabled = SubResource( 136 ) -TabContainer/styles/tab_fg = SubResource( 137 ) -Tabs/colors/font_color_bg = Color( 0, 0, 0, 0.3 ) -Tabs/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) -Tabs/colors/font_color_fg = Color( 0.237305, 0.193295, 0.141827, 1 ) -Tabs/constants/hseparation = 4 -Tabs/constants/label_valign_bg = 2 -Tabs/constants/label_valign_fg = 0 -Tabs/constants/top_margin = 24 -Tabs/fonts/font = ExtResource( 1 ) -Tabs/icons/close = SubResource( 95 ) -Tabs/icons/decrement = SubResource( 123 ) -Tabs/icons/decrement_highlight = SubResource( 125 ) -Tabs/icons/increment = SubResource( 127 ) -Tabs/icons/increment_highlight = SubResource( 129 ) -Tabs/styles/button = SubResource( 23 ) -Tabs/styles/button_pressed = SubResource( 23 ) -Tabs/styles/panel = SubResource( 138 ) -Tabs/styles/tab_bg = SubResource( 135 ) -Tabs/styles/tab_disabled = SubResource( 136 ) -Tabs/styles/tab_fg = SubResource( 137 ) -TextEdit/colors/background_color = Color( 0, 0, 0, 0 ) -TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 ) -TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 ) -TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 ) -TextEdit/colors/caret_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 ) -TextEdit/colors/completion_background_color = Color( 0.172549, 0.164706, 0.196078, 1 ) -TextEdit/colors/completion_existing_color = Color( 0.87451, 0.87451, 0.87451, 0.129412 ) -TextEdit/colors/completion_font_color = Color( 0.666667, 0.666667, 0.666667, 1 ) -TextEdit/colors/completion_scroll_color = Color( 1, 1, 1, 1 ) -TextEdit/colors/completion_selected_color = Color( 0.262745, 0.258824, 0.266667, 1 ) -TextEdit/colors/current_line_color = Color( 0.25, 0.25, 0.26, 0.8 ) -TextEdit/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 ) -TextEdit/colors/function_color = Color( 0.4, 0.635294, 0.807843, 1 ) -TextEdit/colors/line_number_color = Color( 0.666667, 0.666667, 0.666667, 0.4 ) -TextEdit/colors/mark_color = Color( 1, 0.4, 0.4, 0.4 ) -TextEdit/colors/member_variable_color = Color( 0.901961, 0.305882, 0.34902, 1 ) -TextEdit/colors/number_color = Color( 0.921569, 0.584314, 0.196078, 1 ) -TextEdit/colors/safe_line_number_color = Color( 0.666667, 0.784314, 0.666667, 0.6 ) -TextEdit/colors/selection_color = Color( 1, 0.819608, 0.00392157, 0.4 ) -TextEdit/colors/symbol_color = Color( 0.941176, 0.941176, 0.941176, 1 ) -TextEdit/colors/word_highlighted_color = Color( 0.8, 0.9, 0.9, 0.15 ) +TabContainer/styles/panel = SubResource("134") +TabContainer/styles/tab_bg = SubResource("135") +TabContainer/styles/tab_disabled = SubResource("136") +TabContainer/styles/tab_fg = SubResource("137") +TextEdit/colors/background_color = Color(0, 0, 0, 0) +TextEdit/colors/brace_mismatch_color = Color(1, 0.2, 0.2, 1) +TextEdit/colors/breakpoint_color = Color(0.8, 0.8, 0.4, 0.2) +TextEdit/colors/caret_background_color = Color(0, 0, 0, 1) +TextEdit/colors/caret_color = Color(0.237305, 0.193295, 0.141827, 1) +TextEdit/colors/code_folding_color = Color(0.8, 0.8, 0.8, 0.8) +TextEdit/colors/completion_background_color = Color(0.172549, 0.164706, 0.196078, 1) +TextEdit/colors/completion_existing_color = Color(0.87451, 0.87451, 0.87451, 0.129412) +TextEdit/colors/completion_font_color = Color(0.666667, 0.666667, 0.666667, 1) +TextEdit/colors/completion_scroll_color = Color(1, 1, 1, 1) +TextEdit/colors/completion_selected_color = Color(0.262745, 0.258824, 0.266667, 1) +TextEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8) +TextEdit/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +TextEdit/colors/font_color_selected = Color(0, 0, 0, 1) +TextEdit/colors/function_color = Color(0.4, 0.635294, 0.807843, 1) +TextEdit/colors/line_number_color = Color(0.666667, 0.666667, 0.666667, 0.4) +TextEdit/colors/mark_color = Color(1, 0.4, 0.4, 0.4) +TextEdit/colors/member_variable_color = Color(0.901961, 0.305882, 0.34902, 1) +TextEdit/colors/number_color = Color(0.921569, 0.584314, 0.196078, 1) +TextEdit/colors/safe_line_number_color = Color(0.666667, 0.784314, 0.666667, 0.6) +TextEdit/colors/selection_color = Color(1, 0.819608, 0.00392157, 0.4) +TextEdit/colors/symbol_color = Color(0.941176, 0.941176, 0.941176, 1) +TextEdit/colors/word_highlighted_color = Color(0.8, 0.9, 0.9, 0.15) TextEdit/constants/completion_lines = 7 TextEdit/constants/completion_max_width = 50 TextEdit/constants/completion_scroll_width = 3 TextEdit/constants/line_spacing = 4 -TextEdit/fonts/font = ExtResource( 1 ) -TextEdit/icons/fold = SubResource( 140 ) -TextEdit/icons/folded = SubResource( 142 ) -TextEdit/icons/space = SubResource( 144 ) -TextEdit/icons/tab = SubResource( 146 ) TextEdit/styles/completion = null -TextEdit/styles/focus = SubResource( 4 ) -TextEdit/styles/normal = SubResource( 5 ) -TextEdit/styles/read_only = SubResource( 2 ) -ToolButton/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -ToolButton/colors/font_color_hover = Color( 0.142383, 0.115977, 0.085096, 1 ) -ToolButton/colors/font_color_pressed = Color( 1, 0.819608, 0.00392157, 1 ) -ToolButton/styles/disabled = SubResource( 23 ) -ToolButton/styles/focus = SubResource( 23 ) -ToolButton/styles/hover = SubResource( 23 ) -ToolButton/styles/normal = SubResource( 23 ) -ToolButton/styles/pressed = SubResource( 23 ) -TooltipLabel/colors/font_color = Color( 0.762695, 0.806705, 0.858173, 1 ) -TooltipLabel/colors/font_color_shadow = Color( 1, 1, 1, 0.1 ) -TooltipPanel/styles/panel = SubResource( 147 ) -TopMenuPanel/base_type = "Panel" -TopMenuPanel/styles/panel = SubResource( 98 ) -Tree/colors/cursor_color = Color( 0, 0, 0, 1 ) -Tree/colors/custom_button_font_highlight = Color( 0.142383, 0.115977, 0.085096, 1 ) -Tree/colors/drop_position_color = Color( 1, 0.819608, 0.00392157, 1 ) -Tree/colors/font_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -Tree/colors/font_color_selected = Color( 0, 0, 0, 1 ) -Tree/colors/guide_color = Color( 0, 0, 0, 0.05 ) -Tree/colors/relationship_line_color = Color( 0, 0, 0, 0.1 ) -Tree/colors/selection_color = Color( 0.1, 0.1, 1, 0.8 ) -Tree/colors/title_button_color = Color( 0.237305, 0.193295, 0.141827, 1 ) +TextEdit/styles/focus = SubResource("4") +TextEdit/styles/normal = SubResource("5") +TextEdit/styles/read_only = SubResource("2") +TooltipLabel/colors/font_color = Color(0.762695, 0.806705, 0.858173, 1) +TooltipLabel/colors/font_color_shadow = Color(1, 1, 1, 0.1) +TooltipPanel/styles/panel = SubResource("147") +TopMenuPanel/base_type = &"Panel" +TopMenuPanel/styles/panel = SubResource("98") +Tree/colors/cursor_color = Color(0, 0, 0, 1) +Tree/colors/custom_button_font_highlight = Color(0.142383, 0.115977, 0.085096, 1) +Tree/colors/drop_position_color = Color(1, 0.819608, 0.00392157, 1) +Tree/colors/font_color = Color(0.237305, 0.193295, 0.141827, 1) +Tree/colors/font_color_selected = Color(0, 0, 0, 1) +Tree/colors/guide_color = Color(0, 0, 0, 0.05) +Tree/colors/relationship_line_color = Color(0, 0, 0, 0.1) +Tree/colors/selection_color = Color(0.1, 0.1, 1, 0.8) +Tree/colors/title_button_color = Color(0.237305, 0.193295, 0.141827, 1) Tree/constants/button_margin = 4 Tree/constants/draw_guides = 0 Tree/constants/draw_relationship_lines = 1 @@ -1837,62 +820,38 @@ Tree/constants/item_margin = 12 Tree/constants/scroll_border = 40 Tree/constants/scroll_speed = 12 Tree/constants/vseparation = 4 -Tree/fonts/font = ExtResource( 1 ) -Tree/fonts/title_button_font = ExtResource( 1 ) -Tree/icons/arrow = SubResource( 140 ) -Tree/icons/arrow_collapsed = SubResource( 142 ) -Tree/icons/checked = SubResource( 8 ) -Tree/icons/select_arrow = SubResource( 149 ) -Tree/icons/unchecked = SubResource( 14 ) -Tree/icons/updown = SubResource( 151 ) -Tree/styles/bg = SubResource( 49 ) -Tree/styles/bg_focus = SubResource( 89 ) -Tree/styles/button_pressed = SubResource( 152 ) -Tree/styles/cursor = SubResource( 153 ) -Tree/styles/cursor_unfocused = SubResource( 153 ) -Tree/styles/custom_button = SubResource( 154 ) -Tree/styles/custom_button_hover = SubResource( 5 ) -Tree/styles/custom_button_pressed = SubResource( 155 ) -Tree/styles/hover = SubResource( 156 ) -Tree/styles/selected = SubResource( 91 ) -Tree/styles/selected_focus = SubResource( 92 ) -Tree/styles/title_button_hover = SubResource( 157 ) -Tree/styles/title_button_normal = SubResource( 157 ) -Tree/styles/title_button_pressed = SubResource( 157 ) +Tree/styles/bg = SubResource("49") +Tree/styles/bg_focus = SubResource("89") +Tree/styles/button_pressed = SubResource("152") +Tree/styles/cursor = SubResource("153") +Tree/styles/cursor_unfocused = SubResource("153") +Tree/styles/custom_button = SubResource("154") +Tree/styles/custom_button_hover = SubResource("5") +Tree/styles/custom_button_pressed = SubResource("155") +Tree/styles/hover = SubResource("156") +Tree/styles/selected = SubResource("91") +Tree/styles/selected_focus = SubResource("92") +Tree/styles/title_button_hover = SubResource("157") +Tree/styles/title_button_normal = SubResource("157") +Tree/styles/title_button_pressed = SubResource("157") VBoxContainer/constants/separation = 4 -VScrollBar/icons/decrement = SubResource( 64 ) -VScrollBar/icons/decrement_highlight = SubResource( 64 ) -VScrollBar/icons/increment = SubResource( 64 ) -VScrollBar/icons/increment_highlight = SubResource( 64 ) -VScrollBar/styles/grabber = SubResource( 158 ) -VScrollBar/styles/grabber_highlight = SubResource( 159 ) -VScrollBar/styles/grabber_pressed = SubResource( 160 ) -VScrollBar/styles/scroll = SubResource( 161 ) -VScrollBar/styles/scroll_focus = SubResource( 162 ) VSeparator/constants/separation = 4 -VSeparator/styles/separator = SubResource( 163 ) -VSlider/icons/grabber = SubResource( 80 ) -VSlider/icons/grabber_highlight = SubResource( 82 ) -VSlider/styles/grabber_area = SubResource( 164 ) -VSlider/styles/slider = SubResource( 165 ) +VSeparator/styles/separator = SubResource("163") +VSlider/styles/grabber_area = SubResource("164") +VSlider/styles/slider = SubResource("165") VSplitContainer/constants/autohide = 1 VSplitContainer/constants/separation = 8 -VSplitContainer/icons/grabber = SubResource( 167 ) -VSplitContainer/styles/bg = SubResource( 170 ) -ValueSlider/colors/progress_color = Color( 0.713726, 0.580392, 0.423529, 1 ) -ValueSlider/colors/under_color = Color( 0.47451, 0.388235, 0.282353, 1 ) -ValueSlider/icons/arrow_hover = ExtResource( 3 ) -ValueSlider/icons/arrow_normal = ExtResource( 5 ) -ValueSlider/icons/arrow_pressed = ExtResource( 4 ) +ValueSlider/colors/progress_color = Color(0.713726, 0.580392, 0.423529, 1) +ValueSlider/colors/under_color = Color(0.47451, 0.388235, 0.282353, 1) +ValueSlider/icons/arrow_hover = ExtResource("3") +ValueSlider/icons/arrow_normal = ExtResource("5") +ValueSlider/icons/arrow_pressed = ExtResource("4") ValueSlider/icons/texture_over = null -ValueSlider/icons/texture_progress = ExtResource( 6 ) -ValueSlider/icons/texture_under = ExtResource( 6 ) -WindowDialog/colors/title_color = Color( 0.237305, 0.193295, 0.141827, 1 ) -WindowDialog/constants/close_h_ofs = 22 -WindowDialog/constants/close_v_ofs = 20 -WindowDialog/constants/scaleborder_size = 4 -WindowDialog/constants/title_height = 24 -WindowDialog/fonts/title_font = ExtResource( 1 ) -WindowDialog/icons/close = SubResource( 95 ) -WindowDialog/icons/close_highlight = SubResource( 95 ) -WindowDialog/styles/panel = SubResource( 171 ) +ValueSlider/icons/texture_progress = ExtResource("6") +ValueSlider/icons/texture_under = ExtResource("6") +Window/colors/title_color = Color(0.237305, 0.193295, 0.141827, 1) +Window/constants/close_h_ofs = 22 +Window/constants/close_v_ofs = 20 +Window/constants/scaleborder_size = 4 +Window/constants/title_height = 24 +Window/styles/panel = SubResource("171") diff --git a/assets/themes/dark/theme.tres b/assets/themes/dark/theme.tres index 50a4ede122d..06486df5d86 100644 --- a/assets/themes/dark/theme.tres +++ b/assets/themes/dark/theme.tres @@ -1,1868 +1,845 @@ -[gd_resource type="Theme" load_steps=182 format=2] +[gd_resource type="Theme" load_steps=64 format=3 uid="uid://w1q3piojx08s"] -[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1] -[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2] -[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=3] -[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=4] -[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5] -[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6] +[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="3"] +[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="4"] +[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="5"] +[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="6"] +[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="7_q8bkb"] -[sub_resource type="StyleBoxFlat" id=2] +[sub_resource type="StyleBoxFlat" id="23"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.101953, 0.101953, 0.101953, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=3] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.184314, 0.396078, 0.533333, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=4] -content_margin_left = 6.0 content_margin_right = 6.0 -content_margin_top = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.334961, 0.334961, 0.334961, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 +bg_color = Color(0.0901961, 0.0901961, 0.0901961, 1) +border_color = Color(0.0792967, 0.0792967, 0.0792967, 1) -[sub_resource type="StyleBoxFlat" id=5] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_t0f5f"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=6] -content_margin_left = 6.0 content_margin_right = 6.0 -content_margin_top = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.0901961, 0.0901961, 0.0901961, 1 ) +bg_color = Color(0.09, 0.09, 0.09, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.184314, 0.396078, 0.533333, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="Image" id=177] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 60, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 243, 223, 223, 223, 105, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 104, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 225, 225, 225, 51, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 48, 224, 224, 224, 66, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 103, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 217, 217, 217, 48, 223, 223, 223, 178, 222, 222, 222, 231, 220, 220, 220, 74, 222, 222, 222, 102, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 194, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 219, 219, 219, 64, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 233, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 195, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 224, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 66, 221, 221, 221, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=8] -flags = 0 -flags = 0 -image = SubResource( 177 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=178] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 221, 221, 221, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 217, 217, 217, 68, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 179, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 179, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 181, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 223, 223, 223, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 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] -flags = 0 -flags = 0 -image = SubResource( 178 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=179] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 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] -flags = 0 -flags = 0 -image = SubResource( 179 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=180] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} +border_color = Color(0.184314, 0.396078, 0.533333, 1) -[sub_resource type="ImageTexture" id=14] -flags = 0 -flags = 0 -image = SubResource( 180 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=15] +[sub_resource type="StyleBoxFlat" id="15"] content_margin_left = 4.0 -content_margin_right = 4.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 ) -draw_center = false -border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 ) - -[sub_resource type="StyleBoxFlat" id=16] -bg_color = Color( 0.6, 0.6, 0.6, 0 ) - -[sub_resource type="Image" id=181] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 219, 219, 219, 94, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 220, 220, 220, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 38 -} - -[sub_resource type="ImageTexture" id=18] -flags = 0 -flags = 0 -image = SubResource( 181 ) -size = Vector2( 38, 16 ) - -[sub_resource type="Image" id=182] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": "LumAlpha8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=20] -flags = 4 -flags = 4 -image = SubResource( 182 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=183] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 66, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 223, 220, 220, 220, 66, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 223, 223, 223, 65, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 217, 217, 217, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 12, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 223, 223, 223, 222, 212, 212, 212, 12, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 120, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 120, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 221, 221, 221, 75, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 0, 221, 221, 221, 75, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 214, 214, 214, 25, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 216, 216, 216, 20, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 71, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 121, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 121, 223, 223, 223, 0, 215, 215, 215, 0, 215, 215, 215, 13, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 222, 222, 222, 223, 215, 215, 215, 13, 215, 215, 215, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 66, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 254, 220, 220, 220, 66, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 220, 220, 220, 66, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 224, 220, 220, 220, 66, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 38 -} - -[sub_resource type="ImageTexture" id=22] -flags = 0 -flags = 0 -image = SubResource( 183 ) -size = Vector2( 38, 16 ) - -[sub_resource type="StyleBoxFlat" id=23] -content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 ) +bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1) draw_center = false -border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 ) - -[sub_resource type="StyleBoxFlat" id=24] -bg_color = Color( 0.2, 0.2, 0.2, 0 ) - -[sub_resource type="Image" id=184] -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, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 0, 0, 0, 0, 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=26] -flags = 0 -flags = 0 -image = SubResource( 184 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=185] -data = { -"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 85, 86, 188, 0, 0, 3, 255, 0, 0, 2, 125, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 86, 86, 88, 188, 0, 0, 3, 255, 0, 0, 2, 126, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 88, 88, 89, 188, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 89, 89, 90, 188, 0, 0, 3, 255, 0, 0, 1, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 93, 93, 94, 188, 0, 0, 3, 255, 0, 0, 1, 131, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 94, 94, 96, 188, 0, 0, 3, 255, 0, 0, 1, 132, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 96, 96, 97, 188, 0, 0, 3, 255, 0, 0, 1, 133, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 99, 101, 189, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 136, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=28] -flags = 0 -flags = 0 -image = SubResource( 185 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=186] -data = { -"data": PoolByteArray( 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=30] -flags = 0 -flags = 0 -image = SubResource( 186 ) -size = Vector2( 16, 16 ) +border_color = Color(0.0792967, 0.0792967, 0.0792967, 1) -[sub_resource type="Image" id=187] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 218, 222, 222, 222, 70, 222, 222, 222, 70, 223, 223, 223, 218, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 65, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 65, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 0, 0, 0, 0, 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="StyleBoxFlat" id="24"] +bg_color = Color(0.2, 0.2, 0.2, 0) -[sub_resource type="ImageTexture" id=32] -flags = 0 -flags = 0 -image = SubResource( 187 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=33] -bg_color = Color( 0.768627, 0.768627, 0.768627, 1 ) +[sub_resource type="StyleBoxFlat" id="33"] +bg_color = Color(0.768627, 0.768627, 0.768627, 1) border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 -border_color = Color( 0.686275, 0.686275, 0.686275, 1 ) +border_color = Color(0.686275, 0.686275, 0.686275, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=34] +[sub_resource type="StyleBoxFlat" id="34"] border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 -border_color = Color( 0.686275, 0.686275, 0.686275, 1 ) +border_color = Color(0.686275, 0.686275, 0.686275, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=35] -bg_color = Color( 0.2, 0.2, 0.2, 1 ) +[sub_resource type="StyleBoxFlat" id="35"] +bg_color = Color(0.2, 0.2, 0.2, 1) border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 -border_color = Color( 0.686275, 0.686275, 0.686275, 1 ) +border_color = Color(0.686275, 0.686275, 0.686275, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="Image" id=188] -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, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 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, 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, 223, 223, 223, 0, 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, 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, 222, 222, 222, 70, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 224, 224, 224, 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, 223, 223, 223, 180, 223, 223, 223, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=37] -flags = 0 -flags = 0 -image = SubResource( 188 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=189] -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, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 199, 222, 222, 222, 198, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 223, 223, 223, 211, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 218, 218, 218, 21, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 216, 216, 216, 20, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 216, 216, 216, 20, 223, 223, 223, 209, 223, 223, 223, 254, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 251, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 193, 223, 223, 223, 254, 222, 222, 222, 206, 214, 214, 214, 19, 223, 223, 223, 254, 223, 223, 223, 249, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 193, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 192, 214, 214, 214, 19, 217, 217, 217, 0, 223, 223, 223, 254, 223, 223, 223, 249, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 192, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=39] -flags = 0 -flags = 0 -image = SubResource( 189 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=190] -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, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 98, 223, 223, 223, 177, 223, 223, 223, 228, 223, 223, 223, 228, 223, 223, 223, 177, 223, 223, 223, 98, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 23, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 185, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 215, 215, 215, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 174, 223, 223, 223, 254, 222, 222, 222, 87, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 87, 223, 223, 223, 254, 222, 222, 222, 174, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 147, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 161, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 212, 212, 212, 0, 212, 212, 212, 6, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 214, 204, 204, 204, 10, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 178, 223, 223, 223, 0, 0, 0, 0, 0, 214, 214, 214, 0, 217, 217, 217, 34, 223, 223, 223, 240, 223, 223, 223, 245, 218, 218, 218, 42, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 96, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 0, 221, 221, 221, 84, 223, 223, 223, 97, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 186, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 228, 223, 223, 223, 177, 221, 221, 221, 99, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=41] -flags = 0 -flags = 0 -image = SubResource( 190 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=191] -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, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 221, 221, 221, 0, 221, 221, 221, 92, 223, 223, 223, 185, 222, 222, 222, 231, 222, 222, 222, 231, 223, 223, 223, 186, 222, 222, 222, 95, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 218, 218, 218, 35, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 41, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 175, 175, 0, 223, 223, 223, 32, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 228, 218, 218, 218, 35, 194, 194, 194, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 213, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 217, 170, 170, 170, 3, 170, 170, 170, 0, 223, 223, 223, 0, 223, 223, 223, 89, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 87, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 200, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 87, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 93, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 24, 222, 222, 222, 0, 222, 222, 222, 198, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 198, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 19, 218, 218, 218, 0, 222, 222, 222, 199, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 199, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 254, 221, 221, 221, 84, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 201, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 222, 223, 223, 223, 254, 223, 223, 223, 224, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 222, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 196, 196, 196, 0, 223, 223, 223, 41, 223, 223, 223, 232, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 232, 223, 223, 223, 41, 196, 196, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 44, 223, 223, 223, 216, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 216, 220, 220, 220, 44, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 127, 127, 127, 2, 223, 223, 223, 98, 222, 222, 222, 190, 223, 223, 223, 232, 223, 223, 223, 232, 222, 222, 222, 190, 223, 223, 223, 98, 127, 127, 127, 2, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=43] -flags = 0 -flags = 0 -image = SubResource( 191 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=192] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=45] -flags = 0 -flags = 0 -image = SubResource( 192 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=193] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=47] -flags = 0 -flags = 0 -image = SubResource( 193 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=194] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 221, 78, 78, 78, 127, 112, 112, 112, 143, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 250, 153, 153, 153, 171, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 205, 0, 0, 0, 100, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 152, 152, 152, 169, 201, 201, 201, 220, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=49] -flags = 0 -flags = 0 -image = SubResource( 194 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=195] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 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, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 115, 255, 255, 255, 156, 255, 255, 255, 156, 255, 255, 255, 114, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 160, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 160, 255, 255, 255, 17, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 110, 255, 255, 255, 174, 255, 255, 255, 131, 255, 255, 255, 35, 255, 255, 255, 35, 255, 255, 255, 131, 255, 255, 255, 174, 255, 255, 255, 110, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 153, 255, 255, 255, 174, 255, 255, 255, 34, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 34, 255, 255, 255, 174, 255, 255, 255, 153, 255, 255, 255, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=51] -flags = 0 -flags = 0 -image = SubResource( 195 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=52] +[sub_resource type="StyleBoxFlat" id="52"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 ) +bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 ) - -[sub_resource type="Image" id=196] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=54] -flags = 0 -flags = 0 -image = SubResource( 196 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=197] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 58, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 59, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 10, -"mipmaps": false, -"width": 10 -} - -[sub_resource type="ImageTexture" id=56] -flags = 0 -flags = 0 -image = SubResource( 197 ) -size = Vector2( 10, 10 ) +border_color = Color(0.0679686, 0.0679686, 0.0679686, 1) -[sub_resource type="Image" id=198] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 105, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=58] -flags = 0 -flags = 0 -image = SubResource( 198 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=59] +[sub_resource type="StyleBoxFlat" id="59"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 0.87, 0.4, 1 ) -shadow_color = Color( 1, 0.87, 0.4, 0.1 ) +border_color = Color(1, 0.87, 0.4, 1) +shadow_color = Color(1, 0.87, 0.4, 0.1) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=60] +[sub_resource type="StyleBoxFlat" id="60"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.3 ) +bg_color = Color(0, 0, 0, 0.3) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=61] +[sub_resource type="StyleBoxFlat" id="61"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.4 ) +bg_color = Color(0, 0, 0, 0.4) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=62] +[sub_resource type="StyleBoxFlat" id="62"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.7 ) +bg_color = Color(0, 0, 0, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=63] +[sub_resource type="StyleBoxFlat" id="63"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 0.47, 0.42, 1 ) -shadow_color = Color( 1, 0.47, 0.42, 0.2 ) +border_color = Color(1, 0.47, 0.42, 1) +shadow_color = Color(1, 0.47, 0.42, 0.2) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=64] +[sub_resource type="StyleBoxFlat" id="64"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.184314, 0.396078, 0.533333, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.184314, 0.396078, 0.533333, 0.9) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=65] +[sub_resource type="StyleBoxFlat" id="65"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.7 ) +bg_color = Color(0, 0, 0, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=66] +[sub_resource type="StyleBoxFlat" id="66"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.184314, 0.396078, 0.533333, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.184314, 0.396078, 0.533333, 0.9) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 8 -[sub_resource type="ImageTexture" id=67] - -[sub_resource type="Image" id=199] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=69] -flags = 0 -flags = 0 -image = SubResource( 199 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=70] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 69 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=200] -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, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=72] -flags = 0 -flags = 0 -image = SubResource( 200 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=73] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 72 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="Image" id=201] -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, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=75] -flags = 0 -flags = 0 -image = SubResource( 201 ) -size = Vector2( 12, 12 ) +[sub_resource type="StyleBoxLine" id="81"] +color = Color(1, 1, 1, 0.1) -[sub_resource type="StyleBoxTexture" id=76] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 75 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=202] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=78] -flags = 0 -flags = 0 -image = SubResource( 202 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=79] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 78 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=80] +[sub_resource type="StyleBoxFlat" id="86"] content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 78 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=81] -color = Color( 1, 1, 1, 0.1 ) - -[sub_resource type="Image" id=203] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 190, 190, 0, 210, 210, 210, 17, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 210, 210, 210, 17, 190, 190, 190, 0, 0, 0, 0, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 62, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 62, 170, 170, 170, 3, 170, 170, 170, 0, 216, 216, 216, 0, 216, 216, 216, 33, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 216, 216, 216, 33, 216, 216, 216, 0, 219, 219, 219, 0, 219, 219, 219, 50, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 219, 219, 219, 50, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 65, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 51, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 220, 220, 220, 51, 220, 220, 220, 0, 218, 218, 218, 0, 218, 218, 218, 35, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 218, 218, 218, 35, 218, 218, 218, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 63, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 191, 191, 191, 0, 212, 212, 212, 18, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 212, 212, 212, 18, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 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, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 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=83] -flags = 0 -flags = 0 -image = SubResource( 203 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=204] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 63, 223, 223, 223, 221, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 222, 222, 222, 62, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 0, 0, 0, 1, 148, 148, 148, 0, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 222, 222, 222, 62, 215, 215, 215, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 220, 224, 224, 224, 255, 223, 223, 223, 114, 233, 233, 233, 0, 237, 237, 237, 0, 127, 127, 127, 0, 255, 255, 255, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 219, 208, 208, 208, 11, 208, 208, 208, 0, 222, 222, 222, 0, 222, 222, 222, 118, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 222, 222, 222, 118, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 123, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 223, 223, 223, 123, 223, 223, 223, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 222, 224, 224, 224, 255, 223, 223, 223, 112, 233, 233, 233, 0, 237, 237, 237, 0, 255, 255, 255, 0, 127, 127, 127, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 221, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 215, 215, 215, 0, 223, 223, 223, 64, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 148, 148, 148, 0, 0, 0, 0, 1, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 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=85] -flags = 0 -flags = 0 -image = SubResource( 204 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=86] -content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.333333, 0.333333, 0.333333, 1 ) +bg_color = Color(0.333333, 0.333333, 0.333333, 1) -[sub_resource type="StyleBoxFlat" id=87] +[sub_resource type="StyleBoxFlat" id="87"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.333333, 0.333333, 0.333333, 1 ) +bg_color = Color(0.333333, 0.333333, 0.333333, 1) -[sub_resource type="StyleBoxFlat" id=88] +[sub_resource type="StyleBoxFlat" id="88"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.0666667, 0.0666667, 0.0666667, 1 ) - -[sub_resource type="Image" id=205] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 64, -"mipmaps": false, -"width": 8 -} +bg_color = Color(0.0666667, 0.0666667, 0.0666667, 1) -[sub_resource type="ImageTexture" id=90] -flags = 0 -flags = 0 -image = SubResource( 205 ) -size = Vector2( 8, 64 ) - -[sub_resource type="StyleBoxTexture" id=91] -texture = SubResource( 20 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=92] +[sub_resource type="StyleBoxFlat" id="92"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 ) +bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 ) +border_color = Color(0.0679686, 0.0679686, 0.0679686, 1) -[sub_resource type="StyleBoxFlat" id=93] +[sub_resource type="StyleBoxFlat" id="93"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(0.113281, 0.113281, 0.113281, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.445801, 0.445801, 0.445801, 1 ) +border_color = Color(0.445801, 0.445801, 0.445801, 1) -[sub_resource type="StyleBoxFlat" id=94] +[sub_resource type="StyleBoxFlat" id="94"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(0.113281, 0.113281, 0.113281, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.2 ) +border_color = Color(1, 1, 1, 0.2) -[sub_resource type="StyleBoxFlat" id=95] +[sub_resource type="StyleBoxFlat" id="95"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.2 ) -border_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(1, 1, 1, 0.2) +border_color = Color(0.113281, 0.113281, 0.113281, 1) -[sub_resource type="StyleBoxFlat" id=96] +[sub_resource type="StyleBoxFlat" id="96"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.2 ) -border_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(1, 1, 1, 0.2) +border_color = Color(0.113281, 0.113281, 0.113281, 1) -[sub_resource type="StyleBoxEmpty" id=97] +[sub_resource type="StyleBoxEmpty" id="97"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -[sub_resource type="Image" id=206] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} +[sub_resource type="StyleBoxFlat" id="3"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.184314, 0.396078, 0.533333, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=99] -flags = 0 -flags = 0 -image = SubResource( 206 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="5"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.0792967, 0.0792967, 0.0792967, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="Image" id=207] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 121, 255, 255, 255, 151, 255, 255, 255, 15, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 149, 255, 255, 255, 125, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 142, 255, 255, 255, 199, 255, 255, 255, 163, 255, 255, 255, 15, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 160, 255, 255, 255, 199, 255, 255, 255, 144, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 163, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 15, 255, 255, 255, 14, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 166, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 165, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 166, 255, 255, 255, 199, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 155, 255, 255, 255, 157, 255, 255, 255, 18, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} +[sub_resource type="StyleBoxFlat" id="2"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.101953, 0.101953, 0.101953, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.0792967, 0.0792967, 0.0792967, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=101] -flags = 0 -flags = 0 -image = SubResource( 207 ) -size = Vector2( 12, 12 ) +[sub_resource type="StyleBoxFlat" id="4"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.334961, 0.334961, 0.334961, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=103] +[sub_resource type="StyleBoxFlat" id="6"] content_margin_left = 6.0 +content_margin_top = 4.0 content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.0901961, 0.0901961, 0.0901961, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.184314, 0.396078, 0.533333, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 + +[sub_resource type="StyleBoxFlat" id="103"] +content_margin_left = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 ) +bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1) -[sub_resource type="StyleBoxFlat" id=104] +[sub_resource type="StyleBoxFlat" id="104"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 2.0 +content_margin_right = 2.0 content_margin_bottom = 2.0 -bg_color = Color( 0.141176, 0.141176, 0.141176, 1 ) +bg_color = Color(0.141176, 0.141176, 0.141176, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=105] +[sub_resource type="StyleBoxFlat" id="105"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(0.113281, 0.113281, 0.113281, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.334961, 0.334961, 0.334961, 1 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.334961, 0.334961, 0.334961, 1) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="Image" id=208] -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, 222, 222, 222, 0, 223, 223, 223, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 197, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 190, 223, 223, 223, 254, 223, 223, 223, 210, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 196, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 197, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 214, 214, 214, 19, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 189, 223, 223, 223, 254, 223, 223, 223, 212, 220, 220, 220, 22, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 222, 222, 222, 198, 221, 221, 221, 23, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=107] -flags = 0 -flags = 0 -image = SubResource( 208 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=209] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 31, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 222, 222, 222, 31, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 178, 223, 223, 223, 254, 223, 223, 223, 81, 213, 213, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 213, 213, 0, 223, 223, 223, 81, 223, 223, 223, 254, 223, 223, 223, 177, 223, 223, 223, 0, 221, 221, 221, 0, 221, 221, 221, 84, 223, 223, 223, 254, 223, 223, 223, 204, 204, 204, 204, 5, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 204, 204, 204, 5, 223, 223, 223, 204, 223, 223, 223, 254, 221, 221, 221, 84, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 176, 204, 204, 204, 5, 213, 213, 213, 0, 220, 220, 220, 0, 220, 220, 220, 0, 213, 213, 213, 0, 204, 204, 204, 5, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 209, 0, 0, 0, 1, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 213, 223, 223, 223, 88, 220, 220, 220, 22, 220, 220, 220, 22, 223, 223, 223, 88, 222, 222, 222, 214, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 210, 214, 214, 214, 19, 214, 214, 214, 0, 198, 198, 198, 0, 198, 198, 198, 9, 223, 223, 223, 194, 222, 222, 222, 214, 222, 222, 222, 215, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 215, 222, 222, 222, 214, 223, 223, 223, 194, 198, 198, 198, 9, 198, 198, 198, 0, 0, 0, 0, 0, 201, 201, 201, 0, 204, 204, 204, 10, 216, 216, 216, 20, 204, 204, 204, 5, 223, 223, 223, 105, 223, 223, 223, 187, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 187, 223, 223, 223, 105, 204, 204, 204, 5, 216, 216, 216, 20, 204, 204, 204, 10, 201, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 223, 223, 223, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 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=109] -flags = 0 -flags = 0 -image = SubResource( 209 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=210] -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, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 0, 219, 219, 219, 115, 223, 223, 223, 204, 223, 223, 223, 236, 223, 223, 223, 90, 223, 223, 223, 73, 220, 220, 220, 37, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 217, 217, 217, 47, 222, 222, 222, 222, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 16, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 218, 218, 218, 42, 222, 222, 222, 236, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 216, 216, 216, 33, 223, 223, 223, 88, 221, 221, 221, 100, 223, 223, 223, 89, 218, 218, 218, 14, 109, 109, 109, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 235, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 218, 218, 218, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 85, 0, 0, 0, 1, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 111, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 109, 217, 217, 217, 0, 221, 221, 221, 76, 223, 223, 223, 216, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 217, 217, 217, 34, 221, 221, 221, 100, 221, 221, 221, 100, 219, 219, 219, 36, 219, 219, 219, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 215, 215, 215, 32, 218, 218, 218, 0, 222, 222, 222, 215, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 25, 217, 217, 217, 0, 221, 221, 221, 216, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 117, 223, 223, 223, 254, 223, 223, 223, 254, 218, 218, 218, 106, 216, 216, 216, 0, 221, 221, 221, 76, 223, 223, 223, 217, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 216, 216, 216, 33, 221, 221, 221, 100, 221, 221, 221, 100, 220, 220, 220, 37, 220, 220, 220, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 233, 223, 223, 223, 254, 223, 223, 223, 234, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 220, 220, 220, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 87, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 195, 195, 195, 0, 221, 221, 221, 54, 223, 223, 223, 240, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 223, 223, 223, 32, 223, 223, 223, 88, 221, 221, 221, 100, 221, 221, 221, 91, 223, 223, 223, 16, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 215, 215, 215, 58, 222, 222, 222, 229, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 85, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 0, 127, 127, 127, 2, 223, 223, 223, 121, 223, 223, 223, 208, 223, 223, 223, 237, 221, 221, 221, 91, 223, 223, 223, 74, 221, 221, 221, 38, 0, 0, 0, 1, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=111] -flags = 0 -flags = 0 -image = SubResource( 210 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=112] +[sub_resource type="StyleBoxFlat" id="112"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 ) -border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 ) +bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1) +border_color = Color(0.0792967, 0.0792967, 0.0792967, 1) -[sub_resource type="StyleBoxLine" id=113] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="113"] +color = Color(1, 1, 1, 0.1) grow_begin = 7.0 -[sub_resource type="StyleBoxLine" id=114] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="114"] +color = Color(1, 1, 1, 0.1) grow_end = 7.0 -[sub_resource type="StyleBoxLine" id=115] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="115"] +color = Color(1, 1, 1, 0.1) grow_begin = 7.0 grow_end = 7.0 -[sub_resource type="Image" id=211] -data = { -"data": PoolByteArray( 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=117] -flags = 0 -flags = 0 -image = SubResource( 211 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=118] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 117 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 4.0 -margin_right = 4.0 -margin_top = 4.0 -margin_bottom = 4.0 - -[sub_resource type="Image" id=212] -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, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=120] -flags = 0 -flags = 0 -image = SubResource( 212 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxEmpty" id="123"] -[sub_resource type="StyleBoxTexture" id=121] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 1.0 -content_margin_bottom = 1.0 -texture = SubResource( 120 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxEmpty" id=123] - -[sub_resource type="StyleBoxFlat" id=1] -bg_color = Color( 0.2, 0.2, 0.2, 1 ) +[sub_resource type="StyleBoxFlat" id="1"] +bg_color = Color(0.2, 0.2, 0.2, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="Image" id=213] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 152, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 143, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 216, 216, 216, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 164, 222, 222, 222, 199, 222, 222, 222, 143, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 138, 223, 223, 223, 145, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 145, 223, 223, 223, 138, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 124, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 153, 222, 222, 222, 125, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 142, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 142, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 165, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 154, 223, 223, 223, 154, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 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=125] -flags = 0 -flags = 0 -image = SubResource( 213 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=214] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 220, 220, 220, 44, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 216, 216, 216, 33, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 219, 219, 219, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 218, 218, 218, 42, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=127] -flags = 0 -flags = 0 -image = SubResource( 214 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=215] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 223, 223, 223, 57, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 219, 219, 219, 43, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 219, 219, 219, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 221, 221, 221, 54, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=129] -flags = 0 -flags = 0 -image = SubResource( 215 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=216] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 220, 220, 220, 44, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 221, 221, 221, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 218, 218, 218, 42, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=131] -flags = 0 -flags = 0 -image = SubResource( 216 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=217] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 223, 223, 223, 57, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 220, 220, 220, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 219, 219, 219, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 222, 222, 222, 55, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=133] -flags = 0 -flags = 0 -image = SubResource( 217 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=218] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 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=135] -flags = 0 -flags = 0 -image = SubResource( 218 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=219] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 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=137] -flags = 0 -flags = 0 -image = SubResource( 219 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="142"] +bg_color = Color(0.321569, 0.321569, 0.321569, 1) +border_width_left = 5 +border_width_top = 10 +border_width_right = 5 +border_width_bottom = 5 +border_color = Color(0.321569, 0.321569, 0.321569, 1) +anti_aliasing = false -[sub_resource type="StyleBoxFlat" id=138] -content_margin_left = 5.0 -content_margin_right = 5.0 +[sub_resource type="StyleBoxFlat" id="139"] +content_margin_left = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(0.0906248, 0.0906248, 0.0906248, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 ) +border_color = Color(0.0792967, 0.0792967, 0.0792967, 1) +expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=139] +[sub_resource type="StyleBoxFlat" id="140"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.0906248, 0.0906248, 0.0906248, 1 ) +bg_color = Color(0.101953, 0.101953, 0.101953, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 ) +border_color = Color(0.0792967, 0.0792967, 0.0792967, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=140] +[sub_resource type="StyleBoxFlat" id="141"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.101953, 0.101953, 0.101953, 1 ) +bg_color = Color(0.113281, 0.113281, 0.113281, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.0792967, 0.0792967, 0.0792967, 1 ) +border_color = Color(0.0679686, 0.0679686, 0.0679686, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=141] -content_margin_left = 10.0 -content_margin_right = 10.0 +[sub_resource type="StyleBoxFlat" id="138"] +content_margin_left = 5.0 content_margin_top = 5.0 +content_margin_right = 5.0 content_margin_bottom = 5.0 -bg_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(0.113281, 0.113281, 0.113281, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 ) -expand_margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=142] -bg_color = Color( 0.321569, 0.321569, 0.321569, 1 ) -border_width_left = 5 -border_width_top = 10 -border_width_right = 5 -border_width_bottom = 5 -border_color = Color( 0.321569, 0.321569, 0.321569, 1 ) -anti_aliasing = false - -[sub_resource type="Image" id=220] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 72, 255, 255, 255, 56, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 72, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=144] -flags = 0 -flags = 0 -image = SubResource( 220 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=221] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 7, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=146] -flags = 0 -flags = 0 -image = SubResource( 221 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=222] -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, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 13, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=148] -flags = 0 -flags = 0 -image = SubResource( 222 ) -size = Vector2( 8, 8 ) - -[sub_resource type="Image" id=223] -data = { -"data": PoolByteArray( 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 3, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 40, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=150] -flags = 0 -flags = 0 -image = SubResource( 223 ) -size = Vector2( 8, 8 ) +border_width_bottom = 1 +border_color = Color(0.0679686, 0.0679686, 0.0679686, 1) -[sub_resource type="StyleBoxFlat" id=151] +[sub_resource type="StyleBoxFlat" id="151"] content_margin_left = 1.0 -content_margin_right = 1.0 content_margin_top = 1.0 +content_margin_right = 1.0 content_margin_bottom = 1.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 1 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(1, 1, 1, 1) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="StyleBoxFlat" id=102] -bg_color = Color( 0.0823529, 0.0823529, 0.0823529, 1 ) - -[sub_resource type="Image" id=224] -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, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 84, 255, 255, 255, 108, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 108, 255, 255, 255, 84, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 109, 255, 255, 255, 108, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 14, -"mipmaps": false, -"width": 14 -} - -[sub_resource type="ImageTexture" id=153] -flags = 0 -flags = 0 -image = SubResource( 224 ) -size = Vector2( 14, 14 ) - -[sub_resource type="Image" id=225] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 113, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 113, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 114, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 114, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 116, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 14, -"mipmaps": false, -"width": 14 -} - -[sub_resource type="ImageTexture" id=155] -flags = 0 -flags = 0 -image = SubResource( 225 ) -size = Vector2( 14, 14 ) +[sub_resource type="StyleBoxFlat" id="102"] +bg_color = Color(0.0823529, 0.0823529, 0.0823529, 1) -[sub_resource type="StyleBoxFlat" id=156] +[sub_resource type="StyleBoxFlat" id="156"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.334961, 0.334961, 0.334961, 1 ) -border_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(0.334961, 0.334961, 0.334961, 1) +border_color = Color(0.113281, 0.113281, 0.113281, 1) -[sub_resource type="StyleBoxFlat" id=157] +[sub_resource type="StyleBoxFlat" id="157"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(0.113281, 0.113281, 0.113281, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.334961, 0.334961, 0.334961, 1 ) +border_color = Color(0.334961, 0.334961, 0.334961, 1) -[sub_resource type="StyleBoxEmpty" id=158] +[sub_resource type="StyleBoxEmpty" id="158"] -[sub_resource type="StyleBoxEmpty" id=159] +[sub_resource type="StyleBoxEmpty" id="159"] -[sub_resource type="StyleBoxFlat" id=160] +[sub_resource type="StyleBoxFlat" id="160"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.08 ) -border_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(1, 1, 1, 0.08) +border_color = Color(0.113281, 0.113281, 0.113281, 1) -[sub_resource type="StyleBoxFlat" id=161] +[sub_resource type="StyleBoxFlat" id="161"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 ) -border_color = Color( 0.113281, 0.113281, 0.113281, 1 ) - -[sub_resource type="StyleBoxTexture" id=162] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 69 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxTexture" id=163] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 72 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=164] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 75 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 +bg_color = Color(0.0679686, 0.0679686, 0.0679686, 1) +border_color = Color(0.113281, 0.113281, 0.113281, 1) -[sub_resource type="StyleBoxTexture" id=165] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 78 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=166] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 78 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=167] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="167"] +color = Color(1, 1, 1, 0.1) grow_begin = 0.0 grow_end = 0.0 vertical = true -[sub_resource type="StyleBoxFlat" id=168] +[sub_resource type="StyleBoxFlat" id="168"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.334961, 0.334961, 0.334961, 1 ) +bg_color = Color(0.334961, 0.334961, 0.334961, 1) -[sub_resource type="StyleBoxFlat" id=169] +[sub_resource type="StyleBoxFlat" id="169"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.334961, 0.334961, 0.334961, 1 ) +bg_color = Color(0.334961, 0.334961, 0.334961, 1) -[sub_resource type="StyleBoxFlat" id=170] +[sub_resource type="StyleBoxFlat" id="170"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.0679686, 0.0679686, 0.0679686, 1 ) - -[sub_resource type="Image" id=226] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 8, -"mipmaps": false, -"width": 64 -} - -[sub_resource type="ImageTexture" id=172] -flags = 0 -flags = 0 -image = SubResource( 226 ) -size = Vector2( 64, 8 ) +bg_color = Color(0.0679686, 0.0679686, 0.0679686, 1) -[sub_resource type="Image" id=227] -data = { -"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=174] -flags = 0 -flags = 0 -image = SubResource( 227 ) -size = Vector2( 8, 8 ) - -[sub_resource type="StyleBoxTexture" id=175] -texture = SubResource( 174 ) -region_rect = Rect2( 0, 0, 8, 8 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=176] +[sub_resource type="StyleBoxFlat" id="176"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +bg_color = Color(0.113281, 0.113281, 0.113281, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.113281, 0.113281, 0.113281, 1 ) +border_color = Color(0.113281, 0.113281, 0.113281, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.3 ) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 [resource] resource_name = "Dark" -default_font = ExtResource( 1 ) +default_font = ExtResource("7_q8bkb") +default_font_size = 16 BoxContainer/constants/separation = 4 -Button/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -Button/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -Button/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 ) -Button/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 ) -Button/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) -Button/colors/icon_color_pressed = Color( 0.211961, 0.45549, 0.613333, 1 ) -Button/constants/hseparation = 2 -Button/fonts/font = ExtResource( 1 ) -Button/styles/disabled = SubResource( 2 ) -Button/styles/focus = SubResource( 3 ) -Button/styles/hover = SubResource( 4 ) -Button/styles/normal = SubResource( 5 ) -Button/styles/pressed = SubResource( 6 ) -CheckBox/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -CheckBox/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -CheckBox/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 ) -CheckBox/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 ) -CheckBox/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 ) -CheckBox/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) -CheckBox/constants/check_vadjust = 0 -CheckBox/constants/hseparation = 4 -CheckBox/fonts/font = ExtResource( 1 ) -CheckBox/icons/checked = SubResource( 8 ) -CheckBox/icons/radio_checked = SubResource( 10 ) -CheckBox/icons/radio_unchecked = SubResource( 12 ) -CheckBox/icons/unchecked = SubResource( 14 ) -CheckBox/styles/disabled = SubResource( 15 ) -CheckBox/styles/focus = null -CheckBox/styles/hover = SubResource( 15 ) -CheckBox/styles/hover_pressed = SubResource( 16 ) -CheckBox/styles/normal = SubResource( 15 ) -CheckBox/styles/pressed = SubResource( 15 ) -CheckButton/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -CheckButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -CheckButton/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 ) -CheckButton/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 ) -CheckButton/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 ) -CheckButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +Button/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +Button/colors/font_pressed_color = Color(0.184314, 0.396078, 0.533333, 1) +Button/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) +Button/colors/icon_color_pressed = Color(0.211961, 0.45549, 0.613333, 1) +Button/styles/disabled = SubResource("23") +Button/styles/focus = SubResource("23") +Button/styles/hover = SubResource("23") +Button/styles/normal = SubResource("23") +Button/styles/pressed = SubResource("StyleBoxFlat_t0f5f") +CheckBox/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +CheckBox/colors/font_color_disabled = Color(1, 1, 1, 0.3) +CheckBox/colors/font_color_hover = Color(0.866992, 0.866992, 0.866992, 1) +CheckBox/colors/font_color_hover_pressed = Color(1, 1, 1, 1) +CheckBox/colors/font_color_pressed = Color(0.184314, 0.396078, 0.533333, 1) +CheckBox/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) +CheckBox/styles/disabled = SubResource("15") +CheckBox/styles/hover = SubResource("15") +CheckBox/styles/normal = SubResource("15") +CheckBox/styles/pressed = SubResource("15") +CheckButton/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +CheckButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +CheckButton/colors/font_color_hover = Color(0.866992, 0.866992, 0.866992, 1) +CheckButton/colors/font_color_hover_pressed = Color(1, 1, 1, 1) +CheckButton/colors/font_color_pressed = Color(0.184314, 0.396078, 0.533333, 1) +CheckButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) CheckButton/constants/check_vadjust = 0 CheckButton/constants/hseparation = 4 -CheckButton/fonts/font = ExtResource( 1 ) -CheckButton/icons/off = SubResource( 18 ) -CheckButton/icons/off_disabled = SubResource( 20 ) -CheckButton/icons/on = SubResource( 22 ) -CheckButton/icons/on_disabled = SubResource( 20 ) -CheckButton/styles/disabled = SubResource( 23 ) -CheckButton/styles/focus = SubResource( 24 ) -CheckButton/styles/hover = SubResource( 23 ) -CheckButton/styles/hover_pressed = SubResource( 24 ) -CheckButton/styles/normal = SubResource( 23 ) -CheckButton/styles/pressed = SubResource( 23 ) -CollapsibleContainer/icons/arrow_normal = ExtResource( 6 ) +CheckButton/styles/disabled = SubResource("23") +CheckButton/styles/focus = SubResource("24") +CheckButton/styles/hover = SubResource("23") +CheckButton/styles/normal = SubResource("23") +CheckButton/styles/pressed = SubResource("23") +CollapsibleContainer/icons/arrow_normal = ExtResource("6") ColorPicker/constants/h_width = 30 ColorPicker/constants/label_width = 10 ColorPicker/constants/margin = 8 ColorPicker/constants/sv_height = 256 ColorPicker/constants/sv_width = 256 -ColorPicker/icons/add_preset = SubResource( 26 ) -ColorPicker/icons/color_hue = null -ColorPicker/icons/color_sample = null -ColorPicker/icons/overbright_indicator = SubResource( 28 ) -ColorPicker/icons/preset_bg = SubResource( 30 ) -ColorPicker/icons/screen_picker = SubResource( 32 ) -ColorPickerButton/colors/font_color = Color( 1, 1, 1, 1 ) -ColorPickerButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.3 ) -ColorPickerButton/colors/font_color_hover = Color( 1, 1, 1, 1 ) -ColorPickerButton/colors/font_color_pressed = Color( 0.8, 0.8, 0.8, 1 ) +ColorPickerButton/colors/font_color = Color(1, 1, 1, 1) +ColorPickerButton/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.3) +ColorPickerButton/colors/font_color_hover = Color(1, 1, 1, 1) +ColorPickerButton/colors/font_color_pressed = Color(0.8, 0.8, 0.8, 1) ColorPickerButton/constants/hseparation = 2 -ColorPickerButton/fonts/font = ExtResource( 1 ) -ColorPickerButton/icons/bg = SubResource( 30 ) ColorPickerButton/styles/disabled = null ColorPickerButton/styles/focus = null -ColorPickerButton/styles/hover = SubResource( 33 ) -ColorPickerButton/styles/normal = SubResource( 34 ) -ColorPickerButton/styles/pressed = SubResource( 35 ) +ColorPickerButton/styles/hover = SubResource("33") +ColorPickerButton/styles/normal = SubResource("34") +ColorPickerButton/styles/pressed = SubResource("35") Dialogs/constants/button_margin = 32 Dialogs/constants/margin = 8 -FileDialog/colors/files_disabled = Color( 1, 1, 1, 0.3 ) -FileDialog/colors/folder_icon_modulate = Color( 0.42902, 0.577255, 0.673333, 1 ) -FileDialog/icons/folder = SubResource( 37 ) -FileDialog/icons/parent_folder = SubResource( 39 ) -FileDialog/icons/reload = SubResource( 41 ) -FileDialog/icons/toggle_hidden = SubResource( 43 ) -GraphEdit/colors/activity = Color( 0.184314, 0.396078, 0.533333, 1 ) -GraphEdit/colors/grid_major = Color( 1, 1, 1, 0.15 ) -GraphEdit/colors/grid_minor = Color( 1, 1, 1, 0.07 ) -GraphEdit/colors/selection_fill = Color( 0.184314, 0.396078, 0.533333, 0.3 ) -GraphEdit/colors/selection_stroke = Color( 0.184314, 0.396078, 0.533333, 0.8 ) +FileDialog/colors/files_disabled = Color(1, 1, 1, 0.3) +FileDialog/colors/folder_icon_modulate = Color(0.42902, 0.577255, 0.673333, 1) +GraphEdit/colors/activity = Color(0.184314, 0.396078, 0.533333, 1) +GraphEdit/colors/grid_major = Color(1, 1, 1, 0.15) +GraphEdit/colors/grid_minor = Color(1, 1, 1, 0.07) +GraphEdit/colors/selection_fill = Color(0.184314, 0.396078, 0.533333, 0.3) +GraphEdit/colors/selection_stroke = Color(0.184314, 0.396078, 0.533333, 0.8) GraphEdit/constants/bezier_len_neg = 160 GraphEdit/constants/bezier_len_pos = 80 -GraphEdit/icons/minus = SubResource( 45 ) -GraphEdit/icons/more = SubResource( 47 ) -GraphEdit/icons/reset = SubResource( 49 ) -GraphEdit/icons/snap = SubResource( 51 ) -GraphEdit/styles/bg = SubResource( 52 ) -GraphNode/colors/close_color = Color( 1, 1, 1, 0.7 ) -GraphNode/colors/resizer_color = Color( 1, 1, 1, 0.7 ) -GraphNode/colors/title_color = Color( 1, 1, 1, 1 ) +GraphEdit/styles/bg = SubResource("52") +GraphNode/colors/close_color = Color(1, 1, 1, 0.7) +GraphNode/colors/resizer_color = Color(1, 1, 1, 0.7) +GraphNode/colors/title_color = Color(1, 1, 1, 1) GraphNode/constants/close_h_offset = 20 GraphNode/constants/close_offset = 20 GraphNode/constants/port_offset = 14 GraphNode/constants/separation = 1 GraphNode/constants/title_h_offset = -16 GraphNode/constants/title_offset = 20 -GraphNode/icons/close = SubResource( 54 ) -GraphNode/icons/port = SubResource( 56 ) -GraphNode/icons/resizer = SubResource( 58 ) -GraphNode/styles/breakpoint = SubResource( 59 ) -GraphNode/styles/comment = SubResource( 60 ) -GraphNode/styles/commentfocus = SubResource( 61 ) -GraphNode/styles/frame = SubResource( 62 ) -GraphNode/styles/position = SubResource( 63 ) -GraphNode/styles/selectedframe = SubResource( 64 ) -GraphNode/styles/state_machine_frame = SubResource( 65 ) -GraphNode/styles/state_machine_selectedframe = SubResource( 66 ) +GraphNode/styles/breakpoint = SubResource("59") +GraphNode/styles/comment = SubResource("60") +GraphNode/styles/commentfocus = SubResource("61") +GraphNode/styles/frame = SubResource("62") +GraphNode/styles/position = SubResource("63") +GraphNode/styles/selectedframe = SubResource("64") +GraphNode/styles/state_machine_frame = SubResource("65") +GraphNode/styles/state_machine_selectedframe = SubResource("66") GridContainer/constants/hseparation = 4 GridContainer/constants/vseparation = 4 HBoxContainer/constants/separation = 4 -HScrollBar/icons/decrement = SubResource( 67 ) -HScrollBar/icons/decrement_highlight = SubResource( 67 ) -HScrollBar/icons/increment = SubResource( 67 ) -HScrollBar/icons/increment_highlight = SubResource( 67 ) -HScrollBar/styles/grabber = SubResource( 70 ) -HScrollBar/styles/grabber_highlight = SubResource( 73 ) -HScrollBar/styles/grabber_pressed = SubResource( 76 ) -HScrollBar/styles/scroll = SubResource( 79 ) -HScrollBar/styles/scroll_focus = SubResource( 80 ) HSeparator/constants/separation = 4 -HSeparator/styles/separator = SubResource( 81 ) -HSlider/icons/grabber = SubResource( 83 ) -HSlider/icons/grabber_disabled = null -HSlider/icons/grabber_highlight = SubResource( 85 ) -HSlider/icons/tick = null -HSlider/styles/focus = null -HSlider/styles/grabber_area = SubResource( 86 ) -HSlider/styles/grabber_area_highlight = SubResource( 87 ) -HSlider/styles/grabber_disabled = null -HSlider/styles/grabber_highlight = null -HSlider/styles/slider = SubResource( 88 ) +HSeparator/styles/separator = SubResource("81") +HSlider/styles/grabber_area = SubResource("86") +HSlider/styles/grabber_area_highlight = SubResource("87") +HSlider/styles/slider = SubResource("88") HSplitContainer/constants/autohide = 1 HSplitContainer/constants/separation = 8 -HSplitContainer/icons/grabber = SubResource( 90 ) -HSplitContainer/styles/bg = SubResource( 91 ) -Header/base_type = "Label" -Header/colors/font_color = Color( 0.85, 0.85, 0.85, 1 ) -Header/fonts/font = ExtResource( 2 ) -Icons/colors/modulate_color = Color( 0.74902, 0.74902, 0.74902, 1 ) -ItemList/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -ItemList/colors/font_color_selected = Color( 1, 1, 1, 1 ) -ItemList/colors/guide_color = Color( 1, 1, 1, 0.05 ) +HeaderSmall/font_sizes/font_size = 18 +Icons/colors/modulate_color = Color(0.74902, 0.74902, 0.74902, 1) +ItemList/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +ItemList/colors/font_color_selected = Color(1, 1, 1, 1) +ItemList/colors/guide_color = Color(1, 1, 1, 0.05) ItemList/constants/hseparation = 3 ItemList/constants/icon_margin = 4 ItemList/constants/line_separation = 3 ItemList/constants/vseparation = 3 -ItemList/fonts/font = ExtResource( 1 ) -ItemList/styles/bg = SubResource( 92 ) -ItemList/styles/bg_focus = SubResource( 93 ) -ItemList/styles/cursor = SubResource( 94 ) -ItemList/styles/cursor_unfocused = SubResource( 94 ) -ItemList/styles/selected = SubResource( 95 ) -ItemList/styles/selected_focus = SubResource( 96 ) -Label/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -Label/colors/font_color_shadow = Color( 0, 0, 0, 0 ) -Label/colors/font_outline_modulate = Color( 1, 1, 1, 1 ) +ItemList/styles/bg = SubResource("92") +ItemList/styles/bg_focus = SubResource("93") +ItemList/styles/cursor = SubResource("94") +ItemList/styles/cursor_unfocused = SubResource("94") +ItemList/styles/selected = SubResource("95") +ItemList/styles/selected_focus = SubResource("96") +Label/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +Label/colors/font_color_shadow = Color(0, 0, 0, 0) +Label/colors/font_outline_modulate = Color(1, 1, 1, 1) Label/constants/line_spacing = 3 Label/constants/shadow_as_outline = 0 Label/constants/shadow_offset_x = 1 Label/constants/shadow_offset_y = 1 -Label/fonts/font = ExtResource( 1 ) -Label/styles/normal = SubResource( 97 ) -LineEdit/colors/clear_button_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -LineEdit/colors/clear_button_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 ) -LineEdit/colors/cursor_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -LineEdit/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -LineEdit/colors/font_color_selected = Color( 1, 1, 1, 1 ) -LineEdit/colors/read_only = Color( 1, 1, 1, 0.3 ) -LineEdit/colors/selection_color = Color( 0.184314, 0.396078, 0.533333, 0.4 ) +Label/styles/normal = SubResource("97") +LineEdit/colors/clear_button_color = Color(0.77832, 0.77832, 0.77832, 1) +LineEdit/colors/clear_button_color_pressed = Color(0.184314, 0.396078, 0.533333, 1) +LineEdit/colors/cursor_color = Color(0.77832, 0.77832, 0.77832, 1) +LineEdit/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +LineEdit/colors/font_color_selected = Color(1, 1, 1, 1) +LineEdit/colors/read_only = Color(1, 1, 1, 0.3) +LineEdit/colors/selection_color = Color(0.184314, 0.396078, 0.533333, 0.4) LineEdit/constants/minimum_spaces = 12 -LineEdit/fonts/font = ExtResource( 1 ) -LineEdit/icons/clear = SubResource( 99 ) -LineEdit/styles/focus = SubResource( 3 ) -LineEdit/styles/normal = SubResource( 5 ) -LineEdit/styles/read_only = SubResource( 2 ) -LinkButton/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -LinkButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -LinkButton/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 ) -LinkButton/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 ) -LinkButton/styles/focus = SubResource( 97 ) +LineEdit/styles/focus = SubResource("3") +LineEdit/styles/normal = SubResource("5") +LineEdit/styles/read_only = SubResource("2") +LinkButton/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +LinkButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +LinkButton/colors/font_color_hover = Color(0.866992, 0.866992, 0.866992, 1) +LinkButton/colors/font_color_pressed = Color(0.184314, 0.396078, 0.533333, 1) +LinkButton/styles/focus = SubResource("97") MarginContainer/constants/margin_bottom = 0 MarginContainer/constants/margin_left = 0 MarginContainer/constants/margin_right = 0 MarginContainer/constants/margin_top = 0 -MenuButton/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -MenuButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -MenuButton/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 ) -MenuButton/colors/font_color_pressed = Color( 1, 1, 1, 1 ) +MenuButton/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +MenuButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +MenuButton/colors/font_color_hover = Color(0.866992, 0.866992, 0.866992, 1) +MenuButton/colors/font_color_pressed = Color(1, 1, 1, 1) MenuButton/constants/hseparation = 3 -MenuButton/fonts/font = ExtResource( 1 ) -MenuButton/styles/disabled = SubResource( 23 ) -MenuButton/styles/focus = SubResource( 23 ) -MenuButton/styles/hover = SubResource( 23 ) -MenuButton/styles/normal = SubResource( 23 ) -MenuButton/styles/pressed = SubResource( 23 ) -Misc/colors/clear_color = Color( 0.141176, 0.141176, 0.141176, 1 ) -OptionButton/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -OptionButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -OptionButton/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 ) -OptionButton/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 ) -OptionButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +MenuButton/styles/disabled = SubResource("23") +MenuButton/styles/focus = SubResource("23") +MenuButton/styles/hover = SubResource("23") +MenuButton/styles/normal = SubResource("23") +MenuButton/styles/pressed = SubResource("23") +Misc/colors/clear_color = Color(0.141176, 0.141176, 0.141176, 1) +OptionButton/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +OptionButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +OptionButton/colors/font_color_hover = Color(0.866667, 0.866667, 0.866667, 1) +OptionButton/colors/font_color_pressed = Color(0.184314, 0.396078, 0.533333, 1) +OptionButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) OptionButton/constants/arrow_margin = 4 OptionButton/constants/hseparation = 4 OptionButton/constants/modulate_arrow = 1 -OptionButton/fonts/font = ExtResource( 1 ) -OptionButton/icons/arrow = SubResource( 101 ) -OptionButton/styles/disabled = SubResource( 2 ) -OptionButton/styles/focus = SubResource( 3 ) -OptionButton/styles/hover = SubResource( 4 ) -OptionButton/styles/normal = SubResource( 5 ) -OptionButton/styles/pressed = SubResource( 6 ) -Panel/styles/panel = SubResource( 103 ) +OptionButton/styles/disabled = SubResource("2") +OptionButton/styles/focus = SubResource("3") +OptionButton/styles/hover = SubResource("4") +OptionButton/styles/normal = SubResource("5") +OptionButton/styles/pressed = SubResource("6") +Panel/styles/panel = SubResource("103") Panel/styles/panelf = null Panel/styles/panelnc = null -PanelContainer/styles/panel = SubResource( 104 ) -PopupDialog/styles/panel = SubResource( 105 ) -PopupMenu/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -PopupMenu/colors/font_color_accel = Color( 1, 1, 1, 0.3 ) -PopupMenu/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -PopupMenu/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 ) +PanelContainer/styles/panel = SubResource("104") +Popup/styles/panel = SubResource("105") +PopupMenu/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +PopupMenu/colors/font_color_accel = Color(1, 1, 1, 0.3) +PopupMenu/colors/font_color_disabled = Color(1, 1, 1, 0.3) +PopupMenu/colors/font_color_hover = Color(0.866992, 0.866992, 0.866992, 1) PopupMenu/constants/hseparation = 4 PopupMenu/constants/vseparation = 5 -PopupMenu/fonts/font = ExtResource( 1 ) -PopupMenu/icons/checked = SubResource( 8 ) -PopupMenu/icons/radio_checked = SubResource( 10 ) -PopupMenu/icons/radio_unchecked = SubResource( 12 ) -PopupMenu/icons/submenu = SubResource( 107 ) -PopupMenu/icons/unchecked = SubResource( 14 ) -PopupMenu/icons/visibility_hidden = SubResource( 109 ) -PopupMenu/icons/visibility_visible = SubResource( 43 ) -PopupMenu/icons/visibility_xray = SubResource( 111 ) -PopupMenu/styles/disabled = SubResource( 23 ) -PopupMenu/styles/focus = SubResource( 23 ) -PopupMenu/styles/hover = SubResource( 112 ) -PopupMenu/styles/labeled_separator_left = SubResource( 113 ) -PopupMenu/styles/labeled_separator_right = SubResource( 114 ) -PopupMenu/styles/normal = SubResource( 23 ) -PopupMenu/styles/panel = SubResource( 105 ) +PopupMenu/styles/disabled = SubResource("23") +PopupMenu/styles/focus = SubResource("23") +PopupMenu/styles/hover = SubResource("112") +PopupMenu/styles/labeled_separator_left = SubResource("113") +PopupMenu/styles/labeled_separator_right = SubResource("114") +PopupMenu/styles/normal = SubResource("23") +PopupMenu/styles/panel = SubResource("105") PopupMenu/styles/panel_disabled = null -PopupMenu/styles/pressed = SubResource( 23 ) -PopupMenu/styles/separator = SubResource( 115 ) -PopupPanel/styles/panel = SubResource( 105 ) -ProgressBar/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -ProgressBar/styles/bg = SubResource( 118 ) -ProgressBar/styles/fg = SubResource( 121 ) -RichTextLabel/colors/default_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 ) +PopupMenu/styles/pressed = SubResource("23") +PopupMenu/styles/separator = SubResource("115") +PopupPanel/styles/panel = SubResource("105") +ProgressBar/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +RichTextLabel/colors/default_color = Color(0.77832, 0.77832, 0.77832, 1) +RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0) RichTextLabel/constants/shadow_as_outline = 0 RichTextLabel/constants/shadow_offset_x = 1 RichTextLabel/constants/shadow_offset_y = 1 -RichTextLabel/styles/focus = SubResource( 123 ) -RichTextLabel/styles/normal = SubResource( 52 ) -RulerButton/base_type = "Button" -RulerButton/styles/focus = SubResource( 1 ) -RulerButton/styles/hover = SubResource( 1 ) -RulerButton/styles/normal = SubResource( 1 ) -RulerButton/styles/pressed = SubResource( 1 ) -SpinBox/icons/updown = SubResource( 125 ) -TabContainer/colors/font_color_bg = Color( 1, 1, 1, 0.3 ) -TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) -TabContainer/colors/font_color_fg = Color( 0.77832, 0.77832, 0.77832, 1 ) +RichTextLabel/styles/focus = SubResource("123") +RichTextLabel/styles/normal = SubResource("52") +RulerButton/base_type = &"Button" +RulerButton/styles/focus = SubResource("1") +RulerButton/styles/hover = SubResource("1") +RulerButton/styles/normal = SubResource("1") +RulerButton/styles/pressed = SubResource("1") +TabBar/colors/font_color_bg = Color(1, 1, 1, 0.3) +TabBar/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2) +TabBar/colors/font_color_fg = Color(0.77832, 0.77832, 0.77832, 1) +TabBar/constants/hseparation = 4 +TabBar/constants/label_valign_bg = 2 +TabBar/constants/label_valign_fg = 0 +TabBar/constants/top_margin = 24 +TabBar/styles/button = SubResource("23") +TabBar/styles/button_pressed = SubResource("23") +TabBar/styles/panel = SubResource("142") +TabBar/styles/tab_bg = SubResource("139") +TabBar/styles/tab_disabled = SubResource("140") +TabBar/styles/tab_fg = SubResource("141") +TabContainer/colors/font_color_bg = Color(1, 1, 1, 0.3) +TabContainer/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2) +TabContainer/colors/font_color_fg = Color(0.77832, 0.77832, 0.77832, 1) TabContainer/constants/hseparation = 4 TabContainer/constants/label_valign_bg = 2 TabContainer/constants/label_valign_fg = 0 TabContainer/constants/side_margin = 0 TabContainer/constants/top_margin = 24 -TabContainer/fonts/font = ExtResource( 1 ) -TabContainer/icons/decrement = SubResource( 127 ) -TabContainer/icons/decrement_highlight = SubResource( 129 ) -TabContainer/icons/increment = SubResource( 131 ) -TabContainer/icons/increment_highlight = SubResource( 133 ) -TabContainer/icons/menu = SubResource( 135 ) -TabContainer/icons/menu_highlight = SubResource( 137 ) -TabContainer/styles/panel = SubResource( 138 ) -TabContainer/styles/tab_bg = SubResource( 139 ) -TabContainer/styles/tab_disabled = SubResource( 140 ) -TabContainer/styles/tab_fg = SubResource( 141 ) -Tabs/colors/font_color_bg = Color( 1, 1, 1, 0.3 ) -Tabs/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) -Tabs/colors/font_color_fg = Color( 0.77832, 0.77832, 0.77832, 1 ) -Tabs/constants/hseparation = 4 -Tabs/constants/label_valign_bg = 2 -Tabs/constants/label_valign_fg = 0 -Tabs/constants/top_margin = 24 -Tabs/fonts/font = ExtResource( 1 ) -Tabs/icons/close = SubResource( 99 ) -Tabs/icons/decrement = SubResource( 127 ) -Tabs/icons/decrement_highlight = SubResource( 129 ) -Tabs/icons/increment = SubResource( 131 ) -Tabs/icons/increment_highlight = SubResource( 133 ) -Tabs/styles/button = SubResource( 23 ) -Tabs/styles/button_pressed = SubResource( 23 ) -Tabs/styles/panel = SubResource( 142 ) -Tabs/styles/tab_bg = SubResource( 139 ) -Tabs/styles/tab_disabled = SubResource( 140 ) -Tabs/styles/tab_fg = SubResource( 141 ) -TextEdit/colors/background_color = Color( 0, 0, 0, 0 ) -TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 ) -TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 ) -TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 ) -TextEdit/colors/caret_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 ) -TextEdit/colors/completion_background_color = Color( 0.172549, 0.164706, 0.196078, 1 ) -TextEdit/colors/completion_existing_color = Color( 0.87451, 0.87451, 0.87451, 0.129412 ) -TextEdit/colors/completion_font_color = Color( 0.666667, 0.666667, 0.666667, 1 ) -TextEdit/colors/completion_scroll_color = Color( 1, 1, 1, 1 ) -TextEdit/colors/completion_selected_color = Color( 0.262745, 0.258824, 0.266667, 1 ) -TextEdit/colors/current_line_color = Color( 0.25, 0.25, 0.26, 0.8 ) -TextEdit/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 ) -TextEdit/colors/function_color = Color( 0.4, 0.635294, 0.807843, 1 ) -TextEdit/colors/line_number_color = Color( 0.666667, 0.666667, 0.666667, 0.4 ) -TextEdit/colors/mark_color = Color( 1, 0.4, 0.4, 0.4 ) -TextEdit/colors/member_variable_color = Color( 0.901961, 0.305882, 0.34902, 1 ) -TextEdit/colors/number_color = Color( 0.921569, 0.584314, 0.196078, 1 ) -TextEdit/colors/safe_line_number_color = Color( 0.666667, 0.784314, 0.666667, 0.6 ) -TextEdit/colors/selection_color = Color( 0.184314, 0.396078, 0.533333, 0.4 ) -TextEdit/colors/symbol_color = Color( 0.941176, 0.941176, 0.941176, 1 ) -TextEdit/colors/word_highlighted_color = Color( 0.8, 0.9, 0.9, 0.15 ) +TabContainer/styles/panel = SubResource("138") +TabContainer/styles/tab_bg = SubResource("139") +TabContainer/styles/tab_disabled = SubResource("140") +TabContainer/styles/tab_fg = SubResource("141") +TextEdit/colors/background_color = Color(0, 0, 0, 0) +TextEdit/colors/brace_mismatch_color = Color(1, 0.2, 0.2, 1) +TextEdit/colors/breakpoint_color = Color(0.8, 0.8, 0.4, 0.2) +TextEdit/colors/caret_background_color = Color(0, 0, 0, 1) +TextEdit/colors/caret_color = Color(0.77832, 0.77832, 0.77832, 1) +TextEdit/colors/code_folding_color = Color(0.8, 0.8, 0.8, 0.8) +TextEdit/colors/completion_background_color = Color(0.172549, 0.164706, 0.196078, 1) +TextEdit/colors/completion_existing_color = Color(0.87451, 0.87451, 0.87451, 0.129412) +TextEdit/colors/completion_font_color = Color(0.666667, 0.666667, 0.666667, 1) +TextEdit/colors/completion_scroll_color = Color(1, 1, 1, 1) +TextEdit/colors/completion_selected_color = Color(0.262745, 0.258824, 0.266667, 1) +TextEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8) +TextEdit/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +TextEdit/colors/font_color_selected = Color(0, 0, 0, 1) +TextEdit/colors/function_color = Color(0.4, 0.635294, 0.807843, 1) +TextEdit/colors/line_number_color = Color(0.666667, 0.666667, 0.666667, 0.4) +TextEdit/colors/mark_color = Color(1, 0.4, 0.4, 0.4) +TextEdit/colors/member_variable_color = Color(0.901961, 0.305882, 0.34902, 1) +TextEdit/colors/number_color = Color(0.921569, 0.584314, 0.196078, 1) +TextEdit/colors/safe_line_number_color = Color(0.666667, 0.784314, 0.666667, 0.6) +TextEdit/colors/selection_color = Color(0.184314, 0.396078, 0.533333, 0.4) +TextEdit/colors/symbol_color = Color(0.941176, 0.941176, 0.941176, 1) +TextEdit/colors/word_highlighted_color = Color(0.8, 0.9, 0.9, 0.15) TextEdit/constants/completion_lines = 7 TextEdit/constants/completion_max_width = 50 TextEdit/constants/completion_scroll_width = 3 TextEdit/constants/line_spacing = 4 -TextEdit/fonts/font = ExtResource( 1 ) -TextEdit/icons/fold = SubResource( 144 ) -TextEdit/icons/folded = SubResource( 146 ) -TextEdit/icons/space = SubResource( 148 ) -TextEdit/icons/tab = SubResource( 150 ) TextEdit/styles/completion = null -TextEdit/styles/focus = SubResource( 4 ) -TextEdit/styles/normal = SubResource( 5 ) -TextEdit/styles/read_only = SubResource( 2 ) -ToolButton/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -ToolButton/colors/font_color_hover = Color( 0.866992, 0.866992, 0.866992, 1 ) -ToolButton/colors/font_color_pressed = Color( 0.184314, 0.396078, 0.533333, 1 ) -ToolButton/styles/disabled = SubResource( 23 ) -ToolButton/styles/focus = SubResource( 23 ) -ToolButton/styles/hover = SubResource( 23 ) -ToolButton/styles/normal = SubResource( 23 ) -ToolButton/styles/pressed = SubResource( 23 ) -TooltipLabel/colors/font_color = Color( 0.22168, 0.22168, 0.22168, 1 ) -TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 0.1 ) +TextEdit/styles/focus = SubResource("4") +TextEdit/styles/normal = SubResource("5") +TextEdit/styles/read_only = SubResource("2") +TooltipLabel/colors/font_color = Color(0.22168, 0.22168, 0.22168, 1) +TooltipLabel/colors/font_color_shadow = Color(0, 0, 0, 0.1) TooltipLabel/constants/shadow_offset_x = 1 TooltipLabel/constants/shadow_offset_y = 1 -TooltipLabel/fonts/font = ExtResource( 1 ) -TooltipPanel/styles/panel = SubResource( 151 ) -TopMenuPanel/base_type = "Panel" -TopMenuPanel/styles/panel = SubResource( 102 ) -Tree/colors/cursor_color = Color( 0, 0, 0, 1 ) -Tree/colors/custom_button_font_highlight = Color( 0.866992, 0.866992, 0.866992, 1 ) -Tree/colors/drop_position_color = Color( 0.184314, 0.396078, 0.533333, 1 ) -Tree/colors/font_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -Tree/colors/font_color_selected = Color( 1, 1, 1, 1 ) -Tree/colors/guide_color = Color( 1, 1, 1, 0.05 ) -Tree/colors/relationship_line_color = Color( 1, 1, 1, 0.1 ) -Tree/colors/selection_color = Color( 0.1, 0.1, 1, 0.8 ) -Tree/colors/title_button_color = Color( 0.77832, 0.77832, 0.77832, 1 ) +TooltipPanel/styles/panel = SubResource("151") +TopMenuPanel/base_type = &"Panel" +TopMenuPanel/styles/panel = SubResource("102") +Tree/colors/cursor_color = Color(0, 0, 0, 1) +Tree/colors/custom_button_font_highlight = Color(0.866992, 0.866992, 0.866992, 1) +Tree/colors/drop_position_color = Color(0.184314, 0.396078, 0.533333, 1) +Tree/colors/font_color = Color(0.77832, 0.77832, 0.77832, 1) +Tree/colors/font_color_selected = Color(1, 1, 1, 1) +Tree/colors/guide_color = Color(1, 1, 1, 0.05) +Tree/colors/relationship_line_color = Color(1, 1, 1, 0.1) +Tree/colors/selection_color = Color(0.1, 0.1, 1, 0.8) +Tree/colors/title_button_color = Color(0.77832, 0.77832, 0.77832, 1) Tree/constants/button_margin = 4 Tree/constants/draw_guides = 0 Tree/constants/draw_relationship_lines = 1 @@ -1872,63 +849,39 @@ Tree/constants/item_margin = 12 Tree/constants/scroll_border = 40 Tree/constants/scroll_speed = 12 Tree/constants/vseparation = 4 -Tree/fonts/font = ExtResource( 1 ) -Tree/fonts/title_button_font = ExtResource( 1 ) -Tree/icons/arrow = SubResource( 144 ) -Tree/icons/arrow_collapsed = SubResource( 146 ) -Tree/icons/checked = SubResource( 8 ) -Tree/icons/select_arrow = SubResource( 153 ) -Tree/icons/unchecked = SubResource( 14 ) -Tree/icons/updown = SubResource( 155 ) -Tree/styles/bg = SubResource( 52 ) -Tree/styles/bg_focus = SubResource( 93 ) -Tree/styles/button_pressed = SubResource( 156 ) -Tree/styles/cursor = SubResource( 157 ) -Tree/styles/cursor_unfocused = SubResource( 157 ) -Tree/styles/custom_button = SubResource( 158 ) -Tree/styles/custom_button_hover = SubResource( 5 ) -Tree/styles/custom_button_pressed = SubResource( 159 ) -Tree/styles/hover = SubResource( 160 ) -Tree/styles/selected = SubResource( 95 ) -Tree/styles/selected_focus = SubResource( 96 ) -Tree/styles/title_button_hover = SubResource( 161 ) -Tree/styles/title_button_normal = SubResource( 161 ) -Tree/styles/title_button_pressed = SubResource( 161 ) +Tree/styles/bg = SubResource("52") +Tree/styles/bg_focus = SubResource("93") +Tree/styles/button_pressed = SubResource("156") +Tree/styles/cursor = SubResource("157") +Tree/styles/cursor_unfocused = SubResource("157") +Tree/styles/custom_button = SubResource("158") +Tree/styles/custom_button_hover = SubResource("5") +Tree/styles/custom_button_pressed = SubResource("159") +Tree/styles/hover = SubResource("160") +Tree/styles/selected = SubResource("95") +Tree/styles/selected_focus = SubResource("96") +Tree/styles/title_button_hover = SubResource("161") +Tree/styles/title_button_normal = SubResource("161") +Tree/styles/title_button_pressed = SubResource("161") VBoxContainer/constants/separation = 4 -VScrollBar/icons/decrement = SubResource( 67 ) -VScrollBar/icons/decrement_highlight = SubResource( 67 ) -VScrollBar/icons/increment = SubResource( 67 ) -VScrollBar/icons/increment_highlight = SubResource( 67 ) -VScrollBar/styles/grabber = SubResource( 162 ) -VScrollBar/styles/grabber_highlight = SubResource( 163 ) -VScrollBar/styles/grabber_pressed = SubResource( 164 ) -VScrollBar/styles/scroll = SubResource( 165 ) -VScrollBar/styles/scroll_focus = SubResource( 166 ) VSeparator/constants/separation = 4 -VSeparator/styles/separator = SubResource( 167 ) -VSlider/icons/grabber = SubResource( 83 ) -VSlider/icons/grabber_highlight = SubResource( 85 ) -VSlider/styles/grabber_area = SubResource( 168 ) -VSlider/styles/grabber_area_highlight = SubResource( 169 ) -VSlider/styles/slider = SubResource( 170 ) +VSeparator/styles/separator = SubResource("167") +VSlider/styles/grabber_area = SubResource("168") +VSlider/styles/grabber_area_highlight = SubResource("169") +VSlider/styles/slider = SubResource("170") VSplitContainer/constants/autohide = 1 VSplitContainer/constants/separation = 8 -VSplitContainer/icons/grabber = SubResource( 172 ) -VSplitContainer/styles/bg = SubResource( 175 ) -ValueSlider/colors/progress_color = Color( 0.333333, 0.333333, 0.333333, 1 ) -ValueSlider/colors/under_color = Color( 0.0666667, 0.0666667, 0.0666667, 1 ) -ValueSlider/icons/arrow_hover = ExtResource( 4 ) -ValueSlider/icons/arrow_normal = ExtResource( 6 ) -ValueSlider/icons/arrow_pressed = ExtResource( 5 ) +ValueSlider/colors/progress_color = Color(0.333333, 0.333333, 0.333333, 1) +ValueSlider/colors/under_color = Color(0.0666667, 0.0666667, 0.0666667, 1) +ValueSlider/icons/arrow_hover = ExtResource("4") +ValueSlider/icons/arrow_normal = ExtResource("6") +ValueSlider/icons/arrow_pressed = ExtResource("5") ValueSlider/icons/texture_over = null -ValueSlider/icons/texture_progress = ExtResource( 3 ) -ValueSlider/icons/texture_under = ExtResource( 3 ) -WindowDialog/colors/title_color = Color( 0.77832, 0.77832, 0.77832, 1 ) -WindowDialog/constants/close_h_ofs = 22 -WindowDialog/constants/close_v_ofs = 20 -WindowDialog/constants/scaleborder_size = 4 -WindowDialog/constants/title_height = 24 -WindowDialog/fonts/title_font = ExtResource( 1 ) -WindowDialog/icons/close = SubResource( 99 ) -WindowDialog/icons/close_highlight = SubResource( 99 ) -WindowDialog/styles/panel = SubResource( 176 ) +ValueSlider/icons/texture_progress = ExtResource("3") +ValueSlider/icons/texture_under = ExtResource("3") +Window/colors/title_color = Color(0.77832, 0.77832, 0.77832, 1) +Window/constants/close_h_ofs = 22 +Window/constants/close_v_ofs = 20 +Window/constants/scaleborder_size = 4 +Window/constants/title_height = 24 +Window/styles/panel = SubResource("176") diff --git a/assets/themes/gray/theme.tres b/assets/themes/gray/theme.tres index 6fbbbc0f52b..3730f74c72f 100644 --- a/assets/themes/gray/theme.tres +++ b/assets/themes/gray/theme.tres @@ -1,1876 +1,859 @@ -[gd_resource type="Theme" load_steps=182 format=2] +[gd_resource type="Theme" load_steps=64 format=3 uid="uid://bcfsxuu6eykiq"] -[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1] -[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2] -[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=3] -[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=4] -[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5] -[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6] +[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="3"] +[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="3_3yr54"] +[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="4"] +[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="5"] +[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="6"] -[sub_resource type="StyleBoxFlat" id=2] +[sub_resource type="StyleBoxFlat" id="23"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.352941, 0.352941, 0.352941, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.27451, 0.27451, 0.27451, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=3] -content_margin_left = 6.0 content_margin_right = 6.0 -content_margin_top = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.00392157, 0.454902, 0.741176, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=4] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.544118, 0.544118, 0.544118, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=5] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.27451, 0.27451, 0.27451, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=6] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.00392157, 0.454902, 0.741176, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="Image" id=176] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 60, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 243, 223, 223, 223, 105, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 104, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 225, 225, 225, 51, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 48, 224, 224, 224, 66, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 103, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 217, 217, 217, 48, 223, 223, 223, 178, 222, 222, 222, 231, 220, 220, 220, 74, 222, 222, 222, 102, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 194, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 219, 219, 219, 64, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 233, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 195, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 224, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 66, 221, 221, 221, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=8] -flags = 0 -flags = 0 -image = SubResource( 176 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=177] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 221, 221, 221, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 217, 217, 217, 68, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 179, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 179, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 181, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 223, 223, 223, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 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] -flags = 0 -flags = 0 -image = SubResource( 177 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=178] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 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] -flags = 0 -flags = 0 -image = SubResource( 178 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=179] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=14] -flags = 0 -flags = 0 -image = SubResource( 179 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=15] -content_margin_left = 4.0 -content_margin_right = 4.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) +bg_color = Color(0.313726, 0.313726, 0.313726, 1) draw_center = false -border_color = Color( 0.27451, 0.27451, 0.27451, 1 ) +border_color = Color(0.27451, 0.27451, 0.27451, 1) -[sub_resource type="StyleBoxFlat" id=16] -bg_color = Color( 0.6, 0.6, 0.6, 0 ) - -[sub_resource type="Image" id=180] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 219, 219, 219, 94, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 220, 220, 220, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 38 -} - -[sub_resource type="ImageTexture" id=18] -flags = 0 -flags = 0 -image = SubResource( 180 ) -size = Vector2( 38, 16 ) - -[sub_resource type="Image" id=181] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": "LumAlpha8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=20] -flags = 4 -flags = 4 -image = SubResource( 181 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=182] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 66, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 223, 220, 220, 220, 66, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 223, 223, 223, 65, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 217, 217, 217, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 12, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 223, 223, 223, 222, 212, 212, 212, 12, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 120, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 120, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 221, 221, 221, 75, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 0, 221, 221, 221, 75, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 214, 214, 214, 25, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 216, 216, 216, 20, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 71, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 121, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 121, 223, 223, 223, 0, 215, 215, 215, 0, 215, 215, 215, 13, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 222, 222, 222, 223, 215, 215, 215, 13, 215, 215, 215, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 66, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 254, 220, 220, 220, 66, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 220, 220, 220, 66, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 224, 220, 220, 220, 66, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 38 -} - -[sub_resource type="ImageTexture" id=22] -flags = 0 -flags = 0 -image = SubResource( 182 ) -size = Vector2( 38, 16 ) - -[sub_resource type="StyleBoxFlat" id=23] -content_margin_left = 6.0 -content_margin_right = 6.0 +[sub_resource type="StyleBoxFlat" id="15"] +content_margin_left = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) +bg_color = Color(0.313726, 0.313726, 0.313726, 1) draw_center = false -border_color = Color( 0.27451, 0.27451, 0.27451, 1 ) - -[sub_resource type="Image" id=183] -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, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 0, 0, 0, 0, 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 -} +border_color = Color(0.27451, 0.27451, 0.27451, 1) -[sub_resource type="ImageTexture" id=25] -flags = 0 -flags = 0 -image = SubResource( 183 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="16"] +bg_color = Color(0.6, 0.6, 0.6, 0) -[sub_resource type="Image" id=184] -data = { -"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 85, 86, 188, 0, 0, 3, 255, 0, 0, 2, 125, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 86, 86, 88, 188, 0, 0, 3, 255, 0, 0, 2, 126, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 88, 88, 89, 188, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 89, 89, 90, 188, 0, 0, 3, 255, 0, 0, 1, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 93, 93, 94, 188, 0, 0, 3, 255, 0, 0, 1, 131, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 94, 94, 96, 188, 0, 0, 3, 255, 0, 0, 1, 132, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 96, 96, 97, 188, 0, 0, 3, 255, 0, 0, 1, 133, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 99, 101, 189, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 136, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=27] -flags = 0 -flags = 0 -image = SubResource( 184 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=185] -data = { -"data": PoolByteArray( 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=29] -flags = 0 -flags = 0 -image = SubResource( 185 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=186] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 218, 222, 222, 222, 70, 222, 222, 222, 70, 223, 223, 223, 218, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 65, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 65, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 0, 0, 0, 0, 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=31] -flags = 0 -flags = 0 -image = SubResource( 186 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=32] -bg_color = Color( 0.768627, 0.768627, 0.768627, 1 ) +[sub_resource type="StyleBoxFlat" id="32"] +bg_color = Color(0.768627, 0.768627, 0.768627, 1) border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 -border_color = Color( 0.686275, 0.686275, 0.686275, 1 ) +border_color = Color(0.686275, 0.686275, 0.686275, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=33] +[sub_resource type="StyleBoxFlat" id="33"] border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 -border_color = Color( 0.686275, 0.686275, 0.686275, 1 ) +border_color = Color(0.686275, 0.686275, 0.686275, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=34] -bg_color = Color( 0.2, 0.2, 0.2, 1 ) +[sub_resource type="StyleBoxFlat" id="34"] +bg_color = Color(0.2, 0.2, 0.2, 1) border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 -border_color = Color( 0.686275, 0.686275, 0.686275, 1 ) +border_color = Color(0.686275, 0.686275, 0.686275, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="Image" id=187] -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, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 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, 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, 223, 223, 223, 0, 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, 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, 222, 222, 222, 70, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 224, 224, 224, 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, 223, 223, 223, 180, 223, 223, 223, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=36] -flags = 0 -flags = 0 -image = SubResource( 187 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=188] -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, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 199, 222, 222, 222, 198, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 223, 223, 223, 211, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 218, 218, 218, 21, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 216, 216, 216, 20, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 216, 216, 216, 20, 223, 223, 223, 209, 223, 223, 223, 254, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 251, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 193, 223, 223, 223, 254, 222, 222, 222, 206, 214, 214, 214, 19, 223, 223, 223, 254, 223, 223, 223, 249, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 193, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 192, 214, 214, 214, 19, 217, 217, 217, 0, 223, 223, 223, 254, 223, 223, 223, 249, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 192, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=38] -flags = 0 -flags = 0 -image = SubResource( 188 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=189] -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, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 98, 223, 223, 223, 177, 223, 223, 223, 228, 223, 223, 223, 228, 223, 223, 223, 177, 223, 223, 223, 98, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 23, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 185, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 215, 215, 215, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 174, 223, 223, 223, 254, 222, 222, 222, 87, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 87, 223, 223, 223, 254, 222, 222, 222, 174, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 147, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 161, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 212, 212, 212, 0, 212, 212, 212, 6, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 214, 204, 204, 204, 10, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 178, 223, 223, 223, 0, 0, 0, 0, 0, 214, 214, 214, 0, 217, 217, 217, 34, 223, 223, 223, 240, 223, 223, 223, 245, 218, 218, 218, 42, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 96, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 0, 221, 221, 221, 84, 223, 223, 223, 97, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 186, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 228, 223, 223, 223, 177, 221, 221, 221, 99, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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] -flags = 0 -flags = 0 -image = SubResource( 189 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=190] -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, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 221, 221, 221, 0, 221, 221, 221, 92, 223, 223, 223, 185, 222, 222, 222, 231, 222, 222, 222, 231, 223, 223, 223, 186, 222, 222, 222, 95, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 218, 218, 218, 35, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 41, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 175, 175, 0, 223, 223, 223, 32, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 228, 218, 218, 218, 35, 194, 194, 194, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 213, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 217, 170, 170, 170, 3, 170, 170, 170, 0, 223, 223, 223, 0, 223, 223, 223, 89, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 87, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 200, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 87, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 93, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 24, 222, 222, 222, 0, 222, 222, 222, 198, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 198, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 19, 218, 218, 218, 0, 222, 222, 222, 199, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 199, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 254, 221, 221, 221, 84, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 201, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 222, 223, 223, 223, 254, 223, 223, 223, 224, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 222, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 196, 196, 196, 0, 223, 223, 223, 41, 223, 223, 223, 232, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 232, 223, 223, 223, 41, 196, 196, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 44, 223, 223, 223, 216, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 216, 220, 220, 220, 44, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 127, 127, 127, 2, 223, 223, 223, 98, 222, 222, 222, 190, 223, 223, 223, 232, 223, 223, 223, 232, 222, 222, 222, 190, 223, 223, 223, 98, 127, 127, 127, 2, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=42] -flags = 0 -flags = 0 -image = SubResource( 190 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=191] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=44] -flags = 0 -flags = 0 -image = SubResource( 191 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=192] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=46] -flags = 0 -flags = 0 -image = SubResource( 192 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=193] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 221, 78, 78, 78, 127, 112, 112, 112, 143, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 250, 153, 153, 153, 171, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 205, 0, 0, 0, 100, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 152, 152, 152, 169, 201, 201, 201, 220, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=48] -flags = 0 -flags = 0 -image = SubResource( 193 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=194] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 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, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 115, 255, 255, 255, 156, 255, 255, 255, 156, 255, 255, 255, 114, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 160, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 160, 255, 255, 255, 17, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 110, 255, 255, 255, 174, 255, 255, 255, 131, 255, 255, 255, 35, 255, 255, 255, 35, 255, 255, 255, 131, 255, 255, 255, 174, 255, 255, 255, 110, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 153, 255, 255, 255, 174, 255, 255, 255, 34, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 34, 255, 255, 255, 174, 255, 255, 255, 153, 255, 255, 255, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=50] -flags = 0 -flags = 0 -image = SubResource( 194 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=51] +[sub_resource type="StyleBoxFlat" id="51"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) +bg_color = Color(0.313726, 0.313726, 0.313726, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.235294, 0.235294, 0.235294, 1 ) - -[sub_resource type="Image" id=195] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} +border_color = Color(0.235294, 0.235294, 0.235294, 1) -[sub_resource type="ImageTexture" id=53] -flags = 0 -flags = 0 -image = SubResource( 195 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=196] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 58, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 59, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 10, -"mipmaps": false, -"width": 10 -} - -[sub_resource type="ImageTexture" id=55] -flags = 0 -flags = 0 -image = SubResource( 196 ) -size = Vector2( 10, 10 ) - -[sub_resource type="Image" id=197] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 105, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=57] -flags = 0 -flags = 0 -image = SubResource( 197 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=58] +[sub_resource type="StyleBoxFlat" id="58"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 0.87, 0.4, 1 ) -shadow_color = Color( 1, 0.87, 0.4, 0.1 ) +border_color = Color(1, 0.87, 0.4, 1) +shadow_color = Color(1, 0.87, 0.4, 0.1) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=59] +[sub_resource type="StyleBoxFlat" id="59"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.3 ) +bg_color = Color(0, 0, 0, 0.3) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=60] +[sub_resource type="StyleBoxFlat" id="60"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.4 ) +bg_color = Color(0, 0, 0, 0.4) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=61] +[sub_resource type="StyleBoxFlat" id="61"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.7 ) +bg_color = Color(0, 0, 0, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=62] +[sub_resource type="StyleBoxFlat" id="62"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 0.47, 0.42, 1 ) -shadow_color = Color( 1, 0.47, 0.42, 0.2 ) +border_color = Color(1, 0.47, 0.42, 1) +shadow_color = Color(1, 0.47, 0.42, 0.2) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=63] +[sub_resource type="StyleBoxFlat" id="63"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.00392157, 0.454902, 0.741176, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.00392157, 0.454902, 0.741176, 0.9) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=64] +[sub_resource type="StyleBoxFlat" id="64"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.7 ) +bg_color = Color(0, 0, 0, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=65] +[sub_resource type="StyleBoxFlat" id="65"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.00392157, 0.454902, 0.741176, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.00392157, 0.454902, 0.741176, 0.9) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 8 -[sub_resource type="ImageTexture" id=66] - -[sub_resource type="Image" id=198] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=68] -flags = 0 -flags = 0 -image = SubResource( 198 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=69] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 68 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=199] -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, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=71] -flags = 0 -flags = 0 -image = SubResource( 199 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=72] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 71 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="Image" id=200] -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, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} +[sub_resource type="StyleBoxLine" id="80"] +color = Color(1, 1, 1, 0.1) -[sub_resource type="ImageTexture" id=74] -flags = 0 -flags = 0 -image = SubResource( 200 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=75] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 74 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=201] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=77] -flags = 0 -flags = 0 -image = SubResource( 201 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=78] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 77 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=79] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 77 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=80] -color = Color( 1, 1, 1, 0.1 ) - -[sub_resource type="Image" id=202] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 190, 190, 0, 210, 210, 210, 17, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 210, 210, 210, 17, 190, 190, 190, 0, 0, 0, 0, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 62, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 62, 170, 170, 170, 3, 170, 170, 170, 0, 216, 216, 216, 0, 216, 216, 216, 33, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 216, 216, 216, 33, 216, 216, 216, 0, 219, 219, 219, 0, 219, 219, 219, 50, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 219, 219, 219, 50, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 65, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 51, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 220, 220, 220, 51, 220, 220, 220, 0, 218, 218, 218, 0, 218, 218, 218, 35, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 218, 218, 218, 35, 218, 218, 218, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 63, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 191, 191, 191, 0, 212, 212, 212, 18, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 212, 212, 212, 18, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 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, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 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=82] -flags = 0 -flags = 0 -image = SubResource( 202 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=203] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 63, 223, 223, 223, 221, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 222, 222, 222, 62, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 0, 0, 0, 1, 148, 148, 148, 0, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 222, 222, 222, 62, 215, 215, 215, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 220, 224, 224, 224, 255, 223, 223, 223, 114, 233, 233, 233, 0, 237, 237, 237, 0, 127, 127, 127, 0, 255, 255, 255, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 219, 208, 208, 208, 11, 208, 208, 208, 0, 222, 222, 222, 0, 222, 222, 222, 118, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 222, 222, 222, 118, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 123, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 223, 223, 223, 123, 223, 223, 223, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 222, 224, 224, 224, 255, 223, 223, 223, 112, 233, 233, 233, 0, 237, 237, 237, 0, 255, 255, 255, 0, 127, 127, 127, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 221, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 215, 215, 215, 0, 223, 223, 223, 64, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 148, 148, 148, 0, 0, 0, 0, 1, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 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=84] -flags = 0 -flags = 0 -image = SubResource( 203 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=85] +[sub_resource type="StyleBoxFlat" id="85"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.544118, 0.544118, 0.544118, 1 ) +bg_color = Color(0.544118, 0.544118, 0.544118, 1) -[sub_resource type="StyleBoxFlat" id=86] +[sub_resource type="StyleBoxFlat" id="86"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.544118, 0.544118, 0.544118, 1 ) +bg_color = Color(0.544118, 0.544118, 0.544118, 1) -[sub_resource type="StyleBoxFlat" id=87] +[sub_resource type="StyleBoxFlat" id="87"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.235294, 0.235294, 0.235294, 1 ) - -[sub_resource type="Image" id=204] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 64, -"mipmaps": false, -"width": 8 -} +bg_color = Color(0.235294, 0.235294, 0.235294, 1) -[sub_resource type="ImageTexture" id=89] -flags = 0 -flags = 0 -image = SubResource( 204 ) -size = Vector2( 8, 64 ) - -[sub_resource type="StyleBoxTexture" id=90] -texture = SubResource( 20 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=91] +[sub_resource type="StyleBoxFlat" id="91"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) +bg_color = Color(0.313726, 0.313726, 0.313726, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.235294, 0.235294, 0.235294, 1 ) +border_color = Color(0.235294, 0.235294, 0.235294, 1) -[sub_resource type="StyleBoxFlat" id=92] +[sub_resource type="StyleBoxFlat" id="92"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(0.392157, 0.392157, 0.392157, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.620098, 0.620098, 0.620098, 1 ) +border_color = Color(0.620098, 0.620098, 0.620098, 1) -[sub_resource type="StyleBoxFlat" id=93] +[sub_resource type="StyleBoxFlat" id="93"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(0.392157, 0.392157, 0.392157, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.2 ) +border_color = Color(1, 1, 1, 0.2) -[sub_resource type="StyleBoxFlat" id=94] +[sub_resource type="StyleBoxFlat" id="94"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.2 ) -border_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(1, 1, 1, 0.2) +border_color = Color(0.392157, 0.392157, 0.392157, 1) -[sub_resource type="StyleBoxFlat" id=95] +[sub_resource type="StyleBoxFlat" id="95"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.2 ) -border_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(1, 1, 1, 0.2) +border_color = Color(0.392157, 0.392157, 0.392157, 1) -[sub_resource type="StyleBoxEmpty" id=96] +[sub_resource type="StyleBoxEmpty" id="96"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -[sub_resource type="Image" id=205] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} +[sub_resource type="StyleBoxFlat" id="3"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.313726, 0.313726, 0.313726, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.00392157, 0.454902, 0.741176, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=98] -flags = 0 -flags = 0 -image = SubResource( 205 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="5"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.313726, 0.313726, 0.313726, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.27451, 0.27451, 0.27451, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="Image" id=206] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 121, 255, 255, 255, 151, 255, 255, 255, 15, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 149, 255, 255, 255, 125, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 142, 255, 255, 255, 199, 255, 255, 255, 163, 255, 255, 255, 15, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 160, 255, 255, 255, 199, 255, 255, 255, 144, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 163, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 15, 255, 255, 255, 14, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 166, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 165, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 166, 255, 255, 255, 199, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 155, 255, 255, 255, 157, 255, 255, 255, 18, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} +[sub_resource type="StyleBoxFlat" id="2"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.352941, 0.352941, 0.352941, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.27451, 0.27451, 0.27451, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=100] -flags = 0 -flags = 0 -image = SubResource( 206 ) -size = Vector2( 12, 12 ) +[sub_resource type="StyleBoxFlat" id="4"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.313726, 0.313726, 0.313726, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.544118, 0.544118, 0.544118, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=102] +[sub_resource type="StyleBoxFlat" id="6"] content_margin_left = 6.0 +content_margin_top = 4.0 content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.313726, 0.313726, 0.313726, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.00392157, 0.454902, 0.741176, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 + +[sub_resource type="StyleBoxFlat" id="102"] +content_margin_left = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) +bg_color = Color(0.313726, 0.313726, 0.313726, 1) -[sub_resource type="StyleBoxFlat" id=103] +[sub_resource type="StyleBoxFlat" id="103"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 2.0 +content_margin_right = 2.0 content_margin_bottom = 2.0 -bg_color = Color( 0.243137, 0.243137, 0.243137, 1 ) +bg_color = Color(0.243137, 0.243137, 0.243137, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=104] +[sub_resource type="StyleBoxFlat" id="104"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(0.392157, 0.392157, 0.392157, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.544118, 0.544118, 0.544118, 1 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.544118, 0.544118, 0.544118, 1) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="Image" id=207] -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, 222, 222, 222, 0, 223, 223, 223, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 197, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 190, 223, 223, 223, 254, 223, 223, 223, 210, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 196, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 197, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 214, 214, 214, 19, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 189, 223, 223, 223, 254, 223, 223, 223, 212, 220, 220, 220, 22, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 222, 222, 222, 198, 221, 221, 221, 23, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=106] -flags = 0 -flags = 0 -image = SubResource( 207 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=208] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 31, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 222, 222, 222, 31, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 178, 223, 223, 223, 254, 223, 223, 223, 81, 213, 213, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 213, 213, 0, 223, 223, 223, 81, 223, 223, 223, 254, 223, 223, 223, 177, 223, 223, 223, 0, 221, 221, 221, 0, 221, 221, 221, 84, 223, 223, 223, 254, 223, 223, 223, 204, 204, 204, 204, 5, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 204, 204, 204, 5, 223, 223, 223, 204, 223, 223, 223, 254, 221, 221, 221, 84, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 176, 204, 204, 204, 5, 213, 213, 213, 0, 220, 220, 220, 0, 220, 220, 220, 0, 213, 213, 213, 0, 204, 204, 204, 5, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 209, 0, 0, 0, 1, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 213, 223, 223, 223, 88, 220, 220, 220, 22, 220, 220, 220, 22, 223, 223, 223, 88, 222, 222, 222, 214, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 210, 214, 214, 214, 19, 214, 214, 214, 0, 198, 198, 198, 0, 198, 198, 198, 9, 223, 223, 223, 194, 222, 222, 222, 214, 222, 222, 222, 215, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 215, 222, 222, 222, 214, 223, 223, 223, 194, 198, 198, 198, 9, 198, 198, 198, 0, 0, 0, 0, 0, 201, 201, 201, 0, 204, 204, 204, 10, 216, 216, 216, 20, 204, 204, 204, 5, 223, 223, 223, 105, 223, 223, 223, 187, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 187, 223, 223, 223, 105, 204, 204, 204, 5, 216, 216, 216, 20, 204, 204, 204, 10, 201, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 223, 223, 223, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 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=108] -flags = 0 -flags = 0 -image = SubResource( 208 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=209] -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, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 0, 219, 219, 219, 115, 223, 223, 223, 204, 223, 223, 223, 236, 223, 223, 223, 90, 223, 223, 223, 73, 220, 220, 220, 37, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 217, 217, 217, 47, 222, 222, 222, 222, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 16, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 218, 218, 218, 42, 222, 222, 222, 236, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 216, 216, 216, 33, 223, 223, 223, 88, 221, 221, 221, 100, 223, 223, 223, 89, 218, 218, 218, 14, 109, 109, 109, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 235, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 218, 218, 218, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 85, 0, 0, 0, 1, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 111, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 109, 217, 217, 217, 0, 221, 221, 221, 76, 223, 223, 223, 216, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 217, 217, 217, 34, 221, 221, 221, 100, 221, 221, 221, 100, 219, 219, 219, 36, 219, 219, 219, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 215, 215, 215, 32, 218, 218, 218, 0, 222, 222, 222, 215, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 25, 217, 217, 217, 0, 221, 221, 221, 216, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 117, 223, 223, 223, 254, 223, 223, 223, 254, 218, 218, 218, 106, 216, 216, 216, 0, 221, 221, 221, 76, 223, 223, 223, 217, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 216, 216, 216, 33, 221, 221, 221, 100, 221, 221, 221, 100, 220, 220, 220, 37, 220, 220, 220, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 233, 223, 223, 223, 254, 223, 223, 223, 234, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 220, 220, 220, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 87, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 195, 195, 195, 0, 221, 221, 221, 54, 223, 223, 223, 240, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 223, 223, 223, 32, 223, 223, 223, 88, 221, 221, 221, 100, 221, 221, 221, 91, 223, 223, 223, 16, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 215, 215, 215, 58, 222, 222, 222, 229, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 85, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 0, 127, 127, 127, 2, 223, 223, 223, 121, 223, 223, 223, 208, 223, 223, 223, 237, 221, 221, 221, 91, 223, 223, 223, 74, 221, 221, 221, 38, 0, 0, 0, 1, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=110] -flags = 0 -flags = 0 -image = SubResource( 209 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=111] +[sub_resource type="StyleBoxFlat" id="111"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) -border_color = Color( 0.27451, 0.27451, 0.27451, 1 ) +bg_color = Color(0.313726, 0.313726, 0.313726, 1) +border_color = Color(0.27451, 0.27451, 0.27451, 1) -[sub_resource type="StyleBoxLine" id=112] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="112"] +color = Color(1, 1, 1, 0.1) grow_begin = 7.0 -[sub_resource type="StyleBoxLine" id=113] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="113"] +color = Color(1, 1, 1, 0.1) grow_end = 7.0 -[sub_resource type="StyleBoxLine" id=114] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="114"] +color = Color(1, 1, 1, 0.1) grow_begin = 7.0 grow_end = 7.0 -[sub_resource type="Image" id=210] -data = { -"data": PoolByteArray( 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=116] -flags = 0 -flags = 0 -image = SubResource( 210 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=117] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 116 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 4.0 -margin_right = 4.0 -margin_top = 4.0 -margin_bottom = 4.0 - -[sub_resource type="Image" id=211] -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, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=119] -flags = 0 -flags = 0 -image = SubResource( 211 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=120] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 1.0 -content_margin_bottom = 1.0 -texture = SubResource( 119 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxFlat" id=121] +[sub_resource type="StyleBoxFlat" id="121"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.27451, 0.27451, 0.27451, 1 ) +bg_color = Color(0.27451, 0.27451, 0.27451, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.27451, 0.27451, 0.27451, 1 ) +border_color = Color(0.27451, 0.27451, 0.27451, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.3 ) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="StyleBoxEmpty" id=122] +[sub_resource type="StyleBoxEmpty" id="122"] -[sub_resource type="StyleBoxFlat" id=1] -bg_color = Color( 0.2, 0.2, 0.2, 1 ) +[sub_resource type="StyleBoxFlat" id="1"] +bg_color = Color(0.2, 0.2, 0.2, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="Image" id=212] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 152, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 143, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 216, 216, 216, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 164, 222, 222, 222, 199, 222, 222, 222, 143, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 138, 223, 223, 223, 145, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 145, 223, 223, 223, 138, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 124, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 153, 222, 222, 222, 125, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 142, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 142, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 165, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 154, 223, 223, 223, 154, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 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=124] -flags = 0 -flags = 0 -image = SubResource( 212 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=213] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 220, 220, 220, 44, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 216, 216, 216, 33, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 219, 219, 219, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 218, 218, 218, 42, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=126] -flags = 0 -flags = 0 -image = SubResource( 213 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=214] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 223, 223, 223, 57, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 219, 219, 219, 43, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 219, 219, 219, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 221, 221, 221, 54, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=128] -flags = 0 -flags = 0 -image = SubResource( 214 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=215] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 220, 220, 220, 44, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 221, 221, 221, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 218, 218, 218, 42, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=130] -flags = 0 -flags = 0 -image = SubResource( 215 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=216] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 223, 223, 223, 57, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 220, 220, 220, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 219, 219, 219, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 222, 222, 222, 55, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=132] -flags = 0 -flags = 0 -image = SubResource( 216 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=217] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 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=134] -flags = 0 -flags = 0 -image = SubResource( 217 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=218] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 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=136] -flags = 0 -flags = 0 -image = SubResource( 218 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="141"] +bg_color = Color(0.321569, 0.321569, 0.321569, 1) +border_width_left = 5 +border_width_top = 10 +border_width_right = 5 +border_width_bottom = 5 +border_color = Color(0.321569, 0.321569, 0.321569, 1) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 +anti_aliasing = false -[sub_resource type="StyleBoxFlat" id=137] -content_margin_left = 5.0 -content_margin_right = 5.0 +[sub_resource type="StyleBoxFlat" id="138"] +content_margin_left = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(0.313726, 0.313726, 0.313726, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.235294, 0.235294, 0.235294, 1 ) +border_color = Color(0.27451, 0.27451, 0.27451, 1) +expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=138] +[sub_resource type="StyleBoxFlat" id="139"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.313726, 0.313726, 0.313726, 1 ) +bg_color = Color(0.352941, 0.352941, 0.352941, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.27451, 0.27451, 0.27451, 1 ) +border_color = Color(0.27451, 0.27451, 0.27451, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=139] +[sub_resource type="StyleBoxFlat" id="140"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.352941, 0.352941, 0.352941, 1 ) +bg_color = Color(0.392157, 0.392157, 0.392157, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.27451, 0.27451, 0.27451, 1 ) +border_color = Color(0.235294, 0.235294, 0.235294, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=140] -content_margin_left = 10.0 -content_margin_right = 10.0 +[sub_resource type="StyleBoxFlat" id="137"] +content_margin_left = 5.0 content_margin_top = 5.0 +content_margin_right = 5.0 content_margin_bottom = 5.0 -bg_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(0.392157, 0.392157, 0.392157, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.235294, 0.235294, 0.235294, 1 ) -expand_margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=141] -bg_color = Color( 0.321569, 0.321569, 0.321569, 1 ) -border_width_left = 5 -border_width_top = 10 -border_width_right = 5 -border_width_bottom = 5 -border_color = Color( 0.321569, 0.321569, 0.321569, 1 ) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 -anti_aliasing = false - -[sub_resource type="Image" id=219] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 72, 255, 255, 255, 56, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 72, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=143] -flags = 0 -flags = 0 -image = SubResource( 219 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=220] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 7, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=145] -flags = 0 -flags = 0 -image = SubResource( 220 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=221] -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, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 13, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=147] -flags = 0 -flags = 0 -image = SubResource( 221 ) -size = Vector2( 8, 8 ) - -[sub_resource type="Image" id=222] -data = { -"data": PoolByteArray( 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 3, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 40, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=149] -flags = 0 -flags = 0 -image = SubResource( 222 ) -size = Vector2( 8, 8 ) +border_width_bottom = 1 +border_color = Color(0.235294, 0.235294, 0.235294, 1) -[sub_resource type="StyleBoxFlat" id=150] +[sub_resource type="StyleBoxFlat" id="150"] content_margin_left = 1.0 -content_margin_right = 1.0 content_margin_top = 1.0 +content_margin_right = 1.0 content_margin_bottom = 1.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 1 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(1, 1, 1, 1) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="StyleBoxFlat" id=101] -bg_color = Color( 0.117647, 0.117647, 0.117647, 1 ) - -[sub_resource type="Image" id=223] -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, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 84, 255, 255, 255, 108, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 108, 255, 255, 255, 84, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 109, 255, 255, 255, 108, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 14, -"mipmaps": false, -"width": 14 -} - -[sub_resource type="ImageTexture" id=152] -flags = 0 -flags = 0 -image = SubResource( 223 ) -size = Vector2( 14, 14 ) +[sub_resource type="StyleBoxFlat" id="101"] +bg_color = Color(0.117647, 0.117647, 0.117647, 1) -[sub_resource type="Image" id=224] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 113, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 113, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 114, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 114, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 116, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 14, -"mipmaps": false, -"width": 14 -} - -[sub_resource type="ImageTexture" id=154] -flags = 0 -flags = 0 -image = SubResource( 224 ) -size = Vector2( 14, 14 ) - -[sub_resource type="StyleBoxFlat" id=155] +[sub_resource type="StyleBoxFlat" id="155"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.544118, 0.544118, 0.544118, 1 ) -border_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(0.544118, 0.544118, 0.544118, 1) +border_color = Color(0.392157, 0.392157, 0.392157, 1) -[sub_resource type="StyleBoxFlat" id=156] +[sub_resource type="StyleBoxFlat" id="156"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(0.392157, 0.392157, 0.392157, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.544118, 0.544118, 0.544118, 1 ) +border_color = Color(0.544118, 0.544118, 0.544118, 1) -[sub_resource type="StyleBoxEmpty" id=157] +[sub_resource type="StyleBoxEmpty" id="157"] -[sub_resource type="StyleBoxEmpty" id=158] +[sub_resource type="StyleBoxEmpty" id="158"] -[sub_resource type="StyleBoxFlat" id=159] +[sub_resource type="StyleBoxFlat" id="159"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.08 ) -border_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(1, 1, 1, 0.08) +border_color = Color(0.392157, 0.392157, 0.392157, 1) -[sub_resource type="StyleBoxFlat" id=160] +[sub_resource type="StyleBoxFlat" id="160"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.235294, 0.235294, 0.235294, 1 ) -border_color = Color( 0.392157, 0.392157, 0.392157, 1 ) - -[sub_resource type="StyleBoxTexture" id=161] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 68 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxTexture" id=162] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 71 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=163] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 74 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxTexture" id=164] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 77 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 +bg_color = Color(0.235294, 0.235294, 0.235294, 1) +border_color = Color(0.392157, 0.392157, 0.392157, 1) -[sub_resource type="StyleBoxTexture" id=165] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 77 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=166] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="166"] +color = Color(1, 1, 1, 0.1) grow_begin = 0.0 grow_end = 0.0 vertical = true -[sub_resource type="StyleBoxFlat" id=167] +[sub_resource type="StyleBoxFlat" id="167"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.545098, 0.545098, 0.545098, 1 ) +bg_color = Color(0.545098, 0.545098, 0.545098, 1) -[sub_resource type="StyleBoxFlat" id=168] +[sub_resource type="StyleBoxFlat" id="168"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.544118, 0.544118, 0.544118, 1 ) +bg_color = Color(0.544118, 0.544118, 0.544118, 1) -[sub_resource type="StyleBoxFlat" id=169] +[sub_resource type="StyleBoxFlat" id="169"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.235294, 0.235294, 0.235294, 1 ) - -[sub_resource type="Image" id=225] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 8, -"mipmaps": false, -"width": 64 -} +bg_color = Color(0.235294, 0.235294, 0.235294, 1) -[sub_resource type="ImageTexture" id=171] -flags = 0 -flags = 0 -image = SubResource( 225 ) -size = Vector2( 64, 8 ) - -[sub_resource type="Image" id=226] -data = { -"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=173] -flags = 0 -flags = 0 -image = SubResource( 226 ) -size = Vector2( 8, 8 ) - -[sub_resource type="StyleBoxTexture" id=174] -texture = SubResource( 173 ) -region_rect = Rect2( 0, 0, 8, 8 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=175] +[sub_resource type="StyleBoxFlat" id="175"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +bg_color = Color(0.392157, 0.392157, 0.392157, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.392157, 0.392157, 0.392157, 1 ) +border_color = Color(0.392157, 0.392157, 0.392157, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.3 ) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 [resource] resource_name = "Gray" -default_font = ExtResource( 1 ) +default_font = ExtResource("3_3yr54") +default_font_size = 16 BoxContainer/constants/separation = 4 -Button/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -Button/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -Button/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 ) -Button/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 ) -Button/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) -Button/colors/icon_color_pressed = Color( 0.0045098, 0.523137, 0.852353, 1 ) +Button/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +Button/colors/font_color_disabled = Color(1, 1, 1, 0.3) +Button/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1) +Button/colors/font_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1) +Button/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) +Button/colors/icon_color_pressed = Color(0.0045098, 0.523137, 0.852353, 1) Button/constants/hseparation = 2 -Button/fonts/font = ExtResource( 1 ) -Button/styles/disabled = SubResource( 2 ) -Button/styles/focus = SubResource( 3 ) -Button/styles/hover = SubResource( 4 ) -Button/styles/normal = SubResource( 5 ) -Button/styles/pressed = SubResource( 6 ) -CheckBox/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -CheckBox/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -CheckBox/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 ) -CheckBox/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 ) -CheckBox/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 ) -CheckBox/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +Button/styles/disabled = SubResource("23") +Button/styles/focus = SubResource("23") +Button/styles/hover = SubResource("23") +Button/styles/normal = SubResource("23") +Button/styles/pressed = SubResource("23") +CheckBox/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +CheckBox/colors/font_color_disabled = Color(1, 1, 1, 0.3) +CheckBox/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1) +CheckBox/colors/font_color_hover_pressed = Color(1, 1, 1, 1) +CheckBox/colors/font_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1) +CheckBox/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) CheckBox/constants/check_vadjust = 0 CheckBox/constants/hseparation = 4 -CheckBox/fonts/font = ExtResource( 1 ) -CheckBox/icons/checked = SubResource( 8 ) -CheckBox/icons/radio_checked = SubResource( 10 ) -CheckBox/icons/radio_unchecked = SubResource( 12 ) -CheckBox/icons/unchecked = SubResource( 14 ) -CheckBox/styles/disabled = SubResource( 15 ) +CheckBox/styles/disabled = SubResource("15") CheckBox/styles/focus = null -CheckBox/styles/hover = SubResource( 15 ) -CheckBox/styles/hover_pressed = SubResource( 16 ) -CheckBox/styles/normal = SubResource( 15 ) -CheckBox/styles/pressed = SubResource( 15 ) -CheckButton/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -CheckButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -CheckButton/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 ) -CheckButton/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 ) -CheckButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +CheckBox/styles/hover = SubResource("15") +CheckBox/styles/hover_pressed = SubResource("16") +CheckBox/styles/normal = SubResource("15") +CheckBox/styles/pressed = SubResource("15") +CheckButton/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +CheckButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +CheckButton/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1) +CheckButton/colors/font_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1) +CheckButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) CheckButton/constants/check_vadjust = 0 CheckButton/constants/hseparation = 4 -CheckButton/icons/off = SubResource( 18 ) -CheckButton/icons/off_disabled = SubResource( 20 ) -CheckButton/icons/on = SubResource( 22 ) -CheckButton/icons/on_disabled = SubResource( 20 ) -CheckButton/styles/disabled = SubResource( 23 ) -CheckButton/styles/hover = SubResource( 23 ) -CheckButton/styles/normal = SubResource( 23 ) -CheckButton/styles/pressed = SubResource( 23 ) -CollapsibleContainer/icons/arrow_normal = ExtResource( 6 ) +CheckButton/styles/disabled = SubResource("23") +CheckButton/styles/hover = SubResource("23") +CheckButton/styles/normal = SubResource("23") +CheckButton/styles/pressed = SubResource("23") +CollapsibleContainer/icons/arrow_normal = ExtResource("6") ColorPicker/constants/h_width = 30 ColorPicker/constants/label_width = 10 ColorPicker/constants/margin = 8 ColorPicker/constants/sv_height = 256 ColorPicker/constants/sv_width = 256 -ColorPicker/icons/add_preset = SubResource( 25 ) -ColorPicker/icons/color_hue = null -ColorPicker/icons/color_sample = null -ColorPicker/icons/overbright_indicator = SubResource( 27 ) -ColorPicker/icons/preset_bg = SubResource( 29 ) -ColorPicker/icons/screen_picker = SubResource( 31 ) -ColorPickerButton/colors/font_color = Color( 1, 1, 1, 1 ) -ColorPickerButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.3 ) -ColorPickerButton/colors/font_color_hover = Color( 1, 1, 1, 1 ) -ColorPickerButton/colors/font_color_pressed = Color( 0.8, 0.8, 0.8, 1 ) +ColorPickerButton/colors/font_color = Color(1, 1, 1, 1) +ColorPickerButton/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.3) +ColorPickerButton/colors/font_color_hover = Color(1, 1, 1, 1) +ColorPickerButton/colors/font_color_pressed = Color(0.8, 0.8, 0.8, 1) ColorPickerButton/constants/hseparation = 2 -ColorPickerButton/fonts/font = ExtResource( 1 ) -ColorPickerButton/icons/bg = SubResource( 29 ) ColorPickerButton/styles/disabled = null ColorPickerButton/styles/focus = null -ColorPickerButton/styles/hover = SubResource( 32 ) -ColorPickerButton/styles/normal = SubResource( 33 ) -ColorPickerButton/styles/pressed = SubResource( 34 ) +ColorPickerButton/styles/hover = SubResource("32") +ColorPickerButton/styles/normal = SubResource("33") +ColorPickerButton/styles/pressed = SubResource("34") Dialogs/constants/button_margin = 32 Dialogs/constants/margin = 8 -FileDialog/colors/files_disabled = Color( 1, 1, 1, 0.3 ) -FileDialog/colors/folder_icon_modulate = Color( 0.302745, 0.618431, 0.818824, 1 ) -FileDialog/icons/folder = SubResource( 36 ) -FileDialog/icons/parent_folder = SubResource( 38 ) -FileDialog/icons/reload = SubResource( 40 ) -FileDialog/icons/toggle_hidden = SubResource( 42 ) -GraphEdit/colors/activity = Color( 0.00392157, 0.454902, 0.741176, 1 ) -GraphEdit/colors/grid_major = Color( 1, 1, 1, 0.15 ) -GraphEdit/colors/grid_minor = Color( 1, 1, 1, 0.07 ) -GraphEdit/colors/selection_fill = Color( 0.00392157, 0.454902, 0.741176, 0.3 ) -GraphEdit/colors/selection_stroke = Color( 0.00392157, 0.454902, 0.741176, 0.8 ) +FileDialog/colors/files_disabled = Color(1, 1, 1, 0.3) +FileDialog/colors/folder_icon_modulate = Color(0.302745, 0.618431, 0.818824, 1) +GraphEdit/colors/activity = Color(0.00392157, 0.454902, 0.741176, 1) +GraphEdit/colors/grid_major = Color(1, 1, 1, 0.15) +GraphEdit/colors/grid_minor = Color(1, 1, 1, 0.07) +GraphEdit/colors/selection_fill = Color(0.00392157, 0.454902, 0.741176, 0.3) +GraphEdit/colors/selection_stroke = Color(0.00392157, 0.454902, 0.741176, 0.8) GraphEdit/constants/bezier_len_neg = 160 GraphEdit/constants/bezier_len_pos = 80 -GraphEdit/icons/minus = SubResource( 44 ) -GraphEdit/icons/more = SubResource( 46 ) -GraphEdit/icons/reset = SubResource( 48 ) -GraphEdit/icons/snap = SubResource( 50 ) -GraphEdit/styles/bg = SubResource( 51 ) -GraphNode/colors/close_color = Color( 1, 1, 1, 0.7 ) -GraphNode/colors/resizer_color = Color( 1, 1, 1, 0.7 ) -GraphNode/colors/title_color = Color( 1, 1, 1, 1 ) +GraphEdit/styles/bg = SubResource("51") +GraphNode/colors/close_color = Color(1, 1, 1, 0.7) +GraphNode/colors/resizer_color = Color(1, 1, 1, 0.7) +GraphNode/colors/title_color = Color(1, 1, 1, 1) GraphNode/constants/close_h_offset = 20 GraphNode/constants/close_offset = 20 GraphNode/constants/port_offset = 14 GraphNode/constants/separation = 1 GraphNode/constants/title_h_offset = -16 GraphNode/constants/title_offset = 20 -GraphNode/icons/close = SubResource( 53 ) -GraphNode/icons/port = SubResource( 55 ) -GraphNode/icons/resizer = SubResource( 57 ) -GraphNode/styles/breakpoint = SubResource( 58 ) -GraphNode/styles/comment = SubResource( 59 ) -GraphNode/styles/commentfocus = SubResource( 60 ) -GraphNode/styles/frame = SubResource( 61 ) -GraphNode/styles/position = SubResource( 62 ) -GraphNode/styles/selectedframe = SubResource( 63 ) -GraphNode/styles/state_machine_frame = SubResource( 64 ) -GraphNode/styles/state_machine_selectedframe = SubResource( 65 ) +GraphNode/styles/breakpoint = SubResource("58") +GraphNode/styles/comment = SubResource("59") +GraphNode/styles/commentfocus = SubResource("60") +GraphNode/styles/frame = SubResource("61") +GraphNode/styles/position = SubResource("62") +GraphNode/styles/selectedframe = SubResource("63") +GraphNode/styles/state_machine_frame = SubResource("64") +GraphNode/styles/state_machine_selectedframe = SubResource("65") GridContainer/constants/hseparation = 4 GridContainer/constants/vseparation = 4 HBoxContainer/constants/separation = 4 -HScrollBar/icons/decrement = SubResource( 66 ) -HScrollBar/icons/decrement_highlight = SubResource( 66 ) -HScrollBar/icons/increment = SubResource( 66 ) -HScrollBar/icons/increment_highlight = SubResource( 66 ) -HScrollBar/styles/grabber = SubResource( 69 ) -HScrollBar/styles/grabber_highlight = SubResource( 72 ) -HScrollBar/styles/grabber_pressed = SubResource( 75 ) -HScrollBar/styles/scroll = SubResource( 78 ) -HScrollBar/styles/scroll_focus = SubResource( 79 ) HSeparator/constants/separation = 4 -HSeparator/styles/separator = SubResource( 80 ) -HSlider/icons/grabber = SubResource( 82 ) -HSlider/icons/grabber_disabled = null -HSlider/icons/grabber_highlight = SubResource( 84 ) -HSlider/icons/tick = null +HSeparator/styles/separator = SubResource("80") HSlider/styles/focus = null -HSlider/styles/grabber_area = SubResource( 85 ) -HSlider/styles/grabber_area_highlight = SubResource( 86 ) +HSlider/styles/grabber_area = SubResource("85") +HSlider/styles/grabber_area_highlight = SubResource("86") HSlider/styles/grabber_disabled = null HSlider/styles/grabber_highlight = null -HSlider/styles/slider = SubResource( 87 ) +HSlider/styles/slider = SubResource("87") HSplitContainer/constants/autohide = 1 HSplitContainer/constants/separation = 8 -HSplitContainer/icons/grabber = SubResource( 89 ) -HSplitContainer/styles/bg = SubResource( 90 ) -Header/base_type = "Label" -Header/colors/font_color = Color( 0.909804, 0.909804, 0.909804, 1 ) -Header/fonts/font = ExtResource( 2 ) -Icons/colors/modulate_color = Color( 0.74902, 0.74902, 0.74902, 1 ) -ItemList/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -ItemList/colors/font_color_selected = Color( 1, 1, 1, 1 ) -ItemList/colors/guide_color = Color( 1, 1, 1, 0.05 ) +Header/base_type = &"Label" +Header/colors/font_color = Color(0.909804, 0.909804, 0.909804, 1) +Icons/colors/modulate_color = Color(0.74902, 0.74902, 0.74902, 1) +ItemList/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +ItemList/colors/font_color_selected = Color(1, 1, 1, 1) +ItemList/colors/guide_color = Color(1, 1, 1, 0.05) ItemList/constants/hseparation = 3 ItemList/constants/icon_margin = 4 ItemList/constants/line_separation = 3 ItemList/constants/vseparation = 3 -ItemList/fonts/font = ExtResource( 1 ) -ItemList/styles/bg = SubResource( 91 ) -ItemList/styles/bg_focus = SubResource( 92 ) -ItemList/styles/cursor = SubResource( 93 ) -ItemList/styles/cursor_unfocused = SubResource( 93 ) -ItemList/styles/selected = SubResource( 94 ) -ItemList/styles/selected_focus = SubResource( 95 ) -Label/colors/font_color = Color( 0.847059, 0.847059, 0.847059, 1 ) -Label/colors/font_color_shadow = Color( 0, 0, 0, 0 ) -Label/colors/font_outline_modulate = Color( 1, 1, 1, 1 ) +ItemList/styles/bg = SubResource("91") +ItemList/styles/bg_focus = SubResource("92") +ItemList/styles/cursor = SubResource("93") +ItemList/styles/cursor_unfocused = SubResource("93") +ItemList/styles/selected = SubResource("94") +ItemList/styles/selected_focus = SubResource("95") +Label/colors/font_color = Color(0.847059, 0.847059, 0.847059, 1) +Label/colors/font_color_shadow = Color(0, 0, 0, 0) +Label/colors/font_outline_modulate = Color(1, 1, 1, 1) Label/constants/line_spacing = 3 Label/constants/shadow_as_outline = 0 Label/constants/shadow_offset_x = 1 Label/constants/shadow_offset_y = 1 -Label/fonts/font = ExtResource( 1 ) -Label/styles/normal = SubResource( 96 ) -LineEdit/colors/clear_button_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -LineEdit/colors/clear_button_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 ) -LineEdit/colors/cursor_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -LineEdit/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -LineEdit/colors/font_color_selected = Color( 1, 1, 1, 1 ) -LineEdit/colors/read_only = Color( 1, 1, 1, 0.3 ) -LineEdit/colors/selection_color = Color( 0.00392157, 0.454902, 0.741176, 0.4 ) +Label/styles/normal = SubResource("96") +LineEdit/colors/clear_button_color = Color(0.848039, 0.848039, 0.848039, 1) +LineEdit/colors/clear_button_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1) +LineEdit/colors/cursor_color = Color(0.848039, 0.848039, 0.848039, 1) +LineEdit/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +LineEdit/colors/font_color_selected = Color(1, 1, 1, 1) +LineEdit/colors/read_only = Color(1, 1, 1, 0.3) +LineEdit/colors/selection_color = Color(0.00392157, 0.454902, 0.741176, 0.4) LineEdit/constants/minimum_spaces = 12 -LineEdit/fonts/font = ExtResource( 1 ) -LineEdit/icons/clear = SubResource( 98 ) -LineEdit/styles/focus = SubResource( 3 ) -LineEdit/styles/normal = SubResource( 5 ) -LineEdit/styles/read_only = SubResource( 2 ) -LinkButton/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -LinkButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -LinkButton/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 ) -LinkButton/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 ) -LinkButton/styles/focus = SubResource( 96 ) +LineEdit/styles/focus = SubResource("3") +LineEdit/styles/normal = SubResource("5") +LineEdit/styles/read_only = SubResource("2") +LinkButton/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +LinkButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +LinkButton/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1) +LinkButton/colors/font_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1) +LinkButton/styles/focus = SubResource("96") MarginContainer/constants/margin_bottom = 0 MarginContainer/constants/margin_left = 0 MarginContainer/constants/margin_right = 0 MarginContainer/constants/margin_top = 0 -MenuButton/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -MenuButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -MenuButton/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 ) -MenuButton/colors/font_color_pressed = Color( 1, 1, 1, 1 ) +MenuButton/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +MenuButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +MenuButton/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1) +MenuButton/colors/font_color_pressed = Color(1, 1, 1, 1) MenuButton/constants/hseparation = 3 -MenuButton/fonts/font = ExtResource( 1 ) -MenuButton/styles/disabled = SubResource( 23 ) -MenuButton/styles/focus = SubResource( 23 ) -MenuButton/styles/hover = SubResource( 23 ) -MenuButton/styles/normal = SubResource( 23 ) -MenuButton/styles/pressed = SubResource( 23 ) -Misc/colors/clear_color = Color( 0.243137, 0.243137, 0.243137, 1 ) -OptionButton/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -OptionButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -OptionButton/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 ) -OptionButton/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 ) -OptionButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +MenuButton/styles/disabled = SubResource("23") +MenuButton/styles/focus = SubResource("23") +MenuButton/styles/hover = SubResource("23") +MenuButton/styles/normal = SubResource("23") +MenuButton/styles/pressed = SubResource("23") +Misc/colors/clear_color = Color(0.243137, 0.243137, 0.243137, 1) +OptionButton/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +OptionButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +OptionButton/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1) +OptionButton/colors/font_color_pressed = Color(0.00392157, 0.454902, 0.741176, 1) +OptionButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) OptionButton/constants/arrow_margin = 4 OptionButton/constants/hseparation = 4 OptionButton/constants/modulate_arrow = 1 -OptionButton/fonts/font = ExtResource( 1 ) -OptionButton/icons/arrow = SubResource( 100 ) -OptionButton/styles/disabled = SubResource( 2 ) -OptionButton/styles/focus = SubResource( 3 ) -OptionButton/styles/hover = SubResource( 4 ) -OptionButton/styles/normal = SubResource( 5 ) -OptionButton/styles/pressed = SubResource( 6 ) -Panel/styles/panel = SubResource( 102 ) -PanelContainer/styles/panel = SubResource( 103 ) -PopupDialog/styles/panel = SubResource( 104 ) -PopupMenu/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -PopupMenu/colors/font_color_accel = Color( 1, 1, 1, 0.3 ) -PopupMenu/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -PopupMenu/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 ) +OptionButton/styles/disabled = SubResource("2") +OptionButton/styles/focus = SubResource("3") +OptionButton/styles/hover = SubResource("4") +OptionButton/styles/normal = SubResource("5") +OptionButton/styles/pressed = SubResource("6") +Panel/styles/panel = SubResource("102") +PanelContainer/styles/panel = SubResource("103") +Popup/styles/panel = SubResource("104") +PopupMenu/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +PopupMenu/colors/font_color_accel = Color(1, 1, 1, 0.3) +PopupMenu/colors/font_color_disabled = Color(1, 1, 1, 0.3) +PopupMenu/colors/font_color_hover = Color(0.908823, 0.908823, 0.908823, 1) PopupMenu/constants/hseparation = 4 PopupMenu/constants/vseparation = 5 -PopupMenu/fonts/font = ExtResource( 1 ) -PopupMenu/icons/checked = SubResource( 8 ) -PopupMenu/icons/radio_checked = SubResource( 10 ) -PopupMenu/icons/radio_unchecked = SubResource( 12 ) -PopupMenu/icons/submenu = SubResource( 106 ) -PopupMenu/icons/unchecked = SubResource( 14 ) -PopupMenu/icons/visibility_hidden = SubResource( 108 ) -PopupMenu/icons/visibility_visible = SubResource( 42 ) -PopupMenu/icons/visibility_xray = SubResource( 110 ) -PopupMenu/styles/disabled = SubResource( 23 ) -PopupMenu/styles/focus = SubResource( 23 ) -PopupMenu/styles/hover = SubResource( 111 ) -PopupMenu/styles/labeled_separator_left = SubResource( 112 ) -PopupMenu/styles/labeled_separator_right = SubResource( 113 ) -PopupMenu/styles/normal = SubResource( 23 ) -PopupMenu/styles/panel = SubResource( 104 ) +PopupMenu/styles/disabled = SubResource("23") +PopupMenu/styles/focus = SubResource("23") +PopupMenu/styles/hover = SubResource("111") +PopupMenu/styles/labeled_separator_left = SubResource("112") +PopupMenu/styles/labeled_separator_right = SubResource("113") +PopupMenu/styles/normal = SubResource("23") +PopupMenu/styles/panel = SubResource("104") PopupMenu/styles/panel_disabled = null -PopupMenu/styles/pressed = SubResource( 23 ) -PopupMenu/styles/separator = SubResource( 114 ) -PopupPanel/styles/panel = SubResource( 104 ) -ProgressBar/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -ProgressBar/styles/bg = SubResource( 117 ) -ProgressBar/styles/fg = SubResource( 120 ) -ProjectSettingsEditor/styles/panel = SubResource( 121 ) -RichTextLabel/colors/default_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 ) +PopupMenu/styles/pressed = SubResource("23") +PopupMenu/styles/separator = SubResource("114") +PopupPanel/styles/panel = SubResource("104") +ProgressBar/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +ProjectSettingsEditor/styles/panel = SubResource("121") +RichTextLabel/colors/default_color = Color(0.848039, 0.848039, 0.848039, 1) +RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0) RichTextLabel/constants/shadow_as_outline = 0 RichTextLabel/constants/shadow_offset_x = 1 RichTextLabel/constants/shadow_offset_y = 1 -RichTextLabel/styles/focus = SubResource( 122 ) -RichTextLabel/styles/normal = SubResource( 51 ) -RulerButton/base_type = "Button" -RulerButton/styles/focus = SubResource( 1 ) -RulerButton/styles/hover = SubResource( 1 ) -RulerButton/styles/normal = SubResource( 1 ) -RulerButton/styles/pressed = SubResource( 1 ) -SpinBox/icons/updown = SubResource( 124 ) -TabContainer/colors/font_color_bg = Color( 1, 1, 1, 0.3 ) -TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) -TabContainer/colors/font_color_fg = Color( 0.848039, 0.848039, 0.848039, 1 ) +RichTextLabel/styles/focus = SubResource("122") +RichTextLabel/styles/normal = SubResource("51") +RulerButton/base_type = &"Button" +RulerButton/styles/focus = SubResource("1") +RulerButton/styles/hover = SubResource("1") +RulerButton/styles/normal = SubResource("1") +RulerButton/styles/pressed = SubResource("1") +TabBar/colors/font_color_bg = Color(1, 1, 1, 0.3) +TabBar/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2) +TabBar/colors/font_color_fg = Color(0.848039, 0.848039, 0.848039, 1) +TabBar/constants/hseparation = 4 +TabBar/constants/label_valign_bg = 2 +TabBar/constants/label_valign_fg = 0 +TabBar/constants/top_margin = 24 +TabBar/styles/button = SubResource("23") +TabBar/styles/button_pressed = SubResource("23") +TabBar/styles/panel = SubResource("141") +TabBar/styles/tab_bg = SubResource("138") +TabBar/styles/tab_disabled = SubResource("139") +TabBar/styles/tab_fg = SubResource("140") +TabContainer/colors/font_color_bg = Color(1, 1, 1, 0.3) +TabContainer/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2) +TabContainer/colors/font_color_fg = Color(0.848039, 0.848039, 0.848039, 1) TabContainer/constants/hseparation = 4 TabContainer/constants/label_valign_bg = 2 TabContainer/constants/label_valign_fg = 0 TabContainer/constants/side_margin = 0 TabContainer/constants/top_margin = 24 -TabContainer/fonts/font = ExtResource( 1 ) -TabContainer/icons/decrement = SubResource( 126 ) -TabContainer/icons/decrement_highlight = SubResource( 128 ) -TabContainer/icons/increment = SubResource( 130 ) -TabContainer/icons/increment_highlight = SubResource( 132 ) -TabContainer/icons/menu = SubResource( 134 ) -TabContainer/icons/menu_highlight = SubResource( 136 ) -TabContainer/styles/panel = SubResource( 137 ) -TabContainer/styles/tab_bg = SubResource( 138 ) -TabContainer/styles/tab_disabled = SubResource( 139 ) -TabContainer/styles/tab_fg = SubResource( 140 ) -Tabs/colors/font_color_bg = Color( 1, 1, 1, 0.3 ) -Tabs/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) -Tabs/colors/font_color_fg = Color( 0.848039, 0.848039, 0.848039, 1 ) -Tabs/constants/hseparation = 4 -Tabs/constants/label_valign_bg = 2 -Tabs/constants/label_valign_fg = 0 -Tabs/constants/top_margin = 24 -Tabs/fonts/font = ExtResource( 1 ) -Tabs/icons/close = SubResource( 98 ) -Tabs/icons/decrement = SubResource( 126 ) -Tabs/icons/decrement_highlight = SubResource( 128 ) -Tabs/icons/increment = SubResource( 130 ) -Tabs/icons/increment_highlight = SubResource( 132 ) -Tabs/styles/button = SubResource( 23 ) -Tabs/styles/button_pressed = SubResource( 23 ) -Tabs/styles/panel = SubResource( 141 ) -Tabs/styles/tab_bg = SubResource( 138 ) -Tabs/styles/tab_disabled = SubResource( 139 ) -Tabs/styles/tab_fg = SubResource( 140 ) -TextEdit/colors/background_color = Color( 0, 0, 0, 0 ) -TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 ) -TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 ) -TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 ) -TextEdit/colors/caret_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 ) -TextEdit/colors/completion_background_color = Color( 0.172549, 0.164706, 0.196078, 1 ) -TextEdit/colors/completion_existing_color = Color( 0.87451, 0.87451, 0.87451, 0.129412 ) -TextEdit/colors/completion_font_color = Color( 0.666667, 0.666667, 0.666667, 1 ) -TextEdit/colors/completion_scroll_color = Color( 1, 1, 1, 1 ) -TextEdit/colors/completion_selected_color = Color( 0.262745, 0.258824, 0.266667, 1 ) -TextEdit/colors/current_line_color = Color( 0.25, 0.25, 0.26, 0.8 ) -TextEdit/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 ) -TextEdit/colors/function_color = Color( 0.4, 0.635294, 0.807843, 1 ) -TextEdit/colors/line_number_color = Color( 0.666667, 0.666667, 0.666667, 0.4 ) -TextEdit/colors/mark_color = Color( 1, 0.4, 0.4, 0.4 ) -TextEdit/colors/member_variable_color = Color( 0.901961, 0.305882, 0.34902, 1 ) -TextEdit/colors/number_color = Color( 0.921569, 0.584314, 0.196078, 1 ) -TextEdit/colors/safe_line_number_color = Color( 0.666667, 0.784314, 0.666667, 0.6 ) -TextEdit/colors/selection_color = Color( 0.00392157, 0.454902, 0.741176, 0.4 ) -TextEdit/colors/symbol_color = Color( 0.941176, 0.941176, 0.941176, 1 ) -TextEdit/colors/word_highlighted_color = Color( 0.8, 0.9, 0.9, 0.15 ) +TabContainer/styles/panel = SubResource("137") +TabContainer/styles/tab_bg = SubResource("138") +TabContainer/styles/tab_disabled = SubResource("139") +TabContainer/styles/tab_fg = SubResource("140") +TextEdit/colors/background_color = Color(0, 0, 0, 0) +TextEdit/colors/brace_mismatch_color = Color(1, 0.2, 0.2, 1) +TextEdit/colors/breakpoint_color = Color(0.8, 0.8, 0.4, 0.2) +TextEdit/colors/caret_background_color = Color(0, 0, 0, 1) +TextEdit/colors/caret_color = Color(0.848039, 0.848039, 0.848039, 1) +TextEdit/colors/code_folding_color = Color(0.8, 0.8, 0.8, 0.8) +TextEdit/colors/completion_background_color = Color(0.172549, 0.164706, 0.196078, 1) +TextEdit/colors/completion_existing_color = Color(0.87451, 0.87451, 0.87451, 0.129412) +TextEdit/colors/completion_font_color = Color(0.666667, 0.666667, 0.666667, 1) +TextEdit/colors/completion_scroll_color = Color(1, 1, 1, 1) +TextEdit/colors/completion_selected_color = Color(0.262745, 0.258824, 0.266667, 1) +TextEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8) +TextEdit/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +TextEdit/colors/font_color_selected = Color(0, 0, 0, 1) +TextEdit/colors/function_color = Color(0.4, 0.635294, 0.807843, 1) +TextEdit/colors/line_number_color = Color(0.666667, 0.666667, 0.666667, 0.4) +TextEdit/colors/mark_color = Color(1, 0.4, 0.4, 0.4) +TextEdit/colors/member_variable_color = Color(0.901961, 0.305882, 0.34902, 1) +TextEdit/colors/number_color = Color(0.921569, 0.584314, 0.196078, 1) +TextEdit/colors/safe_line_number_color = Color(0.666667, 0.784314, 0.666667, 0.6) +TextEdit/colors/selection_color = Color(0.00392157, 0.454902, 0.741176, 0.4) +TextEdit/colors/symbol_color = Color(0.941176, 0.941176, 0.941176, 1) +TextEdit/colors/word_highlighted_color = Color(0.8, 0.9, 0.9, 0.15) TextEdit/constants/completion_lines = 7 TextEdit/constants/completion_max_width = 50 TextEdit/constants/completion_scroll_width = 3 TextEdit/constants/line_spacing = 4 -TextEdit/fonts/font = ExtResource( 1 ) -TextEdit/icons/fold = SubResource( 143 ) -TextEdit/icons/folded = SubResource( 145 ) -TextEdit/icons/space = SubResource( 147 ) -TextEdit/icons/tab = SubResource( 149 ) TextEdit/styles/completion = null -TextEdit/styles/focus = SubResource( 4 ) -TextEdit/styles/normal = SubResource( 5 ) -TextEdit/styles/read_only = SubResource( 2 ) -ToolButton/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -ToolButton/colors/font_color_hover = Color( 0.908823, 0.908823, 0.908823, 1 ) -ToolButton/colors/font_color_pressed = Color( 0.00392157, 0.454902, 0.741176, 1 ) -ToolButton/styles/disabled = SubResource( 23 ) -ToolButton/styles/focus = SubResource( 23 ) -ToolButton/styles/hover = SubResource( 23 ) -ToolButton/styles/normal = SubResource( 23 ) -ToolButton/styles/pressed = SubResource( 23 ) -TooltipLabel/colors/font_color = Color( 0.151961, 0.151961, 0.151961, 1 ) -TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 0.1 ) -TooltipPanel/styles/panel = SubResource( 150 ) -TopMenuPanel/base_type = "Panel" -TopMenuPanel/styles/panel = SubResource( 101 ) -Tree/colors/cursor_color = Color( 0, 0, 0, 1 ) -Tree/colors/custom_button_font_highlight = Color( 0.908823, 0.908823, 0.908823, 1 ) -Tree/colors/drop_position_color = Color( 0.00392157, 0.454902, 0.741176, 1 ) -Tree/colors/font_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -Tree/colors/font_color_selected = Color( 1, 1, 1, 1 ) -Tree/colors/guide_color = Color( 1, 1, 1, 0.05 ) -Tree/colors/relationship_line_color = Color( 1, 1, 1, 0.1 ) -Tree/colors/selection_color = Color( 0.1, 0.1, 1, 0.8 ) -Tree/colors/title_button_color = Color( 0.848039, 0.848039, 0.848039, 1 ) +TextEdit/styles/focus = SubResource("4") +TextEdit/styles/normal = SubResource("5") +TextEdit/styles/read_only = SubResource("2") +TooltipLabel/colors/font_color = Color(0.151961, 0.151961, 0.151961, 1) +TooltipLabel/colors/font_color_shadow = Color(0, 0, 0, 0.1) +TooltipPanel/styles/panel = SubResource("150") +TopMenuPanel/base_type = &"Panel" +TopMenuPanel/styles/panel = SubResource("101") +Tree/colors/cursor_color = Color(0, 0, 0, 1) +Tree/colors/custom_button_font_highlight = Color(0.908823, 0.908823, 0.908823, 1) +Tree/colors/drop_position_color = Color(0.00392157, 0.454902, 0.741176, 1) +Tree/colors/font_color = Color(0.848039, 0.848039, 0.848039, 1) +Tree/colors/font_color_selected = Color(1, 1, 1, 1) +Tree/colors/guide_color = Color(1, 1, 1, 0.05) +Tree/colors/relationship_line_color = Color(1, 1, 1, 0.1) +Tree/colors/selection_color = Color(0.1, 0.1, 1, 0.8) +Tree/colors/title_button_color = Color(0.848039, 0.848039, 0.848039, 1) Tree/constants/button_margin = 4 Tree/constants/draw_guides = 0 Tree/constants/draw_relationship_lines = 1 @@ -1880,63 +863,39 @@ Tree/constants/item_margin = 12 Tree/constants/scroll_border = 40 Tree/constants/scroll_speed = 12 Tree/constants/vseparation = 4 -Tree/fonts/font = ExtResource( 1 ) -Tree/fonts/title_button_font = ExtResource( 1 ) -Tree/icons/arrow = SubResource( 143 ) -Tree/icons/arrow_collapsed = SubResource( 145 ) -Tree/icons/checked = SubResource( 8 ) -Tree/icons/select_arrow = SubResource( 152 ) -Tree/icons/unchecked = SubResource( 14 ) -Tree/icons/updown = SubResource( 154 ) -Tree/styles/bg = SubResource( 51 ) -Tree/styles/bg_focus = SubResource( 92 ) -Tree/styles/button_pressed = SubResource( 155 ) -Tree/styles/cursor = SubResource( 156 ) -Tree/styles/cursor_unfocused = SubResource( 156 ) -Tree/styles/custom_button = SubResource( 157 ) -Tree/styles/custom_button_hover = SubResource( 5 ) -Tree/styles/custom_button_pressed = SubResource( 158 ) -Tree/styles/hover = SubResource( 159 ) -Tree/styles/selected = SubResource( 94 ) -Tree/styles/selected_focus = SubResource( 95 ) -Tree/styles/title_button_hover = SubResource( 160 ) -Tree/styles/title_button_normal = SubResource( 160 ) -Tree/styles/title_button_pressed = SubResource( 160 ) +Tree/styles/bg = SubResource("51") +Tree/styles/bg_focus = SubResource("92") +Tree/styles/button_pressed = SubResource("155") +Tree/styles/cursor = SubResource("156") +Tree/styles/cursor_unfocused = SubResource("156") +Tree/styles/custom_button = SubResource("157") +Tree/styles/custom_button_hover = SubResource("5") +Tree/styles/custom_button_pressed = SubResource("158") +Tree/styles/hover = SubResource("159") +Tree/styles/selected = SubResource("94") +Tree/styles/selected_focus = SubResource("95") +Tree/styles/title_button_hover = SubResource("160") +Tree/styles/title_button_normal = SubResource("160") +Tree/styles/title_button_pressed = SubResource("160") VBoxContainer/constants/separation = 4 -VScrollBar/icons/decrement = SubResource( 66 ) -VScrollBar/icons/decrement_highlight = SubResource( 66 ) -VScrollBar/icons/increment = SubResource( 66 ) -VScrollBar/icons/increment_highlight = SubResource( 66 ) -VScrollBar/styles/grabber = SubResource( 161 ) -VScrollBar/styles/grabber_highlight = SubResource( 162 ) -VScrollBar/styles/grabber_pressed = SubResource( 163 ) -VScrollBar/styles/scroll = SubResource( 164 ) -VScrollBar/styles/scroll_focus = SubResource( 165 ) VSeparator/constants/separation = 4 -VSeparator/styles/separator = SubResource( 166 ) -VSlider/icons/grabber = SubResource( 82 ) -VSlider/icons/grabber_highlight = SubResource( 84 ) -VSlider/styles/grabber_area = SubResource( 167 ) -VSlider/styles/grabber_area_highlight = SubResource( 168 ) -VSlider/styles/slider = SubResource( 169 ) +VSeparator/styles/separator = SubResource("166") +VSlider/styles/grabber_area = SubResource("167") +VSlider/styles/grabber_area_highlight = SubResource("168") +VSlider/styles/slider = SubResource("169") VSplitContainer/constants/autohide = 1 VSplitContainer/constants/separation = 8 -VSplitContainer/icons/grabber = SubResource( 171 ) -VSplitContainer/styles/bg = SubResource( 174 ) -ValueSlider/colors/progress_color = Color( 0.545098, 0.545098, 0.545098, 1 ) -ValueSlider/colors/under_color = Color( 0.235294, 0.235294, 0.235294, 1 ) -ValueSlider/icons/arrow_hover = ExtResource( 4 ) -ValueSlider/icons/arrow_normal = ExtResource( 6 ) -ValueSlider/icons/arrow_pressed = ExtResource( 5 ) +ValueSlider/colors/progress_color = Color(0.545098, 0.545098, 0.545098, 1) +ValueSlider/colors/under_color = Color(0.235294, 0.235294, 0.235294, 1) +ValueSlider/icons/arrow_hover = ExtResource("4") +ValueSlider/icons/arrow_normal = ExtResource("6") +ValueSlider/icons/arrow_pressed = ExtResource("5") ValueSlider/icons/texture_over = null -ValueSlider/icons/texture_progress = ExtResource( 3 ) -ValueSlider/icons/texture_under = ExtResource( 3 ) -WindowDialog/colors/title_color = Color( 0.848039, 0.848039, 0.848039, 1 ) -WindowDialog/constants/close_h_ofs = 22 -WindowDialog/constants/close_v_ofs = 20 -WindowDialog/constants/scaleborder_size = 4 -WindowDialog/constants/title_height = 24 -WindowDialog/fonts/title_font = ExtResource( 1 ) -WindowDialog/icons/close = SubResource( 98 ) -WindowDialog/icons/close_highlight = SubResource( 98 ) -WindowDialog/styles/panel = SubResource( 175 ) +ValueSlider/icons/texture_progress = ExtResource("3") +ValueSlider/icons/texture_under = ExtResource("3") +Window/colors/title_color = Color(0.848039, 0.848039, 0.848039, 1) +Window/constants/close_h_ofs = 22 +Window/constants/close_v_ofs = 20 +Window/constants/scaleborder_size = 4 +Window/constants/title_height = 24 +Window/styles/panel = SubResource("175") diff --git a/assets/themes/light/theme.tres b/assets/themes/light/theme.tres index a8976c1ce2e..902630e1b76 100644 --- a/assets/themes/light/theme.tres +++ b/assets/themes/light/theme.tres @@ -1,1880 +1,860 @@ -[gd_resource type="Theme" load_steps=182 format=2] +[gd_resource type="Theme" load_steps=64 format=3 uid="uid://jase72axwunw"] -[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=1] -[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=2] -[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=3] -[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=4] -[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=5] -[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6] +[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="2"] +[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="3"] +[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="3_avskt"] +[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="4"] +[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="6"] -[sub_resource type="StyleBoxFlat" id=2] +[sub_resource type="StyleBoxFlat" id="23"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.690196, 0.690196, 0.690196, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 1, 1, 1, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=3] -content_margin_left = 6.0 content_margin_right = 6.0 -content_margin_top = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.92, 0.92, 0.92, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0, 0.356863, 1, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=4] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.92, 0.92, 0.92, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.75, 0.75, 0.75, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=5] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.92, 0.92, 0.92, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.88, 0.88, 0.88, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=6] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.92, 0.92, 0.92, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0, 0.356863, 1, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="Image" id=176] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 0, 88, 88, 88, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 88, 88, 88, 0, 85, 85, 85, 0, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 6, 85, 85, 85, 30, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 85, 85, 85, 30, 85, 85, 85, 6, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 30, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 30, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 80, 80, 80, 60, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 45, 85, 85, 85, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 105, 89, 89, 89, 243, 87, 87, 87, 105, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 105, 89, 89, 89, 248, 90, 90, 90, 255, 89, 89, 89, 186, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 104, 89, 89, 89, 248, 90, 90, 90, 255, 88, 88, 88, 193, 85, 85, 85, 51, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 79, 79, 79, 48, 85, 85, 85, 66, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 103, 89, 89, 89, 248, 90, 90, 90, 255, 88, 88, 88, 193, 83, 83, 83, 52, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 79, 79, 79, 48, 87, 87, 87, 178, 88, 88, 88, 231, 86, 86, 86, 74, 87, 87, 87, 102, 89, 89, 89, 248, 90, 90, 90, 255, 88, 88, 88, 194, 83, 83, 83, 52, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 83, 83, 83, 64, 89, 89, 89, 225, 90, 90, 90, 255, 88, 88, 88, 233, 89, 89, 89, 248, 90, 90, 90, 255, 88, 88, 88, 195, 83, 83, 83, 52, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 88, 88, 88, 224, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 196, 83, 83, 83, 52, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 68, 88, 88, 88, 224, 88, 88, 88, 196, 83, 83, 83, 52, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 85, 85, 85, 0, 85, 85, 85, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 66, 81, 81, 81, 53, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 45, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 30, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 30, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 6, 85, 85, 85, 30, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 85, 85, 85, 30, 85, 85, 85, 6, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 0, 88, 88, 88, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 88, 88, 88, 0, 85, 85, 85, 0, 85, 85, 85, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=8] -flags = 0 -flags = 0 -image = SubResource( 176 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=177] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 88, 88, 88, 184, 88, 88, 88, 233, 88, 88, 88, 233, 88, 88, 88, 184, 85, 85, 85, 69, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 21, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 68, 88, 88, 88, 238, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 238, 86, 86, 86, 68, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 21, 85, 85, 85, 0, 87, 87, 87, 0, 87, 87, 87, 32, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 179, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 179, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 87, 87, 87, 0, 87, 87, 87, 41, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 230, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 230, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 42, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 234, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 230, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 33, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 181, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 180, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 81, 81, 81, 0, 81, 81, 81, 22, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 88, 88, 88, 238, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 238, 85, 85, 85, 69, 86, 86, 86, 47, 86, 86, 86, 47, 81, 81, 81, 22, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 69, 88, 88, 88, 184, 88, 88, 88, 233, 88, 88, 88, 233, 88, 88, 88, 184, 85, 85, 85, 69, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 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] -flags = 0 -flags = 0 -image = SubResource( 177 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=178] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 21, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 21, 85, 85, 85, 0, 87, 87, 87, 0, 87, 87, 87, 32, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 87, 87, 87, 0, 87, 87, 87, 41, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 42, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 33, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 81, 81, 81, 0, 81, 81, 81, 22, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 81, 81, 81, 22, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 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] -flags = 0 -flags = 0 -image = SubResource( 178 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=179] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 0, 88, 88, 88, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 88, 88, 88, 0, 85, 85, 85, 0, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 6, 85, 85, 85, 30, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 85, 85, 85, 30, 85, 85, 85, 6, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 30, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 30, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 45, 85, 85, 85, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 0, 85, 85, 85, 0, 85, 85, 85, 45, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 45, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 30, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 30, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 6, 85, 85, 85, 30, 88, 88, 88, 46, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 85, 85, 85, 30, 85, 85, 85, 6, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 0, 88, 88, 88, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 88, 88, 88, 0, 85, 85, 85, 0, 85, 85, 85, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=14] -flags = 0 -flags = 0 -image = SubResource( 179 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=15] -content_margin_left = 4.0 -content_margin_right = 4.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.92, 0.92, 0.92, 1 ) +bg_color = Color(0.92, 0.92, 0.92, 1) draw_center = false -border_color = Color( 0.88, 0.88, 0.88, 1 ) +border_color = Color(0.88, 0.88, 0.88, 1) -[sub_resource type="StyleBoxFlat" id=16] -bg_color = Color( 0.6, 0.6, 0.6, 0 ) - -[sub_resource type="Image" id=180] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 88, 88, 88, 95, 88, 88, 88, 191, 88, 88, 88, 233, 88, 88, 88, 233, 88, 88, 88, 191, 88, 88, 88, 95, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 88, 88, 88, 144, 89, 89, 89, 254, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 254, 88, 88, 88, 144, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 81, 81, 81, 0, 81, 81, 81, 22, 86, 86, 86, 47, 85, 85, 85, 95, 89, 89, 89, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 253, 86, 86, 86, 94, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 81, 81, 81, 22, 81, 81, 81, 0, 87, 87, 87, 0, 87, 87, 87, 32, 86, 86, 86, 47, 89, 89, 89, 189, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 189, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 87, 87, 87, 0, 87, 87, 87, 41, 86, 86, 86, 47, 88, 88, 88, 230, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 230, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 87, 87, 87, 0, 87, 87, 87, 41, 86, 86, 86, 47, 88, 88, 88, 231, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 230, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 41, 87, 87, 87, 0, 87, 87, 87, 0, 87, 87, 87, 32, 86, 86, 86, 47, 89, 89, 89, 189, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 189, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 87, 87, 87, 32, 87, 87, 87, 0, 81, 81, 81, 0, 81, 81, 81, 22, 86, 86, 86, 47, 85, 85, 85, 95, 89, 89, 89, 253, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 253, 85, 85, 85, 95, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 81, 81, 81, 22, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 40, 86, 86, 86, 47, 88, 88, 88, 144, 89, 89, 89, 254, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 254, 88, 88, 88, 144, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 69, 69, 69, 11, 88, 88, 88, 46, 86, 86, 86, 47, 88, 88, 88, 95, 88, 88, 88, 191, 88, 88, 88, 233, 88, 88, 88, 233, 88, 88, 88, 191, 88, 88, 88, 95, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 88, 88, 88, 46, 69, 69, 69, 11, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 40, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 89, 89, 89, 40, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 0, 0, 0, 2, 81, 81, 81, 22, 87, 87, 87, 32, 85, 85, 85, 42, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 86, 86, 86, 47, 85, 85, 85, 42, 87, 87, 87, 32, 81, 81, 81, 22, 0, 0, 0, 2, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 85, 85, 85, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 85, 85, 85, 0, 87, 87, 87, 0, 81, 81, 81, 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": 38 -} - -[sub_resource type="ImageTexture" id=18] -flags = 0 -flags = 0 -image = SubResource( 180 ) -size = Vector2( 38, 16 ) - -[sub_resource type="Image" id=181] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": "LumAlpha8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=20] -flags = 4 -flags = 4 -image = SubResource( 181 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=182] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 0, 85, 85, 85, 12, 89, 89, 89, 123, 88, 88, 88, 178, 89, 89, 89, 229, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 229, 88, 88, 88, 178, 89, 89, 89, 123, 85, 85, 85, 12, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 88, 88, 88, 66, 89, 89, 89, 223, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 223, 88, 88, 88, 66, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 86, 86, 86, 65, 89, 89, 89, 254, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 194, 87, 87, 87, 76, 81, 81, 81, 25, 81, 81, 81, 25, 87, 87, 87, 76, 89, 89, 89, 194, 90, 90, 90, 255, 89, 89, 89, 254, 87, 87, 87, 64, 86, 86, 86, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 12, 89, 89, 89, 222, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 132, 88, 88, 88, 0, 87, 87, 87, 0, 81, 81, 81, 0, 81, 81, 81, 0, 87, 87, 87, 0, 88, 88, 88, 0, 88, 88, 88, 132, 90, 90, 90, 255, 89, 89, 89, 222, 85, 85, 85, 12, 85, 85, 85, 0, 89, 89, 89, 0, 89, 89, 89, 120, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 194, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 194, 90, 90, 90, 255, 89, 89, 89, 120, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 175, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 75, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 88, 88, 88, 75, 90, 90, 90, 255, 88, 88, 88, 175, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 225, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 81, 81, 81, 25, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 81, 81, 81, 25, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 226, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 20, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 81, 81, 81, 25, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 175, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 70, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 0, 89, 89, 89, 71, 90, 90, 90, 255, 88, 88, 88, 175, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 121, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 89, 89, 89, 193, 90, 90, 90, 255, 88, 88, 88, 121, 88, 88, 88, 0, 78, 78, 78, 0, 78, 78, 78, 13, 89, 89, 89, 223, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 132, 88, 88, 88, 0, 87, 87, 87, 0, 81, 81, 81, 0, 81, 81, 81, 0, 87, 87, 87, 0, 88, 88, 88, 0, 88, 88, 88, 132, 90, 90, 90, 255, 89, 89, 89, 223, 78, 78, 78, 13, 78, 78, 78, 0, 0, 0, 0, 0, 83, 83, 83, 0, 88, 88, 88, 66, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 193, 87, 87, 87, 76, 81, 81, 81, 25, 81, 81, 81, 25, 87, 87, 87, 76, 89, 89, 89, 193, 90, 90, 90, 255, 89, 89, 89, 254, 88, 88, 88, 66, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 66, 89, 89, 89, 224, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 224, 88, 88, 88, 66, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 0, 85, 85, 85, 12, 89, 89, 89, 123, 88, 88, 88, 178, 89, 89, 89, 229, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 229, 88, 88, 88, 178, 89, 89, 89, 123, 85, 85, 85, 12, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 38 -} - -[sub_resource type="ImageTexture" id=22] -flags = 0 -flags = 0 -image = SubResource( 182 ) -size = Vector2( 38, 16 ) - -[sub_resource type="StyleBoxFlat" id=23] -content_margin_left = 6.0 -content_margin_right = 6.0 +[sub_resource type="StyleBoxFlat" id="15"] +content_margin_left = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.92, 0.92, 0.92, 1 ) +bg_color = Color(0.92, 0.92, 0.92, 1) draw_center = false -border_color = Color( 0.88, 0.88, 0.88, 1 ) - -[sub_resource type="Image" id=183] -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, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 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 -} +border_color = Color(0.88, 0.88, 0.88, 1) -[sub_resource type="ImageTexture" id=25] -flags = 0 -flags = 0 -image = SubResource( 183 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="16"] +bg_color = Color(0.6, 0.6, 0.6, 0) -[sub_resource type="Image" id=184] -data = { -"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 85, 86, 188, 0, 0, 3, 255, 0, 0, 2, 125, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 86, 86, 88, 188, 0, 0, 3, 255, 0, 0, 2, 126, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 88, 88, 89, 188, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 89, 89, 90, 188, 0, 0, 3, 255, 0, 0, 1, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 93, 93, 94, 188, 0, 0, 3, 255, 0, 0, 1, 131, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 94, 94, 96, 188, 0, 0, 3, 255, 0, 0, 1, 132, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 96, 96, 97, 188, 0, 0, 3, 255, 0, 0, 1, 133, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 99, 101, 189, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 136, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=27] -flags = 0 -flags = 0 -image = SubResource( 184 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=185] -data = { -"data": PoolByteArray( 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 65, 65, 65, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=29] -flags = 0 -flags = 0 -image = SubResource( 185 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=186] -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, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 89, 89, 89, 202, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 200, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 199, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 88, 88, 88, 0, 88, 88, 88, 0, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 218, 87, 87, 87, 70, 87, 87, 87, 70, 88, 88, 88, 218, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 0, 86, 86, 86, 65, 90, 90, 90, 255, 90, 90, 90, 255, 86, 86, 86, 65, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 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=31] -flags = 0 -flags = 0 -image = SubResource( 186 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=32] -bg_color = Color( 0.768627, 0.768627, 0.768627, 1 ) +[sub_resource type="StyleBoxFlat" id="32"] +bg_color = Color(0.768627, 0.768627, 0.768627, 1) border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 -border_color = Color( 0.686275, 0.686275, 0.686275, 1 ) +border_color = Color(0.686275, 0.686275, 0.686275, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=33] +[sub_resource type="StyleBoxFlat" id="33"] border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 -border_color = Color( 0.686275, 0.686275, 0.686275, 1 ) +border_color = Color(0.686275, 0.686275, 0.686275, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=34] -bg_color = Color( 0.2, 0.2, 0.2, 1 ) +[sub_resource type="StyleBoxFlat" id="34"] +bg_color = Color(0.2, 0.2, 0.2, 1) border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 -border_color = Color( 0.686275, 0.686275, 0.686275, 1 ) +border_color = Color(0.686275, 0.686275, 0.686275, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="Image" id=187] -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, 89, 89, 89, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 180, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 180, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 70, 88, 88, 88, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 89, 89, 89, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 180, 89, 89, 89, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 89, 89, 89, 0, 89, 89, 89, 180, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 180, 89, 89, 89, 0, 0, 0, 0, 0, 89, 89, 89, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=36] -flags = 0 -flags = 0 -image = SubResource( 187 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=188] -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, 85, 85, 85, 0, 89, 89, 89, 0, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 21, 89, 89, 89, 199, 88, 88, 88, 198, 85, 85, 85, 21, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 21, 89, 89, 89, 211, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 209, 85, 85, 85, 21, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 85, 85, 85, 21, 89, 89, 89, 210, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 209, 89, 89, 89, 20, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 20, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 206, 89, 89, 89, 254, 89, 89, 89, 251, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 209, 80, 80, 80, 19, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 193, 89, 89, 89, 254, 89, 89, 89, 206, 80, 80, 80, 19, 89, 89, 89, 254, 89, 89, 89, 249, 80, 80, 80, 19, 89, 89, 89, 208, 89, 89, 89, 254, 89, 89, 89, 193, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 176, 88, 88, 88, 192, 80, 80, 80, 19, 83, 83, 83, 0, 89, 89, 89, 254, 89, 89, 89, 249, 83, 83, 83, 0, 80, 80, 80, 19, 88, 88, 88, 192, 89, 89, 89, 176, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 80, 80, 80, 0, 89, 89, 89, 0, 89, 89, 89, 254, 89, 89, 89, 249, 89, 89, 89, 0, 80, 80, 80, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 254, 89, 89, 89, 249, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 176, 89, 89, 89, 176, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=38] -flags = 0 -flags = 0 -image = SubResource( 188 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=189] -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, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 98, 89, 89, 89, 177, 89, 89, 89, 228, 89, 89, 89, 228, 89, 89, 89, 177, 88, 88, 88, 98, 88, 88, 88, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 23, 89, 89, 89, 185, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 185, 88, 88, 88, 23, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 185, 89, 89, 89, 254, 89, 89, 89, 225, 89, 89, 89, 83, 85, 85, 85, 24, 85, 85, 85, 24, 88, 88, 88, 84, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 185, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 94, 89, 89, 89, 254, 89, 89, 89, 225, 90, 90, 90, 17, 89, 89, 89, 0, 85, 85, 85, 0, 85, 85, 85, 0, 89, 89, 89, 0, 90, 90, 90, 17, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 94, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 174, 89, 89, 89, 254, 87, 87, 87, 87, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 87, 87, 87, 87, 89, 89, 89, 254, 89, 89, 89, 174, 89, 89, 89, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 224, 89, 89, 89, 254, 85, 85, 85, 24, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 24, 89, 89, 89, 254, 89, 89, 89, 224, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 147, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 161, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 24, 89, 89, 89, 254, 89, 89, 89, 224, 89, 89, 89, 0, 85, 85, 85, 0, 85, 85, 85, 6, 89, 89, 89, 205, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 214, 76, 76, 76, 10, 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 85, 89, 89, 89, 254, 88, 88, 88, 178, 88, 88, 88, 0, 0, 0, 0, 0, 87, 87, 87, 0, 90, 90, 90, 34, 89, 89, 89, 240, 89, 89, 89, 245, 85, 85, 85, 42, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 90, 90, 90, 17, 89, 89, 89, 224, 89, 89, 89, 254, 87, 87, 87, 96, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 84, 89, 89, 89, 97, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 24, 89, 89, 89, 83, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 186, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 185, 88, 88, 88, 23, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 228, 89, 89, 89, 177, 87, 87, 87, 99, 88, 88, 88, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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] -flags = 0 -flags = 0 -image = SubResource( 189 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=190] -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, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 88, 88, 88, 0, 88, 88, 88, 92, 89, 89, 89, 185, 89, 89, 89, 231, 89, 89, 89, 231, 89, 89, 89, 186, 88, 88, 88, 95, 88, 88, 88, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 35, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 209, 87, 87, 87, 41, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 87, 87, 87, 32, 89, 89, 89, 226, 89, 89, 89, 254, 89, 89, 89, 225, 89, 89, 89, 83, 85, 85, 85, 24, 85, 85, 85, 24, 88, 88, 88, 84, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 228, 87, 87, 87, 35, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 213, 89, 89, 89, 254, 89, 89, 89, 225, 90, 90, 90, 17, 88, 88, 88, 0, 87, 87, 87, 0, 87, 87, 87, 0, 88, 88, 88, 0, 90, 90, 90, 17, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 217, 85, 85, 85, 3, 85, 85, 85, 0, 88, 88, 88, 0, 88, 88, 88, 89, 89, 89, 89, 254, 89, 89, 89, 254, 87, 87, 87, 87, 87, 87, 87, 0, 86, 86, 86, 59, 89, 89, 89, 200, 89, 89, 89, 200, 86, 86, 86, 59, 87, 87, 87, 0, 87, 87, 87, 87, 89, 89, 89, 254, 89, 89, 89, 254, 87, 87, 87, 93, 87, 87, 87, 0, 89, 89, 89, 0, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 254, 85, 85, 85, 24, 86, 86, 86, 0, 88, 88, 88, 198, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 198, 86, 86, 86, 0, 85, 85, 85, 24, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 209, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 254, 80, 80, 80, 19, 84, 84, 84, 0, 89, 89, 89, 199, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 199, 87, 87, 87, 0, 85, 85, 85, 24, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 209, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 94, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 84, 88, 88, 88, 0, 86, 86, 86, 59, 88, 88, 88, 201, 89, 89, 89, 200, 86, 86, 86, 59, 88, 88, 88, 0, 90, 90, 90, 85, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 94, 89, 89, 89, 0, 85, 85, 85, 0, 85, 85, 85, 3, 89, 89, 89, 222, 89, 89, 89, 254, 89, 89, 89, 224, 90, 90, 90, 17, 88, 88, 88, 0, 86, 86, 86, 0, 87, 87, 87, 0, 88, 88, 88, 0, 90, 90, 90, 17, 89, 89, 89, 224, 89, 89, 89, 254, 89, 89, 89, 222, 85, 85, 85, 3, 85, 85, 85, 0, 0, 0, 0, 0, 86, 86, 86, 0, 87, 87, 87, 41, 89, 89, 89, 232, 89, 89, 89, 254, 89, 89, 89, 225, 89, 89, 89, 83, 85, 85, 85, 24, 85, 85, 85, 24, 89, 89, 89, 83, 89, 89, 89, 225, 89, 89, 89, 254, 89, 89, 89, 232, 87, 87, 87, 41, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, 0, 86, 86, 86, 44, 89, 89, 89, 216, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 216, 86, 86, 86, 44, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, 43, 0, 0, 0, 0, 2, 88, 88, 88, 98, 89, 89, 89, 190, 89, 89, 89, 232, 89, 89, 89, 232, 89, 89, 89, 190, 88, 88, 88, 98, 0, 0, 0, 2, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=42] -flags = 0 -flags = 0 -image = SubResource( 190 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=191] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=44] -flags = 0 -flags = 0 -image = SubResource( 191 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=192] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=46] -flags = 0 -flags = 0 -image = SubResource( 192 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=193] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 221, 78, 78, 78, 127, 112, 112, 112, 143, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 250, 153, 153, 153, 171, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 205, 0, 0, 0, 100, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 152, 152, 152, 169, 201, 201, 201, 220, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=48] -flags = 0 -flags = 0 -image = SubResource( 193 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=194] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 64, 64, 64, 0, 63, 63, 63, 0, 63, 63, 63, 0, 64, 64, 64, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 58, 58, 58, 0, 56, 56, 56, 18, 64, 64, 64, 115, 63, 63, 63, 156, 63, 63, 63, 156, 64, 64, 64, 114, 56, 56, 56, 18, 58, 58, 58, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 60, 60, 60, 0, 60, 60, 60, 17, 63, 63, 63, 160, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 174, 63, 63, 63, 160, 60, 60, 60, 17, 60, 60, 60, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 64, 64, 64, 0, 64, 64, 64, 110, 64, 64, 64, 174, 64, 64, 64, 131, 58, 58, 58, 35, 58, 58, 58, 35, 64, 64, 64, 131, 64, 64, 64, 174, 64, 64, 64, 110, 64, 64, 64, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 65, 65, 65, 0, 65, 65, 65, 153, 64, 64, 64, 174, 60, 60, 60, 34, 59, 59, 59, 0, 59, 59, 59, 0, 60, 60, 60, 34, 64, 64, 64, 174, 65, 65, 65, 153, 65, 65, 65, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 64, 64, 64, 0, 64, 64, 64, 174, 64, 64, 64, 174, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 64, 64, 64, 0, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 64, 64, 64, 174, 64, 64, 64, 174, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=50] -flags = 0 -flags = 0 -image = SubResource( 194 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=51] +[sub_resource type="StyleBoxFlat" id="51"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.92, 0.92, 0.92, 1 ) +bg_color = Color(0.92, 0.92, 0.92, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.84, 0.84, 0.84, 1 ) - -[sub_resource type="Image" id=195] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} +border_color = Color(0.84, 0.84, 0.84, 1) -[sub_resource type="ImageTexture" id=53] -flags = 0 -flags = 0 -image = SubResource( 195 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=196] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 58, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 59, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 10, -"mipmaps": false, -"width": 10 -} - -[sub_resource type="ImageTexture" id=55] -flags = 0 -flags = 0 -image = SubResource( 196 ) -size = Vector2( 10, 10 ) - -[sub_resource type="Image" id=197] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 105, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=57] -flags = 0 -flags = 0 -image = SubResource( 197 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=58] +[sub_resource type="StyleBoxFlat" id="58"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.65, 0.5655, 0.26, 1 ) -shadow_color = Color( 0.65, 0.5655, 0.26, 0.1 ) +border_color = Color(0.65, 0.5655, 0.26, 1) +shadow_color = Color(0.65, 0.5655, 0.26, 0.1) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=59] +[sub_resource type="StyleBoxFlat" id="59"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.3 ) +bg_color = Color(1, 1, 1, 0.3) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 0.9 ) +border_color = Color(0, 0, 0, 0.9) -[sub_resource type="StyleBoxFlat" id=60] +[sub_resource type="StyleBoxFlat" id="60"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.4 ) +bg_color = Color(1, 1, 1, 0.4) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 0.9 ) +border_color = Color(0, 0, 0, 0.9) -[sub_resource type="StyleBoxFlat" id=61] +[sub_resource type="StyleBoxFlat" id="61"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.7 ) +bg_color = Color(1, 1, 1, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 0.9 ) +border_color = Color(0, 0, 0, 0.9) -[sub_resource type="StyleBoxFlat" id=62] +[sub_resource type="StyleBoxFlat" id="62"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.75, 0.3525, 0.315, 1 ) -shadow_color = Color( 0.75, 0.3525, 0.315, 0.2 ) +border_color = Color(0.75, 0.3525, 0.315, 1) +shadow_color = Color(0.75, 0.3525, 0.315, 0.2) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=63] +[sub_resource type="StyleBoxFlat" id="63"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0.356863, 1, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.1 ) +border_color = Color(0, 0.356863, 1, 0.9) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=64] +[sub_resource type="StyleBoxFlat" id="64"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.7 ) +bg_color = Color(1, 1, 1, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 0.9 ) +border_color = Color(0, 0, 0, 0.9) -[sub_resource type="StyleBoxFlat" id=65] +[sub_resource type="StyleBoxFlat" id="65"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0.356863, 1, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.1 ) +border_color = Color(0, 0.356863, 1, 0.9) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 8 -[sub_resource type="ImageTexture" id=66] - -[sub_resource type="Image" id=198] -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, 63, 63, 63, 0, 64, 64, 64, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 16, 64, 64, 64, 55, 64, 64, 64, 55, 63, 63, 63, 16, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 54, 61, 61, 61, 70, 61, 61, 61, 70, 61, 61, 61, 54, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 54, 61, 61, 61, 70, 61, 61, 61, 70, 61, 61, 61, 54, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 16, 64, 64, 64, 55, 64, 64, 64, 55, 63, 63, 63, 16, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 64, 64, 64, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=68] -flags = 0 -flags = 0 -image = SubResource( 198 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=69] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 68 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=199] -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, 63, 63, 63, 0, 93, 93, 93, 0, 94, 94, 94, 0, 94, 94, 94, 0, 93, 93, 93, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 4, 93, 93, 93, 98, 94, 94, 94, 167, 94, 94, 94, 167, 93, 93, 93, 98, 63, 63, 63, 4, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 94, 94, 0, 94, 94, 94, 97, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 97, 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 94, 94, 0, 94, 94, 94, 164, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 164, 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 94, 94, 0, 94, 94, 94, 164, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 164, 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 94, 94, 0, 94, 94, 94, 97, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 95, 95, 95, 186, 94, 94, 94, 97, 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 4, 93, 93, 93, 98, 94, 94, 94, 167, 94, 94, 94, 167, 93, 93, 93, 98, 63, 63, 63, 4, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 93, 93, 93, 0, 94, 94, 94, 0, 94, 94, 94, 0, 93, 93, 93, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=71] -flags = 0 -flags = 0 -image = SubResource( 199 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=72] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 71 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="Image" id=200] -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, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} +[sub_resource type="StyleBoxLine" id="80"] +color = Color(0, 0, 0, 0.1) -[sub_resource type="ImageTexture" id=74] -flags = 0 -flags = 0 -image = SubResource( 200 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=75] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 74 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=201] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=77] -flags = 0 -flags = 0 -image = SubResource( 201 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=78] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 77 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=79] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 77 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=80] -color = Color( 0, 0, 0, 0.1 ) - -[sub_resource type="Image" id=202] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 87, 87, 87, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 87, 87, 87, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 3, 87, 87, 87, 35, 86, 86, 86, 50, 86, 86, 86, 65, 86, 86, 86, 65, 86, 86, 86, 50, 87, 87, 87, 35, 85, 85, 85, 3, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 85, 85, 85, 18, 89, 89, 89, 63, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 89, 89, 89, 63, 85, 85, 85, 18, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 90, 90, 90, 17, 88, 88, 88, 72, 87, 87, 87, 73, 88, 88, 88, 49, 85, 85, 85, 18, 86, 86, 86, 0, 86, 86, 86, 0, 85, 85, 85, 18, 88, 88, 88, 49, 87, 87, 87, 73, 88, 88, 88, 72, 90, 90, 90, 17, 87, 87, 87, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 3, 86, 86, 86, 62, 87, 87, 87, 73, 87, 87, 87, 32, 67, 67, 67, 0, 74, 74, 74, 0, 64, 64, 64, 0, 63, 63, 63, 0, 74, 74, 74, 0, 58, 58, 58, 0, 87, 87, 87, 32, 87, 87, 87, 73, 86, 86, 86, 62, 85, 85, 85, 3, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 33, 87, 87, 87, 73, 88, 88, 88, 49, 67, 67, 67, 0, 28, 28, 28, 9, 63, 63, 63, 156, 64, 64, 64, 219, 63, 63, 63, 217, 63, 63, 63, 145, 0, 0, 0, 4, 58, 58, 58, 0, 88, 88, 88, 49, 87, 87, 87, 73, 85, 85, 85, 33, 85, 85, 85, 0, 86, 86, 86, 0, 86, 86, 86, 50, 87, 87, 87, 73, 90, 90, 90, 17, 51, 51, 51, 0, 64, 64, 64, 159, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 141, 76, 76, 76, 0, 90, 90, 90, 17, 87, 87, 87, 73, 86, 86, 86, 50, 86, 86, 86, 0, 87, 87, 87, 0, 87, 87, 87, 64, 87, 87, 87, 73, 0, 0, 0, 2, 0, 0, 0, 1, 64, 64, 64, 223, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 210, 31, 31, 31, 0, 0, 0, 0, 2, 87, 87, 87, 73, 87, 87, 87, 64, 87, 87, 87, 0, 86, 86, 86, 0, 86, 86, 86, 65, 87, 87, 87, 73, 0, 0, 0, 2, 0, 0, 0, 1, 64, 64, 64, 223, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 210, 31, 31, 31, 0, 0, 0, 0, 2, 87, 87, 87, 73, 87, 87, 87, 64, 87, 87, 87, 0, 90, 90, 90, 0, 90, 90, 90, 51, 87, 87, 87, 73, 90, 90, 90, 17, 51, 51, 51, 0, 64, 64, 64, 159, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 141, 76, 76, 76, 0, 90, 90, 90, 17, 87, 87, 87, 73, 90, 90, 90, 51, 90, 90, 90, 0, 87, 87, 87, 0, 87, 87, 87, 35, 87, 87, 87, 73, 88, 88, 88, 49, 67, 67, 67, 0, 28, 28, 28, 9, 63, 63, 63, 156, 64, 64, 64, 219, 63, 63, 63, 217, 62, 62, 62, 146, 0, 0, 0, 4, 58, 58, 58, 0, 88, 88, 88, 49, 87, 87, 87, 73, 87, 87, 87, 35, 87, 87, 87, 0, 85, 85, 85, 0, 85, 85, 85, 3, 89, 89, 89, 63, 87, 87, 87, 73, 87, 87, 87, 32, 67, 67, 67, 0, 74, 74, 74, 0, 64, 64, 64, 0, 63, 63, 63, 0, 73, 73, 73, 0, 58, 58, 58, 0, 87, 87, 87, 32, 87, 87, 87, 73, 89, 89, 89, 63, 85, 85, 85, 3, 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 18, 88, 88, 88, 72, 87, 87, 87, 73, 88, 88, 88, 49, 85, 85, 85, 18, 86, 86, 86, 0, 86, 86, 86, 0, 85, 85, 85, 18, 88, 88, 88, 49, 87, 87, 87, 73, 88, 88, 88, 72, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 18, 89, 89, 89, 63, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 87, 87, 87, 73, 89, 89, 89, 63, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 3, 87, 87, 87, 35, 86, 86, 86, 50, 86, 86, 86, 65, 86, 86, 86, 65, 86, 86, 86, 50, 87, 87, 87, 35, 85, 85, 85, 3, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 87, 87, 87, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 86, 86, 86, 0, 87, 87, 87, 0, 85, 85, 85, 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=82] -flags = 0 -flags = 0 -image = SubResource( 202 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=203] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 0, 69, 69, 69, 11, 88, 88, 88, 124, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 88, 88, 88, 124, 69, 69, 69, 11, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 89, 89, 89, 63, 90, 90, 90, 221, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 221, 89, 89, 89, 63, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 86, 86, 86, 62, 89, 89, 89, 254, 90, 90, 90, 255, 89, 89, 89, 174, 88, 88, 88, 66, 0, 0, 0, 1, 59, 59, 59, 0, 88, 88, 88, 66, 89, 89, 89, 174, 90, 90, 90, 255, 89, 89, 89, 254, 86, 86, 86, 62, 77, 77, 77, 0, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 220, 90, 90, 90, 255, 89, 89, 89, 114, 68, 68, 68, 0, 75, 75, 75, 0, 32, 32, 32, 0, 63, 63, 63, 0, 75, 75, 75, 0, 59, 59, 59, 0, 89, 89, 89, 114, 90, 90, 90, 255, 89, 89, 89, 219, 69, 69, 69, 11, 69, 69, 69, 0, 88, 88, 88, 0, 88, 88, 88, 118, 90, 90, 90, 255, 88, 88, 88, 172, 68, 68, 68, 0, 28, 28, 28, 9, 63, 63, 63, 156, 64, 64, 64, 219, 63, 63, 63, 217, 63, 63, 63, 145, 0, 0, 0, 4, 59, 59, 59, 0, 88, 88, 88, 172, 90, 90, 90, 255, 88, 88, 88, 118, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 175, 90, 90, 90, 255, 89, 89, 89, 60, 51, 51, 51, 0, 64, 64, 64, 159, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 141, 76, 76, 76, 0, 89, 89, 89, 60, 90, 90, 90, 255, 88, 88, 88, 175, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 225, 90, 90, 90, 255, 72, 72, 72, 7, 0, 0, 0, 1, 64, 64, 64, 223, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 210, 67, 67, 67, 0, 72, 72, 72, 7, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 230, 90, 90, 90, 255, 72, 72, 72, 7, 0, 0, 0, 1, 64, 64, 64, 223, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 210, 67, 67, 67, 0, 72, 72, 72, 7, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 180, 90, 90, 90, 255, 89, 89, 89, 60, 51, 51, 51, 0, 64, 64, 64, 159, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 64, 64, 64, 231, 63, 63, 63, 141, 76, 76, 76, 0, 89, 89, 89, 60, 90, 90, 90, 255, 89, 89, 89, 179, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 123, 90, 90, 90, 255, 88, 88, 88, 172, 68, 68, 68, 0, 28, 28, 28, 9, 63, 63, 63, 156, 64, 64, 64, 219, 63, 63, 63, 217, 62, 62, 62, 146, 0, 0, 0, 4, 59, 59, 59, 0, 88, 88, 88, 172, 90, 90, 90, 255, 89, 89, 89, 123, 89, 89, 89, 0, 69, 69, 69, 0, 69, 69, 69, 11, 89, 89, 89, 222, 90, 90, 90, 255, 88, 88, 88, 112, 68, 68, 68, 0, 75, 75, 75, 0, 64, 64, 64, 0, 31, 31, 31, 0, 75, 75, 75, 0, 59, 59, 59, 0, 89, 89, 89, 114, 90, 90, 90, 255, 90, 90, 90, 221, 69, 69, 69, 11, 69, 69, 69, 0, 0, 0, 0, 0, 78, 78, 78, 0, 87, 87, 87, 64, 89, 89, 89, 254, 90, 90, 90, 255, 89, 89, 89, 174, 88, 88, 88, 66, 59, 59, 59, 0, 0, 0, 0, 1, 88, 88, 88, 66, 89, 89, 89, 174, 90, 90, 90, 255, 89, 89, 89, 254, 87, 87, 87, 64, 78, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 64, 89, 89, 89, 222, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 221, 89, 89, 89, 63, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78, 0, 69, 69, 69, 11, 88, 88, 88, 124, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 88, 88, 88, 124, 69, 69, 69, 11, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 69, 69, 69, 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=84] -flags = 0 -flags = 0 -image = SubResource( 203 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=85] +[sub_resource type="StyleBoxFlat" id="85"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.75, 0.75, 0.75, 1 ) +bg_color = Color(0.75, 0.75, 0.75, 1) -[sub_resource type="StyleBoxFlat" id=86] +[sub_resource type="StyleBoxFlat" id="86"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.75, 0.75, 0.75, 1 ) +bg_color = Color(0.75, 0.75, 0.75, 1) -[sub_resource type="StyleBoxFlat" id=87] +[sub_resource type="StyleBoxFlat" id="87"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.84, 0.84, 0.84, 1 ) - -[sub_resource type="Image" id=204] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 49, 62, 62, 62, 49, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 49, 62, 62, 62, 49, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 64, -"mipmaps": false, -"width": 8 -} +bg_color = Color(0.84, 0.84, 0.84, 1) -[sub_resource type="ImageTexture" id=89] -flags = 0 -flags = 0 -image = SubResource( 204 ) -size = Vector2( 8, 64 ) - -[sub_resource type="StyleBoxTexture" id=90] -texture = SubResource( 20 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=91] +[sub_resource type="StyleBoxFlat" id="91"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.92, 0.92, 0.92, 1 ) +bg_color = Color(0.92, 0.92, 0.92, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.84, 0.84, 0.84, 1 ) +border_color = Color(0.84, 0.84, 0.84, 1) -[sub_resource type="StyleBoxFlat" id=92] +[sub_resource type="StyleBoxFlat" id="92"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 1 ) +bg_color = Color(1, 1, 1, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.625, 0.625, 0.625, 1 ) +border_color = Color(0.625, 0.625, 0.625, 1) -[sub_resource type="StyleBoxFlat" id=93] +[sub_resource type="StyleBoxFlat" id="93"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 1 ) +bg_color = Color(1, 1, 1, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 0.2 ) +border_color = Color(0, 0, 0, 0.2) -[sub_resource type="StyleBoxFlat" id=94] +[sub_resource type="StyleBoxFlat" id="94"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0, 0, 0, 0.2 ) -border_color = Color( 1, 1, 1, 1 ) +bg_color = Color(0, 0, 0, 0.2) +border_color = Color(1, 1, 1, 1) -[sub_resource type="StyleBoxFlat" id=95] +[sub_resource type="StyleBoxFlat" id="95"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0, 0, 0, 0.2 ) -border_color = Color( 1, 1, 1, 1 ) +bg_color = Color(0, 0, 0, 0.2) +border_color = Color(1, 1, 1, 1) -[sub_resource type="StyleBoxEmpty" id=96] +[sub_resource type="StyleBoxEmpty" id="96"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -[sub_resource type="Image" id=205] -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, 63, 63, 63, 0, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 76, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 63, 63, 63, 76, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 76, 64, 64, 64, 228, 63, 63, 63, 188, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 63, 63, 63, 188, 64, 64, 64, 228, 63, 63, 63, 76, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 56, 56, 56, 18, 63, 63, 63, 188, 64, 64, 64, 229, 64, 64, 64, 187, 60, 60, 60, 17, 60, 60, 60, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 187, 64, 64, 64, 229, 63, 63, 63, 188, 56, 56, 56, 18, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 53, 53, 53, 19, 63, 63, 63, 188, 64, 64, 64, 229, 64, 64, 64, 185, 60, 60, 60, 17, 60, 60, 60, 17, 64, 64, 64, 186, 64, 64, 64, 229, 63, 63, 63, 188, 53, 53, 53, 19, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 53, 53, 53, 19, 64, 64, 64, 190, 64, 64, 64, 229, 64, 64, 64, 185, 64, 64, 64, 185, 64, 64, 64, 229, 64, 64, 64, 189, 53, 53, 53, 19, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 53, 53, 53, 19, 64, 64, 64, 191, 64, 64, 64, 229, 64, 64, 64, 229, 64, 64, 64, 190, 53, 53, 53, 19, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 63, 63, 63, 188, 64, 64, 64, 229, 64, 64, 64, 229, 63, 63, 63, 188, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 63, 63, 63, 188, 64, 64, 64, 229, 63, 63, 63, 188, 63, 63, 63, 188, 64, 64, 64, 229, 64, 64, 64, 187, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 187, 64, 64, 64, 229, 63, 63, 63, 188, 56, 56, 56, 18, 53, 53, 53, 19, 63, 63, 63, 188, 64, 64, 64, 229, 64, 64, 64, 186, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 185, 64, 64, 64, 229, 64, 64, 64, 189, 53, 53, 53, 19, 54, 54, 54, 0, 53, 53, 53, 0, 53, 53, 53, 19, 64, 64, 64, 189, 64, 64, 64, 229, 64, 64, 64, 185, 60, 60, 60, 17, 60, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 76, 64, 64, 64, 229, 64, 64, 64, 190, 53, 53, 53, 19, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 53, 53, 53, 19, 64, 64, 64, 190, 64, 64, 64, 229, 63, 63, 63, 76, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 77, 53, 53, 53, 19, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 53, 53, 53, 19, 62, 62, 62, 77, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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="StyleBoxFlat" id="3"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.92, 0.92, 0.92, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0, 0.356863, 1, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=98] -flags = 0 -flags = 0 -image = SubResource( 205 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="5"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.92, 0.92, 0.92, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.88, 0.88, 0.88, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="Image" id=206] -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, 63, 63, 63, 0, 64, 64, 64, 0, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 121, 64, 64, 64, 151, 51, 51, 51, 15, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 54, 54, 54, 14, 63, 63, 63, 149, 63, 63, 63, 125, 63, 63, 63, 0, 64, 64, 64, 0, 64, 64, 64, 142, 64, 64, 64, 199, 64, 64, 64, 163, 51, 51, 51, 15, 51, 51, 51, 0, 54, 54, 54, 0, 54, 54, 54, 14, 63, 63, 63, 160, 64, 64, 64, 199, 63, 63, 63, 144, 63, 63, 63, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 163, 64, 64, 64, 199, 64, 64, 64, 161, 51, 51, 51, 15, 54, 54, 54, 14, 64, 64, 64, 159, 64, 64, 64, 199, 64, 64, 64, 166, 56, 56, 56, 18, 56, 56, 56, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 165, 64, 64, 64, 199, 64, 64, 64, 161, 64, 64, 64, 159, 64, 64, 64, 199, 64, 64, 64, 167, 56, 56, 56, 18, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 166, 64, 64, 64, 199, 64, 64, 64, 199, 64, 64, 64, 167, 56, 56, 56, 18, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 60, 60, 60, 17, 64, 64, 64, 155, 64, 64, 64, 157, 56, 56, 56, 18, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, 64, 64, 64, 0, 64, 64, 64, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} +[sub_resource type="StyleBoxFlat" id="2"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.690196, 0.690196, 0.690196, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(1, 1, 1, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=100] -flags = 0 -flags = 0 -image = SubResource( 206 ) -size = Vector2( 12, 12 ) +[sub_resource type="StyleBoxFlat" id="4"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.92, 0.92, 0.92, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.75, 0.75, 0.75, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=102] +[sub_resource type="StyleBoxFlat" id="6"] content_margin_left = 6.0 +content_margin_top = 4.0 content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.92, 0.92, 0.92, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0, 0.356863, 1, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 + +[sub_resource type="StyleBoxFlat" id="102"] +content_margin_left = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.6786, 0.80301, 0.87, 1 ) +bg_color = Color(0.6786, 0.80301, 0.87, 1) -[sub_resource type="StyleBoxFlat" id=103] +[sub_resource type="StyleBoxFlat" id="103"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 2.0 +content_margin_right = 2.0 content_margin_bottom = 2.0 -bg_color = Color( 1, 1, 1, 1 ) +bg_color = Color(1, 1, 1, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=104] +[sub_resource type="StyleBoxFlat" id="104"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 1, 1, 1, 1 ) +bg_color = Color(1, 1, 1, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.75, 0.75, 0.75, 1 ) -shadow_color = Color( 0, 0, 0, 0.1 ) +border_color = Color(0.75, 0.75, 0.75, 1) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 4 -[sub_resource type="Image" id=207] -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, 88, 88, 88, 0, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 89, 89, 89, 197, 85, 85, 85, 21, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 190, 89, 89, 89, 254, 89, 89, 89, 210, 85, 85, 85, 21, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 80, 80, 80, 19, 89, 89, 89, 207, 89, 89, 89, 254, 89, 89, 89, 209, 85, 85, 85, 21, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 83, 83, 83, 0, 80, 80, 80, 19, 89, 89, 89, 208, 89, 89, 89, 254, 89, 89, 89, 209, 80, 80, 80, 19, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 196, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 176, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 197, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 86, 86, 86, 0, 80, 80, 80, 19, 89, 89, 89, 206, 89, 89, 89, 254, 89, 89, 89, 212, 85, 85, 85, 21, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 17, 89, 89, 89, 206, 89, 89, 89, 254, 89, 89, 89, 212, 85, 85, 85, 21, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 189, 89, 89, 89, 254, 89, 89, 89, 212, 81, 81, 81, 22, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 176, 88, 88, 88, 198, 88, 88, 88, 23, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=106] -flags = 0 -flags = 0 -image = SubResource( 207 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=208] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 82, 82, 82, 31, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 82, 82, 82, 31, 85, 85, 85, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 178, 89, 89, 89, 254, 88, 88, 88, 81, 69, 69, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 69, 0, 88, 88, 88, 81, 89, 89, 89, 254, 89, 89, 89, 177, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 84, 89, 89, 89, 254, 90, 90, 90, 204, 51, 51, 51, 5, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 0, 51, 51, 51, 5, 90, 90, 90, 204, 89, 89, 89, 254, 88, 88, 88, 84, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 89, 89, 89, 209, 89, 89, 89, 254, 89, 89, 89, 176, 51, 51, 51, 5, 70, 70, 70, 0, 81, 81, 81, 0, 81, 81, 81, 0, 70, 70, 70, 0, 51, 51, 51, 5, 89, 89, 89, 176, 89, 89, 89, 254, 89, 89, 89, 209, 0, 0, 0, 1, 0, 0, 0, 0, 80, 80, 80, 0, 80, 80, 80, 19, 89, 89, 89, 210, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 213, 89, 89, 89, 88, 81, 81, 81, 22, 81, 81, 81, 22, 89, 89, 89, 88, 89, 89, 89, 214, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 210, 80, 80, 80, 19, 80, 80, 80, 0, 85, 85, 85, 0, 85, 85, 85, 9, 89, 89, 89, 194, 89, 89, 89, 214, 88, 88, 88, 215, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 215, 89, 89, 89, 214, 89, 89, 89, 194, 85, 85, 85, 9, 85, 85, 85, 0, 0, 0, 0, 0, 80, 80, 80, 0, 76, 76, 76, 10, 89, 89, 89, 20, 51, 51, 51, 5, 89, 89, 89, 105, 90, 90, 90, 187, 89, 89, 89, 254, 89, 89, 89, 254, 90, 90, 90, 187, 89, 89, 89, 105, 51, 51, 51, 5, 89, 89, 89, 20, 76, 76, 76, 10, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 0, 89, 89, 89, 0, 51, 51, 51, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 254, 89, 89, 89, 249, 89, 89, 89, 0, 89, 89, 89, 0, 51, 51, 51, 0, 89, 89, 89, 0, 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 0, 0, 0, 0, 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=108] -flags = 0 -flags = 0 -image = SubResource( 208 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=209] -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, 86, 86, 86, 0, 88, 88, 88, 0, 89, 89, 89, 0, 87, 87, 87, 0, 87, 87, 87, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 87, 87, 87, 0, 86, 86, 86, 115, 88, 88, 88, 204, 89, 89, 89, 236, 87, 87, 87, 90, 87, 87, 87, 73, 89, 89, 89, 37, 88, 88, 88, 0, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, 0, 81, 81, 81, 47, 89, 89, 89, 222, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 251, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 87, 87, 87, 82, 79, 79, 79, 16, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 42, 42, 0, 85, 85, 85, 42, 88, 88, 88, 236, 89, 89, 89, 254, 88, 88, 88, 235, 88, 88, 88, 104, 79, 79, 79, 32, 85, 85, 85, 9, 85, 85, 85, 33, 89, 89, 89, 88, 89, 89, 89, 100, 88, 88, 88, 89, 72, 72, 72, 14, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 89, 89, 89, 226, 89, 89, 89, 254, 88, 88, 88, 235, 77, 77, 77, 23, 84, 84, 84, 0, 83, 83, 83, 0, 86, 86, 86, 0, 81, 81, 81, 0, 72, 72, 72, 7, 89, 89, 89, 88, 89, 89, 89, 100, 90, 90, 90, 85, 0, 0, 0, 1, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 111, 89, 89, 89, 254, 89, 89, 89, 254, 86, 86, 86, 109, 83, 83, 83, 0, 87, 87, 87, 76, 88, 88, 88, 216, 88, 88, 88, 78, 88, 88, 88, 23, 83, 83, 83, 0, 90, 90, 90, 34, 89, 89, 89, 100, 89, 89, 89, 100, 85, 85, 85, 36, 85, 85, 85, 0, 89, 89, 89, 0, 89, 89, 89, 223, 89, 89, 89, 254, 89, 89, 89, 254, 79, 79, 79, 32, 83, 83, 83, 0, 88, 88, 88, 215, 89, 89, 89, 254, 89, 89, 89, 100, 88, 88, 88, 78, 86, 86, 86, 0, 85, 85, 85, 9, 89, 89, 89, 100, 89, 89, 89, 100, 87, 87, 87, 82, 87, 87, 87, 0, 89, 89, 89, 0, 89, 89, 89, 223, 89, 89, 89, 254, 89, 89, 89, 254, 71, 71, 71, 25, 79, 79, 79, 0, 88, 88, 88, 216, 89, 89, 89, 254, 89, 89, 89, 100, 88, 88, 88, 78, 86, 86, 86, 0, 85, 85, 85, 9, 89, 89, 89, 100, 89, 89, 89, 100, 87, 87, 87, 82, 87, 87, 87, 0, 89, 89, 89, 0, 89, 89, 89, 117, 89, 89, 89, 254, 89, 89, 89, 254, 86, 86, 86, 106, 83, 83, 83, 0, 87, 87, 87, 76, 88, 88, 88, 217, 88, 88, 88, 78, 88, 88, 88, 23, 81, 81, 81, 0, 85, 85, 85, 33, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 37, 89, 89, 89, 0, 85, 85, 85, 0, 85, 85, 85, 3, 88, 88, 88, 233, 89, 89, 89, 254, 89, 89, 89, 234, 77, 77, 77, 23, 84, 84, 84, 0, 83, 83, 83, 0, 86, 86, 86, 0, 82, 82, 82, 0, 72, 72, 72, 7, 89, 89, 89, 88, 89, 89, 89, 100, 87, 87, 87, 87, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 54, 88, 88, 88, 240, 89, 89, 89, 254, 88, 88, 88, 235, 88, 88, 88, 104, 79, 79, 79, 32, 85, 85, 85, 9, 87, 87, 87, 32, 89, 89, 89, 88, 89, 89, 89, 100, 89, 89, 89, 91, 79, 79, 79, 16, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 84, 84, 0, 83, 83, 83, 58, 89, 89, 89, 229, 89, 89, 89, 254, 89, 89, 89, 254, 88, 88, 88, 251, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 90, 90, 90, 85, 90, 90, 90, 17, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, 41, 0, 0, 0, 0, 2, 88, 88, 88, 121, 89, 89, 89, 208, 89, 89, 89, 237, 89, 89, 89, 91, 89, 89, 89, 74, 87, 87, 87, 38, 0, 0, 0, 1, 45, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=110] -flags = 0 -flags = 0 -image = SubResource( 209 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=111] +[sub_resource type="StyleBoxFlat" id="111"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.92, 0.92, 0.92, 1 ) -border_color = Color( 0.88, 0.88, 0.88, 1 ) +bg_color = Color(0.92, 0.92, 0.92, 1) +border_color = Color(0.88, 0.88, 0.88, 1) -[sub_resource type="StyleBoxLine" id=112] -color = Color( 0, 0, 0, 0.1 ) +[sub_resource type="StyleBoxLine" id="112"] +color = Color(0, 0, 0, 0.1) grow_begin = 7.0 -[sub_resource type="StyleBoxLine" id=113] -color = Color( 0, 0, 0, 0.1 ) +[sub_resource type="StyleBoxLine" id="113"] +color = Color(0, 0, 0, 0.1) grow_end = 7.0 -[sub_resource type="StyleBoxLine" id=114] -color = Color( 0, 0, 0, 0.1 ) +[sub_resource type="StyleBoxLine" id="114"] +color = Color(0, 0, 0, 0.1) grow_begin = 7.0 grow_end = 7.0 -[sub_resource type="Image" id=210] -data = { -"data": PoolByteArray( 88, 88, 88, 23, 88, 88, 88, 78, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 78, 88, 88, 88, 23, 89, 89, 89, 77, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 77, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 78, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 78, 88, 88, 88, 23, 88, 88, 88, 78, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 88, 88, 88, 78, 88, 88, 88, 23 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=116] -flags = 0 -flags = 0 -image = SubResource( 210 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=117] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 116 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 4.0 -margin_right = 4.0 -margin_top = 4.0 -margin_bottom = 4.0 - -[sub_resource type="Image" id=211] -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, 87, 87, 87, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 70, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 87, 87, 87, 70, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 70, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 89, 89, 89, 100, 87, 87, 87, 70, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 89, 89, 89, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=119] -flags = 0 -flags = 0 -image = SubResource( 211 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=120] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 1.0 -content_margin_bottom = 1.0 -texture = SubResource( 119 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxFlat" id=121] +[sub_resource type="StyleBoxFlat" id="121"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.88, 0.88, 0.88, 1 ) +bg_color = Color(0.88, 0.88, 0.88, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.88, 0.88, 0.88, 1 ) +border_color = Color(0.88, 0.88, 0.88, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.1 ) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 4 -[sub_resource type="StyleBoxEmpty" id=122] +[sub_resource type="StyleBoxEmpty" id="122"] -[sub_resource type="StyleBoxFlat" id=1] -bg_color = Color( 0.5382, 0.63687, 0.69, 1 ) +[sub_resource type="StyleBoxFlat" id="1"] +bg_color = Color(0.5382, 0.63687, 0.69, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="Image" id=212] -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, 85, 85, 85, 0, 88, 88, 88, 0, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 15, 88, 88, 88, 152, 88, 88, 88, 152, 85, 85, 85, 15, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 15, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 163, 85, 85, 85, 15, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 15, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 163, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 163, 85, 85, 85, 15, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 15, 89, 89, 89, 162, 89, 89, 89, 199, 89, 89, 89, 163, 79, 79, 79, 16, 79, 79, 79, 16, 89, 89, 89, 163, 89, 89, 89, 199, 88, 88, 88, 161, 85, 85, 85, 15, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 143, 89, 89, 89, 199, 88, 88, 88, 164, 90, 90, 90, 17, 84, 84, 84, 0, 84, 84, 84, 0, 90, 90, 90, 17, 88, 88, 88, 164, 89, 89, 89, 199, 89, 89, 89, 143, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 138, 89, 89, 89, 145, 90, 90, 90, 17, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 17, 89, 89, 89, 145, 88, 88, 88, 138, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 0, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 89, 89, 89, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 90, 90, 90, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 124, 88, 88, 88, 152, 85, 85, 85, 15, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 15, 90, 90, 90, 153, 89, 89, 89, 125, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 142, 89, 89, 89, 199, 89, 89, 89, 163, 85, 85, 85, 15, 85, 85, 85, 0, 85, 85, 85, 0, 85, 85, 85, 15, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 142, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 0, 79, 79, 79, 16, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 163, 85, 85, 85, 15, 85, 85, 85, 15, 89, 89, 89, 163, 89, 89, 89, 199, 89, 89, 89, 163, 79, 79, 79, 16, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 84, 84, 0, 90, 90, 90, 17, 89, 89, 89, 163, 89, 89, 89, 199, 88, 88, 88, 161, 89, 89, 89, 162, 89, 89, 89, 199, 89, 89, 89, 163, 90, 90, 90, 17, 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 17, 89, 89, 89, 165, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 164, 90, 90, 90, 17, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 17, 89, 89, 89, 154, 89, 89, 89, 154, 90, 90, 90, 17, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 89, 89, 89, 0, 89, 89, 89, 0, 90, 90, 90, 0, 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=124] -flags = 0 -flags = 0 -image = SubResource( 212 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=213] -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, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 89, 89, 89, 77, 88, 88, 88, 138, 88, 88, 88, 178, 88, 88, 88, 178, 88, 88, 88, 138, 89, 89, 89, 77, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 18, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 86, 86, 86, 44, 89, 89, 89, 54, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 74, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 87, 87, 87, 32, 87, 87, 87, 0, 88, 88, 88, 43, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 74, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 136, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 85, 85, 85, 33, 86, 86, 86, 0, 87, 87, 87, 32, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 90, 90, 90, 136, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 89, 89, 89, 199, 89, 89, 89, 199, 86, 86, 86, 44, 86, 86, 86, 0, 87, 87, 87, 32, 89, 89, 89, 180, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 179, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 43, 87, 87, 87, 0, 87, 87, 87, 32, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 140, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 87, 87, 87, 32, 86, 86, 86, 0, 85, 85, 85, 33, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 139, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 76, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 180, 87, 87, 87, 32, 85, 85, 85, 0, 86, 86, 86, 44, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 75, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 180, 85, 85, 85, 42, 89, 89, 89, 54, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 80, 80, 80, 19, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 88, 88, 88, 0, 88, 88, 88, 78, 88, 88, 88, 138, 88, 88, 88, 178, 88, 88, 88, 178, 88, 88, 88, 138, 88, 88, 88, 78, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=126] -flags = 0 -flags = 0 -image = SubResource( 213 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=214] -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, 87, 87, 87, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 88, 88, 88, 0, 87, 87, 87, 99, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 87, 87, 87, 99, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 24, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 85, 85, 85, 24, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 89, 89, 89, 57, 87, 87, 87, 70, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 95, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 85, 85, 85, 42, 86, 86, 86, 0, 86, 86, 86, 56, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 95, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 88, 88, 88, 43, 85, 85, 85, 0, 85, 85, 85, 42, 89, 89, 89, 232, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 225, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 57, 87, 87, 87, 0, 85, 85, 85, 42, 89, 89, 89, 231, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 230, 90, 90, 90, 255, 90, 90, 90, 255, 86, 86, 86, 56, 85, 85, 85, 0, 85, 85, 85, 42, 89, 89, 89, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 180, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 232, 85, 85, 85, 42, 85, 85, 85, 0, 88, 88, 88, 43, 89, 89, 89, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 179, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 98, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 231, 85, 85, 85, 42, 87, 87, 87, 0, 89, 89, 89, 57, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 97, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 90, 90, 90, 187, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 231, 89, 89, 89, 54, 87, 87, 87, 70, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 187, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 81, 81, 81, 25, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 85, 85, 85, 24, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 89, 89, 89, 0, 89, 89, 89, 100, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 89, 89, 89, 100, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=128] -flags = 0 -flags = 0 -image = SubResource( 214 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=215] -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, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 89, 89, 89, 0, 89, 89, 89, 77, 88, 88, 88, 138, 88, 88, 88, 178, 88, 88, 88, 178, 88, 88, 88, 138, 89, 89, 89, 77, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 18, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 54, 86, 86, 86, 44, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 74, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 43, 87, 87, 87, 0, 87, 87, 87, 32, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 74, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, 0, 90, 90, 90, 136, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 87, 87, 87, 32, 86, 86, 86, 0, 85, 85, 85, 33, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 90, 90, 90, 136, 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 180, 87, 87, 87, 32, 86, 86, 86, 0, 86, 86, 86, 44, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 179, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 87, 87, 87, 32, 87, 87, 87, 0, 88, 88, 88, 43, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 140, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 181, 87, 87, 87, 32, 87, 87, 87, 0, 87, 87, 87, 32, 88, 88, 88, 181, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 139, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 87, 87, 87, 76, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 86, 86, 86, 44, 86, 86, 86, 0, 87, 87, 87, 32, 89, 89, 89, 180, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 88, 88, 88, 75, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 54, 85, 85, 85, 42, 89, 89, 89, 180, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 80, 80, 80, 19, 89, 89, 89, 145, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 199, 89, 89, 89, 145, 85, 85, 85, 18, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 88, 88, 88, 0, 88, 88, 88, 78, 88, 88, 88, 138, 88, 88, 88, 178, 88, 88, 88, 178, 88, 88, 88, 138, 88, 88, 88, 78, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=130] -flags = 0 -flags = 0 -image = SubResource( 215 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=216] -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, 87, 87, 87, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 88, 88, 88, 0, 87, 87, 87, 99, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 87, 87, 87, 99, 88, 88, 88, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, 0, 85, 85, 85, 24, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 85, 85, 85, 24, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 70, 89, 89, 89, 57, 89, 89, 89, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 95, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 86, 86, 86, 56, 86, 86, 86, 0, 85, 85, 85, 42, 89, 89, 89, 233, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 95, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 175, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 232, 85, 85, 85, 42, 85, 85, 85, 0, 88, 88, 88, 43, 89, 89, 89, 233, 90, 90, 90, 255, 90, 90, 90, 255, 88, 88, 88, 175, 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 225, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 231, 85, 85, 85, 42, 87, 87, 87, 0, 89, 89, 89, 57, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 230, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 85, 85, 85, 42, 85, 85, 85, 0, 86, 86, 86, 56, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 225, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 180, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 233, 85, 85, 85, 42, 85, 85, 85, 0, 85, 85, 85, 42, 89, 89, 89, 232, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 179, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, 0, 88, 88, 88, 98, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 57, 86, 86, 86, 0, 85, 85, 85, 42, 89, 89, 89, 231, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 97, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 90, 90, 90, 187, 90, 90, 90, 255, 90, 90, 90, 255, 87, 87, 87, 70, 88, 88, 88, 55, 89, 89, 89, 231, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 187, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 81, 81, 81, 25, 89, 89, 89, 186, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 186, 85, 85, 85, 24, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 81, 81, 0, 89, 89, 89, 0, 89, 89, 89, 100, 88, 88, 88, 178, 89, 89, 89, 229, 89, 89, 89, 229, 88, 88, 88, 178, 89, 89, 89, 100, 89, 89, 89, 0, 85, 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=132] -flags = 0 -flags = 0 -image = SubResource( 216 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=217] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 62, 62, 62, 78, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 64, 64, 64, 79, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 64, 64, 64, 0, 62, 62, 62, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 62, 62, 62, 0, 62, 62, 62, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 62, 62, 62, 78, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 64, 64, 64, 79, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 64, 64, 64, 0, 62, 62, 62, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 62, 62, 62, 0, 62, 62, 62, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 62, 62, 62, 78, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 78, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 78, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 0, 55, 55, 55, 23, 64, 64, 64, 79, 62, 62, 62, 78, 55, 55, 55, 23, 55, 55, 55, 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=134] -flags = 0 -flags = 0 -image = SubResource( 217 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=218] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 88, 88, 88, 201, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 199, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 199, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 200, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 200, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 89, 89, 89, 202, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 88, 88, 88, 201, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 199, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 199, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 200, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 200, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 89, 89, 89, 202, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 88, 88, 88, 0, 88, 88, 88, 0, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 88, 88, 88, 201, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 199, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 199, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 200, 90, 90, 90, 255, 90, 90, 90, 255, 89, 89, 89, 200, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, 0, 89, 89, 89, 60, 89, 89, 89, 202, 88, 88, 88, 201, 89, 89, 89, 60, 89, 89, 89, 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=136] -flags = 0 -flags = 0 -image = SubResource( 218 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="141"] +bg_color = Color(0.627451, 0.627451, 0.627451, 1) +border_width_left = 5 +border_width_top = 10 +border_width_right = 5 +border_width_bottom = 5 +border_color = Color(0.627451, 0.627451, 0.627451, 1) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 +anti_aliasing = false -[sub_resource type="StyleBoxFlat" id=137] -content_margin_left = 5.0 -content_margin_right = 5.0 +[sub_resource type="StyleBoxFlat" id="138"] +content_margin_left = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 1 ) +bg_color = Color(0.92, 0.92, 0.92, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.84, 0.84, 0.84, 1 ) +border_color = Color(0.88, 0.88, 0.88, 1) +expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=138] +[sub_resource type="StyleBoxFlat" id="139"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.92, 0.92, 0.92, 1 ) +bg_color = Color(1, 1, 1, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.88, 0.88, 0.88, 1 ) +border_color = Color(1, 1, 1, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=139] +[sub_resource type="StyleBoxFlat" id="140"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 1 ) +bg_color = Color(1, 1, 1, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 1, 1, 1, 1 ) +border_color = Color(0.84, 0.84, 0.84, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=140] -content_margin_left = 10.0 -content_margin_right = 10.0 +[sub_resource type="StyleBoxFlat" id="137"] +content_margin_left = 5.0 content_margin_top = 5.0 +content_margin_right = 5.0 content_margin_bottom = 5.0 -bg_color = Color( 1, 1, 1, 1 ) +bg_color = Color(1, 1, 1, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.84, 0.84, 0.84, 1 ) -expand_margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=141] -bg_color = Color( 0.627451, 0.627451, 0.627451, 1 ) -border_width_left = 5 -border_width_top = 10 -border_width_right = 5 -border_width_bottom = 5 -border_color = Color( 0.627451, 0.627451, 0.627451, 1 ) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 -anti_aliasing = false - -[sub_resource type="Image" id=219] -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, 63, 63, 63, 0, 63, 63, 63, 0, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 56, 63, 63, 63, 72, 36, 36, 36, 7, 36, 36, 36, 0, 36, 36, 36, 0, 36, 36, 36, 7, 63, 63, 63, 72, 63, 63, 63, 56, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 66, 63, 63, 63, 100, 62, 62, 62, 82, 36, 36, 36, 7, 36, 36, 36, 7, 62, 62, 62, 82, 63, 63, 63, 100, 61, 61, 61, 66, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 8, 62, 62, 62, 82, 63, 63, 63, 100, 62, 62, 62, 81, 62, 62, 62, 81, 63, 63, 63, 100, 62, 62, 62, 82, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 8, 62, 62, 62, 82, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 82, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 8, 63, 63, 63, 72, 63, 63, 63, 72, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=143] -flags = 0 -flags = 0 -image = SubResource( 219 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=220] -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, 63, 63, 63, 0, 63, 63, 63, 0, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 56, 63, 63, 63, 72, 36, 36, 36, 7, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 66, 63, 63, 63, 100, 62, 62, 62, 82, 36, 36, 36, 7, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 8, 62, 62, 62, 82, 63, 63, 63, 100, 62, 62, 62, 81, 36, 36, 36, 7, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 8, 62, 62, 62, 82, 63, 63, 63, 100, 61, 61, 61, 66, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 0, 36, 36, 36, 7, 62, 62, 62, 82, 63, 63, 63, 100, 61, 61, 61, 66, 61, 61, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, 36, 0, 36, 36, 36, 7, 62, 62, 62, 81, 63, 63, 63, 100, 62, 62, 62, 82, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 66, 63, 63, 63, 100, 62, 62, 62, 82, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 56, 63, 63, 63, 72, 63, 63, 63, 8, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=145] -flags = 0 -flags = 0 -image = SubResource( 220 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=221] -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, 54, 54, 54, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 54, 54, 54, 14, 54, 54, 54, 14, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 58, 58, 0, 58, 58, 58, 13, 62, 62, 62, 49, 62, 62, 62, 49, 58, 58, 58, 13, 58, 58, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 54, 54, 54, 14, 62, 62, 62, 49, 62, 62, 62, 49, 58, 58, 58, 13, 58, 58, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 54, 54, 54, 14, 54, 54, 54, 14, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 0, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=147] -flags = 0 -flags = 0 -image = SubResource( 221 ) -size = Vector2( 8, 8 ) - -[sub_resource type="Image" id=222] -data = { -"data": PoolByteArray( 58, 58, 58, 35, 60, 60, 60, 38, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 50, 61, 61, 61, 50, 60, 60, 60, 38, 61, 61, 61, 50, 62, 62, 62, 41, 0, 0, 0, 3, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 50, 61, 61, 61, 50, 63, 63, 63, 4, 62, 62, 62, 41, 61, 61, 61, 50, 63, 63, 63, 40, 0, 0, 0, 3, 30, 30, 30, 0, 61, 61, 61, 50, 61, 61, 61, 50, 63, 63, 63, 0, 63, 63, 63, 4, 62, 62, 62, 41, 61, 61, 61, 50, 62, 62, 62, 37, 61, 61, 61, 0, 61, 61, 61, 50, 61, 61, 61, 50, 0, 0, 0, 0, 0, 0, 0, 3, 62, 62, 62, 41, 61, 61, 61, 50, 60, 60, 60, 38, 60, 60, 60, 0, 61, 61, 61, 50, 61, 61, 61, 50, 0, 0, 0, 3, 62, 62, 62, 41, 61, 61, 61, 50, 62, 62, 62, 41, 63, 63, 63, 4, 62, 62, 62, 0, 61, 61, 61, 50, 61, 61, 61, 50, 62, 62, 62, 37, 61, 61, 61, 50, 62, 62, 62, 41, 63, 63, 63, 4, 63, 63, 63, 0, 61, 61, 61, 0, 61, 61, 61, 50, 61, 61, 61, 50, 58, 58, 58, 35, 60, 60, 60, 38, 63, 63, 63, 4, 63, 63, 63, 0, 0, 0, 0, 0, 61, 61, 61, 0, 61, 61, 61, 50, 61, 61, 61, 50 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=149] -flags = 0 -flags = 0 -image = SubResource( 222 ) -size = Vector2( 8, 8 ) +border_width_bottom = 1 +border_color = Color(0.84, 0.84, 0.84, 1) -[sub_resource type="StyleBoxFlat" id=150] +[sub_resource type="StyleBoxFlat" id="150"] content_margin_left = 1.0 -content_margin_right = 1.0 content_margin_top = 1.0 +content_margin_right = 1.0 content_margin_bottom = 1.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0, 0, 0, 1 ) -shadow_color = Color( 0, 0, 0, 0.1 ) +border_color = Color(0, 0, 0, 1) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 4 -[sub_resource type="StyleBoxFlat" id=101] -bg_color = Color( 0.776471, 0.776471, 0.776471, 1 ) - -[sub_resource type="Image" id=223] -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, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 84, 63, 63, 63, 108, 46, 46, 46, 11, 46, 46, 46, 0, 46, 46, 46, 0, 46, 46, 46, 11, 63, 63, 63, 108, 63, 63, 63, 84, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 100, 64, 64, 64, 150, 64, 64, 64, 123, 46, 46, 46, 11, 46, 46, 46, 11, 64, 64, 64, 123, 64, 64, 64, 150, 63, 63, 63, 100, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 122, 64, 64, 64, 122, 64, 64, 64, 150, 64, 64, 64, 123, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 123, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 63, 63, 63, 109, 63, 63, 63, 108, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 14, -"mipmaps": false, -"width": 14 -} - -[sub_resource type="ImageTexture" id=152] -flags = 0 -flags = 0 -image = SubResource( 223 ) -size = Vector2( 14, 14 ) +[sub_resource type="StyleBoxFlat" id="101"] +bg_color = Color(0.776471, 0.776471, 0.776471, 1) -[sub_resource type="Image" id=224] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 64, 64, 64, 0, 64, 64, 64, 0, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 46, 46, 46, 11, 64, 64, 64, 115, 64, 64, 64, 114, 46, 46, 46, 11, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 46, 46, 46, 11, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 123, 46, 46, 46, 11, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 46, 46, 46, 11, 64, 64, 64, 122, 64, 64, 64, 150, 64, 64, 64, 123, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 122, 46, 46, 46, 11, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 113, 64, 64, 64, 150, 64, 64, 64, 123, 63, 63, 63, 12, 63, 63, 63, 12, 64, 64, 64, 123, 64, 64, 64, 150, 63, 63, 63, 113, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 105, 64, 64, 64, 115, 63, 63, 63, 12, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 12, 64, 64, 64, 115, 63, 63, 63, 105, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 64, 64, 64, 0, 46, 46, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 105, 64, 64, 64, 114, 46, 46, 46, 11, 46, 46, 46, 0, 46, 46, 46, 0, 46, 46, 46, 11, 64, 64, 64, 115, 63, 63, 63, 105, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 0, 64, 64, 64, 114, 64, 64, 64, 150, 64, 64, 64, 123, 46, 46, 46, 11, 46, 46, 46, 11, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 114, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 122, 64, 64, 64, 122, 64, 64, 64, 150, 64, 64, 64, 123, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 64, 64, 64, 123, 64, 64, 64, 150, 64, 64, 64, 150, 64, 64, 64, 123, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 12, 63, 63, 63, 116, 64, 64, 64, 115, 63, 63, 63, 12, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 63, 63, 63, 0, 64, 64, 64, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 14, -"mipmaps": false, -"width": 14 -} - -[sub_resource type="ImageTexture" id=154] -flags = 0 -flags = 0 -image = SubResource( 224 ) -size = Vector2( 14, 14 ) - -[sub_resource type="StyleBoxFlat" id=155] +[sub_resource type="StyleBoxFlat" id="155"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.75, 0.75, 0.75, 1 ) -border_color = Color( 1, 1, 1, 1 ) +bg_color = Color(0.75, 0.75, 0.75, 1) +border_color = Color(1, 1, 1, 1) -[sub_resource type="StyleBoxFlat" id=156] +[sub_resource type="StyleBoxFlat" id="156"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 1 ) +bg_color = Color(1, 1, 1, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.75, 0.75, 0.75, 1 ) +border_color = Color(0.75, 0.75, 0.75, 1) -[sub_resource type="StyleBoxEmpty" id=157] +[sub_resource type="StyleBoxEmpty" id="157"] -[sub_resource type="StyleBoxEmpty" id=158] +[sub_resource type="StyleBoxEmpty" id="158"] -[sub_resource type="StyleBoxFlat" id=159] +[sub_resource type="StyleBoxFlat" id="159"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0, 0, 0, 0.08 ) -border_color = Color( 1, 1, 1, 1 ) +bg_color = Color(0, 0, 0, 0.08) +border_color = Color(1, 1, 1, 1) -[sub_resource type="StyleBoxFlat" id=160] +[sub_resource type="StyleBoxFlat" id="160"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.84, 0.84, 0.84, 1 ) -border_color = Color( 1, 1, 1, 1 ) - -[sub_resource type="StyleBoxTexture" id=161] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 68 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxTexture" id=162] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 71 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=163] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 74 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxTexture" id=164] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 77 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 +bg_color = Color(0.84, 0.84, 0.84, 1) +border_color = Color(1, 1, 1, 1) -[sub_resource type="StyleBoxTexture" id=165] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 77 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=166] -color = Color( 0, 0, 0, 0.1 ) +[sub_resource type="StyleBoxLine" id="166"] +color = Color(0, 0, 0, 0.1) grow_begin = 0.0 grow_end = 0.0 vertical = true -[sub_resource type="StyleBoxFlat" id=167] +[sub_resource type="StyleBoxFlat" id="167"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.74902, 0.74902, 0.74902, 1 ) +bg_color = Color(0.74902, 0.74902, 0.74902, 1) -[sub_resource type="StyleBoxFlat" id=168] +[sub_resource type="StyleBoxFlat" id="168"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.75, 0.75, 0.75, 1 ) +bg_color = Color(0.75, 0.75, 0.75, 1) -[sub_resource type="StyleBoxFlat" id=169] +[sub_resource type="StyleBoxFlat" id="169"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.839216, 0.839216, 0.839216, 1 ) - -[sub_resource type="Image" id=225] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 62, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 62, 62, 62, 0, 0, 0, 0, 0, 62, 62, 62, 0, 62, 62, 62, 49, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 49, 62, 62, 62, 0, 62, 62, 62, 0, 62, 62, 62, 49, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 63, 63, 63, 100, 62, 62, 62, 49, 62, 62, 62, 0, 0, 0, 0, 0, 62, 62, 62, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 63, 63, 63, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 8, -"mipmaps": false, -"width": 64 -} +bg_color = Color(0.839216, 0.839216, 0.839216, 1) -[sub_resource type="ImageTexture" id=171] -flags = 0 -flags = 0 -image = SubResource( 225 ) -size = Vector2( 64, 8 ) - -[sub_resource type="Image" id=226] -data = { -"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=173] -flags = 0 -flags = 0 -image = SubResource( 226 ) -size = Vector2( 8, 8 ) - -[sub_resource type="StyleBoxTexture" id=174] -texture = SubResource( 173 ) -region_rect = Rect2( 0, 0, 8, 8 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=175] +[sub_resource type="StyleBoxFlat" id="175"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 1, 1, 1, 1 ) +bg_color = Color(1, 1, 1, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 1 ) +border_color = Color(1, 1, 1, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.1 ) +shadow_color = Color(0, 0, 0, 0.1) shadow_size = 4 [resource] resource_name = "Light" -default_font = ExtResource( 5 ) +default_font = ExtResource("3_avskt") +default_font_size = 16 BoxContainer/constants/separation = 4 -Button/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -Button/colors/font_color_disabled = Color( 0.2, 0.2, 0.2, 0.662745 ) -Button/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 ) -Button/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 ) -Button/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 ) -Button/colors/icon_color_pressed = Color( 0, 1.24902, 3.5, 1 ) -Button/constants/hseparation = 2 -Button/fonts/font = ExtResource( 5 ) -Button/styles/disabled = SubResource( 2 ) -Button/styles/focus = SubResource( 3 ) -Button/styles/hover = SubResource( 4 ) -Button/styles/normal = SubResource( 5 ) -Button/styles/pressed = SubResource( 6 ) -CheckBox/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -CheckBox/colors/font_color_disabled = Color( 0, 0, 0, 0.3 ) -CheckBox/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 ) -CheckBox/colors/font_color_hover_pressed = Color( 0, 0, 0, 1 ) -CheckBox/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 ) -CheckBox/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 ) +Button/colors/font_color = Color(0.25, 0.25, 0.25, 1) +Button/colors/font_color_disabled = Color(0.9, 0.95, 1, 0.3) +Button/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1) +Button/colors/font_color_pressed = Color(0, 0.356863, 1, 1) +Button/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1) +Button/colors/icon_color_pressed = Color(0, 1.24902, 3.5, 1) +Button/constants/hseparation = 3 +Button/styles/disabled = SubResource("23") +Button/styles/focus = SubResource("23") +Button/styles/hover = SubResource("23") +Button/styles/normal = SubResource("23") +Button/styles/pressed = SubResource("23") +CheckBox/colors/font_color = Color(0.25, 0.25, 0.25, 1) +CheckBox/colors/font_color_disabled = Color(0, 0, 0, 0.3) +CheckBox/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1) +CheckBox/colors/font_color_hover_pressed = Color(0, 0, 0, 1) +CheckBox/colors/font_color_pressed = Color(0, 0.356863, 1, 1) +CheckBox/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1) CheckBox/constants/check_vadjust = 0 CheckBox/constants/hseparation = 4 -CheckBox/fonts/font = ExtResource( 5 ) -CheckBox/icons/checked = SubResource( 8 ) -CheckBox/icons/radio_checked = SubResource( 10 ) -CheckBox/icons/radio_unchecked = SubResource( 12 ) -CheckBox/icons/unchecked = SubResource( 14 ) -CheckBox/styles/disabled = SubResource( 15 ) +CheckBox/styles/disabled = SubResource("15") CheckBox/styles/focus = null -CheckBox/styles/hover = SubResource( 15 ) -CheckBox/styles/hover_pressed = SubResource( 16 ) -CheckBox/styles/normal = SubResource( 15 ) -CheckBox/styles/pressed = SubResource( 15 ) -CheckButton/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -CheckButton/colors/font_color_disabled = Color( 0, 0, 0, 0.3 ) -CheckButton/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 ) -CheckButton/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 ) -CheckButton/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 ) +CheckBox/styles/hover = SubResource("15") +CheckBox/styles/hover_pressed = SubResource("16") +CheckBox/styles/normal = SubResource("15") +CheckBox/styles/pressed = SubResource("15") +CheckButton/colors/font_color = Color(0.25, 0.25, 0.25, 1) +CheckButton/colors/font_color_disabled = Color(0, 0, 0, 0.3) +CheckButton/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1) +CheckButton/colors/font_color_pressed = Color(0, 0.356863, 1, 1) +CheckButton/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1) CheckButton/constants/check_vadjust = 0 CheckButton/constants/hseparation = 4 -CheckButton/icons/off = SubResource( 18 ) -CheckButton/icons/off_disabled = SubResource( 20 ) -CheckButton/icons/on = SubResource( 22 ) -CheckButton/icons/on_disabled = SubResource( 20 ) -CheckButton/styles/disabled = SubResource( 23 ) -CheckButton/styles/hover = SubResource( 23 ) -CheckButton/styles/normal = SubResource( 23 ) -CheckButton/styles/pressed = SubResource( 23 ) -CollapsibleContainer/icons/arrow_normal = ExtResource( 6 ) +CheckButton/styles/disabled = SubResource("23") +CheckButton/styles/hover = SubResource("23") +CheckButton/styles/normal = SubResource("23") +CheckButton/styles/pressed = SubResource("23") +CollapsibleContainer/icons/arrow_normal = ExtResource("6") ColorPicker/constants/h_width = 30 ColorPicker/constants/label_width = 10 ColorPicker/constants/margin = 8 ColorPicker/constants/sv_height = 256 ColorPicker/constants/sv_width = 256 -ColorPicker/icons/add_preset = SubResource( 25 ) -ColorPicker/icons/color_hue = null -ColorPicker/icons/color_sample = null -ColorPicker/icons/overbright_indicator = SubResource( 27 ) -ColorPicker/icons/preset_bg = SubResource( 29 ) -ColorPicker/icons/screen_picker = SubResource( 31 ) -ColorPickerButton/colors/font_color = Color( 1, 1, 1, 1 ) -ColorPickerButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.3 ) -ColorPickerButton/colors/font_color_hover = Color( 1, 1, 1, 1 ) -ColorPickerButton/colors/font_color_pressed = Color( 0.8, 0.8, 0.8, 1 ) +ColorPickerButton/colors/font_color = Color(1, 1, 1, 1) +ColorPickerButton/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.3) +ColorPickerButton/colors/font_color_hover = Color(1, 1, 1, 1) +ColorPickerButton/colors/font_color_pressed = Color(0.8, 0.8, 0.8, 1) ColorPickerButton/constants/hseparation = 2 -ColorPickerButton/fonts/font = ExtResource( 5 ) -ColorPickerButton/icons/bg = SubResource( 29 ) ColorPickerButton/styles/disabled = null ColorPickerButton/styles/focus = null -ColorPickerButton/styles/hover = SubResource( 32 ) -ColorPickerButton/styles/normal = SubResource( 33 ) -ColorPickerButton/styles/pressed = SubResource( 34 ) +ColorPickerButton/styles/hover = SubResource("32") +ColorPickerButton/styles/normal = SubResource("33") +ColorPickerButton/styles/pressed = SubResource("34") Dialogs/constants/button_margin = 32 Dialogs/constants/margin = 8 -FileDialog/colors/files_disabled = Color( 0, 0, 0, 0.3 ) -FileDialog/colors/folder_icon_modulate = Color( 1.275, 1.5248, 1.975, 1 ) -FileDialog/icons/folder = SubResource( 36 ) -FileDialog/icons/parent_folder = SubResource( 38 ) -FileDialog/icons/reload = SubResource( 40 ) -FileDialog/icons/toggle_hidden = SubResource( 42 ) -GraphEdit/colors/activity = Color( 0, 0.356863, 1, 1 ) -GraphEdit/colors/grid_major = Color( 0, 0, 0, 0.15 ) -GraphEdit/colors/grid_minor = Color( 0, 0, 0, 0.07 ) -GraphEdit/colors/selection_fill = Color( 0, 0.356863, 1, 0.3 ) -GraphEdit/colors/selection_stroke = Color( 0, 0.356863, 1, 0.8 ) +FileDialog/colors/files_disabled = Color(0, 0, 0, 0.3) +FileDialog/colors/folder_icon_modulate = Color(1.275, 1.5248, 1.975, 1) +GraphEdit/colors/activity = Color(0, 0.356863, 1, 1) +GraphEdit/colors/grid_major = Color(0, 0, 0, 0.15) +GraphEdit/colors/grid_minor = Color(0, 0, 0, 0.07) +GraphEdit/colors/selection_fill = Color(0, 0.356863, 1, 0.3) +GraphEdit/colors/selection_stroke = Color(0, 0.356863, 1, 0.8) GraphEdit/constants/bezier_len_neg = 160 GraphEdit/constants/bezier_len_pos = 80 -GraphEdit/icons/minus = SubResource( 44 ) -GraphEdit/icons/more = SubResource( 46 ) -GraphEdit/icons/reset = SubResource( 48 ) -GraphEdit/icons/snap = SubResource( 50 ) -GraphEdit/styles/bg = SubResource( 51 ) -GraphNode/colors/close_color = Color( 0, 0, 0, 0.7 ) -GraphNode/colors/resizer_color = Color( 0, 0, 0, 0.7 ) -GraphNode/colors/title_color = Color( 0, 0, 0, 1 ) +GraphEdit/styles/bg = SubResource("51") +GraphNode/colors/close_color = Color(0, 0, 0, 0.7) +GraphNode/colors/resizer_color = Color(0, 0, 0, 0.7) +GraphNode/colors/title_color = Color(0, 0, 0, 1) GraphNode/constants/close_h_offset = 20 GraphNode/constants/close_offset = 20 GraphNode/constants/port_offset = 14 GraphNode/constants/separation = 1 GraphNode/constants/title_h_offset = -16 GraphNode/constants/title_offset = 20 -GraphNode/icons/close = SubResource( 53 ) -GraphNode/icons/port = SubResource( 55 ) -GraphNode/icons/resizer = SubResource( 57 ) -GraphNode/styles/breakpoint = SubResource( 58 ) -GraphNode/styles/comment = SubResource( 59 ) -GraphNode/styles/commentfocus = SubResource( 60 ) -GraphNode/styles/frame = SubResource( 61 ) -GraphNode/styles/position = SubResource( 62 ) -GraphNode/styles/selectedframe = SubResource( 63 ) -GraphNode/styles/state_machine_frame = SubResource( 64 ) -GraphNode/styles/state_machine_selectedframe = SubResource( 65 ) +GraphNode/styles/breakpoint = SubResource("58") +GraphNode/styles/comment = SubResource("59") +GraphNode/styles/commentfocus = SubResource("60") +GraphNode/styles/frame = SubResource("61") +GraphNode/styles/position = SubResource("62") +GraphNode/styles/selectedframe = SubResource("63") +GraphNode/styles/state_machine_frame = SubResource("64") +GraphNode/styles/state_machine_selectedframe = SubResource("65") GridContainer/constants/hseparation = 4 GridContainer/constants/vseparation = 4 HBoxContainer/constants/separation = 4 -HScrollBar/icons/decrement = SubResource( 66 ) -HScrollBar/icons/decrement_highlight = SubResource( 66 ) -HScrollBar/icons/increment = SubResource( 66 ) -HScrollBar/icons/increment_highlight = SubResource( 66 ) -HScrollBar/styles/grabber = SubResource( 69 ) -HScrollBar/styles/grabber_highlight = SubResource( 72 ) -HScrollBar/styles/grabber_pressed = SubResource( 75 ) -HScrollBar/styles/scroll = SubResource( 78 ) -HScrollBar/styles/scroll_focus = SubResource( 79 ) HSeparator/constants/separation = 4 -HSeparator/styles/separator = SubResource( 80 ) -HSlider/icons/grabber = SubResource( 82 ) -HSlider/icons/grabber_disabled = null -HSlider/icons/grabber_highlight = SubResource( 84 ) -HSlider/icons/tick = null +HSeparator/styles/separator = SubResource("80") HSlider/styles/focus = null -HSlider/styles/grabber_area = SubResource( 85 ) -HSlider/styles/grabber_area_highlight = SubResource( 86 ) +HSlider/styles/grabber_area = SubResource("85") +HSlider/styles/grabber_area_highlight = SubResource("86") HSlider/styles/grabber_disabled = null HSlider/styles/grabber_highlight = null -HSlider/styles/slider = SubResource( 87 ) +HSlider/styles/slider = SubResource("87") HSplitContainer/constants/autohide = 1 HSplitContainer/constants/separation = 8 -HSplitContainer/icons/grabber = SubResource( 89 ) -HSplitContainer/styles/bg = SubResource( 90 ) -Header/base_type = "Label" -Header/colors/font_color = Color( 0.18, 0.18, 0.18, 1 ) -Header/fonts/font = ExtResource( 1 ) -Icons/colors/modulate_color = Color( 0.2, 0.2, 0.2, 1 ) -ItemList/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -ItemList/colors/font_color_selected = Color( 0, 0, 0, 1 ) -ItemList/colors/guide_color = Color( 0, 0, 0, 0.05 ) +Header/base_type = &"Label" +Header/colors/font_color = Color(0.18, 0.18, 0.18, 1) +Icons/colors/modulate_color = Color(0.2, 0.2, 0.2, 1) +ItemList/colors/font_color = Color(0.25, 0.25, 0.25, 1) +ItemList/colors/font_color_selected = Color(0, 0, 0, 1) +ItemList/colors/guide_color = Color(0, 0, 0, 0.05) ItemList/constants/hseparation = 3 ItemList/constants/icon_margin = 4 ItemList/constants/line_separation = 3 ItemList/constants/vseparation = 3 -ItemList/fonts/font = ExtResource( 5 ) -ItemList/styles/bg = SubResource( 91 ) -ItemList/styles/bg_focus = SubResource( 92 ) -ItemList/styles/cursor = SubResource( 93 ) -ItemList/styles/cursor_unfocused = SubResource( 93 ) -ItemList/styles/selected = SubResource( 94 ) -ItemList/styles/selected_focus = SubResource( 95 ) -Label/colors/font_color = Color( 0.25098, 0.25098, 0.25098, 1 ) -Label/colors/font_color_shadow = Color( 0, 0, 0, 0 ) -Label/colors/font_outline_modulate = Color( 0, 0, 0, 1 ) +ItemList/styles/bg = SubResource("91") +ItemList/styles/bg_focus = SubResource("92") +ItemList/styles/cursor = SubResource("93") +ItemList/styles/cursor_unfocused = SubResource("93") +ItemList/styles/selected = SubResource("94") +ItemList/styles/selected_focus = SubResource("95") +Label/colors/font_color = Color(0.25098, 0.25098, 0.25098, 1) +Label/colors/font_color_shadow = Color(0, 0, 0, 0) +Label/colors/font_outline_modulate = Color(0, 0, 0, 1) Label/constants/line_spacing = 3 Label/constants/shadow_as_outline = 0 Label/constants/shadow_offset_x = 1 Label/constants/shadow_offset_y = 1 -Label/fonts/font = ExtResource( 5 ) -Label/styles/normal = SubResource( 96 ) -LineEdit/colors/clear_button_color = Color( 0.25, 0.25, 0.25, 1 ) -LineEdit/colors/clear_button_color_pressed = Color( 0, 0.356863, 1, 1 ) -LineEdit/colors/cursor_color = Color( 0.25, 0.25, 0.25, 1 ) -LineEdit/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -LineEdit/colors/font_color_selected = Color( 0, 0, 0, 1 ) -LineEdit/colors/font_color_uneditable = Color( 0.5, 0.5, 0.5, 1 ) -LineEdit/colors/read_only = Color( 0, 0, 0, 0.3 ) -LineEdit/colors/selection_color = Color( 0, 0.356863, 1, 0.4 ) +Label/styles/normal = SubResource("96") +LineEdit/colors/clear_button_color = Color(0.25, 0.25, 0.25, 1) +LineEdit/colors/clear_button_color_pressed = Color(0, 0.356863, 1, 1) +LineEdit/colors/cursor_color = Color(0.25, 0.25, 0.25, 1) +LineEdit/colors/font_color = Color(0.25, 0.25, 0.25, 1) +LineEdit/colors/font_color_selected = Color(0, 0, 0, 1) +LineEdit/colors/font_color_uneditable = Color(0.5, 0.5, 0.5, 1) +LineEdit/colors/read_only = Color(0, 0, 0, 0.3) +LineEdit/colors/selection_color = Color(0, 0.356863, 1, 0.4) LineEdit/constants/minimum_spaces = 12 -LineEdit/fonts/font = ExtResource( 5 ) -LineEdit/icons/clear = SubResource( 98 ) -LineEdit/styles/focus = SubResource( 3 ) -LineEdit/styles/normal = SubResource( 5 ) -LineEdit/styles/read_only = SubResource( 2 ) -LinkButton/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -LinkButton/colors/font_color_disabled = Color( 0, 0, 0, 0.3 ) -LinkButton/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 ) -LinkButton/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 ) -LinkButton/styles/focus = SubResource( 96 ) +LineEdit/styles/focus = SubResource("3") +LineEdit/styles/normal = SubResource("5") +LineEdit/styles/read_only = SubResource("2") +LinkButton/colors/font_color = Color(0.25, 0.25, 0.25, 1) +LinkButton/colors/font_color_disabled = Color(0, 0, 0, 0.3) +LinkButton/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1) +LinkButton/colors/font_color_pressed = Color(0, 0.356863, 1, 1) +LinkButton/styles/focus = SubResource("96") MarginContainer/constants/margin_bottom = 0 MarginContainer/constants/margin_left = 0 MarginContainer/constants/margin_right = 0 MarginContainer/constants/margin_top = 0 -MenuButton/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -MenuButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -MenuButton/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 ) -MenuButton/colors/font_color_pressed = Color( 0, 0, 0, 1 ) +MenuButton/colors/font_color = Color(0.25, 0.25, 0.25, 1) +MenuButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +MenuButton/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1) +MenuButton/colors/font_color_pressed = Color(0, 0, 0, 1) MenuButton/constants/hseparation = 3 -MenuButton/fonts/font = ExtResource( 5 ) -MenuButton/styles/disabled = SubResource( 23 ) -MenuButton/styles/focus = SubResource( 23 ) -MenuButton/styles/hover = SubResource( 23 ) -MenuButton/styles/normal = SubResource( 23 ) -MenuButton/styles/pressed = SubResource( 23 ) -Misc/colors/clear_color = Color( 1, 1, 1, 1 ) -OptionButton/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -OptionButton/colors/font_color_disabled = Color( 0, 0, 0, 0.3 ) -OptionButton/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 ) -OptionButton/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 ) -OptionButton/colors/icon_color_hover = Color( 1.45, 1.45, 1.45, 1 ) +MenuButton/styles/disabled = SubResource("23") +MenuButton/styles/focus = SubResource("23") +MenuButton/styles/hover = SubResource("23") +MenuButton/styles/normal = SubResource("23") +MenuButton/styles/pressed = SubResource("23") +Misc/colors/clear_color = Color(1, 1, 1, 1) +OptionButton/colors/font_color = Color(0.25, 0.25, 0.25, 1) +OptionButton/colors/font_color_disabled = Color(0, 0, 0, 0.3) +OptionButton/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1) +OptionButton/colors/font_color_pressed = Color(0, 0.356863, 1, 1) +OptionButton/colors/icon_color_hover = Color(1.45, 1.45, 1.45, 1) OptionButton/constants/arrow_margin = 4 OptionButton/constants/hseparation = 4 OptionButton/constants/modulate_arrow = 1 -OptionButton/fonts/font = ExtResource( 5 ) -OptionButton/icons/arrow = SubResource( 100 ) -OptionButton/styles/disabled = SubResource( 2 ) -OptionButton/styles/focus = SubResource( 3 ) -OptionButton/styles/hover = SubResource( 4 ) -OptionButton/styles/normal = SubResource( 5 ) -OptionButton/styles/pressed = SubResource( 6 ) -Panel/styles/panel = SubResource( 102 ) -PanelContainer/styles/panel = SubResource( 103 ) -PopupDialog/styles/panel = SubResource( 104 ) -PopupMenu/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -PopupMenu/colors/font_color_accel = Color( 0, 0, 0, 0.3 ) -PopupMenu/colors/font_color_disabled = Color( 0, 0, 0, 0.3 ) -PopupMenu/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 ) +OptionButton/styles/disabled = SubResource("2") +OptionButton/styles/focus = SubResource("3") +OptionButton/styles/hover = SubResource("4") +OptionButton/styles/normal = SubResource("5") +OptionButton/styles/pressed = SubResource("6") +Panel/styles/panel = SubResource("102") +PanelContainer/styles/panel = SubResource("103") +Popup/styles/panel = SubResource("104") +PopupMenu/colors/font_color = Color(0.25, 0.25, 0.25, 1) +PopupMenu/colors/font_color_accel = Color(0, 0, 0, 0.3) +PopupMenu/colors/font_color_disabled = Color(0, 0, 0, 0.3) +PopupMenu/colors/font_color_hover = Color(0.15, 0.15, 0.15, 1) PopupMenu/constants/hseparation = 4 PopupMenu/constants/vseparation = 5 -PopupMenu/fonts/font = ExtResource( 5 ) -PopupMenu/icons/checked = SubResource( 8 ) -PopupMenu/icons/radio_checked = SubResource( 10 ) -PopupMenu/icons/radio_unchecked = SubResource( 12 ) -PopupMenu/icons/submenu = SubResource( 106 ) -PopupMenu/icons/unchecked = SubResource( 14 ) -PopupMenu/icons/visibility_hidden = SubResource( 108 ) -PopupMenu/icons/visibility_visible = SubResource( 42 ) -PopupMenu/icons/visibility_xray = SubResource( 110 ) -PopupMenu/styles/disabled = SubResource( 23 ) -PopupMenu/styles/focus = SubResource( 23 ) -PopupMenu/styles/hover = SubResource( 111 ) -PopupMenu/styles/labeled_separator_left = SubResource( 112 ) -PopupMenu/styles/labeled_separator_right = SubResource( 113 ) -PopupMenu/styles/normal = SubResource( 23 ) -PopupMenu/styles/panel = SubResource( 104 ) +PopupMenu/styles/disabled = SubResource("23") +PopupMenu/styles/focus = SubResource("23") +PopupMenu/styles/hover = SubResource("111") +PopupMenu/styles/labeled_separator_left = SubResource("112") +PopupMenu/styles/labeled_separator_right = SubResource("113") +PopupMenu/styles/normal = SubResource("23") +PopupMenu/styles/panel = SubResource("104") PopupMenu/styles/panel_disabled = null -PopupMenu/styles/pressed = SubResource( 23 ) -PopupMenu/styles/separator = SubResource( 114 ) -PopupPanel/styles/panel = SubResource( 104 ) -ProgressBar/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -ProgressBar/styles/bg = SubResource( 117 ) -ProgressBar/styles/fg = SubResource( 120 ) -ProjectSettingsEditor/styles/panel = SubResource( 121 ) -RichTextLabel/colors/default_color = Color( 0.25, 0.25, 0.25, 1 ) -RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 ) +PopupMenu/styles/pressed = SubResource("23") +PopupMenu/styles/separator = SubResource("114") +PopupPanel/styles/panel = SubResource("104") +ProgressBar/colors/font_color = Color(0.25, 0.25, 0.25, 1) +ProjectSettingsEditor/styles/panel = SubResource("121") +RichTextLabel/colors/default_color = Color(0.25, 0.25, 0.25, 1) +RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0) RichTextLabel/constants/shadow_as_outline = 0 RichTextLabel/constants/shadow_offset_x = 1 RichTextLabel/constants/shadow_offset_y = 1 -RichTextLabel/styles/focus = SubResource( 122 ) -RichTextLabel/styles/normal = SubResource( 51 ) -RulerButton/base_type = "Button" -RulerButton/styles/focus = SubResource( 1 ) -RulerButton/styles/hover = SubResource( 1 ) -RulerButton/styles/normal = SubResource( 1 ) -RulerButton/styles/pressed = SubResource( 1 ) -SpinBox/icons/updown = SubResource( 124 ) -TabContainer/colors/font_color_bg = Color( 0, 0, 0, 0.3 ) -TabContainer/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) -TabContainer/colors/font_color_fg = Color( 0.25, 0.25, 0.25, 1 ) +RichTextLabel/styles/focus = SubResource("122") +RichTextLabel/styles/normal = SubResource("51") +RulerButton/base_type = &"Button" +RulerButton/styles/focus = SubResource("1") +RulerButton/styles/hover = SubResource("1") +RulerButton/styles/normal = SubResource("1") +RulerButton/styles/pressed = SubResource("1") +TabBar/colors/font_color_bg = Color(0, 0, 0, 0.3) +TabBar/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2) +TabBar/colors/font_color_fg = Color(0.25, 0.25, 0.25, 1) +TabBar/constants/hseparation = 4 +TabBar/constants/label_valign_bg = 2 +TabBar/constants/label_valign_fg = 0 +TabBar/constants/top_margin = 24 +TabBar/styles/button = SubResource("23") +TabBar/styles/button_pressed = SubResource("23") +TabBar/styles/panel = SubResource("141") +TabBar/styles/tab_bg = SubResource("138") +TabBar/styles/tab_disabled = SubResource("139") +TabBar/styles/tab_fg = SubResource("140") +TabContainer/colors/font_color_bg = Color(0, 0, 0, 0.3) +TabContainer/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2) +TabContainer/colors/font_color_fg = Color(0.25, 0.25, 0.25, 1) TabContainer/constants/hseparation = 4 TabContainer/constants/label_valign_bg = 2 TabContainer/constants/label_valign_fg = 0 TabContainer/constants/side_margin = 0 TabContainer/constants/top_margin = 24 -TabContainer/fonts/font = ExtResource( 5 ) -TabContainer/icons/decrement = SubResource( 126 ) -TabContainer/icons/decrement_highlight = SubResource( 128 ) -TabContainer/icons/increment = SubResource( 130 ) -TabContainer/icons/increment_highlight = SubResource( 132 ) -TabContainer/icons/menu = SubResource( 134 ) -TabContainer/icons/menu_highlight = SubResource( 136 ) -TabContainer/styles/panel = SubResource( 137 ) -TabContainer/styles/tab_bg = SubResource( 138 ) -TabContainer/styles/tab_disabled = SubResource( 139 ) -TabContainer/styles/tab_fg = SubResource( 140 ) -Tabs/colors/font_color_bg = Color( 0, 0, 0, 0.3 ) -Tabs/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) -Tabs/colors/font_color_fg = Color( 0.25, 0.25, 0.25, 1 ) -Tabs/constants/hseparation = 4 -Tabs/constants/label_valign_bg = 2 -Tabs/constants/label_valign_fg = 0 -Tabs/constants/top_margin = 24 -Tabs/fonts/font = ExtResource( 5 ) -Tabs/icons/close = SubResource( 98 ) -Tabs/icons/decrement = SubResource( 126 ) -Tabs/icons/decrement_highlight = SubResource( 128 ) -Tabs/icons/increment = SubResource( 130 ) -Tabs/icons/increment_highlight = SubResource( 132 ) -Tabs/styles/button = SubResource( 23 ) -Tabs/styles/button_pressed = SubResource( 23 ) -Tabs/styles/panel = SubResource( 141 ) -Tabs/styles/tab_bg = SubResource( 138 ) -Tabs/styles/tab_disabled = SubResource( 139 ) -Tabs/styles/tab_fg = SubResource( 140 ) -TextEdit/colors/background_color = Color( 0, 0, 0, 0 ) -TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 ) -TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 ) -TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 ) -TextEdit/colors/caret_color = Color( 0.25, 0.25, 0.25, 1 ) -TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 ) -TextEdit/colors/completion_background_color = Color( 0.172549, 0.164706, 0.196078, 1 ) -TextEdit/colors/completion_existing_color = Color( 0.87451, 0.87451, 0.87451, 0.129412 ) -TextEdit/colors/completion_font_color = Color( 0.371094, 0.00724792, 0.00724792, 1 ) -TextEdit/colors/completion_scroll_color = Color( 1, 1, 1, 1 ) -TextEdit/colors/completion_selected_color = Color( 0.262745, 0.258824, 0.266667, 1 ) -TextEdit/colors/current_line_color = Color( 0.25, 0.25, 0.26, 0.8 ) -TextEdit/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -TextEdit/colors/font_color_selected = Color( 0, 0, 0, 1 ) -TextEdit/colors/function_color = Color( 0.4, 0.635294, 0.807843, 1 ) -TextEdit/colors/line_number_color = Color( 0.666667, 0.666667, 0.666667, 0.4 ) -TextEdit/colors/mark_color = Color( 1, 0.4, 0.4, 0.4 ) -TextEdit/colors/member_variable_color = Color( 0.901961, 0.305882, 0.34902, 1 ) -TextEdit/colors/number_color = Color( 0.921569, 0.584314, 0.196078, 1 ) -TextEdit/colors/safe_line_number_color = Color( 0.666667, 0.784314, 0.666667, 0.6 ) -TextEdit/colors/selection_color = Color( 0, 0.356863, 1, 0.4 ) -TextEdit/colors/symbol_color = Color( 0.941176, 0.941176, 0.941176, 1 ) -TextEdit/colors/word_highlighted_color = Color( 0.8, 0.9, 0.9, 0.15 ) +TabContainer/styles/panel = SubResource("137") +TabContainer/styles/tab_bg = SubResource("138") +TabContainer/styles/tab_disabled = SubResource("139") +TabContainer/styles/tab_fg = SubResource("140") +TextEdit/colors/background_color = Color(0, 0, 0, 0) +TextEdit/colors/brace_mismatch_color = Color(1, 0.2, 0.2, 1) +TextEdit/colors/breakpoint_color = Color(0.8, 0.8, 0.4, 0.2) +TextEdit/colors/caret_background_color = Color(0, 0, 0, 1) +TextEdit/colors/caret_color = Color(0.25, 0.25, 0.25, 1) +TextEdit/colors/code_folding_color = Color(0.8, 0.8, 0.8, 0.8) +TextEdit/colors/completion_background_color = Color(0.172549, 0.164706, 0.196078, 1) +TextEdit/colors/completion_existing_color = Color(0.87451, 0.87451, 0.87451, 0.129412) +TextEdit/colors/completion_font_color = Color(0.371094, 0.00724792, 0.00724792, 1) +TextEdit/colors/completion_scroll_color = Color(1, 1, 1, 1) +TextEdit/colors/completion_selected_color = Color(0.262745, 0.258824, 0.266667, 1) +TextEdit/colors/current_line_color = Color(0.25, 0.25, 0.26, 0.8) +TextEdit/colors/font_color = Color(0.25, 0.25, 0.25, 1) +TextEdit/colors/font_color_selected = Color(0, 0, 0, 1) +TextEdit/colors/function_color = Color(0.4, 0.635294, 0.807843, 1) +TextEdit/colors/line_number_color = Color(0.666667, 0.666667, 0.666667, 0.4) +TextEdit/colors/mark_color = Color(1, 0.4, 0.4, 0.4) +TextEdit/colors/member_variable_color = Color(0.901961, 0.305882, 0.34902, 1) +TextEdit/colors/number_color = Color(0.921569, 0.584314, 0.196078, 1) +TextEdit/colors/safe_line_number_color = Color(0.666667, 0.784314, 0.666667, 0.6) +TextEdit/colors/selection_color = Color(0, 0.356863, 1, 0.4) +TextEdit/colors/symbol_color = Color(0.941176, 0.941176, 0.941176, 1) +TextEdit/colors/word_highlighted_color = Color(0.8, 0.9, 0.9, 0.15) TextEdit/constants/completion_lines = 7 TextEdit/constants/completion_max_width = 50 TextEdit/constants/completion_scroll_width = 3 TextEdit/constants/line_spacing = 4 -TextEdit/fonts/font = ExtResource( 5 ) -TextEdit/icons/fold = SubResource( 143 ) -TextEdit/icons/folded = SubResource( 145 ) -TextEdit/icons/space = SubResource( 147 ) -TextEdit/icons/tab = SubResource( 149 ) TextEdit/styles/completion = null -TextEdit/styles/focus = SubResource( 4 ) -TextEdit/styles/normal = SubResource( 5 ) -TextEdit/styles/read_only = SubResource( 2 ) -ToolButton/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -ToolButton/colors/font_color_disabled = Color( 0.9, 0.95, 1, 0.3 ) -ToolButton/colors/font_color_hover = Color( 0.15, 0.15, 0.15, 1 ) -ToolButton/colors/font_color_pressed = Color( 0, 0.356863, 1, 1 ) -ToolButton/constants/hseparation = 3 -ToolButton/fonts/font = ExtResource( 5 ) -ToolButton/styles/disabled = SubResource( 23 ) -ToolButton/styles/focus = SubResource( 23 ) -ToolButton/styles/hover = SubResource( 23 ) -ToolButton/styles/normal = SubResource( 23 ) -ToolButton/styles/pressed = SubResource( 23 ) -TooltipLabel/colors/font_color = Color( 0.75, 0.75, 0.75, 1 ) -TooltipLabel/colors/font_color_shadow = Color( 1, 1, 1, 0.1 ) -TooltipPanel/styles/panel = SubResource( 150 ) -TopMenuPanel/base_type = "Panel" -TopMenuPanel/styles/panel = SubResource( 101 ) -Tree/colors/cursor_color = Color( 0, 0, 0, 1 ) -Tree/colors/custom_button_font_highlight = Color( 0.15, 0.15, 0.15, 1 ) -Tree/colors/drop_position_color = Color( 0, 0.356863, 1, 1 ) -Tree/colors/font_color = Color( 0.25, 0.25, 0.25, 1 ) -Tree/colors/font_color_selected = Color( 0, 0, 0, 1 ) -Tree/colors/guide_color = Color( 0, 0, 0, 0.05 ) -Tree/colors/relationship_line_color = Color( 0, 0, 0, 0.1 ) -Tree/colors/selection_color = Color( 0.1, 0.1, 1, 0.8 ) -Tree/colors/title_button_color = Color( 0.25, 0.25, 0.25, 1 ) +TextEdit/styles/focus = SubResource("4") +TextEdit/styles/normal = SubResource("5") +TextEdit/styles/read_only = SubResource("2") +TooltipLabel/colors/font_color = Color(0.75, 0.75, 0.75, 1) +TooltipLabel/colors/font_color_shadow = Color(1, 1, 1, 0.1) +TooltipPanel/styles/panel = SubResource("150") +TopMenuPanel/base_type = &"Panel" +TopMenuPanel/styles/panel = SubResource("101") +Tree/colors/cursor_color = Color(0, 0, 0, 1) +Tree/colors/custom_button_font_highlight = Color(0.15, 0.15, 0.15, 1) +Tree/colors/drop_position_color = Color(0, 0.356863, 1, 1) +Tree/colors/font_color = Color(0.25, 0.25, 0.25, 1) +Tree/colors/font_color_selected = Color(0, 0, 0, 1) +Tree/colors/guide_color = Color(0, 0, 0, 0.05) +Tree/colors/relationship_line_color = Color(0, 0, 0, 0.1) +Tree/colors/selection_color = Color(0.1, 0.1, 1, 0.8) +Tree/colors/title_button_color = Color(0.25, 0.25, 0.25, 1) Tree/constants/button_margin = 4 Tree/constants/draw_guides = 0 Tree/constants/draw_relationship_lines = 1 @@ -1884,63 +864,39 @@ Tree/constants/item_margin = 12 Tree/constants/scroll_border = 40 Tree/constants/scroll_speed = 12 Tree/constants/vseparation = 4 -Tree/fonts/font = ExtResource( 5 ) -Tree/fonts/title_button_font = ExtResource( 5 ) -Tree/icons/arrow = SubResource( 143 ) -Tree/icons/arrow_collapsed = SubResource( 145 ) -Tree/icons/checked = SubResource( 8 ) -Tree/icons/select_arrow = SubResource( 152 ) -Tree/icons/unchecked = SubResource( 14 ) -Tree/icons/updown = SubResource( 154 ) -Tree/styles/bg = SubResource( 51 ) -Tree/styles/bg_focus = SubResource( 92 ) -Tree/styles/button_pressed = SubResource( 155 ) -Tree/styles/cursor = SubResource( 156 ) -Tree/styles/cursor_unfocused = SubResource( 156 ) -Tree/styles/custom_button = SubResource( 157 ) -Tree/styles/custom_button_hover = SubResource( 5 ) -Tree/styles/custom_button_pressed = SubResource( 158 ) -Tree/styles/hover = SubResource( 159 ) -Tree/styles/selected = SubResource( 94 ) -Tree/styles/selected_focus = SubResource( 95 ) -Tree/styles/title_button_hover = SubResource( 160 ) -Tree/styles/title_button_normal = SubResource( 160 ) -Tree/styles/title_button_pressed = SubResource( 160 ) +Tree/styles/bg = SubResource("51") +Tree/styles/bg_focus = SubResource("92") +Tree/styles/button_pressed = SubResource("155") +Tree/styles/cursor = SubResource("156") +Tree/styles/cursor_unfocused = SubResource("156") +Tree/styles/custom_button = SubResource("157") +Tree/styles/custom_button_hover = SubResource("5") +Tree/styles/custom_button_pressed = SubResource("158") +Tree/styles/hover = SubResource("159") +Tree/styles/selected = SubResource("94") +Tree/styles/selected_focus = SubResource("95") +Tree/styles/title_button_hover = SubResource("160") +Tree/styles/title_button_normal = SubResource("160") +Tree/styles/title_button_pressed = SubResource("160") VBoxContainer/constants/separation = 4 -VScrollBar/icons/decrement = SubResource( 66 ) -VScrollBar/icons/decrement_highlight = SubResource( 66 ) -VScrollBar/icons/increment = SubResource( 66 ) -VScrollBar/icons/increment_highlight = SubResource( 66 ) -VScrollBar/styles/grabber = SubResource( 161 ) -VScrollBar/styles/grabber_highlight = SubResource( 162 ) -VScrollBar/styles/grabber_pressed = SubResource( 163 ) -VScrollBar/styles/scroll = SubResource( 164 ) -VScrollBar/styles/scroll_focus = SubResource( 165 ) VSeparator/constants/separation = 4 -VSeparator/styles/separator = SubResource( 166 ) -VSlider/icons/grabber = SubResource( 82 ) -VSlider/icons/grabber_highlight = SubResource( 84 ) -VSlider/styles/grabber_area = SubResource( 167 ) -VSlider/styles/grabber_area_highlight = SubResource( 168 ) -VSlider/styles/slider = SubResource( 169 ) +VSeparator/styles/separator = SubResource("166") +VSlider/styles/grabber_area = SubResource("167") +VSlider/styles/grabber_area_highlight = SubResource("168") +VSlider/styles/slider = SubResource("169") VSplitContainer/constants/autohide = 1 VSplitContainer/constants/separation = 8 -VSplitContainer/icons/grabber = SubResource( 171 ) -VSplitContainer/styles/bg = SubResource( 174 ) -ValueSlider/colors/progress_color = Color( 0.74902, 0.74902, 0.74902, 1 ) -ValueSlider/colors/under_color = Color( 0.839216, 0.839216, 0.839216, 1 ) -ValueSlider/icons/arrow_hover = ExtResource( 2 ) -ValueSlider/icons/arrow_normal = ExtResource( 6 ) -ValueSlider/icons/arrow_pressed = ExtResource( 4 ) +ValueSlider/colors/progress_color = Color(0.74902, 0.74902, 0.74902, 1) +ValueSlider/colors/under_color = Color(0.839216, 0.839216, 0.839216, 1) +ValueSlider/icons/arrow_hover = ExtResource("2") +ValueSlider/icons/arrow_normal = ExtResource("6") +ValueSlider/icons/arrow_pressed = ExtResource("4") ValueSlider/icons/texture_over = null -ValueSlider/icons/texture_progress = ExtResource( 3 ) -ValueSlider/icons/texture_under = ExtResource( 3 ) -WindowDialog/colors/title_color = Color( 0.25, 0.25, 0.25, 1 ) -WindowDialog/constants/close_h_ofs = 22 -WindowDialog/constants/close_v_ofs = 20 -WindowDialog/constants/scaleborder_size = 4 -WindowDialog/constants/title_height = 24 -WindowDialog/fonts/title_font = ExtResource( 5 ) -WindowDialog/icons/close = SubResource( 98 ) -WindowDialog/icons/close_highlight = SubResource( 98 ) -WindowDialog/styles/panel = SubResource( 175 ) +ValueSlider/icons/texture_progress = ExtResource("3") +ValueSlider/icons/texture_under = ExtResource("3") +Window/colors/title_color = Color(0.25, 0.25, 0.25, 1) +Window/constants/close_h_ofs = 22 +Window/constants/close_v_ofs = 20 +Window/constants/scaleborder_size = 4 +Window/constants/title_height = 24 +Window/styles/panel = SubResource("175") diff --git a/assets/themes/purple/theme.tres b/assets/themes/purple/theme.tres index aa990853c31..e983b73ff26 100644 --- a/assets/themes/purple/theme.tres +++ b/assets/themes/purple/theme.tres @@ -1,1748 +1,747 @@ -[gd_resource type="Theme" load_steps=177 format=2] +[gd_resource type="Theme" load_steps=59 format=3 uid="uid://ckl3tycfj62pb"] -[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1] -[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2] -[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=3] -[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=4] -[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5] -[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6] +[ext_resource type="Texture2D" uid="uid://bq8h66v4ie8xl" path="res://assets/graphics/misc/value_arrow_hover.svg" id="3"] +[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="4"] +[ext_resource type="Texture2D" uid="uid://hhxenhteahv6" path="res://assets/graphics/misc/value_arrow_press.svg" id="5"] +[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="6"] +[ext_resource type="FontFile" uid="uid://cvc4lelf6hl7x" path="res://assets/fonts/Roboto-Regular.ttf" id="7_0f141"] -[sub_resource type="StyleBoxFlat" id=2] +[sub_resource type="StyleBoxFlat" id="22"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.176471, 0.109412, 0.254118, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.137255, 0.085098, 0.197647, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=3] -content_margin_left = 6.0 content_margin_right = 6.0 -content_margin_top = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.662745, 0, 1, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=4] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.397059, 0.341176, 0.461765, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=5] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.122549, 0.0759804, 0.176471, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="StyleBoxFlat" id=6] -content_margin_left = 6.0 -content_margin_right = 6.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 ) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.662745, 0, 1, 1 ) -corner_radius_top_left = 2 -corner_radius_top_right = 2 -corner_radius_bottom_right = 2 -corner_radius_bottom_left = 2 - -[sub_resource type="Image" id=171] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 60, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 243, 223, 223, 223, 105, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 105, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 104, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 225, 225, 225, 51, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 48, 224, 224, 224, 66, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 103, 223, 223, 223, 248, 224, 224, 224, 255, 223, 223, 223, 193, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 217, 217, 217, 48, 223, 223, 223, 178, 222, 222, 222, 231, 220, 220, 220, 74, 222, 222, 222, 102, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 194, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 219, 219, 219, 64, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 233, 223, 223, 223, 248, 224, 224, 224, 255, 222, 222, 222, 195, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 224, 222, 222, 222, 196, 220, 220, 220, 52, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 66, 221, 221, 221, 53, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=8] -flags = 0 -flags = 0 -image = SubResource( 171 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=172] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 221, 221, 221, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 217, 217, 217, 68, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 217, 217, 217, 68, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 179, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 179, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 181, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 238, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 238, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 69, 223, 223, 223, 184, 224, 224, 224, 233, 224, 224, 224, 233, 223, 223, 223, 184, 218, 218, 218, 69, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 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] -flags = 0 -flags = 0 -image = SubResource( 172 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=173] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 21, 218, 218, 218, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 216, 216, 216, 0, 216, 216, 216, 33, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 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] -flags = 0 -flags = 0 -image = SubResource( 173 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=174] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 45, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 45, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 30, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 30, 221, 221, 221, 0, 212, 212, 212, 0, 212, 212, 212, 6, 221, 221, 221, 30, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 221, 221, 221, 30, 212, 212, 212, 6, 212, 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 212, 212, 212, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=14] -flags = 0 -flags = 0 -image = SubResource( 174 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=15] -content_margin_left = 4.0 -content_margin_right = 4.0 -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 ) +bg_color = Color(0.147059, 0.0911765, 0.211765, 1) draw_center = false -border_color = Color( 0.122549, 0.0759804, 0.176471, 1 ) - -[sub_resource type="Image" id=175] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 219, 219, 219, 94, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 41, 222, 222, 222, 47, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 230, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 41, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 47, 222, 222, 222, 189, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 189, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 32, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 22, 222, 222, 222, 47, 220, 220, 220, 95, 223, 223, 223, 253, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 253, 220, 220, 220, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 220, 220, 220, 22, 220, 220, 220, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 40, 222, 222, 222, 47, 221, 221, 221, 144, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 221, 221, 221, 144, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 167, 167, 167, 0, 208, 208, 208, 11, 221, 221, 221, 46, 222, 222, 222, 47, 222, 222, 222, 95, 222, 222, 222, 191, 224, 224, 224, 233, 224, 224, 224, 233, 222, 222, 222, 191, 222, 222, 222, 95, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 221, 221, 221, 46, 208, 208, 208, 11, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 40, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 223, 223, 223, 40, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 167, 167, 0, 127, 127, 127, 2, 220, 220, 220, 22, 223, 223, 223, 32, 218, 218, 218, 42, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 222, 222, 222, 47, 218, 218, 218, 42, 223, 223, 223, 32, 220, 220, 220, 22, 127, 127, 127, 2, 167, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 220, 220, 220, 0, 223, 223, 223, 0, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 223, 223, 223, 0, 220, 220, 220, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 38 -} - -[sub_resource type="ImageTexture" id=17] -flags = 0 -flags = 0 -image = SubResource( 175 ) -size = Vector2( 38, 16 ) - -[sub_resource type="Image" id=176] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": "LumAlpha8", -"height": 16, -"mipmaps": false, -"width": 16 -} +border_color = Color(0.122549, 0.0759804, 0.176471, 1) -[sub_resource type="ImageTexture" id=19] -flags = 4 -flags = 4 -image = SubResource( 176 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=177] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 66, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 223, 220, 220, 220, 66, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 223, 223, 223, 65, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 217, 217, 217, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 12, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 223, 223, 223, 222, 212, 212, 212, 12, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 120, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 194, 127, 127, 127, 2, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 194, 224, 224, 224, 255, 223, 223, 223, 120, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 221, 221, 221, 75, 174, 174, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 174, 0, 221, 221, 221, 75, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 214, 214, 214, 25, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 226, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 216, 216, 216, 20, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 0, 222, 222, 222, 71, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 121, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 121, 223, 223, 223, 0, 215, 215, 215, 0, 215, 215, 215, 13, 222, 222, 222, 223, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 132, 222, 222, 222, 0, 221, 221, 221, 0, 214, 214, 214, 0, 214, 214, 214, 0, 221, 221, 221, 0, 222, 222, 222, 0, 222, 222, 222, 132, 224, 224, 224, 255, 222, 222, 222, 223, 215, 215, 215, 13, 215, 215, 215, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 66, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 193, 221, 221, 221, 76, 214, 214, 214, 25, 214, 214, 214, 25, 221, 221, 221, 76, 223, 223, 223, 193, 224, 224, 224, 255, 223, 223, 223, 254, 220, 220, 220, 66, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 220, 220, 220, 66, 223, 223, 223, 224, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 224, 220, 220, 220, 66, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 212, 212, 212, 12, 223, 223, 223, 123, 223, 223, 223, 178, 223, 223, 223, 229, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 229, 223, 223, 223, 178, 223, 223, 223, 123, 212, 212, 212, 12, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 38 -} - -[sub_resource type="ImageTexture" id=21] -flags = 0 -flags = 0 -image = SubResource( 177 ) -size = Vector2( 38, 16 ) - -[sub_resource type="StyleBoxFlat" id=22] -content_margin_left = 6.0 -content_margin_right = 6.0 +[sub_resource type="StyleBoxFlat" id="15"] +content_margin_left = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 ) +bg_color = Color(0.147059, 0.0911765, 0.211765, 1) draw_center = false -border_color = Color( 0.122549, 0.0759804, 0.176471, 1 ) - -[sub_resource type="Image" id=178] -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, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 0, 0, 0, 0, 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=24] -flags = 0 -flags = 0 -image = SubResource( 178 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=179] -data = { -"data": PoolByteArray( 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 85, 86, 188, 0, 0, 3, 255, 0, 0, 2, 125, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 86, 86, 88, 188, 0, 0, 3, 255, 0, 0, 2, 126, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 88, 88, 89, 188, 0, 0, 3, 255, 0, 0, 2, 127, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 89, 89, 90, 188, 0, 0, 3, 255, 0, 0, 1, 128, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 92, 92, 93, 188, 0, 0, 3, 255, 0, 0, 1, 130, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 93, 93, 94, 188, 0, 0, 3, 255, 0, 0, 1, 131, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 94, 94, 96, 188, 0, 0, 3, 255, 0, 0, 1, 132, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 96, 96, 97, 188, 0, 0, 3, 255, 0, 0, 1, 133, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 99, 101, 189, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 255, 0, 0, 1, 135, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 136, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=26] -flags = 0 -flags = 0 -image = SubResource( 179 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=180] -data = { -"data": PoolByteArray( 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=28] -flags = 0 -flags = 0 -image = SubResource( 180 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=181] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 255, 223, 223, 223, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 218, 222, 222, 222, 70, 222, 222, 222, 70, 223, 223, 223, 218, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 65, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 65, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 0, 0, 0, 0, 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=30] -flags = 0 -flags = 0 -image = SubResource( 181 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=182] -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, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 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, 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, 223, 223, 223, 0, 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, 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, 222, 222, 222, 70, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 224, 224, 224, 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, 223, 223, 223, 180, 223, 223, 223, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 180, 223, 223, 223, 0, 0, 0, 0, 0, 223, 223, 223, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=32] -flags = 0 -flags = 0 -image = SubResource( 182 ) -size = Vector2( 16, 16 ) +border_color = Color(0.122549, 0.0759804, 0.176471, 1) -[sub_resource type="Image" id=183] -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, 218, 218, 218, 0, 222, 222, 222, 0, 222, 222, 222, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 222, 222, 222, 199, 222, 222, 222, 198, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 218, 218, 218, 21, 223, 223, 223, 211, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 217, 217, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 218, 218, 218, 21, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 216, 216, 216, 20, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 216, 216, 216, 20, 223, 223, 223, 209, 223, 223, 223, 254, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 251, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 193, 223, 223, 223, 254, 222, 222, 222, 206, 214, 214, 214, 19, 223, 223, 223, 254, 223, 223, 223, 249, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 193, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 192, 214, 214, 214, 19, 217, 217, 217, 0, 223, 223, 223, 254, 223, 223, 223, 249, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 192, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 214, 214, 214, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 176, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=34] -flags = 0 -flags = 0 -image = SubResource( 183 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=184] -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, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 98, 223, 223, 223, 177, 223, 223, 223, 228, 223, 223, 223, 228, 223, 223, 223, 177, 223, 223, 223, 98, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 23, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 185, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 185, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 215, 215, 215, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 174, 223, 223, 223, 254, 222, 222, 222, 87, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 87, 223, 223, 223, 254, 222, 222, 222, 174, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 147, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 161, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 224, 223, 223, 223, 0, 212, 212, 212, 0, 212, 212, 212, 6, 223, 223, 223, 205, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 214, 204, 204, 204, 10, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 178, 223, 223, 223, 0, 0, 0, 0, 0, 214, 214, 214, 0, 217, 217, 217, 34, 223, 223, 223, 240, 223, 223, 223, 245, 218, 218, 218, 42, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 215, 215, 215, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 96, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 219, 219, 0, 221, 221, 221, 84, 223, 223, 223, 97, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 186, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 185, 221, 221, 221, 23, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 228, 223, 223, 223, 177, 221, 221, 221, 99, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=36] -flags = 0 -flags = 0 -image = SubResource( 184 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=185] -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, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 221, 221, 221, 0, 221, 221, 221, 92, 223, 223, 223, 185, 222, 222, 222, 231, 222, 222, 222, 231, 223, 223, 223, 186, 222, 222, 222, 95, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 0, 218, 218, 218, 35, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 41, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 175, 175, 0, 223, 223, 223, 32, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 84, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 228, 218, 218, 218, 35, 194, 194, 194, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 213, 223, 223, 223, 254, 223, 223, 223, 225, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 217, 170, 170, 170, 3, 170, 170, 170, 0, 223, 223, 223, 0, 223, 223, 223, 89, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 87, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 200, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 87, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 93, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 24, 222, 222, 222, 0, 222, 222, 222, 198, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 198, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 19, 218, 218, 218, 0, 222, 222, 222, 199, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 199, 222, 222, 222, 0, 223, 223, 223, 24, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 209, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 94, 223, 223, 223, 254, 223, 223, 223, 254, 221, 221, 221, 84, 217, 217, 217, 0, 220, 220, 220, 59, 223, 223, 223, 201, 223, 223, 223, 200, 220, 220, 220, 59, 217, 217, 217, 0, 222, 222, 222, 85, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 94, 222, 222, 222, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 222, 223, 223, 223, 254, 223, 223, 223, 224, 210, 210, 210, 17, 217, 217, 217, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 210, 210, 210, 17, 223, 223, 223, 224, 223, 223, 223, 254, 223, 223, 223, 222, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 196, 196, 196, 0, 223, 223, 223, 41, 223, 223, 223, 232, 223, 223, 223, 254, 223, 223, 223, 225, 221, 221, 221, 83, 223, 223, 223, 24, 223, 223, 223, 24, 221, 221, 221, 83, 223, 223, 223, 225, 223, 223, 223, 254, 223, 223, 223, 232, 223, 223, 223, 41, 196, 196, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 220, 220, 220, 44, 223, 223, 223, 216, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 216, 220, 220, 220, 44, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 127, 127, 127, 2, 223, 223, 223, 98, 222, 222, 222, 190, 223, 223, 223, 232, 223, 223, 223, 232, 222, 222, 222, 190, 223, 223, 223, 98, 127, 127, 127, 2, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 223, 223, 223, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=38] -flags = 0 -flags = 0 -image = SubResource( 185 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=186] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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] -flags = 0 -flags = 0 -image = SubResource( 186 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=187] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=42] -flags = 0 -flags = 0 -image = SubResource( 187 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=188] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 101, 101, 101, 138, 211, 211, 211, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 100, 100, 100, 137, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 100, 100, 100, 137, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 14, 22, 22, 22, 101, 211, 211, 211, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 201, 201, 201, 221, 78, 78, 78, 127, 112, 112, 112, 143, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 210, 210, 210, 233, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 49, 153, 153, 153, 171, 224, 224, 224, 255, 224, 224, 224, 255, 220, 220, 220, 250, 153, 153, 153, 171, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 153, 153, 153, 171, 0, 0, 0, 49, 0, 0, 0, 68, 189, 189, 189, 206, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 205, 0, 0, 0, 100, 2, 2, 2, 101, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 189, 189, 189, 206, 0, 0, 0, 68, 0, 0, 0, 88, 212, 212, 212, 236, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 152, 152, 152, 169, 201, 201, 201, 220, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 88, 215, 215, 215, 239, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 212, 212, 212, 236, 0, 0, 0, 88, 0, 0, 0, 68, 192, 192, 192, 209, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 192, 192, 192, 208, 0, 0, 0, 68, 0, 0, 0, 49, 158, 158, 158, 174, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 158, 158, 158, 174, 0, 0, 0, 49, 0, 0, 0, 14, 22, 22, 22, 101, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 100, 0, 0, 0, 100, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 22, 22, 22, 101, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 43, 103, 103, 103, 138, 223, 223, 223, 254, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 254, 103, 103, 103, 138, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 103, 103, 103, 138, 212, 212, 212, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 211, 211, 211, 234, 101, 101, 101, 138, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 22, 22, 22, 102, 157, 157, 157, 175, 191, 191, 191, 208, 214, 214, 214, 239, 214, 214, 214, 239, 191, 191, 191, 208, 157, 157, 157, 175, 22, 22, 22, 102, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 49, 0, 0, 0, 69, 0, 0, 0, 89, 0, 0, 0, 89, 0, 0, 0, 69, 0, 0, 0, 49, 0, 0, 0, 14, 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=44] -flags = 0 -flags = 0 -image = SubResource( 188 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=189] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 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, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 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, 224, 224, 224, 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, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 115, 255, 255, 255, 156, 255, 255, 255, 156, 255, 255, 255, 114, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 160, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 160, 255, 255, 255, 17, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 110, 255, 255, 255, 174, 255, 255, 255, 131, 255, 255, 255, 35, 255, 255, 255, 35, 255, 255, 255, 131, 255, 255, 255, 174, 255, 255, 255, 110, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 153, 255, 255, 255, 174, 255, 255, 255, 34, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 34, 255, 255, 255, 174, 255, 255, 255, 153, 255, 255, 255, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 174, 255, 255, 255, 174, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 0, 0, 0, 0, 0, 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, 0, 224, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 0, 224, 224, 224, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=46] -flags = 0 -flags = 0 -image = SubResource( 189 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=47] +[sub_resource type="StyleBoxFlat" id="47"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 ) +bg_color = Color(0.147059, 0.0911765, 0.211765, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.0980392, 0.0607843, 0.141176, 1 ) - -[sub_resource type="Image" id=190] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=49] -flags = 0 -flags = 0 -image = SubResource( 190 ) -size = Vector2( 16, 16 ) +border_color = Color(0.0980392, 0.0607843, 0.141176, 1) -[sub_resource type="Image" id=191] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 58, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 225, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 226, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 225, 255, 255, 255, 175, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 175, 255, 255, 255, 59, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 59, 255, 255, 255, 0, 255, 255, 255, 119, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 119, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 60, 255, 255, 255, 177, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 177, 255, 255, 255, 60, 255, 255, 255, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 10, -"mipmaps": false, -"width": 10 -} - -[sub_resource type="ImageTexture" id=51] -flags = 0 -flags = 0 -image = SubResource( 191 ) -size = Vector2( 10, 10 ) - -[sub_resource type="Image" id=192] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 105, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 105, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 0 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=53] -flags = 0 -flags = 0 -image = SubResource( 192 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=54] +[sub_resource type="StyleBoxFlat" id="54"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 0.87, 0.4, 1 ) -shadow_color = Color( 1, 0.87, 0.4, 0.1 ) +border_color = Color(1, 0.87, 0.4, 1) +shadow_color = Color(1, 0.87, 0.4, 0.1) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=55] +[sub_resource type="StyleBoxFlat" id="55"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.3 ) +bg_color = Color(0, 0, 0, 0.3) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=56] +[sub_resource type="StyleBoxFlat" id="56"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.4 ) +bg_color = Color(0, 0, 0, 0.4) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=57] +[sub_resource type="StyleBoxFlat" id="57"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.7 ) +bg_color = Color(0, 0, 0, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=58] +[sub_resource type="StyleBoxFlat" id="58"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 0.47, 0.42, 1 ) -shadow_color = Color( 1, 0.47, 0.42, 0.2 ) +border_color = Color(1, 0.47, 0.42, 1) +shadow_color = Color(1, 0.47, 0.42, 0.2) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=59] +[sub_resource type="StyleBoxFlat" id="59"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.662745, 0, 1, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.662745, 0, 1, 0.9) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 8 -[sub_resource type="StyleBoxFlat" id=60] +[sub_resource type="StyleBoxFlat" id="60"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.7 ) +bg_color = Color(0, 0, 0, 0.7) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.9 ) +border_color = Color(1, 1, 1, 0.9) -[sub_resource type="StyleBoxFlat" id=61] +[sub_resource type="StyleBoxFlat" id="61"] content_margin_left = 28.0 -content_margin_right = 28.0 content_margin_top = 24.0 +content_margin_right = 28.0 content_margin_bottom = 5.0 -bg_color = Color( 0, 0, 0, 0.9 ) +bg_color = Color(0, 0, 0, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.662745, 0, 1, 0.9 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.662745, 0, 1, 0.9) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 8 -[sub_resource type="ImageTexture" id=62] - -[sub_resource type="Image" id=193] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 54, 255, 255, 255, 70, 255, 255, 255, 70, 255, 255, 255, 54, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 55, 255, 255, 255, 55, 255, 255, 255, 16, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=64] -flags = 0 -flags = 0 -image = SubResource( 193 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=65] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 64 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=194] -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, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=67] -flags = 0 -flags = 0 -image = SubResource( 194 ) -size = Vector2( 12, 12 ) +[sub_resource type="StyleBoxLine" id="76"] +color = Color(1, 1, 1, 0.1) -[sub_resource type="StyleBoxTexture" id=68] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 67 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="Image" id=195] -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, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=70] -flags = 0 -flags = 0 -image = SubResource( 195 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=71] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 70 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="Image" id=196] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=73] -flags = 0 -flags = 0 -image = SubResource( 196 ) -size = Vector2( 12, 12 ) - -[sub_resource type="StyleBoxTexture" id=74] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 73 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=75] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 73 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=76] -color = Color( 1, 1, 1, 0.1 ) - -[sub_resource type="Image" id=197] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, 211, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 211, 211, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 190, 190, 0, 210, 210, 210, 17, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 210, 210, 210, 17, 190, 190, 190, 0, 0, 0, 0, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 62, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 62, 170, 170, 170, 3, 170, 170, 170, 0, 216, 216, 216, 0, 216, 216, 216, 33, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 216, 216, 216, 33, 216, 216, 216, 0, 219, 219, 219, 0, 219, 219, 219, 50, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 219, 219, 219, 50, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 65, 223, 223, 223, 73, 127, 127, 127, 2, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 191, 191, 191, 0, 127, 127, 127, 2, 223, 223, 223, 73, 223, 223, 223, 64, 223, 223, 223, 0, 220, 220, 220, 0, 220, 220, 220, 51, 223, 223, 223, 73, 210, 210, 210, 17, 240, 240, 240, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 232, 232, 232, 0, 210, 210, 210, 17, 223, 223, 223, 73, 220, 220, 220, 51, 220, 220, 220, 0, 218, 218, 218, 0, 218, 218, 218, 35, 223, 223, 223, 73, 223, 223, 223, 49, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 49, 223, 223, 223, 73, 218, 218, 218, 35, 218, 218, 218, 0, 170, 170, 170, 0, 170, 170, 170, 3, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 32, 233, 233, 233, 0, 233, 233, 233, 0, 255, 255, 255, 0, 255, 255, 255, 0, 233, 233, 233, 0, 233, 233, 233, 0, 223, 223, 223, 32, 223, 223, 223, 73, 222, 222, 222, 63, 170, 170, 170, 3, 170, 170, 170, 0, 0, 0, 0, 0, 191, 191, 191, 0, 212, 212, 212, 18, 223, 223, 223, 72, 223, 223, 223, 73, 223, 223, 223, 49, 212, 212, 212, 18, 217, 217, 217, 0, 217, 217, 217, 0, 212, 212, 212, 18, 223, 223, 223, 49, 223, 223, 223, 73, 223, 223, 223, 72, 212, 212, 212, 18, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 222, 222, 222, 63, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 223, 223, 223, 73, 222, 222, 222, 63, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 170, 170, 170, 3, 218, 218, 218, 35, 219, 219, 219, 50, 223, 223, 223, 65, 223, 223, 223, 65, 219, 219, 219, 50, 218, 218, 218, 35, 170, 170, 170, 3, 191, 191, 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, 170, 170, 170, 0, 218, 218, 218, 0, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 219, 219, 219, 0, 218, 218, 218, 0, 170, 170, 170, 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=78] -flags = 0 -flags = 0 -image = SubResource( 197 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=198] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 63, 223, 223, 223, 221, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 222, 222, 222, 62, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 0, 0, 0, 1, 148, 148, 148, 0, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 222, 222, 222, 62, 215, 215, 215, 0, 0, 0, 0, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 220, 224, 224, 224, 255, 223, 223, 223, 114, 233, 233, 233, 0, 237, 237, 237, 0, 127, 127, 127, 0, 255, 255, 255, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 219, 208, 208, 208, 11, 208, 208, 208, 0, 222, 222, 222, 0, 222, 222, 222, 118, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 145, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 222, 222, 222, 118, 222, 222, 222, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 218, 218, 218, 7, 255, 255, 255, 1, 255, 255, 255, 223, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 210, 236, 236, 236, 0, 218, 218, 218, 7, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 221, 221, 221, 60, 243, 243, 243, 0, 255, 255, 255, 159, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 231, 255, 255, 255, 141, 238, 238, 238, 0, 221, 221, 221, 60, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 123, 224, 224, 224, 255, 223, 223, 223, 172, 233, 233, 233, 0, 255, 255, 255, 9, 255, 255, 255, 156, 255, 255, 255, 219, 255, 255, 255, 217, 255, 255, 255, 146, 255, 255, 255, 4, 233, 233, 233, 0, 223, 223, 223, 172, 224, 224, 224, 255, 223, 223, 223, 123, 223, 223, 223, 0, 208, 208, 208, 0, 208, 208, 208, 11, 223, 223, 223, 222, 224, 224, 224, 255, 223, 223, 223, 112, 233, 233, 233, 0, 237, 237, 237, 0, 255, 255, 255, 0, 127, 127, 127, 0, 237, 237, 237, 0, 233, 233, 233, 0, 223, 223, 223, 114, 224, 224, 224, 255, 223, 223, 223, 221, 208, 208, 208, 11, 208, 208, 208, 0, 0, 0, 0, 0, 215, 215, 215, 0, 223, 223, 223, 64, 223, 223, 223, 254, 224, 224, 224, 255, 222, 222, 222, 174, 220, 220, 220, 66, 148, 148, 148, 0, 0, 0, 0, 1, 220, 220, 220, 66, 222, 222, 222, 174, 224, 224, 224, 255, 223, 223, 223, 254, 223, 223, 223, 64, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 64, 223, 223, 223, 222, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 221, 222, 222, 222, 63, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 215, 215, 0, 208, 208, 208, 11, 222, 222, 222, 124, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 222, 222, 222, 124, 208, 208, 208, 11, 215, 215, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 208, 208, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 208, 208, 208, 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=80] -flags = 0 -flags = 0 -image = SubResource( 198 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=81] +[sub_resource type="StyleBoxFlat" id="81"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.397059, 0.341176, 0.461765, 1 ) +bg_color = Color(0.397059, 0.341176, 0.461765, 1) -[sub_resource type="StyleBoxFlat" id=82] +[sub_resource type="StyleBoxFlat" id="82"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.397059, 0.341176, 0.461765, 1 ) +bg_color = Color(0.397059, 0.341176, 0.461765, 1) -[sub_resource type="StyleBoxFlat" id=83] +[sub_resource type="StyleBoxFlat" id="83"] content_margin_left = 0.0 -content_margin_right = 0.0 content_margin_top = 2.0 +content_margin_right = 0.0 content_margin_bottom = 2.0 -bg_color = Color( 0.0980392, 0.0607843, 0.141176, 1 ) +bg_color = Color(0.0980392, 0.0607843, 0.141176, 1) -[sub_resource type="Image" id=199] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 64, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=85] -flags = 0 -flags = 0 -image = SubResource( 199 ) -size = Vector2( 8, 64 ) - -[sub_resource type="StyleBoxTexture" id=86] -texture = SubResource( 19 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=87] +[sub_resource type="StyleBoxFlat" id="87"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 ) +bg_color = Color(0.147059, 0.0911765, 0.211765, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.0980392, 0.0607843, 0.141176, 1 ) +border_color = Color(0.0980392, 0.0607843, 0.141176, 1) -[sub_resource type="StyleBoxFlat" id=88] +[sub_resource type="StyleBoxFlat" id="88"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(0.196078, 0.121569, 0.282353, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.497549, 0.45098, 0.551471, 1 ) +border_color = Color(0.497549, 0.45098, 0.551471, 1) -[sub_resource type="StyleBoxFlat" id=89] +[sub_resource type="StyleBoxFlat" id="89"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(0.196078, 0.121569, 0.282353, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 0.2 ) +border_color = Color(1, 1, 1, 0.2) -[sub_resource type="StyleBoxFlat" id=90] +[sub_resource type="StyleBoxFlat" id="90"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.2 ) -border_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(1, 1, 1, 0.2) +border_color = Color(0.196078, 0.121569, 0.282353, 1) -[sub_resource type="StyleBoxFlat" id=91] +[sub_resource type="StyleBoxFlat" id="91"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.2 ) -border_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(1, 1, 1, 0.2) +border_color = Color(0.196078, 0.121569, 0.282353, 1) -[sub_resource type="StyleBoxEmpty" id=92] +[sub_resource type="StyleBoxEmpty" id="92"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -[sub_resource type="Image" id=200] -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, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} +[sub_resource type="StyleBoxFlat" id="3"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.147059, 0.0911765, 0.211765, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.662745, 0, 1, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=94] -flags = 0 -flags = 0 -image = SubResource( 200 ) -size = Vector2( 16, 16 ) +[sub_resource type="StyleBoxFlat" id="5"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.147059, 0.0911765, 0.211765, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.122549, 0.0759804, 0.176471, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="Image" id=201] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 121, 255, 255, 255, 151, 255, 255, 255, 15, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 149, 255, 255, 255, 125, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 142, 255, 255, 255, 199, 255, 255, 255, 163, 255, 255, 255, 15, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 160, 255, 255, 255, 199, 255, 255, 255, 144, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 163, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 15, 255, 255, 255, 14, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 166, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 165, 255, 255, 255, 199, 255, 255, 255, 161, 255, 255, 255, 159, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 166, 255, 255, 255, 199, 255, 255, 255, 199, 255, 255, 255, 167, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 155, 255, 255, 255, 157, 255, 255, 255, 18, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} +[sub_resource type="StyleBoxFlat" id="2"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.176471, 0.109412, 0.254118, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.137255, 0.085098, 0.197647, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="ImageTexture" id=96] -flags = 0 -flags = 0 -image = SubResource( 201 ) -size = Vector2( 12, 12 ) +[sub_resource type="StyleBoxFlat" id="4"] +content_margin_left = 6.0 +content_margin_top = 4.0 +content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.147059, 0.0911765, 0.211765, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.397059, 0.341176, 0.461765, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=98] +[sub_resource type="StyleBoxFlat" id="6"] content_margin_left = 6.0 +content_margin_top = 4.0 content_margin_right = 6.0 +content_margin_bottom = 4.0 +bg_color = Color(0.147059, 0.0911765, 0.211765, 1) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.662745, 0, 1, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 + +[sub_resource type="StyleBoxFlat" id="98"] +content_margin_left = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.14902, 0.0901961, 0.211765, 1 ) +bg_color = Color(0.14902, 0.0901961, 0.211765, 1) -[sub_resource type="StyleBoxFlat" id=99] +[sub_resource type="StyleBoxFlat" id="99"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 2.0 +content_margin_right = 2.0 content_margin_bottom = 2.0 -bg_color = Color( 0.101961, 0.054902, 0.168627, 1 ) +bg_color = Color(0.101961, 0.054902, 0.168627, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="StyleBoxFlat" id=100] +[sub_resource type="StyleBoxFlat" id="100"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(0.196078, 0.121569, 0.282353, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.397059, 0.341176, 0.461765, 1 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(0.397059, 0.341176, 0.461765, 1) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="Image" id=202] -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, 222, 222, 222, 0, 223, 223, 223, 0, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 197, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 190, 223, 223, 223, 254, 223, 223, 223, 210, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 222, 222, 222, 207, 223, 223, 223, 254, 223, 223, 223, 209, 218, 218, 218, 21, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 217, 217, 217, 0, 214, 214, 214, 19, 223, 223, 223, 208, 223, 223, 223, 254, 223, 223, 223, 209, 214, 214, 214, 19, 214, 214, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 196, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 197, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 215, 215, 215, 0, 214, 214, 214, 19, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 206, 223, 223, 223, 254, 223, 223, 223, 212, 218, 218, 218, 21, 218, 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 189, 223, 223, 223, 254, 223, 223, 223, 212, 220, 220, 220, 22, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 176, 222, 222, 222, 198, 221, 221, 221, 23, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=102] -flags = 0 -flags = 0 -image = SubResource( 202 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=203] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 31, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 222, 222, 222, 31, 222, 222, 222, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 178, 223, 223, 223, 254, 223, 223, 223, 81, 213, 213, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 213, 213, 0, 223, 223, 223, 81, 223, 223, 223, 254, 223, 223, 223, 177, 223, 223, 223, 0, 221, 221, 221, 0, 221, 221, 221, 84, 223, 223, 223, 254, 223, 223, 223, 204, 204, 204, 204, 5, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 204, 204, 204, 5, 223, 223, 223, 204, 223, 223, 223, 254, 221, 221, 221, 84, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 1, 223, 223, 223, 209, 223, 223, 223, 254, 223, 223, 223, 176, 204, 204, 204, 5, 213, 213, 213, 0, 220, 220, 220, 0, 220, 220, 220, 0, 213, 213, 213, 0, 204, 204, 204, 5, 223, 223, 223, 176, 223, 223, 223, 254, 223, 223, 223, 209, 0, 0, 0, 1, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 210, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 213, 223, 223, 223, 88, 220, 220, 220, 22, 220, 220, 220, 22, 223, 223, 223, 88, 222, 222, 222, 214, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 210, 214, 214, 214, 19, 214, 214, 214, 0, 198, 198, 198, 0, 198, 198, 198, 9, 223, 223, 223, 194, 222, 222, 222, 214, 222, 222, 222, 215, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 215, 222, 222, 222, 214, 223, 223, 223, 194, 198, 198, 198, 9, 198, 198, 198, 0, 0, 0, 0, 0, 201, 201, 201, 0, 204, 204, 204, 10, 216, 216, 216, 20, 204, 204, 204, 5, 223, 223, 223, 105, 223, 223, 223, 187, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 187, 223, 223, 223, 105, 204, 204, 204, 5, 216, 216, 216, 20, 204, 204, 204, 10, 201, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 254, 223, 223, 223, 249, 223, 223, 223, 0, 223, 223, 223, 0, 204, 204, 204, 0, 216, 216, 216, 0, 204, 204, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 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=104] -flags = 0 -flags = 0 -image = SubResource( 203 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=204] -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, 219, 219, 219, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 220, 220, 220, 0, 219, 219, 219, 115, 223, 223, 223, 204, 223, 223, 223, 236, 223, 223, 223, 90, 223, 223, 223, 73, 220, 220, 220, 37, 221, 221, 221, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 217, 217, 0, 217, 217, 217, 47, 222, 222, 222, 222, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 16, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 218, 218, 218, 42, 222, 222, 222, 236, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 216, 216, 216, 33, 223, 223, 223, 88, 221, 221, 221, 100, 223, 223, 223, 89, 218, 218, 218, 14, 109, 109, 109, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 2, 223, 223, 223, 226, 223, 223, 223, 254, 223, 223, 223, 235, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 218, 218, 218, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 85, 0, 0, 0, 1, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 111, 223, 223, 223, 254, 223, 223, 223, 254, 222, 222, 222, 109, 217, 217, 217, 0, 221, 221, 221, 76, 223, 223, 223, 216, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 217, 217, 217, 34, 221, 221, 221, 100, 221, 221, 221, 100, 219, 219, 219, 36, 219, 219, 219, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 215, 215, 215, 32, 218, 218, 218, 0, 222, 222, 222, 215, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 223, 223, 223, 223, 254, 223, 223, 223, 254, 214, 214, 214, 25, 217, 217, 217, 0, 221, 221, 221, 216, 223, 223, 223, 254, 221, 221, 221, 100, 222, 222, 222, 78, 210, 210, 210, 0, 198, 198, 198, 9, 221, 221, 221, 100, 221, 221, 221, 100, 223, 223, 223, 82, 223, 223, 223, 0, 222, 222, 222, 0, 222, 222, 222, 117, 223, 223, 223, 254, 223, 223, 223, 254, 218, 218, 218, 106, 216, 216, 216, 0, 221, 221, 221, 76, 223, 223, 223, 217, 222, 222, 222, 78, 221, 221, 221, 23, 218, 218, 218, 0, 216, 216, 216, 33, 221, 221, 221, 100, 221, 221, 221, 100, 220, 220, 220, 37, 220, 220, 220, 0, 170, 170, 170, 0, 170, 170, 170, 3, 223, 223, 223, 233, 223, 223, 223, 254, 223, 223, 223, 234, 210, 210, 210, 23, 217, 217, 217, 0, 219, 219, 219, 0, 210, 210, 210, 0, 220, 220, 220, 0, 218, 218, 218, 7, 223, 223, 223, 88, 221, 221, 221, 100, 222, 222, 222, 87, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 195, 195, 195, 0, 221, 221, 221, 54, 223, 223, 223, 240, 223, 223, 223, 254, 223, 223, 223, 235, 220, 220, 220, 104, 215, 215, 215, 32, 198, 198, 198, 9, 223, 223, 223, 32, 223, 223, 223, 88, 221, 221, 221, 100, 221, 221, 221, 91, 223, 223, 223, 16, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 218, 218, 0, 215, 215, 215, 58, 222, 222, 222, 229, 223, 223, 223, 254, 223, 223, 223, 254, 223, 223, 223, 251, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 85, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 171, 171, 0, 127, 127, 127, 2, 223, 223, 223, 121, 223, 223, 223, 208, 223, 223, 223, 237, 221, 221, 221, 91, 223, 223, 223, 74, 221, 221, 221, 38, 0, 0, 0, 1, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=106] -flags = 0 -flags = 0 -image = SubResource( 204 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=107] +[sub_resource type="StyleBoxFlat" id="107"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 ) -border_color = Color( 0.122549, 0.0759804, 0.176471, 1 ) +bg_color = Color(0.147059, 0.0911765, 0.211765, 1) +border_color = Color(0.122549, 0.0759804, 0.176471, 1) -[sub_resource type="StyleBoxLine" id=108] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="108"] +color = Color(1, 1, 1, 0.1) grow_begin = 7.0 -[sub_resource type="StyleBoxLine" id=109] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="109"] +color = Color(1, 1, 1, 0.1) grow_end = 7.0 -[sub_resource type="StyleBoxLine" id=110] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="110"] +color = Color(1, 1, 1, 0.1) grow_begin = 7.0 grow_end = 7.0 -[sub_resource type="Image" id=205] -data = { -"data": PoolByteArray( 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 77, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23, 222, 222, 222, 78, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 78, 221, 221, 221, 23 ), -"format": "RGBA8", -"height": 16, -"mipmaps": false, -"width": 16 -} - -[sub_resource type="ImageTexture" id=112] -flags = 0 -flags = 0 -image = SubResource( 205 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=113] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 112 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 4.0 -margin_right = 4.0 -margin_top = 4.0 -margin_bottom = 4.0 - -[sub_resource type="Image" id=206] -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, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 70, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 221, 221, 221, 100, 222, 222, 222, 70, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=115] -flags = 0 -flags = 0 -image = SubResource( 206 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=116] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 1.0 -content_margin_bottom = 1.0 -texture = SubResource( 115 ) -region_rect = Rect2( 0, 0, 16, 16 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxFlat" id=117] +[sub_resource type="StyleBoxFlat" id="117"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.122549, 0.0759804, 0.176471, 1 ) +bg_color = Color(0.122549, 0.0759804, 0.176471, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.122549, 0.0759804, 0.176471, 1 ) +border_color = Color(0.122549, 0.0759804, 0.176471, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.3 ) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="StyleBoxEmpty" id=118] +[sub_resource type="StyleBoxEmpty" id="118"] -[sub_resource type="StyleBoxFlat" id=1] -bg_color = Color( 0.204595, 0.1247, 0.29, 1 ) +[sub_resource type="StyleBoxFlat" id="1"] +bg_color = Color(0.204595, 0.1247, 0.29, 1) corner_radius_top_left = 2 corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[sub_resource type="Image" id=207] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 152, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 143, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 216, 216, 216, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 164, 222, 222, 222, 199, 222, 222, 222, 143, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 138, 223, 223, 223, 145, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 145, 223, 223, 223, 138, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 124, 223, 223, 223, 152, 221, 221, 221, 15, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 153, 222, 222, 222, 125, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 142, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 0, 221, 221, 221, 0, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 222, 222, 222, 142, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 16, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 221, 221, 221, 15, 221, 221, 221, 15, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 163, 223, 223, 223, 16, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 216, 216, 0, 210, 210, 210, 17, 223, 223, 223, 163, 222, 222, 222, 199, 223, 223, 223, 161, 223, 223, 223, 162, 222, 222, 222, 199, 223, 223, 223, 163, 210, 210, 210, 17, 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 222, 222, 222, 165, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 164, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 210, 210, 210, 17, 223, 223, 223, 154, 223, 223, 223, 154, 210, 210, 210, 17, 210, 210, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, 0, 223, 223, 223, 0, 223, 223, 223, 0, 210, 210, 210, 0, 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=120] -flags = 0 -flags = 0 -image = SubResource( 207 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=208] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 220, 220, 220, 44, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 216, 216, 216, 33, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 219, 219, 219, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 218, 218, 218, 42, 221, 221, 221, 54, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=122] -flags = 0 -flags = 0 -image = SubResource( 208 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=209] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 223, 223, 223, 57, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 219, 219, 219, 43, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 219, 219, 219, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 221, 221, 221, 54, 222, 222, 222, 70, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=124] -flags = 0 -flags = 0 -image = SubResource( 209 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=210] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 222, 222, 222, 0, 221, 221, 221, 77, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 221, 221, 221, 77, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 212, 212, 0, 212, 212, 212, 18, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 220, 220, 220, 44, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 74, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 219, 219, 219, 43, 221, 221, 221, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 74, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 136, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 216, 216, 216, 33, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 136, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 180, 223, 223, 223, 32, 219, 219, 219, 0, 220, 220, 220, 44, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 179, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 221, 221, 221, 0, 219, 219, 219, 43, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 140, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 181, 223, 223, 223, 32, 223, 223, 223, 0, 223, 223, 223, 32, 222, 222, 222, 181, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 139, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 76, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 220, 220, 220, 44, 221, 221, 221, 0, 223, 223, 223, 32, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 75, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 221, 221, 221, 54, 218, 218, 218, 42, 223, 223, 223, 180, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 19, 223, 223, 223, 145, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 222, 222, 222, 199, 223, 223, 223, 145, 212, 212, 212, 18, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 222, 222, 222, 78, 223, 223, 223, 138, 223, 223, 223, 178, 223, 223, 223, 178, 223, 223, 223, 138, 222, 222, 222, 78, 222, 222, 222, 0, 212, 212, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=126] -flags = 0 -flags = 0 -image = SubResource( 210 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=211] -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, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 222, 222, 222, 0, 221, 221, 221, 99, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 99, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 24, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 223, 223, 223, 57, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 95, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 56, 220, 220, 220, 0, 218, 218, 218, 42, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 95, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 175, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 232, 218, 218, 218, 42, 218, 218, 218, 0, 219, 219, 219, 43, 223, 223, 223, 233, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 175, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 225, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 231, 218, 218, 218, 42, 220, 220, 220, 0, 223, 223, 223, 57, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 230, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 219, 219, 219, 0, 223, 223, 223, 56, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 225, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 180, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 233, 218, 218, 218, 42, 218, 218, 218, 0, 218, 218, 218, 42, 223, 223, 223, 232, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 179, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 98, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 57, 220, 220, 220, 0, 218, 218, 218, 42, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 97, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 187, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 70, 222, 222, 222, 55, 222, 222, 222, 231, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 187, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 214, 214, 214, 25, 223, 223, 223, 186, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 186, 223, 223, 223, 24, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 214, 0, 222, 222, 222, 0, 221, 221, 221, 100, 223, 223, 223, 178, 223, 223, 223, 229, 223, 223, 223, 229, 223, 223, 223, 178, 221, 221, 221, 100, 222, 222, 222, 0, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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=128] -flags = 0 -flags = 0 -image = SubResource( 211 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=212] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 78, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 78, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 78, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 23, 255, 255, 255, 79, 255, 255, 255, 78, 255, 255, 255, 23, 255, 255, 255, 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=130] -flags = 0 -flags = 0 -image = SubResource( 212 ) -size = Vector2( 16, 16 ) - -[sub_resource type="Image" id=213] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 223, 223, 223, 0, 223, 223, 223, 0, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 201, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 222, 222, 0, 222, 222, 222, 199, 224, 224, 224, 255, 224, 224, 224, 255, 222, 222, 222, 199, 222, 222, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, 223, 223, 0, 223, 223, 223, 200, 224, 224, 224, 255, 224, 224, 224, 255, 223, 223, 223, 200, 223, 223, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 221, 0, 221, 221, 221, 60, 223, 223, 223, 202, 223, 223, 223, 201, 221, 221, 221, 60, 221, 221, 221, 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=132] -flags = 0 -flags = 0 -image = SubResource( 213 ) -size = Vector2( 16, 16 ) - -[sub_resource type="StyleBoxFlat" id=133] -content_margin_left = 5.0 -content_margin_right = 5.0 +[sub_resource type="StyleBoxFlat" id="134"] +content_margin_left = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(0.147059, 0.0911765, 0.211765, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_width_bottom = 1 -border_color = Color( 0.0980392, 0.0607843, 0.141176, 1 ) +border_color = Color(0.122549, 0.0759804, 0.176471, 1) +expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=134] +[sub_resource type="StyleBoxFlat" id="135"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.147059, 0.0911765, 0.211765, 1 ) +bg_color = Color(0.176471, 0.109412, 0.254118, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.122549, 0.0759804, 0.176471, 1 ) +border_color = Color(0.137255, 0.085098, 0.197647, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=135] +[sub_resource type="StyleBoxFlat" id="136"] content_margin_left = 10.0 -content_margin_right = 10.0 content_margin_top = 5.0 +content_margin_right = 10.0 content_margin_bottom = 5.0 -bg_color = Color( 0.176471, 0.109412, 0.254118, 1 ) +bg_color = Color(0.196078, 0.121569, 0.282353, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.137255, 0.085098, 0.197647, 1 ) +border_color = Color(0.0980392, 0.0607843, 0.141176, 1) expand_margin_bottom = 1.0 -[sub_resource type="StyleBoxFlat" id=136] -content_margin_left = 10.0 -content_margin_right = 10.0 +[sub_resource type="StyleBoxFlat" id="133"] +content_margin_left = 5.0 content_margin_top = 5.0 +content_margin_right = 5.0 content_margin_bottom = 5.0 -bg_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(0.196078, 0.121569, 0.282353, 1) border_width_left = 1 border_width_top = 1 border_width_right = 1 -border_color = Color( 0.0980392, 0.0607843, 0.141176, 1 ) -expand_margin_bottom = 1.0 - -[sub_resource type="Image" id=214] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 72, 255, 255, 255, 56, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 72, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=138] -flags = 0 -flags = 0 -image = SubResource( 214 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=215] -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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 7, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 7, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 81, 255, 255, 255, 7, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 8, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 82, 255, 255, 255, 100, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 81, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 100, 255, 255, 255, 82, 255, 255, 255, 8, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 56, 255, 255, 255, 72, 255, 255, 255, 8, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 12, -"mipmaps": false, -"width": 12 -} - -[sub_resource type="ImageTexture" id=140] -flags = 0 -flags = 0 -image = SubResource( 215 ) -size = Vector2( 12, 12 ) - -[sub_resource type="Image" id=216] -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, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 13, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 49, 255, 255, 255, 49, 255, 255, 255, 13, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 14, 255, 255, 255, 14, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=142] -flags = 0 -flags = 0 -image = SubResource( 216 ) -size = Vector2( 8, 8 ) - -[sub_resource type="Image" id=217] -data = { -"data": PoolByteArray( 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 3, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 40, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 4, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 0, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 38, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 37, 255, 255, 255, 50, 255, 255, 255, 41, 255, 255, 255, 4, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50, 255, 255, 255, 35, 255, 255, 255, 38, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 50, 255, 255, 255, 50 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=144] -flags = 0 -flags = 0 -image = SubResource( 217 ) -size = Vector2( 8, 8 ) +border_width_bottom = 1 +border_color = Color(0.0980392, 0.0607843, 0.141176, 1) -[sub_resource type="StyleBoxFlat" id=145] +[sub_resource type="StyleBoxFlat" id="145"] content_margin_left = 1.0 -content_margin_right = 1.0 content_margin_top = 1.0 +content_margin_right = 1.0 content_margin_bottom = 1.0 -bg_color = Color( 1, 1, 1, 0.9 ) +bg_color = Color(1, 1, 1, 0.9) border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 1, 1, 1, 1 ) -shadow_color = Color( 0, 0, 0, 0.3 ) +border_color = Color(1, 1, 1, 1) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 -[sub_resource type="StyleBoxFlat" id=97] +[sub_resource type="StyleBoxFlat" id="97"] content_margin_left = 6.0 -content_margin_right = 6.0 content_margin_top = 4.0 +content_margin_right = 6.0 content_margin_bottom = 4.0 -bg_color = Color( 0.04202, 0.0252, 0.06, 1 ) - -[sub_resource type="Image" id=218] -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, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 84, 255, 255, 255, 108, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 108, 255, 255, 255, 84, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 100, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 100, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 109, 255, 255, 255, 108, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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 ), -"format": "RGBA8", -"height": 14, -"mipmaps": false, -"width": 14 -} - -[sub_resource type="ImageTexture" id=147] -flags = 0 -flags = 0 -image = SubResource( 218 ) -size = Vector2( 14, 14 ) - -[sub_resource type="Image" id=219] -data = { -"data": PoolByteArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 11, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 113, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 113, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 105, 255, 255, 255, 114, 255, 255, 255, 11, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 11, 255, 255, 255, 115, 255, 255, 255, 105, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 114, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 11, 255, 255, 255, 11, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 114, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 122, 255, 255, 255, 122, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 123, 255, 255, 255, 150, 255, 255, 255, 150, 255, 255, 255, 123, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 12, 255, 255, 255, 116, 255, 255, 255, 115, 255, 255, 255, 12, 255, 255, 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, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ), -"format": "RGBA8", -"height": 14, -"mipmaps": false, -"width": 14 -} - -[sub_resource type="ImageTexture" id=149] -flags = 0 -flags = 0 -image = SubResource( 219 ) -size = Vector2( 14, 14 ) +bg_color = Color(0.04202, 0.0252, 0.06, 1) -[sub_resource type="StyleBoxFlat" id=150] +[sub_resource type="StyleBoxFlat" id="150"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.397059, 0.341176, 0.461765, 1 ) -border_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(0.397059, 0.341176, 0.461765, 1) +border_color = Color(0.196078, 0.121569, 0.282353, 1) -[sub_resource type="StyleBoxFlat" id=151] +[sub_resource type="StyleBoxFlat" id="151"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(0.196078, 0.121569, 0.282353, 1) draw_center = false border_width_left = 1 border_width_top = 1 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.397059, 0.341176, 0.461765, 1 ) +border_color = Color(0.397059, 0.341176, 0.461765, 1) -[sub_resource type="StyleBoxEmpty" id=152] +[sub_resource type="StyleBoxEmpty" id="152"] -[sub_resource type="StyleBoxEmpty" id=153] +[sub_resource type="StyleBoxEmpty" id="153"] -[sub_resource type="StyleBoxFlat" id=154] +[sub_resource type="StyleBoxFlat" id="154"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 1, 1, 1, 0.08 ) -border_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(1, 1, 1, 0.08) +border_color = Color(0.196078, 0.121569, 0.282353, 1) -[sub_resource type="StyleBoxFlat" id=155] +[sub_resource type="StyleBoxFlat" id="155"] content_margin_left = 4.0 -content_margin_right = 4.0 content_margin_top = 4.0 +content_margin_right = 4.0 content_margin_bottom = 4.0 -bg_color = Color( 0.0980392, 0.0607843, 0.141176, 1 ) -border_color = Color( 0.196078, 0.121569, 0.282353, 1 ) - -[sub_resource type="StyleBoxTexture" id=156] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 64 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 - -[sub_resource type="StyleBoxTexture" id=157] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 67 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=158] -content_margin_left = 2.0 -content_margin_right = 2.0 -content_margin_top = 2.0 -content_margin_bottom = 2.0 -texture = SubResource( 70 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 6.0 -margin_right = 6.0 -margin_top = 6.0 -margin_bottom = 6.0 +bg_color = Color(0.0980392, 0.0607843, 0.141176, 1) +border_color = Color(0.196078, 0.121569, 0.282353, 1) -[sub_resource type="StyleBoxTexture" id=159] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 73 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxTexture" id=160] -content_margin_left = 0.0 -content_margin_right = 0.0 -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = SubResource( 73 ) -region_rect = Rect2( 0, 0, 12, 12 ) -margin_left = 5.0 -margin_right = 5.0 -margin_top = 5.0 -margin_bottom = 5.0 - -[sub_resource type="StyleBoxLine" id=161] -color = Color( 1, 1, 1, 0.1 ) +[sub_resource type="StyleBoxLine" id="161"] +color = Color(1, 1, 1, 0.1) grow_begin = 0.0 grow_end = 0.0 vertical = true -[sub_resource type="StyleBoxFlat" id=162] +[sub_resource type="StyleBoxFlat" id="162"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.396078, 0.341176, 0.462745, 1 ) +bg_color = Color(0.396078, 0.341176, 0.462745, 1) -[sub_resource type="StyleBoxFlat" id=163] +[sub_resource type="StyleBoxFlat" id="163"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.397059, 0.341176, 0.461765, 1 ) +bg_color = Color(0.397059, 0.341176, 0.461765, 1) -[sub_resource type="StyleBoxFlat" id=164] +[sub_resource type="StyleBoxFlat" id="164"] content_margin_left = 2.0 -content_margin_right = 2.0 content_margin_top = 0.0 +content_margin_right = 2.0 content_margin_bottom = 0.0 -bg_color = Color( 0.0980392, 0.0588235, 0.141176, 1 ) - -[sub_resource type="Image" id=220] -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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 49, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 100, 255, 255, 255, 49, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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": 8, -"mipmaps": false, -"width": 64 -} - -[sub_resource type="ImageTexture" id=166] -flags = 0 -flags = 0 -image = SubResource( 220 ) -size = Vector2( 64, 8 ) +bg_color = Color(0.0980392, 0.0588235, 0.141176, 1) -[sub_resource type="Image" id=221] -data = { -"data": PoolByteArray( 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24, 0, 0, 0, 24 ), -"format": "RGBA8", -"height": 8, -"mipmaps": false, -"width": 8 -} - -[sub_resource type="ImageTexture" id=168] -flags = 0 -flags = 0 -image = SubResource( 221 ) -size = Vector2( 8, 8 ) - -[sub_resource type="StyleBoxTexture" id=169] -texture = SubResource( 168 ) -region_rect = Rect2( 0, 0, 8, 8 ) -margin_left = 1.0 -margin_right = 1.0 -margin_top = 1.0 -margin_bottom = 1.0 - -[sub_resource type="StyleBoxFlat" id=170] +[sub_resource type="StyleBoxFlat" id="170"] content_margin_left = 8.0 -content_margin_right = 8.0 content_margin_top = 8.0 +content_margin_right = 8.0 content_margin_bottom = 8.0 -bg_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +bg_color = Color(0.196078, 0.121569, 0.282353, 1) border_width_left = 1 border_width_top = 24 border_width_right = 1 border_width_bottom = 1 -border_color = Color( 0.196078, 0.121569, 0.282353, 1 ) +border_color = Color(0.196078, 0.121569, 0.282353, 1) expand_margin_top = 24.0 -shadow_color = Color( 0, 0, 0, 0.3 ) +shadow_color = Color(0, 0, 0, 0.3) shadow_size = 4 [resource] resource_name = "Purple" -default_font = ExtResource( 1 ) +default_font = ExtResource("7_0f141") +default_font_size = 16 BoxContainer/constants/separation = 4 -Button/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -Button/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -Button/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 ) -Button/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 ) -Button/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) -Button/colors/icon_color_pressed = Color( 0.762157, 0, 1.15, 1 ) -Button/styles/disabled = SubResource( 2 ) -Button/styles/focus = SubResource( 3 ) -Button/styles/hover = SubResource( 4 ) -Button/styles/normal = SubResource( 5 ) -Button/styles/pressed = SubResource( 6 ) -CheckBox/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -CheckBox/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -CheckBox/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 ) -CheckBox/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 ) -CheckBox/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +Button/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +Button/colors/font_color_disabled = Color(1, 1, 1, 0.3) +Button/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1) +Button/colors/font_color_pressed = Color(0.662745, 0, 1, 1) +Button/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) +Button/colors/icon_color_pressed = Color(0.762157, 0, 1.15, 1) +Button/styles/disabled = SubResource("22") +Button/styles/focus = SubResource("22") +Button/styles/hover = SubResource("22") +Button/styles/normal = SubResource("22") +Button/styles/pressed = SubResource("22") +CheckBox/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +CheckBox/colors/font_color_disabled = Color(1, 1, 1, 0.3) +CheckBox/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1) +CheckBox/colors/font_color_pressed = Color(0.662745, 0, 1, 1) +CheckBox/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) CheckBox/constants/check_vadjust = 0 CheckBox/constants/hseparation = 4 -CheckBox/icons/checked = SubResource( 8 ) -CheckBox/icons/radio_checked = SubResource( 10 ) -CheckBox/icons/radio_unchecked = SubResource( 12 ) -CheckBox/icons/unchecked = SubResource( 14 ) -CheckBox/styles/disabled = SubResource( 15 ) -CheckBox/styles/hover = SubResource( 15 ) -CheckBox/styles/normal = SubResource( 15 ) -CheckBox/styles/pressed = SubResource( 15 ) -CheckButton/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -CheckButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -CheckButton/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 ) -CheckButton/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 ) -CheckButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +CheckBox/styles/disabled = SubResource("15") +CheckBox/styles/hover = SubResource("15") +CheckBox/styles/normal = SubResource("15") +CheckBox/styles/pressed = SubResource("15") +CheckButton/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +CheckButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +CheckButton/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1) +CheckButton/colors/font_color_pressed = Color(0.662745, 0, 1, 1) +CheckButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) CheckButton/constants/check_vadjust = 0 CheckButton/constants/hseparation = 4 -CheckButton/icons/off = SubResource( 17 ) -CheckButton/icons/off_disabled = SubResource( 19 ) -CheckButton/icons/on = SubResource( 21 ) -CheckButton/icons/on_disabled = SubResource( 19 ) -CheckButton/styles/disabled = SubResource( 22 ) -CheckButton/styles/hover = SubResource( 22 ) -CheckButton/styles/normal = SubResource( 22 ) -CheckButton/styles/pressed = SubResource( 22 ) -CollapsibleContainer/icons/arrow_normal = ExtResource( 6 ) +CheckButton/styles/disabled = SubResource("22") +CheckButton/styles/hover = SubResource("22") +CheckButton/styles/normal = SubResource("22") +CheckButton/styles/pressed = SubResource("22") +CollapsibleContainer/icons/arrow_normal = ExtResource("6") ColorPicker/constants/h_width = 30 ColorPicker/constants/label_width = 10 ColorPicker/constants/margin = 8 ColorPicker/constants/sv_height = 256 ColorPicker/constants/sv_width = 256 -ColorPicker/icons/add_preset = SubResource( 24 ) -ColorPicker/icons/overbright_indicator = SubResource( 26 ) -ColorPicker/icons/preset_bg = SubResource( 28 ) -ColorPicker/icons/screen_picker = SubResource( 30 ) -ColorPickerButton/icons/bg = SubResource( 28 ) -FileDialog/colors/files_disabled = Color( 1, 1, 1, 0.3 ) -FileDialog/colors/folder_icon_modulate = Color( 0.763922, 0.3, 1, 1 ) -FileDialog/icons/folder = SubResource( 32 ) -FileDialog/icons/parent_folder = SubResource( 34 ) -FileDialog/icons/reload = SubResource( 36 ) -FileDialog/icons/toggle_hidden = SubResource( 38 ) -GraphEdit/colors/activity = Color( 0.662745, 0, 1, 1 ) -GraphEdit/colors/grid_major = Color( 1, 1, 1, 0.15 ) -GraphEdit/colors/grid_minor = Color( 1, 1, 1, 0.07 ) -GraphEdit/colors/selection_fill = Color( 0.662745, 0, 1, 0.3 ) -GraphEdit/colors/selection_stroke = Color( 0.662745, 0, 1, 0.8 ) +FileDialog/colors/files_disabled = Color(1, 1, 1, 0.3) +FileDialog/colors/folder_icon_modulate = Color(0.763922, 0.3, 1, 1) +GraphEdit/colors/activity = Color(0.662745, 0, 1, 1) +GraphEdit/colors/grid_major = Color(1, 1, 1, 0.15) +GraphEdit/colors/grid_minor = Color(1, 1, 1, 0.07) +GraphEdit/colors/selection_fill = Color(0.662745, 0, 1, 0.3) +GraphEdit/colors/selection_stroke = Color(0.662745, 0, 1, 0.8) GraphEdit/constants/bezier_len_neg = 160 GraphEdit/constants/bezier_len_pos = 80 -GraphEdit/icons/minus = SubResource( 40 ) -GraphEdit/icons/more = SubResource( 42 ) -GraphEdit/icons/reset = SubResource( 44 ) -GraphEdit/icons/snap = SubResource( 46 ) -GraphEdit/styles/bg = SubResource( 47 ) -GraphNode/colors/close_color = Color( 1, 1, 1, 0.7 ) -GraphNode/colors/resizer_color = Color( 1, 1, 1, 0.7 ) -GraphNode/colors/title_color = Color( 1, 1, 1, 1 ) +GraphEdit/styles/bg = SubResource("47") +GraphNode/colors/close_color = Color(1, 1, 1, 0.7) +GraphNode/colors/resizer_color = Color(1, 1, 1, 0.7) +GraphNode/colors/title_color = Color(1, 1, 1, 1) GraphNode/constants/close_h_offset = 20 GraphNode/constants/close_offset = 20 GraphNode/constants/port_offset = 14 GraphNode/constants/separation = 1 GraphNode/constants/title_h_offset = -16 GraphNode/constants/title_offset = 20 -GraphNode/icons/close = SubResource( 49 ) -GraphNode/icons/port = SubResource( 51 ) -GraphNode/icons/resizer = SubResource( 53 ) -GraphNode/styles/breakpoint = SubResource( 54 ) -GraphNode/styles/comment = SubResource( 55 ) -GraphNode/styles/commentfocus = SubResource( 56 ) -GraphNode/styles/frame = SubResource( 57 ) -GraphNode/styles/position = SubResource( 58 ) -GraphNode/styles/selectedframe = SubResource( 59 ) -GraphNode/styles/state_machine_frame = SubResource( 60 ) -GraphNode/styles/state_machine_selectedframe = SubResource( 61 ) +GraphNode/styles/breakpoint = SubResource("54") +GraphNode/styles/comment = SubResource("55") +GraphNode/styles/commentfocus = SubResource("56") +GraphNode/styles/frame = SubResource("57") +GraphNode/styles/position = SubResource("58") +GraphNode/styles/selectedframe = SubResource("59") +GraphNode/styles/state_machine_frame = SubResource("60") +GraphNode/styles/state_machine_selectedframe = SubResource("61") GridContainer/constants/hseparation = 4 GridContainer/constants/vseparation = 4 HBoxContainer/constants/separation = 4 -HScrollBar/icons/decrement = SubResource( 62 ) -HScrollBar/icons/decrement_highlight = SubResource( 62 ) -HScrollBar/icons/increment = SubResource( 62 ) -HScrollBar/icons/increment_highlight = SubResource( 62 ) -HScrollBar/styles/grabber = SubResource( 65 ) -HScrollBar/styles/grabber_highlight = SubResource( 68 ) -HScrollBar/styles/grabber_pressed = SubResource( 71 ) -HScrollBar/styles/scroll = SubResource( 74 ) -HScrollBar/styles/scroll_focus = SubResource( 75 ) -HSeparator/styles/separator = SubResource( 76 ) -HSlider/icons/grabber = SubResource( 78 ) -HSlider/icons/grabber_highlight = SubResource( 80 ) -HSlider/styles/grabber_area = SubResource( 81 ) -HSlider/styles/grabber_area_highlight = SubResource( 82 ) -HSlider/styles/slider = SubResource( 83 ) +HSeparator/styles/separator = SubResource("76") +HSlider/styles/grabber_area = SubResource("81") +HSlider/styles/grabber_area_highlight = SubResource("82") +HSlider/styles/slider = SubResource("83") HSplitContainer/constants/separation = 8 -HSplitContainer/icons/grabber = SubResource( 85 ) -HSplitContainer/styles/bg = SubResource( 86 ) -Header/base_type = "Label" -Header/colors/font_color = Color( 0.85098, 0.85098, 0.85098, 1 ) -Header/fonts/font = ExtResource( 2 ) -Icons/colors/modulate_color = Color( 0.74902, 0.74902, 0.74902, 1 ) -ItemList/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -ItemList/colors/font_color_selected = Color( 1, 1, 1, 1 ) -ItemList/colors/guide_color = Color( 1, 1, 1, 0.05 ) +Header/base_type = &"Label" +Header/colors/font_color = Color(0.85098, 0.85098, 0.85098, 1) +Icons/colors/modulate_color = Color(0.74902, 0.74902, 0.74902, 1) +ItemList/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +ItemList/colors/font_color_selected = Color(1, 1, 1, 1) +ItemList/colors/guide_color = Color(1, 1, 1, 0.05) ItemList/constants/hseparation = 3 ItemList/constants/icon_margin = 4 ItemList/constants/line_separation = 3 ItemList/constants/vseparation = 3 -ItemList/styles/bg = SubResource( 87 ) -ItemList/styles/bg_focus = SubResource( 88 ) -ItemList/styles/cursor = SubResource( 89 ) -ItemList/styles/cursor_unfocused = SubResource( 89 ) -ItemList/styles/selected = SubResource( 90 ) -ItemList/styles/selected_focus = SubResource( 91 ) -Label/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -Label/colors/font_color_shadow = Color( 0, 0, 0, 0 ) +ItemList/styles/bg = SubResource("87") +ItemList/styles/bg_focus = SubResource("88") +ItemList/styles/cursor = SubResource("89") +ItemList/styles/cursor_unfocused = SubResource("89") +ItemList/styles/selected = SubResource("90") +ItemList/styles/selected_focus = SubResource("91") +Label/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +Label/colors/font_color_shadow = Color(0, 0, 0, 0) Label/constants/line_spacing = 3 Label/constants/shadow_as_outline = 0 Label/constants/shadow_offset_x = 1 Label/constants/shadow_offset_y = 1 -Label/styles/normal = SubResource( 92 ) -LineEdit/colors/clear_button_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -LineEdit/colors/clear_button_color_pressed = Color( 0.662745, 0, 1, 1 ) -LineEdit/colors/cursor_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -LineEdit/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -LineEdit/colors/font_color_selected = Color( 1, 1, 1, 1 ) -LineEdit/colors/read_only = Color( 1, 1, 1, 0.3 ) -LineEdit/colors/selection_color = Color( 0.662745, 0, 1, 0.4 ) -LineEdit/icons/clear = SubResource( 94 ) -LineEdit/styles/focus = SubResource( 3 ) -LineEdit/styles/normal = SubResource( 5 ) -LineEdit/styles/read_only = SubResource( 2 ) -LinkButton/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -LinkButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -LinkButton/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 ) -LinkButton/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 ) -LinkButton/styles/focus = SubResource( 92 ) +Label/styles/normal = SubResource("92") +LineEdit/colors/clear_button_color = Color(0.79902, 0.780392, 0.820588, 1) +LineEdit/colors/clear_button_color_pressed = Color(0.662745, 0, 1, 1) +LineEdit/colors/cursor_color = Color(0.79902, 0.780392, 0.820588, 1) +LineEdit/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +LineEdit/colors/font_color_selected = Color(1, 1, 1, 1) +LineEdit/colors/read_only = Color(1, 1, 1, 0.3) +LineEdit/colors/selection_color = Color(0.662745, 0, 1, 0.4) +LineEdit/styles/focus = SubResource("3") +LineEdit/styles/normal = SubResource("5") +LineEdit/styles/read_only = SubResource("2") +LinkButton/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +LinkButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +LinkButton/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1) +LinkButton/colors/font_color_pressed = Color(0.662745, 0, 1, 1) +LinkButton/styles/focus = SubResource("92") MarginContainer/constants/margin_bottom = 0 MarginContainer/constants/margin_left = 0 MarginContainer/constants/margin_right = 0 MarginContainer/constants/margin_top = 0 -MenuButton/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -MenuButton/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 ) -MenuButton/styles/disabled = SubResource( 22 ) -MenuButton/styles/focus = SubResource( 22 ) -MenuButton/styles/hover = SubResource( 22 ) -MenuButton/styles/normal = SubResource( 22 ) -MenuButton/styles/pressed = SubResource( 22 ) -Misc/colors/clear_color = Color( 0.101961, 0.054902, 0.168627, 1 ) -OptionButton/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -OptionButton/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -OptionButton/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 ) -OptionButton/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 ) -OptionButton/colors/icon_color_hover = Color( 1.15, 1.15, 1.15, 1 ) +MenuButton/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +MenuButton/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1) +MenuButton/styles/disabled = SubResource("22") +MenuButton/styles/focus = SubResource("22") +MenuButton/styles/hover = SubResource("22") +MenuButton/styles/normal = SubResource("22") +MenuButton/styles/pressed = SubResource("22") +Misc/colors/clear_color = Color(0.101961, 0.054902, 0.168627, 1) +OptionButton/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +OptionButton/colors/font_color_disabled = Color(1, 1, 1, 0.3) +OptionButton/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1) +OptionButton/colors/font_color_pressed = Color(0.662745, 0, 1, 1) +OptionButton/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1) OptionButton/constants/arrow_margin = 4 OptionButton/constants/hseparation = 4 OptionButton/constants/modulate_arrow = 1 -OptionButton/icons/arrow = SubResource( 96 ) -OptionButton/styles/disabled = SubResource( 2 ) -OptionButton/styles/focus = SubResource( 3 ) -OptionButton/styles/hover = SubResource( 4 ) -OptionButton/styles/normal = SubResource( 5 ) -OptionButton/styles/pressed = SubResource( 6 ) -Panel/styles/panel = SubResource( 98 ) -PanelContainer/styles/panel = SubResource( 99 ) -PopupDialog/styles/panel = SubResource( 100 ) -PopupMenu/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -PopupMenu/colors/font_color_accel = Color( 1, 1, 1, 0.3 ) -PopupMenu/colors/font_color_disabled = Color( 1, 1, 1, 0.3 ) -PopupMenu/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 ) +OptionButton/styles/disabled = SubResource("2") +OptionButton/styles/focus = SubResource("3") +OptionButton/styles/hover = SubResource("4") +OptionButton/styles/normal = SubResource("5") +OptionButton/styles/pressed = SubResource("6") +Panel/styles/panel = SubResource("98") +PanelContainer/styles/panel = SubResource("99") +Popup/styles/panel = SubResource("100") +PopupMenu/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +PopupMenu/colors/font_color_accel = Color(1, 1, 1, 0.3) +PopupMenu/colors/font_color_disabled = Color(1, 1, 1, 0.3) +PopupMenu/colors/font_color_hover = Color(0.879412, 0.868235, 0.892353, 1) PopupMenu/constants/vseparation = 5 -PopupMenu/icons/checked = SubResource( 8 ) -PopupMenu/icons/radio_checked = SubResource( 10 ) -PopupMenu/icons/radio_unchecked = SubResource( 12 ) -PopupMenu/icons/submenu = SubResource( 102 ) -PopupMenu/icons/unchecked = SubResource( 14 ) -PopupMenu/icons/visibility_hidden = SubResource( 104 ) -PopupMenu/icons/visibility_visible = SubResource( 38 ) -PopupMenu/icons/visibility_xray = SubResource( 106 ) -PopupMenu/styles/disabled = SubResource( 22 ) -PopupMenu/styles/focus = SubResource( 22 ) -PopupMenu/styles/hover = SubResource( 107 ) -PopupMenu/styles/labeled_separator_left = SubResource( 108 ) -PopupMenu/styles/labeled_separator_right = SubResource( 109 ) -PopupMenu/styles/normal = SubResource( 22 ) -PopupMenu/styles/panel = SubResource( 100 ) -PopupMenu/styles/pressed = SubResource( 22 ) -PopupMenu/styles/separator = SubResource( 110 ) -PopupPanel/styles/panel = SubResource( 100 ) -ProgressBar/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -ProgressBar/styles/bg = SubResource( 113 ) -ProgressBar/styles/fg = SubResource( 116 ) -ProjectSettingsEditor/styles/panel = SubResource( 117 ) -RichTextLabel/colors/default_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -RichTextLabel/colors/font_color_shadow = Color( 0, 0, 0, 0 ) +PopupMenu/styles/disabled = SubResource("22") +PopupMenu/styles/focus = SubResource("22") +PopupMenu/styles/hover = SubResource("107") +PopupMenu/styles/labeled_separator_left = SubResource("108") +PopupMenu/styles/labeled_separator_right = SubResource("109") +PopupMenu/styles/normal = SubResource("22") +PopupMenu/styles/panel = SubResource("100") +PopupMenu/styles/pressed = SubResource("22") +PopupMenu/styles/separator = SubResource("110") +PopupPanel/styles/panel = SubResource("100") +ProgressBar/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +ProjectSettingsEditor/styles/panel = SubResource("117") +RichTextLabel/colors/default_color = Color(0.79902, 0.780392, 0.820588, 1) +RichTextLabel/colors/font_color_shadow = Color(0, 0, 0, 0) RichTextLabel/constants/shadow_as_outline = 0 RichTextLabel/constants/shadow_offset_x = 1 RichTextLabel/constants/shadow_offset_y = 1 -RichTextLabel/styles/focus = SubResource( 118 ) -RichTextLabel/styles/normal = SubResource( 47 ) -RulerButton/base_type = "Button" -RulerButton/styles/focus = SubResource( 1 ) -RulerButton/styles/hover = SubResource( 1 ) -RulerButton/styles/normal = SubResource( 1 ) -RulerButton/styles/pressed = SubResource( 1 ) -SpinBox/icons/updown = SubResource( 120 ) -TabContainer/colors/font_color_bg = Color( 1, 1, 1, 0.3 ) -TabContainer/colors/font_color_fg = Color( 0.79902, 0.780392, 0.820588, 1 ) +RichTextLabel/styles/focus = SubResource("118") +RichTextLabel/styles/normal = SubResource("47") +RulerButton/base_type = &"Button" +RulerButton/styles/focus = SubResource("1") +RulerButton/styles/hover = SubResource("1") +RulerButton/styles/normal = SubResource("1") +RulerButton/styles/pressed = SubResource("1") +TabBar/colors/font_color_bg = Color(1, 1, 1, 0.3) +TabBar/colors/font_color_fg = Color(0.79902, 0.780392, 0.820588, 1) +TabBar/constants/hseparation = 4 +TabBar/styles/button = SubResource("22") +TabBar/styles/button_pressed = SubResource("22") +TabBar/styles/tab_bg = SubResource("134") +TabBar/styles/tab_disabled = SubResource("135") +TabBar/styles/tab_fg = SubResource("136") +TabContainer/colors/font_color_bg = Color(1, 1, 1, 0.3) +TabContainer/colors/font_color_fg = Color(0.79902, 0.780392, 0.820588, 1) TabContainer/constants/side_margin = 0 -TabContainer/icons/decrement = SubResource( 122 ) -TabContainer/icons/decrement_highlight = SubResource( 124 ) -TabContainer/icons/increment = SubResource( 126 ) -TabContainer/icons/increment_highlight = SubResource( 128 ) -TabContainer/icons/menu = SubResource( 130 ) -TabContainer/icons/menu_highlight = SubResource( 132 ) -TabContainer/styles/panel = SubResource( 133 ) -TabContainer/styles/tab_bg = SubResource( 134 ) -TabContainer/styles/tab_disabled = SubResource( 135 ) -TabContainer/styles/tab_fg = SubResource( 136 ) -Tabs/colors/font_color_bg = Color( 1, 1, 1, 0.3 ) -Tabs/colors/font_color_fg = Color( 0.79902, 0.780392, 0.820588, 1 ) -Tabs/constants/hseparation = 4 -Tabs/icons/close = SubResource( 94 ) -Tabs/icons/decrement = SubResource( 122 ) -Tabs/icons/decrement_highlight = SubResource( 124 ) -Tabs/icons/increment = SubResource( 126 ) -Tabs/icons/increment_highlight = SubResource( 128 ) -Tabs/styles/button = SubResource( 22 ) -Tabs/styles/button_pressed = SubResource( 22 ) -Tabs/styles/tab_bg = SubResource( 134 ) -Tabs/styles/tab_disabled = SubResource( 135 ) -Tabs/styles/tab_fg = SubResource( 136 ) -TextEdit/colors/caret_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -TextEdit/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -TextEdit/colors/selection_color = Color( 0.662745, 0, 1, 0.4 ) -TextEdit/icons/fold = SubResource( 138 ) -TextEdit/icons/folded = SubResource( 140 ) -TextEdit/icons/space = SubResource( 142 ) -TextEdit/icons/tab = SubResource( 144 ) -TextEdit/styles/focus = SubResource( 4 ) -TextEdit/styles/normal = SubResource( 5 ) -TextEdit/styles/read_only = SubResource( 2 ) -ToolButton/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -ToolButton/colors/font_color_hover = Color( 0.879412, 0.868235, 0.892353, 1 ) -ToolButton/colors/font_color_pressed = Color( 0.662745, 0, 1, 1 ) -ToolButton/styles/disabled = SubResource( 22 ) -ToolButton/styles/focus = SubResource( 22 ) -ToolButton/styles/hover = SubResource( 22 ) -ToolButton/styles/normal = SubResource( 22 ) -ToolButton/styles/pressed = SubResource( 22 ) -TooltipLabel/colors/font_color = Color( 0.20098, 0.219608, 0.179412, 1 ) -TooltipLabel/colors/font_color_shadow = Color( 0, 0, 0, 0.1 ) -TooltipPanel/styles/panel = SubResource( 145 ) -TopMenuPanel/base_type = "Panel" -TopMenuPanel/styles/panel = SubResource( 97 ) -Tree/colors/custom_button_font_highlight = Color( 0.879412, 0.868235, 0.892353, 1 ) -Tree/colors/drop_position_color = Color( 0.662745, 0, 1, 1 ) -Tree/colors/font_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -Tree/colors/font_color_selected = Color( 1, 1, 1, 1 ) -Tree/colors/guide_color = Color( 1, 1, 1, 0.05 ) -Tree/colors/relationship_line_color = Color( 1, 1, 1, 0.1 ) -Tree/colors/title_button_color = Color( 0.79902, 0.780392, 0.820588, 1 ) +TabContainer/styles/panel = SubResource("133") +TabContainer/styles/tab_bg = SubResource("134") +TabContainer/styles/tab_disabled = SubResource("135") +TabContainer/styles/tab_fg = SubResource("136") +TextEdit/colors/caret_color = Color(0.79902, 0.780392, 0.820588, 1) +TextEdit/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +TextEdit/colors/selection_color = Color(0.662745, 0, 1, 0.4) +TextEdit/styles/focus = SubResource("4") +TextEdit/styles/normal = SubResource("5") +TextEdit/styles/read_only = SubResource("2") +TooltipLabel/colors/font_color = Color(0.20098, 0.219608, 0.179412, 1) +TooltipLabel/colors/font_color_shadow = Color(0, 0, 0, 0.1) +TooltipPanel/styles/panel = SubResource("145") +TopMenuPanel/base_type = &"Panel" +TopMenuPanel/styles/panel = SubResource("97") +Tree/colors/custom_button_font_highlight = Color(0.879412, 0.868235, 0.892353, 1) +Tree/colors/drop_position_color = Color(0.662745, 0, 1, 1) +Tree/colors/font_color = Color(0.79902, 0.780392, 0.820588, 1) +Tree/colors/font_color_selected = Color(1, 1, 1, 1) +Tree/colors/guide_color = Color(1, 1, 1, 0.05) +Tree/colors/relationship_line_color = Color(1, 1, 1, 0.1) +Tree/colors/title_button_color = Color(0.79902, 0.780392, 0.820588, 1) Tree/constants/button_margin = 4 Tree/constants/draw_guides = 0 Tree/constants/draw_relationship_lines = 1 @@ -1751,58 +750,37 @@ Tree/constants/item_margin = 12 Tree/constants/scroll_border = 40 Tree/constants/scroll_speed = 12 Tree/constants/vseparation = 4 -Tree/icons/arrow = SubResource( 138 ) -Tree/icons/arrow_collapsed = SubResource( 140 ) -Tree/icons/checked = SubResource( 8 ) -Tree/icons/select_arrow = SubResource( 147 ) -Tree/icons/unchecked = SubResource( 14 ) -Tree/icons/updown = SubResource( 149 ) -Tree/styles/bg = SubResource( 47 ) -Tree/styles/bg_focus = SubResource( 88 ) -Tree/styles/button_pressed = SubResource( 150 ) -Tree/styles/cursor = SubResource( 151 ) -Tree/styles/cursor_unfocused = SubResource( 151 ) -Tree/styles/custom_button = SubResource( 152 ) -Tree/styles/custom_button_hover = SubResource( 5 ) -Tree/styles/custom_button_pressed = SubResource( 153 ) -Tree/styles/hover = SubResource( 154 ) -Tree/styles/selected = SubResource( 90 ) -Tree/styles/selected_focus = SubResource( 91 ) -Tree/styles/title_button_hover = SubResource( 155 ) -Tree/styles/title_button_normal = SubResource( 155 ) -Tree/styles/title_button_pressed = SubResource( 155 ) +Tree/styles/bg = SubResource("47") +Tree/styles/bg_focus = SubResource("88") +Tree/styles/button_pressed = SubResource("150") +Tree/styles/cursor = SubResource("151") +Tree/styles/cursor_unfocused = SubResource("151") +Tree/styles/custom_button = SubResource("152") +Tree/styles/custom_button_hover = SubResource("5") +Tree/styles/custom_button_pressed = SubResource("153") +Tree/styles/hover = SubResource("154") +Tree/styles/selected = SubResource("90") +Tree/styles/selected_focus = SubResource("91") +Tree/styles/title_button_hover = SubResource("155") +Tree/styles/title_button_normal = SubResource("155") +Tree/styles/title_button_pressed = SubResource("155") VBoxContainer/constants/separation = 4 -VScrollBar/icons/decrement = SubResource( 62 ) -VScrollBar/icons/decrement_highlight = SubResource( 62 ) -VScrollBar/icons/increment = SubResource( 62 ) -VScrollBar/icons/increment_highlight = SubResource( 62 ) -VScrollBar/styles/grabber = SubResource( 156 ) -VScrollBar/styles/grabber_highlight = SubResource( 157 ) -VScrollBar/styles/grabber_pressed = SubResource( 158 ) -VScrollBar/styles/scroll = SubResource( 159 ) -VScrollBar/styles/scroll_focus = SubResource( 160 ) -VSeparator/styles/separator = SubResource( 161 ) -VSlider/icons/grabber = SubResource( 78 ) -VSlider/icons/grabber_highlight = SubResource( 80 ) -VSlider/styles/grabber_area = SubResource( 162 ) -VSlider/styles/grabber_area_highlight = SubResource( 163 ) -VSlider/styles/slider = SubResource( 164 ) +VSeparator/styles/separator = SubResource("161") +VSlider/styles/grabber_area = SubResource("162") +VSlider/styles/grabber_area_highlight = SubResource("163") +VSlider/styles/slider = SubResource("164") VSplitContainer/constants/separation = 8 -VSplitContainer/icons/grabber = SubResource( 166 ) -VSplitContainer/styles/bg = SubResource( 169 ) -ValueSlider/colors/progress_color = Color( 0.396078, 0.341176, 0.462745, 1 ) -ValueSlider/colors/under_color = Color( 0.0980392, 0.0588235, 0.141176, 1 ) -ValueSlider/icons/arrow_hover = ExtResource( 3 ) -ValueSlider/icons/arrow_normal = ExtResource( 6 ) -ValueSlider/icons/arrow_pressed = ExtResource( 5 ) +ValueSlider/colors/progress_color = Color(0.396078, 0.341176, 0.462745, 1) +ValueSlider/colors/under_color = Color(0.0980392, 0.0588235, 0.141176, 1) +ValueSlider/icons/arrow_hover = ExtResource("3") +ValueSlider/icons/arrow_normal = ExtResource("6") +ValueSlider/icons/arrow_pressed = ExtResource("5") ValueSlider/icons/texture_over = null -ValueSlider/icons/texture_progress = ExtResource( 4 ) -ValueSlider/icons/texture_under = ExtResource( 4 ) -WindowDialog/colors/title_color = Color( 0.79902, 0.780392, 0.820588, 1 ) -WindowDialog/constants/close_h_ofs = 22 -WindowDialog/constants/close_v_ofs = 20 -WindowDialog/constants/title_height = 24 -WindowDialog/fonts/title_font = ExtResource( 1 ) -WindowDialog/icons/close = SubResource( 94 ) -WindowDialog/icons/close_highlight = SubResource( 94 ) -WindowDialog/styles/panel = SubResource( 170 ) +ValueSlider/icons/texture_progress = ExtResource("4") +ValueSlider/icons/texture_under = ExtResource("4") +Window/colors/title_color = Color(0.79902, 0.780392, 0.820588, 1) +Window/constants/close_h_ofs = 22 +Window/constants/close_v_ofs = 20 +Window/constants/title_height = 24 +Window/fonts/title_font = ExtResource("7_0f141") +Window/styles/panel = SubResource("170") diff --git a/export_presets.cfg b/export_presets.cfg index d5cb9db4649..4e4c2be3ab0 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -1,171 +1,138 @@ [preset.0] -name="Windows Desktop 64-bit" -platform="Windows Desktop" +name="Linux/X11 64-bit" +platform="Linux/X11" runnable=true +dedicated_server=false custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" export_path="" -script_export_mode=1 -script_encryption_key="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false [preset.0.options] custom_template/debug="" custom_template/release="" -binary_format/64_bits=true +debug/export_console_wrapper=1 binary_format/embed_pck=false texture_format/bptc=false texture_format/s3tc=true texture_format/etc=false texture_format/etc2=false +binary_format/architecture="x86_64" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" +binary_format/64_bits=true texture_format/no_bptc_fallbacks=true -codesign/enable=false -codesign/identity_type=0 -codesign/identity="" -codesign/password="" -codesign/timestamp=true -codesign/timestamp_server_url="" -codesign/digest_algorithm=1 -codesign/description="" -codesign/custom_options=PoolStringArray( ) -application/modify_resources=true -application/icon="res://assets/graphics/icons/icon.ico" -application/file_version="0.11.2.0" -application/product_version="0.11.2.0" -application/company_name="Orama Interactive" -application/product_name="Pixelorama" -application/file_description="Pixelorama - Your free & open-source sprite editor" -application/copyright="Orama Interactive and contributors 2019-present" -application/trademarks="" [preset.1] -name="Linux/X11 64-bit" -platform="Linux/X11" +name="Windows Desktop 64-bit" +platform="Windows Desktop" runnable=true +dedicated_server=false custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" export_path="" -script_export_mode=1 -script_encryption_key="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false [preset.1.options] custom_template/debug="" custom_template/release="" -binary_format/64_bits=true +debug/export_console_wrapper=1 binary_format/embed_pck=false texture_format/bptc=false texture_format/s3tc=true texture_format/etc=false texture_format/etc2=false +binary_format/architecture="x86_64" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="res://assets/graphics/icons/icon.ico" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="1.0.0.0" +application/product_version="1.0.0.0" +application/company_name="Orama Interactive" +application/product_name="Pixelorama" +application/file_description="Pixelorama - Your free & open-source sprite editor" +application/copyright="Orama Interactive and contributors 2019-present" +application/trademarks="" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" +binary_format/64_bits=true texture_format/no_bptc_fallbacks=true [preset.2] -name="Mac OSX" -platform="Mac OSX" +name="Web" +platform="Web" runnable=true +dedicated_server=false custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" export_path="" -script_export_mode=1 -script_encryption_key="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false [preset.2.options] custom_template/debug="" custom_template/release="" -application/name="Pixelorama" -application/info="Pixelorama - Your free and open-source sprite editor" -application/icon="res://assets/graphics/icons/icon.icns" -application/identifier="com.orama-interactive.pixelorama" -application/signature="" -application/app_category="Graphics-design" -application/short_version="0.11.2" -application/version="0.11.2" -application/copyright="Orama Interactive and contributors 2019-present" -display/high_res=false -privacy/microphone_usage_description="" -privacy/camera_usage_description="" -privacy/location_usage_description="" -privacy/address_book_usage_description="" -privacy/calendar_usage_description="" -privacy/photos_library_usage_description="" -privacy/desktop_folder_usage_description="" -privacy/documents_folder_usage_description="" -privacy/downloads_folder_usage_description="" -privacy/network_volumes_usage_description="" -privacy/removable_volumes_usage_description="" -codesign/enable=true -codesign/identity="" -codesign/timestamp=true -codesign/hardened_runtime=true -codesign/replace_existing_signature=true -codesign/entitlements/custom_file="" -codesign/entitlements/allow_jit_code_execution=false -codesign/entitlements/allow_unsigned_executable_memory=false -codesign/entitlements/allow_dyld_environment_variables=false -codesign/entitlements/disable_library_validation=false -codesign/entitlements/audio_input=false -codesign/entitlements/camera=false -codesign/entitlements/location=false -codesign/entitlements/address_book=false -codesign/entitlements/calendars=false -codesign/entitlements/photos_library=false -codesign/entitlements/apple_events=false -codesign/entitlements/debugging=false -codesign/entitlements/app_sandbox/enabled=false -codesign/entitlements/app_sandbox/network_server=false -codesign/entitlements/app_sandbox/network_client=false -codesign/entitlements/app_sandbox/device_usb=false -codesign/entitlements/app_sandbox/device_bluetooth=false -codesign/entitlements/app_sandbox/files_downloads=0 -codesign/entitlements/app_sandbox/files_pictures=0 -codesign/entitlements/app_sandbox/files_music=0 -codesign/entitlements/app_sandbox/files_movies=0 -codesign/custom_options=PoolStringArray( ) -notarization/enable=false -notarization/apple_id_name="" -notarization/apple_id_password="" -notarization/apple_team_id="" -texture_format/s3tc=true -texture_format/etc=false -texture_format/etc2=false - -[preset.3] - -name="HTML5" -platform="HTML5" -runnable=true -custom_features="" -export_filter="all_resources" -include_filter="" -exclude_filter="" -export_path="" -script_export_mode=1 -script_encryption_key="" - -[preset.3.options] - -custom_template/debug="" -custom_template/release="" -variant/export_type=0 +variant/extensions_support=false vram_texture_compression/for_desktop=true -vram_texture_compression/for_mobile=true +vram_texture_compression/for_mobile=false html/export_icon=true html/custom_html_shell="" html/head_include="" html/canvas_resize_policy=2 html/focus_canvas_on_start=true -html/experimental_virtual_keyboard=true +html/experimental_virtual_keyboard=false progressive_web_app/enabled=false progressive_web_app/offline_page="" progressive_web_app/display=1 @@ -173,122 +140,255 @@ progressive_web_app/orientation=0 progressive_web_app/icon_144x144="" progressive_web_app/icon_180x180="" progressive_web_app/icon_512x512="" -progressive_web_app/background_color=Color( 0, 0, 0, 1 ) +progressive_web_app/background_color=Color(0, 0, 0, 1) -[preset.4] +[preset.3] name="Windows Desktop 32-bit" platform="Windows Desktop" runnable=false +dedicated_server=false custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" export_path="" -script_export_mode=1 -script_encryption_key="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false -[preset.4.options] +[preset.3.options] custom_template/debug="" custom_template/release="" -binary_format/64_bits=false +debug/export_console_wrapper=1 binary_format/embed_pck=false texture_format/bptc=false texture_format/s3tc=true texture_format/etc=false texture_format/etc2=false -texture_format/no_bptc_fallbacks=true +binary_format/architecture="x86_32" codesign/enable=false -codesign/identity_type=0 -codesign/identity="" -codesign/password="" codesign/timestamp=true codesign/timestamp_server_url="" codesign/digest_algorithm=1 codesign/description="" -codesign/custom_options=PoolStringArray( ) +codesign/custom_options=PackedStringArray() application/modify_resources=true application/icon="res://assets/graphics/icons/icon.ico" -application/file_version="0.11.2.0" -application/product_version="0.11.2.0" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="1.0.0.0" +application/product_version="1.0.0.0" application/company_name="Orama Interactive" application/product_name="Pixelorama" application/file_description="Pixelorama - Your free & open-source sprite editor" application/copyright="Orama Interactive and contributors 2019-present" application/trademarks="" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" +binary_format/64_bits=false +texture_format/no_bptc_fallbacks=true -[preset.5] +[preset.4] name="Linux/X11 32-bit" platform="Linux/X11" runnable=false +dedicated_server=false custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" export_path="" -script_export_mode=1 -script_encryption_key="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false -[preset.5.options] +[preset.4.options] custom_template/debug="" custom_template/release="" -binary_format/64_bits=false +debug/export_console_wrapper=1 binary_format/embed_pck=false texture_format/bptc=false texture_format/s3tc=true texture_format/etc=false texture_format/etc2=false +binary_format/architecture="x86_32" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" +binary_format/64_bits=false texture_format/no_bptc_fallbacks=true -[preset.6] +[preset.5] -name="Clickable (Package Only)" +name="Linux/X11 ARM64" platform="Linux/X11" runnable=false -custom_features="clickable,mobile" +dedicated_server=false +custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" export_path="" -script_export_mode=1 -script_encryption_key="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false -[preset.6.options] +[preset.5.options] custom_template/debug="" custom_template/release="" -binary_format/64_bits=false +debug/export_console_wrapper=1 binary_format/embed_pck=false texture_format/bptc=false texture_format/s3tc=true texture_format/etc=false texture_format/etc2=false +binary_format/architecture="arm64" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" +binary_format/64_bits=false texture_format/no_bptc_fallbacks=true -[preset.7] +[preset.6] -name="Raspberry Pi 4" -platform="Linux/X11" -runnable=false +name="macOS" +platform="macOS" +runnable=true +dedicated_server=false custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" export_path="" -script_export_mode=1 -script_encryption_key="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false -[preset.7.options] +[preset.6.options] +export/distribution_type=1 +binary_format/architecture="universal" custom_template/debug="" -custom_template/release="./godot_3.5.2-stable_rpi4/godot_3.5.2-stable_rpi4_export-template_lto.bin" -binary_format/64_bits=false -binary_format/embed_pck=false -texture_format/bptc=false -texture_format/s3tc=true -texture_format/etc=false -texture_format/etc2=false -texture_format/no_bptc_fallbacks=true +custom_template/release="" +debug/export_console_wrapper=1 +application/icon="res://assets/graphics/icons/icon.icns" +application/icon_interpolation=4 +application/bundle_identifier="com.orama-interactive.pixelorama" +application/signature="" +application/app_category="Graphics-design" +application/short_version="1.0" +application/version="1.0" +application/copyright="Orama Interactive and contributors 2019-present" +application/copyright_localized={} +application/min_macos_version="10.12" +display/high_res=true +xcode/platform_build="14C18" +xcode/sdk_version="13.1" +xcode/sdk_build="22C55" +xcode/sdk_name="macosx13.1" +xcode/xcode_version="1420" +xcode/xcode_build="14C18" +codesign/codesign=1 +codesign/installer_identity="" +codesign/apple_team_id="" +codesign/identity="" +codesign/entitlements/custom_file="" +codesign/entitlements/allow_jit_code_execution=false +codesign/entitlements/allow_unsigned_executable_memory=false +codesign/entitlements/allow_dyld_environment_variables=false +codesign/entitlements/disable_library_validation=false +codesign/entitlements/audio_input=false +codesign/entitlements/camera=false +codesign/entitlements/location=false +codesign/entitlements/address_book=false +codesign/entitlements/calendars=false +codesign/entitlements/photos_library=false +codesign/entitlements/apple_events=false +codesign/entitlements/debugging=false +codesign/entitlements/app_sandbox/enabled=false +codesign/entitlements/app_sandbox/network_server=false +codesign/entitlements/app_sandbox/network_client=false +codesign/entitlements/app_sandbox/device_usb=false +codesign/entitlements/app_sandbox/device_bluetooth=false +codesign/entitlements/app_sandbox/files_downloads=0 +codesign/entitlements/app_sandbox/files_pictures=0 +codesign/entitlements/app_sandbox/files_music=0 +codesign/entitlements/app_sandbox/files_movies=0 +codesign/entitlements/app_sandbox/helper_executables=[] +codesign/custom_options=PackedStringArray() +notarization/notarization=0 +privacy/microphone_usage_description="" +privacy/microphone_usage_description_localized={} +privacy/camera_usage_description="" +privacy/camera_usage_description_localized={} +privacy/location_usage_description="" +privacy/location_usage_description_localized={} +privacy/address_book_usage_description="" +privacy/address_book_usage_description_localized={} +privacy/calendar_usage_description="" +privacy/calendar_usage_description_localized={} +privacy/photos_library_usage_description="" +privacy/photos_library_usage_description_localized={} +privacy/desktop_folder_usage_description="" +privacy/desktop_folder_usage_description_localized={} +privacy/documents_folder_usage_description="" +privacy/documents_folder_usage_description_localized={} +privacy/downloads_folder_usage_description="" +privacy/downloads_folder_usage_description_localized={} +privacy/network_volumes_usage_description="" +privacy/network_volumes_usage_description_localized={} +privacy/removable_volumes_usage_description="" +privacy/removable_volumes_usage_description_localized={} +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" diff --git a/project.godot b/project.godot index a17d787aef7..610636e26a2 100644 --- a/project.godot +++ b/project.godot @@ -6,329 +6,7 @@ ; [section] ; section goes between [] ; param=value ; assign values to parameters -config_version=4 - -_global_script_classes=[ { -"base": "AImgIOBaseExporter", -"class": "AImgIOAPNGExporter", -"language": "GDScript", -"path": "res://addons/aimg_io/apng_exporter.gd" -}, { -"base": "EditorImportPlugin", -"class": "AImgIOAPNGImportPlugin", -"language": "GDScript", -"path": "res://addons/aimg_io/apng_import_plugin.gd" -}, { -"base": "Reference", -"class": "AImgIOAPNGImporter", -"language": "GDScript", -"path": "res://addons/aimg_io/apng_importer.gd" -}, { -"base": "Reference", -"class": "AImgIOAPNGStream", -"language": "GDScript", -"path": "res://addons/aimg_io/apng_stream.gd" -}, { -"base": "Reference", -"class": "AImgIOBaseExporter", -"language": "GDScript", -"path": "res://addons/aimg_io/base_exporter.gd" -}, { -"base": "Resource", -"class": "AImgIOCRC32", -"language": "GDScript", -"path": "res://addons/aimg_io/crc32.gd" -}, { -"base": "Reference", -"class": "AImgIOFrame", -"language": "GDScript", -"path": "res://addons/aimg_io/frame.gd" -}, { -"base": "PanelContainer", -"class": "AnimatePanel", -"language": "GDScript", -"path": "res://src/UI/Nodes/AnimatePanel.gd" -}, { -"base": "Reference", -"class": "AnimationTag", -"language": "GDScript", -"path": "res://src/Classes/AnimationTag.gd" -}, { -"base": "Reference", -"class": "BaseCel", -"language": "GDScript", -"path": "res://src/Classes/BaseCel.gd" -}, { -"base": "Reference", -"class": "BaseLayer", -"language": "GDScript", -"path": "res://src/Classes/BaseLayer.gd" -}, { -"base": "VBoxContainer", -"class": "BaseTool", -"language": "GDScript", -"path": "res://src/Tools/BaseTool.gd" -}, { -"base": "Popup", -"class": "Brushes", -"language": "GDScript", -"path": "res://src/UI/Buttons/BrushesPopup.gd" -}, { -"base": "Node2D", -"class": "Canvas", -"language": "GDScript", -"path": "res://src/UI/Canvas/Canvas.gd" -}, { -"base": "BaseCel", -"class": "Cel3D", -"language": "GDScript", -"path": "res://src/Classes/Cel3D.gd" -}, { -"base": "Spatial", -"class": "Cel3DObject", -"language": "GDScript", -"path": "res://src/Classes/Cel3DObject.gd" -}, { -"base": "VBoxContainer", -"class": "CollapsibleContainer", -"language": "GDScript", -"path": "res://src/UI/Nodes/CollapsibleContainer.gd" -}, { -"base": "Node2D", -"class": "CropRect", -"language": "GDScript", -"path": "res://src/UI/Canvas/CropRect.gd" -}, { -"base": "Reference", -"class": "Drawer", -"language": "GDScript", -"path": "res://src/Classes/Drawers.gd" -}, { -"base": "Reference", -"class": "Frame", -"language": "GDScript", -"path": "res://src/Classes/Frame.gd" -}, { -"base": "AImgIOBaseExporter", -"class": "GIFAnimationExporter", -"language": "GDScript", -"path": "res://src/Classes/AnimationExporters/GIFAnimationExporter.gd" -}, { -"base": "Control", -"class": "GradientEditNode", -"language": "GDScript", -"path": "res://src/UI/Nodes/GradientEdit.gd" -}, { -"base": "BaseCel", -"class": "GroupCel", -"language": "GDScript", -"path": "res://src/Classes/GroupCel.gd" -}, { -"base": "BaseLayer", -"class": "GroupLayer", -"language": "GDScript", -"path": "res://src/Classes/GroupLayer.gd" -}, { -"base": "Line2D", -"class": "Guide", -"language": "GDScript", -"path": "res://src/UI/Canvas/Rulers/Guide.gd" -}, { -"base": "ConfirmationDialog", -"class": "ImageEffect", -"language": "GDScript", -"path": "res://src/Classes/ImageEffect.gd" -}, { -"base": "BaseLayer", -"class": "Layer3D", -"language": "GDScript", -"path": "res://src/Classes/Layer3D.gd" -}, { -"base": "Button", -"class": "LayerButton", -"language": "GDScript", -"path": "res://src/UI/Timeline/LayerButton.gd" -}, { -"base": "Control", -"class": "MaxMinEdit", -"language": "GDScript", -"path": "res://src/UI/Nodes/MaxMinEdit.gd" -}, { -"base": "Label", -"class": "NotificationLabel", -"language": "GDScript", -"path": "res://src/UI/Nodes/NotificationLabel.gd" -}, { -"base": "Reference", -"class": "ObjParse", -"language": "GDScript", -"path": "res://src/Classes/ObjParse.gd" -}, { -"base": "Resource", -"class": "Palette", -"language": "GDScript", -"path": "res://src/Palette/Palette.gd" -}, { -"base": "Resource", -"class": "PaletteColor", -"language": "GDScript", -"path": "res://src/Palette/PaletteColor.gd" -}, { -"base": "GridContainer", -"class": "PaletteGrid", -"language": "GDScript", -"path": "res://src/Palette/PaletteGrid.gd" -}, { -"base": "PanelContainer", -"class": "PalettePanel", -"language": "GDScript", -"path": "res://src/Palette/PalettePanel.gd" -}, { -"base": "ColorRect", -"class": "PaletteSwatch", -"language": "GDScript", -"path": "res://src/Palette/PaletteSwatch.gd" -}, { -"base": "PopupPanel", -"class": "Patterns", -"language": "GDScript", -"path": "res://src/UI/Buttons/PatternsPopup.gd" -}, { -"base": "Line2D", -"class": "PerspectiveLine", -"language": "GDScript", -"path": "res://src/UI/PerspectiveEditor/PerspectiveLine.gd" -}, { -"base": "BaseCel", -"class": "PixelCel", -"language": "GDScript", -"path": "res://src/Classes/PixelCel.gd" -}, { -"base": "BaseLayer", -"class": "PixelLayer", -"language": "GDScript", -"path": "res://src/Classes/PixelLayer.gd" -}, { -"base": "Reference", -"class": "Project", -"language": "GDScript", -"path": "res://src/Classes/Project.gd" -}, { -"base": "Sprite", -"class": "ReferenceImage", -"language": "GDScript", -"path": "res://src/UI/ReferenceImages/ReferenceImage.gd" -}, { -"base": "VBoxContainer", -"class": "ReferencesPanel", -"language": "GDScript", -"path": "res://src/UI/ReferenceImages/ReferencesPanel.gd" -}, { -"base": "Reference", -"class": "RegionUnpacker", -"language": "GDScript", -"path": "res://addons/SmartSlicer/Classes/RegionUnpacker.gd" -}, { -"base": "Image", -"class": "SelectionMap", -"language": "GDScript", -"path": "res://src/Classes/SelectionMap.gd" -}, { -"base": "BaseTool", -"class": "SelectionTool", -"language": "GDScript", -"path": "res://src/Tools/SelectionTools/SelectionTool.gd" -}, { -"base": "Reference", -"class": "ShaderImageEffect", -"language": "GDScript", -"path": "res://src/Classes/ShaderImageEffect.gd" -}, { -"base": "Resource", -"class": "ShortcutProfile", -"language": "GDScript", -"path": "res://addons/keychain/ShortcutProfile.gd" -}, { -"base": "Guide", -"class": "SymmetryGuide", -"language": "GDScript", -"path": "res://src/UI/Canvas/Rulers/SymmetryGuide.gd" -}, { -"base": "Reference", -"class": "Tiles", -"language": "GDScript", -"path": "res://src/Classes/Tiles.gd" -}, { -"base": "TextureProgress", -"class": "ValueSlider", -"language": "GDScript", -"path": "res://src/UI/Nodes/ValueSlider.gd" -}, { -"base": "HBoxContainer", -"class": "ValueSliderV2", -"language": "GDScript", -"path": "res://src/UI/Nodes/ValueSliderV2.gd" -}, { -"base": "HBoxContainer", -"class": "ValueSliderV3", -"language": "GDScript", -"path": "res://src/UI/Nodes/ValueSliderV3.gd" -} ] -_global_script_class_icons={ -"AImgIOAPNGExporter": "", -"AImgIOAPNGImportPlugin": "", -"AImgIOAPNGImporter": "", -"AImgIOAPNGStream": "", -"AImgIOBaseExporter": "", -"AImgIOCRC32": "", -"AImgIOFrame": "", -"AnimatePanel": "", -"AnimationTag": "", -"BaseCel": "", -"BaseLayer": "", -"BaseTool": "", -"Brushes": "", -"Canvas": "", -"Cel3D": "", -"Cel3DObject": "", -"CollapsibleContainer": "", -"CropRect": "", -"Drawer": "", -"Frame": "", -"GIFAnimationExporter": "", -"GradientEditNode": "", -"GroupCel": "", -"GroupLayer": "", -"Guide": "", -"ImageEffect": "", -"Layer3D": "", -"LayerButton": "", -"MaxMinEdit": "", -"NotificationLabel": "", -"ObjParse": "", -"Palette": "", -"PaletteColor": "", -"PaletteGrid": "", -"PalettePanel": "", -"PaletteSwatch": "", -"Patterns": "", -"PerspectiveLine": "", -"PixelCel": "", -"PixelLayer": "", -"Project": "", -"ReferenceImage": "", -"ReferencesPanel": "", -"RegionUnpacker": "", -"SelectionMap": "", -"SelectionTool": "", -"ShaderImageEffect": "", -"ShortcutProfile": "", -"SymmetryGuide": "", -"Tiles": "", -"ValueSlider": "", -"ValueSliderV2": "", -"ValueSliderV3": "" -} +config_version=5 [application] @@ -336,15 +14,16 @@ config/name="Pixelorama" config/description="A free & open-source 2D sprite editor" run/main_scene="res://src/Main.tscn" config/use_custom_user_dir=true +config/custom_user_dir_name="pixelorama" +config/features=PackedStringArray("4.1") run/low_processor_mode=true +boot_splash/bg_color=Color(0.145098, 0.145098, 0.164706, 1) boot_splash/image="res://assets/graphics/splash.png" -boot_splash/bg_color=Color( 0.145098, 0.145098, 0.164706, 1 ) config/icon="res://assets/graphics/icons/icon.png" config/macos_native_icon="res://assets/graphics/icons/icon.icns" config/windows_native_icon="res://assets/graphics/icons/icon.ico" -config/custom_user_dir_name.X11="pixelorama" -config/Version="v0.11.2-stable" -config/ExtensionsAPI_Version=3 +config/Version="v1.0-dev" +config/ExtensionsAPI_Version=4 config/Pxo_Version=2 [audio] @@ -363,28 +42,23 @@ Export="*res://src/Autoload/Export.gd" Palettes="*res://src/Autoload/Palettes.gd" Keychain="*res://addons/keychain/Keychain.gd" ExtensionsApi="*res://src/Autoload/ExtensionsAPI.gd" -ErrorManager="*res://src/Autoload/ErrorManager.gd" [debug] -gdscript/warnings/narrowing_conversion=false gdscript/warnings/return_value_discarded=false +gdscript/warnings/narrowing_conversion=false [display] -window/size/width=1280 -window/size/height=720 -window/dpi/allow_hidpi=true +window/size/viewport_width=1280 +window/size/viewport_height=720 window/per_pixel_transparency/allowed=true -window/per_pixel_transparency/enabled=true -window/per_pixel_transparency/allowed.HTML5=false -window/per_pixel_transparency/enabled.HTML5=false -window/per_pixel_transparency/allowed.Android=false -window/per_pixel_transparency/enabled.Android=false +window/per_pixel_transparency/allowed.android=false +window/per_pixel_transparency/allowed.web=false [editor_plugins] -enabled=PoolStringArray( "res://addons/aimg_io/plugin.cfg", "res://addons/dockable_container/plugin.cfg", "res://addons/keychain/plugin.cfg" ) +enabled=PackedStringArray("res://addons/aimg_io/plugin.cfg", "res://addons/dockable_container/plugin.cfg", "res://addons/keychain/plugin.cfg") [importer_defaults] @@ -413,648 +87,738 @@ texture={ zoom_in={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":4,"pressed":false,"doubleclick":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":61,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777349,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":61,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194437,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } zoom_out={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":5,"pressed":false,"doubleclick":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":45,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777347,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":45,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194435,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } middle_mouse={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":3,"pressed":false,"doubleclick":false,"script":null) - ] +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":3,"canceled":false,"pressed":false,"double_click":false,"script":null) +] } left_mouse={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) - ] +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null) +] } right_mouse={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null) - ] +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null) +] } left_pencil_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":80,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":80,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_pencil_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":80,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":80,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_eraser_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_eraser_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_fill_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":66,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_fill_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":66,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_rectangle_select_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":82,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_rectangle_select_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":82,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } copy={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":67,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } cut={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":88,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":88,"physical_keycode":88,"key_label":88,"unicode":0,"echo":false,"script":null) +] } paste={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":86,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":86,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } paste_in_place={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":86,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":true,"shift_pressed":false,"pressed":false,"keycode":86,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } delete={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777224,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194312,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_shading_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":85,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":85,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_shading_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":85,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":85,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } toggle_fullscreen={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777254,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194342,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_colorpicker_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":79,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_colorpicker_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":79,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } shift={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } ctrl={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } pan={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":3,"pressed":false,"doubleclick":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":3,"canceled":false,"pressed":false,"double_click":false,"script":null) +] } new_file={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":78,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":78,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } open_file={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":79,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":79,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } save_file={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } save_file_as={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":true,"meta":false,"command":true,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } export_file={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } export_file_as={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":true,"meta":false,"command":true,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } quit={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":81,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } undo={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":90,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } redo={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":89,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":true,"meta":false,"command":true,"pressed":false,"scancode":90,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } show_grid={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":71,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":71,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } show_rulers={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":82,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } show_guides={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":70,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_zoom_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":90,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_zoom_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":90,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } switch_colors={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":88,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":88,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } go_to_first_frame={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777229,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194317,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } go_to_last_frame={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777230,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194318,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } go_to_previous_frame={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } go_to_next_frame={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } play_backwards={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777247,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194335,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } play_forward={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777248,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194336,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } zen_mode={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777253,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194341,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } open_docs={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777244,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194332,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } mirror_view={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":false,"meta":false,"command":false,"pressed":false,"scancode":77,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_pan_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":77,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_pan_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":77,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":77,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } show_pixel_grid={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":72,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":72,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } clear_selection={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_rectangletool_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_rectangletool_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_ellipsetool_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":67,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_ellipsetool_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":67,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_move_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":84,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_move_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":84,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } select_all={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } invert_selection={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":73,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_color_select_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_color_select_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_magic_wand_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":81,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_magic_wand_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":81,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":81,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } transformation_confirm={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777222,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194310,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } transformation_cancel={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_linetool_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":76,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":76,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_linetool_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":76,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":76,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_ellipse_select_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":89,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_ellipse_select_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":89,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":89,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_lasso_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_lasso_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":70,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } left_polygon_select_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":75,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":75,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_polygon_select_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":75,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":75,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } new_brush={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":66,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":66,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } moveable_panels={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777252,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194340,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } change_tool_mode={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } draw_create_line={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } draw_snap_angle={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } shape_perfect={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } shape_center={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } shape_displace={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777240,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } selection_add={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } selection_subtract={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } selection_intersect={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":4194326,"key_label":4194326,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } transform_snap_axis={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194325,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } transform_snap_grid={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194326,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } transform_move_selection_only={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777240,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } transform_copy_selection_content={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":16777240,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } draw_color_picker={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777240,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194328,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } camera_left={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":2,"axis_value":-1.0,"script":null) - ] +] } camera_right={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194321,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":2,"axis_value":1.0,"script":null) - ] +] } camera_up={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":3,"axis_value":-1.0,"script":null) - ] +] } camera_down={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":3,"axis_value":1.0,"script":null) - ] +] } move_mouse_left={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777354,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194442,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null) - ] +] } move_mouse_right={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777356,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194444,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null) - ] +] } move_mouse_up={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777358,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194446,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null) - ] +] } move_mouse_down={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777352,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194440,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null) - ] +] } activate_left_tool={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":4,"pressure":0.0,"pressed":false,"script":null) - ] +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":9,"pressure":0.0,"pressed":false,"script":null) +] } activate_right_tool={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":5,"pressure":0.0,"pressed":false,"script":null) - ] +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":10,"pressure":0.0,"pressed":false,"script":null) +] } open_last_project={ "deadzone": 0.5, -"events": [ ] +"events": [] } preferences={ "deadzone": 0.5, -"events": [ ] +"events": [] } resize_canvas={ "deadzone": 0.5, -"events": [ ] +"events": [] } offset_image={ "deadzone": 0.5, -"events": [ ] +"events": [] } scale_image={ "deadzone": 0.5, -"events": [ ] +"events": [] } crop_image={ "deadzone": 0.5, -"events": [ ] +"events": [] } mirror_image={ "deadzone": 0.5, -"events": [ ] +"events": [] } rotate_image={ "deadzone": 0.5, -"events": [ ] +"events": [] } invert_colors={ "deadzone": 0.5, -"events": [ ] +"events": [] } desaturation={ "deadzone": 0.5, -"events": [ ] +"events": [] } outline={ "deadzone": 0.5, -"events": [ ] +"events": [] } drop_shadow={ "deadzone": 0.5, -"events": [ ] +"events": [] } adjust_hsv={ "deadzone": 0.5, -"events": [ ] +"events": [] } gradient={ "deadzone": 0.5, -"events": [ ] +"events": [] } gradient_map={ "deadzone": 0.5, -"events": [ ] +"events": [] } posterize={ "deadzone": 0.5, -"events": [ ] +"events": [] } view_splash_screen={ "deadzone": 0.5, -"events": [ ] +"events": [] } issue_tracker={ "deadzone": 0.5, -"events": [ ] +"events": [] } open_logs_folder={ "deadzone": 0.5, -"events": [ ] +"events": [] } changelog={ "deadzone": 0.5, -"events": [ ] +"events": [] } about_pixelorama={ "deadzone": 0.5, -"events": [ ] +"events": [] } left_paint_selection_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":73,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] } right_paint_selection_tool={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":73,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":73,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +brush_size_increment={ +"deadzone": 0.5, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} +brush_size_decrement={ +"deadzone": 0.5, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"button_mask":16,"position":Vector2(83, 19),"global_position":Vector2(87, 62),"factor":1.0,"button_index":5,"canceled":false,"pressed":true,"double_click":false,"script":null) +] +} +new_layer={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +remove_layer={ +"deadzone": 0.5, +"events": [] +} +move_layer_up={ +"deadzone": 0.5, +"events": [] +} +move_layer_down={ +"deadzone": 0.5, +"events": [] +} +clone_layer={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +merge_down_layer={ +"deadzone": 0.5, +"events": [] +} +add_frame={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +remove_frame={ +"deadzone": 0.5, +"events": [] +} +clone_frame={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":4194311,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +manage_frame_tags={ +"deadzone": 0.5, +"events": [] +} +move_frame_left={ +"deadzone": 0.5, +"events": [] +} +move_frame_right={ +"deadzone": 0.5, +"events": [] +} +reset_colors_default={ +"deadzone": 0.5, +"events": [] +} +horizontal_mirror={ +"deadzone": 0.5, +"events": [] +} +vertical_mirror={ +"deadzone": 0.5, +"events": [] +} +pixel_perfect={ +"deadzone": 0.5, +"events": [] +} +new_palette={ +"deadzone": 0.5, +"events": [] +} +edit_palette={ +"deadzone": 0.5, +"events": [] +} +onion_skinning_toggle={ +"deadzone": 0.5, +"events": [] +} +loop_toggle={ +"deadzone": 0.5, +"events": [] +} +onion_skinning_settings={ +"deadzone": 0.5, +"events": [] } -[locale] - -translations=PoolStringArray( "res://Translations/zh_TW.po", "res://Translations/pt_BR.po", "res://Translations/de_DE.po", "res://Translations/el_GR.po", "res://Translations/en_US.po", "res://Translations/fr_FR.po", "res://Translations/it_IT.po", "res://Translations/pl_PL.po", "res://Translations/ru_RU.po", "res://Translations/es_ES.po", "res://Translations/zh_CN.po", "res://Translations/lv_LV.po", "res://Translations/eo_UY.po", "res://Translations/cs_CZ.po", "res://Translations/id_ID.po", "res://Translations/hu_HU.po", "res://Translations/ro_RO.po", "res://Translations/ko_KR.po", "res://Translations/tr_TR.po", "res://Translations/ja_JP.po", "res://Translations/nb_NO.po", "res://Translations/uk_UA.po", "res://Translations/pt_PT.po", "res://Translations/da_DK.po" ) -locale_filter=[ 0, [ ] ] - -[logging] +[internationalization] -file_logging/enable_file_logging=true +locale/translations=PackedStringArray("res://Translations/en_US.po") [rendering] -quality/driver/driver_name="GLES2" -quality/driver/fallback_to_gles2=true -quality/intended_usage/framebuffer_allocation=0 -quality/intended_usage/framebuffer_allocation.mobile=0 +textures/canvas_textures/default_texture_filter=0 +renderer/rendering_method="gl_compatibility" threads/thread_model=2 vram_compression/import_etc=true -vram_compression/import_etc2=false diff --git a/src/Autoload/DrawingAlgos.gd b/src/Autoload/DrawingAlgos.gd index 7ed930d5fcf..0b7ae43db9f 100644 --- a/src/Autoload/DrawingAlgos.gd +++ b/src/Autoload/DrawingAlgos.gd @@ -1,26 +1,21 @@ extends Node enum GradientDirection { TOP, BOTTOM, LEFT, RIGHT } -# Continuation from Image.Interpolation +## Continuation from Image.Interpolation enum Interpolation { SCALE3X = 5, CLEANEDGE = 6, OMNISCALE = 7 } var clean_edge_shader: Shader -var omniscale_shader: Shader - - -func _ready() -> void: - if OS.get_current_video_driver() == OS.VIDEO_DRIVER_GLES3: - omniscale_shader = load("res://src/Shaders/Rotation/OmniScale.gdshader") - - -# Algorithm based on http://members.chello.at/easyfilter/bresenham.html -func get_ellipse_points(pos: Vector2, size: Vector2) -> Array: - var array := [] - var x0 := int(pos.x) - var x1 := pos.x + int(size.x - 1) - var y0 := int(pos.y) - var y1 := int(pos.y) + int(size.y - 1) - var a := int(abs(x1 - x0)) - var b := int(abs(y1 - x0)) +var omniscale_shader := preload("res://src/Shaders/Rotation/OmniScale.gdshader") + + +## Algorithm based on http://members.chello.at/easyfilter/bresenham.html +func get_ellipse_points(pos: Vector2i, size: Vector2i) -> Array[Vector2i]: + var array: Array[Vector2i] = [] + var x0 := pos.x + var x1 := pos.x + (size.x - 1) + var y0 := pos.y + var y1 := pos.y + (size.y - 1) + var a := absi(x1 - x0) + var b := absi(y1 - x0) var b1 := b & 1 var dx := 4 * (1 - a) * b * b var dy := 4 * (b1 + 1) * a * a @@ -34,17 +29,16 @@ func get_ellipse_points(pos: Vector2, size: Vector2) -> Array: if y0 > y1: y0 = y1 -# warning-ignore:integer_division y0 += (b + 1) / 2 y1 = y0 - b1 a *= 8 * a b1 = 8 * b * b while x0 <= x1: - var v1 := Vector2(x1, y0) - var v2 := Vector2(x0, y0) - var v3 := Vector2(x0, y1) - var v4 := Vector2(x1, y1) + var v1 := Vector2i(x1, y0) + var v2 := Vector2i(x0, y0) + var v3 := Vector2i(x0, y1) + var v4 := Vector2i(x1, y1) array.append(v1) array.append(v2) array.append(v3) @@ -64,10 +58,10 @@ func get_ellipse_points(pos: Vector2, size: Vector2) -> Array: err += dx while y0 - y1 < b: - var v1 := Vector2(x0 - 1, y0) - var v2 := Vector2(x1 + 1, y0) - var v3 := Vector2(x0 - 1, y1) - var v4 := Vector2(x1 + 1, y1) + var v1 := Vector2i(x0 - 1, y0) + var v2 := Vector2i(x1 + 1, y0) + var v3 := Vector2i(x0 - 1, y1) + var v4 := Vector2i(x1 + 1, y1) array.append(v1) array.append(v2) array.append(v3) @@ -78,16 +72,16 @@ func get_ellipse_points(pos: Vector2, size: Vector2) -> Array: return array -func get_ellipse_points_filled(pos: Vector2, size: Vector2, thickness := 1) -> PoolVector2Array: - var offsetted_size := size + Vector2.ONE * (thickness - 1) +func get_ellipse_points_filled(pos: Vector2i, size: Vector2i, thickness := 1) -> Array[Vector2i]: + var offsetted_size := size + Vector2i.ONE * (thickness - 1) var border := get_ellipse_points(pos, offsetted_size) - var filling := [] + var filling: Array[Vector2i] = [] - for x in range(1, ceil(offsetted_size.x / 2)): + for x in range(1, ceili(offsetted_size.x / 2.0)): var fill := false var prev_is_true := false - for y in range(0, ceil(offsetted_size.y / 2)): - var top_l_p := Vector2(x, y) + for y in range(0, ceili(offsetted_size.y / 2.0)): + var top_l_p := Vector2i(x, y) var bit := border.has(pos + top_l_p) if bit and not fill: @@ -96,9 +90,9 @@ func get_ellipse_points_filled(pos: Vector2, size: Vector2, thickness := 1) -> P if not bit and (fill or prev_is_true): filling.append(pos + top_l_p) - filling.append(pos + Vector2(x, offsetted_size.y - y - 1)) - filling.append(pos + Vector2(offsetted_size.x - x - 1, y)) - filling.append(pos + Vector2(offsetted_size.x - x - 1, offsetted_size.y - y - 1)) + filling.append(pos + Vector2i(x, offsetted_size.y - y - 1)) + filling.append(pos + Vector2i(offsetted_size.x - x - 1, y)) + filling.append(pos + Vector2i(offsetted_size.x - x - 1, offsetted_size.y - y - 1)) if prev_is_true: fill = true @@ -106,14 +100,13 @@ func get_ellipse_points_filled(pos: Vector2, size: Vector2, thickness := 1) -> P elif bit and fill: break - return PoolVector2Array(border + filling) + return border + filling -func scale_3x(sprite: Image, tol: float = 50) -> Image: - var scaled := Image.new() - scaled.create(sprite.get_width() * 3, sprite.get_height() * 3, false, Image.FORMAT_RGBA8) - scaled.lock() - sprite.lock() +func scale_3x(sprite: Image, tol := 50.0) -> Image: + var scaled := Image.create( + sprite.get_width() * 3, sprite.get_height() * 3, false, Image.FORMAT_RGBA8 + ) var a: Color var b: Color var c: Color @@ -126,23 +119,23 @@ func scale_3x(sprite: Image, tol: float = 50) -> Image: for x in range(0, sprite.get_width()): for y in range(0, sprite.get_height()): - var xs: float = 3 * x - var ys: float = 3 * y - - a = sprite.get_pixel(max(x - 1, 0), max(y - 1, 0)) - b = sprite.get_pixel(min(x, sprite.get_width() - 1), max(y - 1, 0)) - c = sprite.get_pixel(min(x + 1, sprite.get_width() - 1), max(y - 1, 0)) - d = sprite.get_pixel(max(x - 1, 0), min(y, sprite.get_height() - 1)) - e = sprite.get_pixel(min(x, sprite.get_width() - 1), min(y, sprite.get_height() - 1)) + var xs := 3 * x + var ys := 3 * y + + a = sprite.get_pixel(maxi(x - 1, 0), maxi(y - 1, 0)) + b = sprite.get_pixel(mini(x, sprite.get_width() - 1), maxi(y - 1, 0)) + c = sprite.get_pixel(mini(x + 1, sprite.get_width() - 1), maxi(y - 1, 0)) + d = sprite.get_pixel(maxi(x - 1, 0), mini(y, sprite.get_height() - 1)) + e = sprite.get_pixel(mini(x, sprite.get_width() - 1), mini(y, sprite.get_height() - 1)) f = sprite.get_pixel( - min(x + 1, sprite.get_width() - 1), min(y, sprite.get_height() - 1) + mini(x + 1, sprite.get_width() - 1), mini(y, sprite.get_height() - 1) ) - g = sprite.get_pixel(max(x - 1, 0), min(y + 1, sprite.get_height() - 1)) + g = sprite.get_pixel(maxi(x - 1, 0), mini(y + 1, sprite.get_height() - 1)) h = sprite.get_pixel( - min(x, sprite.get_width() - 1), min(y + 1, sprite.get_height() - 1) + mini(x, sprite.get_width() - 1), mini(y + 1, sprite.get_height() - 1) ) i = sprite.get_pixel( - min(x + 1, sprite.get_width() - 1), min(y + 1, sprite.get_height() - 1) + mini(x + 1, sprite.get_width() - 1), mini(y + 1, sprite.get_height() - 1) ) var db: bool = similar_colors(d, b, tol) @@ -154,15 +147,15 @@ func scale_3x(sprite: Image, tol: float = 50) -> Image: var eg: bool = similar_colors(e, g, tol) var ei: bool = similar_colors(e, i, tol) - scaled.set_pixel(max(xs - 1, 0), max(ys - 1, 0), d if (db and !dh and !bf) else e) + scaled.set_pixel(maxi(xs - 1, 0), maxi(ys - 1, 0), d if (db and !dh and !bf) else e) scaled.set_pixel( xs, - max(ys - 1, 0), + maxi(ys - 1, 0), b if (db and !dh and !bf and !ec) or (bf and !db and !fh and !ea) else e ) - scaled.set_pixel(xs + 1, max(ys - 1, 0), f if (bf and !db and !fh) else e) + scaled.set_pixel(xs + 1, maxi(ys - 1, 0), f if (bf and !db and !fh) else e) scaled.set_pixel( - max(xs - 1, 0), + maxi(xs - 1, 0), ys, d if (dh and !fh and !db and !ea) or (db and !dh and !bf and !eg) else e ) @@ -170,14 +163,12 @@ func scale_3x(sprite: Image, tol: float = 50) -> Image: scaled.set_pixel( xs + 1, ys, f if (bf and !db and !fh and !ei) or (fh and !bf and !dh and !ec) else e ) - scaled.set_pixel(max(xs - 1, 0), ys + 1, d if (dh and !fh and !db) else e) + scaled.set_pixel(maxi(xs - 1, 0), ys + 1, d if (dh and !fh and !db) else e) scaled.set_pixel( xs, ys + 1, h if (fh and !bf and !dh and !eg) or (dh and !fh and !db and !ei) else e ) scaled.set_pixel(xs + 1, ys + 1, f if (fh and !bf and !dh) else e) - scaled.unlock() - sprite.unlock() return scaled @@ -187,27 +178,24 @@ func rotxel(sprite: Image, angle: float, pivot: Vector2) -> void: nn_rotate(sprite, angle, pivot) return - var aux: Image = Image.new() + var aux := Image.new() aux.copy_from(sprite) var ox: int var oy: int var p: Color - aux.lock() - sprite.lock() for x in sprite.get_size().x: for y in sprite.get_size().y: - var dx = 3 * (x - pivot.x) - var dy = 3 * (y - pivot.y) - var found_pixel: bool = false + var dx := 3 * (x - pivot.x) + var dy := 3 * (y - pivot.y) + var found_pixel := false for k in range(9): - var i = -1 + k % 3 -# warning-ignore:integer_division - var j = -1 + int(k / 3) - var dir = atan2(dy + j, dx + i) - var mag = sqrt(pow(dx + i, 2) + pow(dy + j, 2)) + var modk := -1 + k % 3 + var divk := -1 + int(k / 3) + var dir := atan2(dy + divk, dx + modk) + var mag := sqrt(pow(dx + modk, 2) + pow(dy + divk, 2)) dir -= angle - ox = round(pivot.x * 3 + 1 + mag * cos(dir)) - oy = round(pivot.y * 3 + 1 + mag * sin(dir)) + ox = roundi(pivot.x * 3 + 1 + mag * cos(dir)) + oy = roundi(pivot.y * 3 + 1 + mag * sin(dir)) if sprite.get_width() % 2 != 0: ox += 1 @@ -230,8 +218,8 @@ func rotxel(sprite: Image, angle: float, pivot: Vector2) -> void: var col: int = ox % 3 var index: int = col + 3 * fil - ox = round((ox - 1) / 3.0) - oy = round((oy - 1) / 3.0) + ox = roundi((ox - 1) / 3.0) + oy = roundi((oy - 1) / 3.0) var a: Color var b: Color var c: Color @@ -374,8 +362,6 @@ func rotxel(sprite: Image, angle: float, pivot: Vector2) -> void: else e ) sprite.set_pixel(x, y, p) - sprite.unlock() - aux.unlock() func fake_rotsprite(sprite: Image, angle: float, pivot: Vector2) -> void: @@ -383,17 +369,15 @@ func fake_rotsprite(sprite: Image, angle: float, pivot: Vector2) -> void: selected_sprite.copy_from(sprite) selected_sprite.copy_from(scale_3x(selected_sprite)) nn_rotate(selected_sprite, angle, pivot * 3) -# warning-ignore:integer_division -# warning-ignore:integer_division - selected_sprite.resize(selected_sprite.get_width() / 3, selected_sprite.get_height() / 3, 0) + selected_sprite.resize( + selected_sprite.get_width() / 3, selected_sprite.get_height() / 3, Image.INTERPOLATE_NEAREST + ) sprite.blit_rect(selected_sprite, Rect2(Vector2.ZERO, selected_sprite.get_size()), Vector2.ZERO) func nn_rotate(sprite: Image, angle: float, pivot: Vector2) -> void: - var aux: Image = Image.new() + var aux := Image.new() aux.copy_from(sprite) - sprite.lock() - aux.lock() var ox: int var oy: int for x in range(sprite.get_width()): @@ -404,12 +388,10 @@ func nn_rotate(sprite: Image, angle: float, pivot: Vector2) -> void: sprite.set_pixel(x, y, aux.get_pixel(ox, oy)) else: sprite.set_pixel(x, y, Color(0, 0, 0, 0)) - sprite.unlock() - aux.unlock() -func similar_colors(c1: Color, c2: Color, tol: float = 100) -> bool: - var dist = color_distance(c1, c2) +func similar_colors(c1: Color, c2: Color, tol := 100.0) -> bool: + var dist := color_distance(c1, c2) return dist <= tol @@ -435,23 +417,21 @@ func scale_image(width: int, height: int, interpolation: int) -> void: if not f.cels[i] is PixelCel: continue var sprite := Image.new() - sprite.copy_from(f.cels[i].image) + sprite.copy_from(f.cels[i].get_image()) if interpolation == Interpolation.SCALE3X: - var times: Vector2 = Vector2( - ceil(width / (3.0 * sprite.get_width())), - ceil(height / (3.0 * sprite.get_height())) + var times := Vector2i( + ceili(width / (3.0 * sprite.get_width())), + ceili(height / (3.0 * sprite.get_height())) ) - for _j in range(max(times.x, times.y)): + for _j in range(maxi(times.x, times.y)): sprite.copy_from(scale_3x(sprite)) - sprite.resize(width, height, 0) + sprite.resize(width, height, Image.INTERPOLATE_NEAREST) elif interpolation == Interpolation.CLEANEDGE: - var params := {"angle": 0, "slope": true, "cleanup": true, "preview": false} var gen := ShaderImageEffect.new() - gen.generate_image(sprite, clean_edge_shader, params, Vector2(width, height)) + gen.generate_image(sprite, clean_edge_shader, {}, Vector2i(width, height)) elif interpolation == Interpolation.OMNISCALE and omniscale_shader: - var params := {"angle": 0, "preview": false} var gen := ShaderImageEffect.new() - gen.generate_image(sprite, omniscale_shader, params, Vector2(width, height)) + gen.generate_image(sprite, omniscale_shader, {}, Vector2i(width, height)) else: sprite.resize(width, height, interpolation) Global.current_project.undo_redo.add_do_property(f.cels[i].image, "data", sprite.data) @@ -463,56 +443,54 @@ func scale_image(width: int, height: int, interpolation: int) -> void: func center(indices: Array) -> void: - var project: Project = Global.current_project + var project := Global.current_project Global.canvas.selection.transform_content_confirm() project.undos += 1 project.undo_redo.create_action("Center Frames") for frame in indices: # Find used rect of the current frame (across all of the layers) - var used_rect := Rect2() + var used_rect := Rect2i() for cel in project.frames[frame].cels: if not cel is PixelCel: continue - var cel_rect: Rect2 = cel.image.get_used_rect() - if not cel_rect.has_no_area(): - used_rect = cel_rect if used_rect.has_no_area() else used_rect.merge(cel_rect) - if used_rect.has_no_area(): + var cel_rect := cel.get_image().get_used_rect() + if cel_rect.has_area(): + used_rect = used_rect.merge(cel_rect) if used_rect.has_area() else cel_rect + if not used_rect.has_area(): continue # Now apply centering - var offset: Vector2 = (0.5 * (project.size - used_rect.size)).floor() + var offset: Vector2i = (0.5 * (project.size - used_rect.size)).floor() for cel in project.frames[frame].cels: if not cel is PixelCel: continue - var sprite := Image.new() - sprite.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) + var sprite := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) sprite.blend_rect(cel.image, used_rect, offset) project.undo_redo.add_do_property(cel.image, "data", sprite.data) project.undo_redo.add_undo_property(cel.image, "data", cel.image.data) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) project.undo_redo.commit_action() func crop_image() -> void: Global.canvas.selection.transform_content_confirm() - var used_rect := Rect2() + var used_rect := Rect2i() for f in Global.current_project.frames: for cel in f.cels: if not cel is PixelCel: continue - cel.image.unlock() # May be unneeded now, but keep it just in case - var cel_used_rect: Rect2 = cel.image.get_used_rect() - if cel_used_rect == Rect2(0, 0, 0, 0): # If the cel has no content + var cel_used_rect := cel.get_image().get_used_rect() + if cel_used_rect == Rect2i(0, 0, 0, 0): # If the cel has no content continue - if used_rect == Rect2(0, 0, 0, 0): # If we still haven't found the first cel with content + if used_rect == Rect2i(0, 0, 0, 0): # If we still haven't found the first cel with content used_rect = cel_used_rect else: used_rect = used_rect.merge(cel_used_rect) # If no layer has any content, just return - if used_rect == Rect2(0, 0, 0, 0): + if used_rect == Rect2i(0, 0, 0, 0): return var width := used_rect.size.x @@ -523,7 +501,7 @@ func crop_image() -> void: for cel in f.cels: if not cel is PixelCel: continue - var sprite: Image = cel.image.get_rect(used_rect) + var sprite := cel.get_image().get_region(used_rect) Global.current_project.undo_redo.add_do_property(cel.image, "data", sprite.data) Global.current_project.undo_redo.add_undo_property(cel.image, "data", cel.image.data) @@ -536,12 +514,11 @@ func resize_canvas(width: int, height: int, offset_x: int, offset_y: int) -> voi for c in f.cels: if not c is PixelCel: continue - var sprite := Image.new() - sprite.create(width, height, false, Image.FORMAT_RGBA8) + var sprite := Image.create(width, height, false, Image.FORMAT_RGBA8) sprite.blend_rect( - c.image, - Rect2(Vector2.ZERO, Global.current_project.size), - Vector2(offset_x, offset_y) + c.get_image(), + Rect2i(Vector2i.ZERO, Global.current_project.size), + Vector2i(offset_x, offset_y) ) Global.current_project.undo_redo.add_do_property(c.image, "data", sprite.data) Global.current_project.undo_redo.add_undo_property(c.image, "data", c.image.data) @@ -550,19 +527,19 @@ func resize_canvas(width: int, height: int, offset_x: int, offset_y: int) -> voi func general_do_scale(width: int, height: int) -> void: - var project: Project = Global.current_project - var size := Vector2(width, height).floor() - var x_ratio = project.size.x / width - var y_ratio = project.size.y / height + var project := Global.current_project + var size := Vector2i(width, height) + var x_ratio := float(project.size.x) / width + var y_ratio := float(project.size.y) / height var selection_map_copy := SelectionMap.new() selection_map_copy.copy_from(project.selection_map) selection_map_copy.crop(size.x, size.y) - var new_x_symmetry_point = project.x_symmetry_point / x_ratio - var new_y_symmetry_point = project.y_symmetry_point / y_ratio - var new_x_symmetry_axis_points = project.x_symmetry_axis.points - var new_y_symmetry_axis_points = project.y_symmetry_axis.points + var new_x_symmetry_point := project.x_symmetry_point / x_ratio + var new_y_symmetry_point := project.y_symmetry_point / y_ratio + var new_x_symmetry_axis_points := project.x_symmetry_axis.points + var new_y_symmetry_axis_points := project.y_symmetry_axis.points new_x_symmetry_axis_points[0].y /= y_ratio new_x_symmetry_axis_points[1].y /= y_ratio new_y_symmetry_axis_points[0].x /= x_ratio @@ -579,7 +556,7 @@ func general_do_scale(width: int, height: int) -> void: func general_undo_scale() -> void: - var project: Project = Global.current_project + var project := Global.current_project project.undo_redo.add_undo_property(project, "size", project.size) project.undo_redo.add_undo_property(project, "selection_map", project.selection_map) project.undo_redo.add_undo_property(project, "x_symmetry_point", project.x_symmetry_point) @@ -590,180 +567,6 @@ func general_undo_scale() -> void: project.undo_redo.add_undo_property( project.y_symmetry_axis, "points", project.y_symmetry_axis.points ) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) project.undo_redo.commit_action() - - -func generate_outline( - image: Image, - affect_selection: bool, - project: Project, - outline_color: Color, - thickness: int, - diagonal: bool, - inside_image: bool -) -> void: - if image.is_invisible(): - return - var new_image := Image.new() - new_image.copy_from(image) - new_image.lock() - image.lock() - - for x in project.size.x: - for y in project.size.y: - var pos := Vector2(x, y) - var current_pixel := image.get_pixelv(pos) - if affect_selection and !project.can_pixel_get_drawn(pos): - continue - if current_pixel.a == 0: - continue - - for i in range(1, thickness + 1): - if inside_image: - var outline_pos: Vector2 = pos + Vector2.LEFT # Left - if outline_pos.x < 0 || image.get_pixelv(outline_pos).a == 0: - var new_pos: Vector2 = pos + Vector2.RIGHT * (i - 1) - if new_pos.x < Global.current_project.size.x: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a > 0: - new_image.set_pixelv(new_pos, outline_color) - - outline_pos = pos + Vector2.RIGHT # Right - if ( - outline_pos.x >= Global.current_project.size.x - || image.get_pixelv(outline_pos).a == 0 - ): - var new_pos: Vector2 = pos + Vector2.LEFT * (i - 1) - if new_pos.x >= 0: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a > 0: - new_image.set_pixelv(new_pos, outline_color) - - outline_pos = pos + Vector2.UP # Up - if outline_pos.y < 0 || image.get_pixelv(outline_pos).a == 0: - var new_pos: Vector2 = pos + Vector2.DOWN * (i - 1) - if new_pos.y < Global.current_project.size.y: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a > 0: - new_image.set_pixelv(new_pos, outline_color) - - outline_pos = pos + Vector2.DOWN # Down - if ( - outline_pos.y >= Global.current_project.size.y - || image.get_pixelv(outline_pos).a == 0 - ): - var new_pos: Vector2 = pos + Vector2.UP * (i - 1) - if new_pos.y >= 0: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a > 0: - new_image.set_pixelv(new_pos, outline_color) - - if diagonal: - outline_pos = pos + (Vector2.LEFT + Vector2.UP) # Top left - if ( - (outline_pos.x < 0 && outline_pos.y < 0) - || image.get_pixelv(outline_pos).a == 0 - ): - var new_pos: Vector2 = pos + (Vector2.RIGHT + Vector2.DOWN) * (i - 1) - if ( - new_pos.x < Global.current_project.size.x - && new_pos.y < Global.current_project.size.y - ): - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a > 0: - new_image.set_pixelv(new_pos, outline_color) - - outline_pos = pos + (Vector2.LEFT + Vector2.DOWN) # Bottom left - if ( - (outline_pos.x < 0 && outline_pos.y >= Global.current_project.size.y) - || image.get_pixelv(outline_pos).a == 0 - ): - var new_pos: Vector2 = pos + (Vector2.RIGHT + Vector2.UP) * (i - 1) - if new_pos.x < Global.current_project.size.x && new_pos.y >= 0: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a > 0: - new_image.set_pixelv(new_pos, outline_color) - - outline_pos = pos + (Vector2.RIGHT + Vector2.UP) # Top right - if ( - (outline_pos.x >= Global.current_project.size.x && outline_pos.y < 0) - || image.get_pixelv(outline_pos).a == 0 - ): - var new_pos: Vector2 = pos + (Vector2.LEFT + Vector2.DOWN) * (i - 1) - if new_pos.x >= 0 && new_pos.y < Global.current_project.size.y: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a > 0: - new_image.set_pixelv(new_pos, outline_color) - - outline_pos = pos + (Vector2.RIGHT + Vector2.DOWN) # Bottom right - if ( - ( - outline_pos.x >= Global.current_project.size.x - && outline_pos.y >= Global.current_project.size.y - ) - || image.get_pixelv(outline_pos).a == 0 - ): - var new_pos: Vector2 = pos + (Vector2.LEFT + Vector2.UP) * (i - 1) - if new_pos.x >= 0 && new_pos.y >= 0: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a > 0: - new_image.set_pixelv(new_pos, outline_color) - - else: - var new_pos: Vector2 = pos + Vector2.LEFT * i # Left - if new_pos.x >= 0: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a == 0: - new_image.set_pixelv(new_pos, outline_color) - - new_pos = pos + Vector2.RIGHT * i # Right - if new_pos.x < Global.current_project.size.x: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a == 0: - new_image.set_pixelv(new_pos, outline_color) - - new_pos = pos + Vector2.UP * i # Up - if new_pos.y >= 0: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a == 0: - new_image.set_pixelv(new_pos, outline_color) - - new_pos = pos + Vector2.DOWN * i # Down - if new_pos.y < Global.current_project.size.y: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a == 0: - new_image.set_pixelv(new_pos, outline_color) - - if diagonal: - new_pos = pos + (Vector2.LEFT + Vector2.UP) * i # Top left - if new_pos.x >= 0 && new_pos.y >= 0: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a == 0: - new_image.set_pixelv(new_pos, outline_color) - - new_pos = pos + (Vector2.LEFT + Vector2.DOWN) * i # Bottom left - if new_pos.x >= 0 && new_pos.y < Global.current_project.size.y: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a == 0: - new_image.set_pixelv(new_pos, outline_color) - - new_pos = pos + (Vector2.RIGHT + Vector2.UP) * i # Top right - if new_pos.x < Global.current_project.size.x && new_pos.y >= 0: - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a == 0: - new_image.set_pixelv(new_pos, outline_color) - - new_pos = pos + (Vector2.RIGHT + Vector2.DOWN) * i # Bottom right - if ( - new_pos.x < Global.current_project.size.x - && new_pos.y < Global.current_project.size.y - ): - var new_pixel = image.get_pixelv(new_pos) - if new_pixel.a == 0: - new_image.set_pixelv(new_pos, outline_color) - - image.unlock() - new_image.unlock() - image.copy_from(new_image) diff --git a/src/Autoload/ErrorManager.gd b/src/Autoload/ErrorManager.gd deleted file mode 100644 index 619440bf85e..00000000000 --- a/src/Autoload/ErrorManager.gd +++ /dev/null @@ -1,108 +0,0 @@ -extends Node - - -func parse(error: int, start := "", end := ""): - var message: String - match error: - OK: - message = "everything is fine" - FAILED: - message = "Generic error." - ERR_UNAVAILABLE: - message = "Unavailable error." - ERR_UNCONFIGURED: - message = "Unconfigured error." - ERR_UNAUTHORIZED: - message = "Unauthorized error." - ERR_PARAMETER_RANGE_ERROR: - message = "Parameter range error." - ERR_OUT_OF_MEMORY: - message = "Out of memory (OOM) error." - ERR_FILE_NOT_FOUND: - message = "File: Not found error." - ERR_FILE_BAD_DRIVE: - message = "File: Bad drive error." - ERR_FILE_BAD_PATH: - message = "File: Bad path error." - ERR_FILE_NO_PERMISSION: - message = "File: No permission error." - ERR_FILE_ALREADY_IN_USE: - message = "File: Already in use error." - ERR_FILE_CANT_OPEN: - message = "File: Can't open error." - ERR_FILE_CANT_WRITE: - message = "File: Can't write error." - ERR_FILE_CANT_READ: - message = "File: Can't read error." - ERR_FILE_UNRECOGNIZED: - message = "File: Unrecognized error." - ERR_FILE_CORRUPT: - message = "File: Corrupt error." - ERR_FILE_MISSING_DEPENDENCIES: - message = "File: Missing dependencies error." - ERR_FILE_EOF: - message = "File: End of file (EOF) error." - ERR_CANT_OPEN: - message = "Can't open error." - ERR_CANT_CREATE: - message = "Can't create error." - ERR_QUERY_FAILED: - message = "Query failed error." - ERR_ALREADY_IN_USE: - message = "Already in use error." - ERR_LOCKED: - message = "Locked error." - ERR_TIMEOUT: - message = "Timeout error." - ERR_CANT_CONNECT: - message = "Can't connect error." - ERR_CANT_RESOLVE: - message = "Can't resolve error." - ERR_CONNECTION_ERROR: - message = "Connection error." - ERR_CANT_ACQUIRE_RESOURCE: - message = "Can't acquire resource error." - ERR_CANT_FORK: - message = "Can't fork process error." - ERR_INVALID_DATA: - message = "Invalid data error." - ERR_INVALID_PARAMETER: - message = "Invalid parameter error." - ERR_ALREADY_EXISTS: - message = "Already exists error." - ERR_DOES_NOT_EXIST: - message = "Does not exist error." - ERR_DATABASE_CANT_READ: - message = "Database: Read error." - ERR_DATABASE_CANT_WRITE: - message = "Database: Write error." - ERR_COMPILATION_FAILED: - message = "Compilation failed error." - ERR_METHOD_NOT_FOUND: - message = "Method not found error." - ERR_LINK_FAILED: - message = "Linking failed error." - ERR_SCRIPT_FAILED: - message = "Script failed error." - ERR_CYCLIC_LINK: - message = "Cycling link (import cycle) error." - ERR_INVALID_DECLARATION: - message = "Invalid declaration error." - ERR_DUPLICATE_SYMBOL: - message = "Duplicate symbol error." - ERR_PARSE_ERROR: - message = "Parse error." - ERR_BUSY: - message = "Busy error." - ERR_SKIP: - message = "Skip error." - ERR_HELP: - message = "Help error." - ERR_BUG: - message = "Bug error." - ERR_PRINTER_ON_FIRE: -# gdlint: ignore=max-line-length - message = "Printer on fire error. (This is an easter egg, no engine methods return this error code.)" - _: - message = "Unknown error" - return str(start, message, end) diff --git a/src/Autoload/Export.gd b/src/Autoload/Export.gd index f91a129cb85..837cffd37ac 100644 --- a/src/Autoload/Export.gd +++ b/src/Autoload/Export.gd @@ -3,62 +3,64 @@ extends Node enum ExportTab { IMAGE = 0, SPRITESHEET = 1 } enum Orientation { ROWS = 0, COLUMNS = 1 } enum AnimationDirection { FORWARD = 0, BACKWARDS = 1, PING_PONG = 2 } -# See file_format_string, file_format_description, and ExportDialog.gd +## See file_format_string, file_format_description, and ExportDialog.gd enum FileFormat { PNG = 0, GIF = 1, APNG = 2 } -# list of animated formats +## List of animated formats var animated_formats := [FileFormat.GIF, FileFormat.APNG] -# A dictionary of custom exporter generators (received from extensions) +## A dictionary of custom exporter generators (received from extensions) var custom_exporter_generators := {} -var current_tab: int = ExportTab.IMAGE -# All frames and their layers processed/blended into images -var processed_images := [] # Image[] -var durations := [] # Array of floats +var current_tab := ExportTab.IMAGE +## All frames and their layers processed/blended into images +var processed_images: Array[Image] = [] +var durations: PackedFloat32Array = [] # Spritesheet options -var orientation: int = Orientation.ROWS -var lines_count := 1 # How many rows/columns before new line is added +var orientation := Orientation.ROWS +var lines_count := 1 ## How many rows/columns before new line is added # General options -var frame_current_tag := 0 # Export only current frame tag +var frame_current_tag := 0 ## Export only current frame tag var export_layers := 0 var number_of_frames := 1 -var direction: int = AnimationDirection.FORWARD +var direction := AnimationDirection.FORWARD var resize := 100 -var interpolation := 0 # Image.Interpolation +var interpolation := Image.INTERPOLATE_NEAREST var include_tag_in_filename := false -var new_dir_for_each_frame_tag := false # we don't need to store this after export +var new_dir_for_each_frame_tag := false ## We don't need to store this after export var number_of_digits := 4 var separator_character := "_" - -# Export coroutine signal -var stop_export := false +var stop_export := false ## Export coroutine signal var file_exists_alert := "The following files already exist. Do you wish to overwrite them?\n%s" # Export progress variables var export_progress_fraction := 0.0 var export_progress := 0.0 -onready var gif_export_thread := Thread.new() +@onready var gif_export_thread := Thread.new() func _exit_tree() -> void: - if gif_export_thread.is_active(): + if gif_export_thread.is_started(): gif_export_thread.wait_to_finish() -func add_file_format(name: String) -> int: +func _multithreading_enabled() -> bool: + return ProjectSettings.get_setting("rendering/driver/threads/thread_model") == 2 + + +func add_file_format(_format: String) -> int: var id := FileFormat.size() - FileFormat.merge({name: id}) +# FileFormat.merge({format: id}) return id func remove_file_format(id: int) -> void: for key in Export.FileFormat.keys(): if Export.FileFormat[key] == id: - Export.FileFormat.erase(key) +# Export.FileFormat.erase(key) return @@ -78,28 +80,23 @@ func process_data(project := Global.current_project) -> void: func process_spritesheet(project := Global.current_project) -> void: processed_images.clear() # Range of frames determined by tags - var frames := calculate_frames(project) + var frames := _calculate_frames(project) # Then store the size of frames for other functions number_of_frames = frames.size() # If rows mode selected calculate columns count and vice versa var spritesheet_columns := ( - lines_count - if orientation == Orientation.ROWS - else frames_divided_by_spritesheet_lines() + lines_count if orientation == Orientation.ROWS else frames_divided_by_spritesheet_lines() ) var spritesheet_rows := ( - lines_count - if orientation == Orientation.COLUMNS - else frames_divided_by_spritesheet_lines() + lines_count if orientation == Orientation.COLUMNS else frames_divided_by_spritesheet_lines() ) var width := project.size.x * spritesheet_columns var height := project.size.y * spritesheet_rows - var whole_image := Image.new() - whole_image.create(width, height, false, Image.FORMAT_RGBA8) - var origin := Vector2.ZERO + var whole_image := Image.create(width, height, false, Image.FORMAT_RGBA8) + var origin := Vector2i.ZERO var hh := 0 var vv := 0 @@ -122,7 +119,7 @@ func process_spritesheet(project := Global.current_project) -> void: origin.y = 0 hh = 1 origin.x = project.size.x * vv - blend_layers(whole_image, frame, origin) + _blend_layers(whole_image, frame, origin) processed_images.append(whole_image) @@ -130,17 +127,16 @@ func process_spritesheet(project := Global.current_project) -> void: func process_animation(project := Global.current_project) -> void: processed_images.clear() durations.clear() - var frames := calculate_frames(project) + var frames := _calculate_frames(project) for frame in frames: - var image := Image.new() - image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) - blend_layers(image, frame) + var image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) + _blend_layers(image, frame) processed_images.append(image) durations.append(frame.duration * (1.0 / project.fps)) -func calculate_frames(project := Global.current_project) -> Array: - var frames := [] +func _calculate_frames(project := Global.current_project) -> Array[Frame]: + var frames: Array[Frame] = [] if frame_current_tag > 1: # Specific tag var frame_start: int = project.animation_tags[frame_current_tag - 2].from var frame_end: int = project.animation_tags[frame_current_tag - 2].to @@ -152,11 +148,11 @@ func calculate_frames(project := Global.current_project) -> Array: frames = project.frames.duplicate() if direction == AnimationDirection.BACKWARDS: - frames.invert() + frames.reverse() elif direction == AnimationDirection.PING_PONG: var inverted_frames := frames.duplicate() - inverted_frames.invert() - inverted_frames.remove(0) + inverted_frames.reverse() + inverted_frames.remove_at(0) frames.append_array(inverted_frames) return frames @@ -165,7 +161,7 @@ func export_processed_images( ignore_overwrites: bool, export_dialog: ConfirmationDialog, project := Global.current_project ) -> bool: # Stop export if directory path or file name are not valid - var dir := Directory.new() + var dir := DirAccess.open(project.directory_path) if not dir.dir_exists(project.directory_path) or not project.file_name.is_valid_filename(): if not dir.dir_exists(project.directory_path) and project.file_name.is_valid_filename(): export_dialog.open_path_validation_alert_popup(0) @@ -179,23 +175,22 @@ func export_processed_images( if current_tab == ExportTab.IMAGE and not is_single_file_format(project): multiple_files = true if processed_images.size() > 1 else false # Check export paths - var export_paths := [] + var export_paths: PackedStringArray = [] var paths_of_existing_files := "" for i in range(processed_images.size()): stop_export = false - var export_path := create_export_path(multiple_files, project, i + 1) + var export_path := _create_export_path(multiple_files, project, i + 1) # If the user wants to create a new directory for each animation tag then check # if directories exist, and create them if not if multiple_files and new_dir_for_each_frame_tag: - var frame_tag_directory := Directory.new() + var frame_tag_directory := DirAccess.open(export_path.get_base_dir()) if not frame_tag_directory.dir_exists(export_path.get_base_dir()): - frame_tag_directory.open(project.directory_path) + frame_tag_directory = DirAccess.open(project.directory_path) frame_tag_directory.make_dir(export_path.get_base_dir().get_file()) if not ignore_overwrites: # Check if the files already exist - var file_check: File = File.new() - if file_check.file_exists(export_path): - if not paths_of_existing_files.empty(): + if FileAccess.file_exists(export_path): + if not paths_of_existing_files.is_empty(): paths_of_existing_files += "\n" paths_of_existing_files += export_path export_paths.append(export_path) @@ -203,15 +198,15 @@ func export_processed_images( if is_single_file_format(project): break - if not paths_of_existing_files.empty(): # If files already exist + if not paths_of_existing_files.is_empty(): # If files already exist # Ask user if they want to overwrite the files export_dialog.open_file_exists_alert_popup(tr(file_exists_alert) % paths_of_existing_files) # Stops the function until the user decides if they want to overwrite - yield(export_dialog, "resume_export_function") + await export_dialog.resume_export_function if stop_export: # User decided to stop export - return + return false - scale_processed_images() + _scale_processed_images() # override if a custom export is chosen if project.file_format in custom_exporter_generators.keys(): @@ -226,10 +221,12 @@ func export_processed_images( "export_paths": export_paths, "project": project } - if OS.get_name() != "HTML5" and is_single_file_format(project): - if gif_export_thread.is_active(): + if _multithreading_enabled() and is_single_file_format(project): + if gif_export_thread.is_started(): gif_export_thread.wait_to_finish() - var error = gif_export_thread.start(custom_exporter, "override_export", details) + var error = gif_export_thread.start( + Callable(custom_exporter, "override_export").bind(details) + ) if error == OK: result = gif_export_thread.wait_to_finish() else: @@ -248,29 +245,26 @@ func export_processed_images( "export_paths": export_paths, "project": project } - if OS.get_name() == "HTML5": + if not _multithreading_enabled(): export_animated(details) else: - if gif_export_thread.is_active(): + if gif_export_thread.is_started(): gif_export_thread.wait_to_finish() - gif_export_thread.start(self, "export_animated", details) + gif_export_thread.start(export_animated.bind(details)) else: var succeeded := true for i in range(processed_images.size()): - if OS.get_name() == "HTML5": - JavaScript.download_buffer( + if OS.has_feature("web"): + JavaScriptBridge.download_buffer( processed_images[i].save_png_to_buffer(), export_paths[i].get_file(), "image/png" ) else: - var err: int = processed_images[i].save_png(export_paths[i]) + var err := processed_images[i].save_png(export_paths[i]) if err != OK: Global.error_dialog.set_text( - ( - tr("File failed to save. Error code %s") - % str(err, ErrorManager.parse(err, " (", ")")) - ) + tr("File failed to save. Error code %s (%s)") % [err, error_string(err)] ) Global.error_dialog.popup_centered() Global.dialog_open(true) @@ -300,14 +294,14 @@ func export_animated(args: Dictionary) -> void: # Export progress popup # One fraction per each frame, one fraction for write to disk - export_progress_fraction = 100.0 / len(processed_images) + export_progress_fraction = 100.0 / processed_images.size() export_progress = 0.0 export_dialog.set_export_progress_bar(export_progress) export_dialog.toggle_export_progress_popup(true) # Transform into AImgIO form var frames := [] - for i in range(len(processed_images)): + for i in range(processed_images.size()): var frame: AImgIOFrame = AImgIOFrame.new() frame.content = processed_images[i] frame.duration = durations[i] @@ -315,29 +309,27 @@ func export_animated(args: Dictionary) -> void: # Export and save GIF/APNG var file_data := exporter.export_animation( - frames, project.fps, self, "increase_export_progress", [export_dialog] + frames, project.fps, self, "_increase_export_progress", [export_dialog] ) - if OS.get_name() == "HTML5": - JavaScript.download_buffer(file_data, args["export_paths"][0], exporter.mime_type) + if OS.has_feature("web"): + JavaScriptBridge.download_buffer(file_data, args["export_paths"][0], exporter.mime_type) else: - var file: File = File.new() - file.open(args["export_paths"][0], File.WRITE) + var file := FileAccess.open(args["export_paths"][0], FileAccess.WRITE) file.store_buffer(file_data) file.close() export_dialog.toggle_export_progress_popup(false) Global.notification_label("File(s) exported") -func increase_export_progress(export_dialog: Node) -> void: +func _increase_export_progress(export_dialog: Node) -> void: export_progress += export_progress_fraction export_dialog.set_export_progress_bar(export_progress) -func scale_processed_images() -> void: +func _scale_processed_images() -> void: for processed_image in processed_images: if resize != 100: - processed_image.unlock() processed_image.resize( processed_image.get_size().x * resize / 100, processed_image.get_size().y * resize / 100, @@ -362,8 +354,8 @@ func file_format_string(format_enum: int) -> String: func file_format_description(format_enum: int) -> String: match format_enum: - # these are overrides - # (if they are not given, they will generate themselves based on the enum key name) + # these are overrides + # (if they are not given, they will generate themselves based on the enum key name) FileFormat.PNG: return "PNG Image" FileFormat.GIF: @@ -378,18 +370,18 @@ func file_format_description(format_enum: int) -> String: return "" +## True when exporting to .gif and .apng (and potentially video formats in the future) +## False when exporting to .png, and other non-animated formats in the future func is_single_file_format(project := Global.current_project) -> bool: - # True when exporting to .gif and .apng (and potentially video formats in the future) - # False when exporting to .png, and other non-animated formats in the future return animated_formats.has(project.file_format) -func create_export_path(multifile: bool, project: Project, frame: int = 0) -> String: +func _create_export_path(multifile: bool, project: Project, frame := 0) -> String: var path := project.file_name # Only append frame number when there are multiple files exported if multifile: - var path_extras := separator_character + String(frame).pad_zeros(number_of_digits) - var frame_tag_and_start_id := get_proccessed_image_animation_tag_and_start_id( + var path_extras := separator_character + str(frame).pad_zeros(number_of_digits) + var frame_tag_and_start_id := _get_proccessed_image_animation_tag_and_start_id( project, frame - 1 ) # Check if exported frame is in frame tag @@ -402,24 +394,21 @@ func create_export_path(multifile: bool, project: Project, frame: int = 0) -> St var frame_tag_dir := regex.sub(frame_tag, "", true) if include_tag_in_filename: # (frame - start_id + 1) makes frames id to start from 1 - var tag_frame_number := String(frame - start_id + 1).pad_zeros(number_of_digits) + var tag_frame_number := str(frame - start_id + 1).pad_zeros(number_of_digits) path_extras = ( - separator_character - + frame_tag_dir - + separator_character - + tag_frame_number + separator_character + frame_tag_dir + separator_character + tag_frame_number ) if new_dir_for_each_frame_tag: path += path_extras - return project.directory_path.plus_file(frame_tag_dir).plus_file( + return project.directory_path.path_join(frame_tag_dir).path_join( path + file_format_string(project.file_format) ) path += path_extras - return project.directory_path.plus_file(path + file_format_string(project.file_format)) + return project.directory_path.path_join(path + file_format_string(project.file_format)) -func get_proccessed_image_animation_tag_and_start_id( +func _get_proccessed_image_animation_tag_and_start_id( project: Project, processed_image_id: int ) -> Array: var result_animation_tag_and_start_id = null @@ -435,26 +424,26 @@ func get_proccessed_image_animation_tag_and_start_id( return result_animation_tag_and_start_id -func blend_layers( - image: Image, frame: Frame, origin := Vector2.ZERO, project := Global.current_project +func _blend_layers( + image: Image, frame: Frame, origin := Vector2i.ZERO, project := Global.current_project ) -> void: if export_layers == 0: blend_all_layers(image, frame, origin, project) elif export_layers == 1: blend_selected_cels(image, frame, origin, project) else: - var layer: BaseLayer = project.layers[export_layers - 2] + var layer := project.layers[export_layers - 2] var layer_image := Image.new() if layer is GroupLayer: - layer_image.copy_from(layer.blend_children(frame, Vector2.ZERO)) + layer_image.copy_from(layer.blend_children(frame, Vector2i.ZERO)) else: layer_image.copy_from(frame.cels[export_layers - 2].get_image()) - image.blend_rect(layer_image, Rect2(Vector2.ZERO, project.size), origin) + image.blend_rect(layer_image, Rect2i(Vector2i.ZERO, project.size), origin) -# Blends canvas layers into passed image starting from the origin position +## Blends canvas layers into passed image starting from the origin position func blend_all_layers( - image: Image, frame: Frame, origin := Vector2.ZERO, project := Global.current_project + image: Image, frame: Frame, origin := Vector2i.ZERO, project := Global.current_project ) -> void: var layer_i := 0 for cel in frame.cels: @@ -467,7 +456,6 @@ func blend_all_layers( var cel_image := Image.new() cel_image.copy_from(cel.get_image()) if cel.opacity < 1: # If we have cel transparency - cel_image.lock() for xx in cel_image.get_size().x: for yy in cel_image.get_size().y: var pixel_color := cel_image.get_pixel(xx, yy) @@ -475,14 +463,13 @@ func blend_all_layers( cel_image.set_pixel( xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha) ) - cel_image.unlock() - image.blend_rect(cel_image, Rect2(Vector2.ZERO, project.size), origin) + image.blend_rect(cel_image, Rect2i(Vector2i.ZERO, project.size), origin) layer_i += 1 -# Blends selected cels of the given frame into passed image starting from the origin position +## Blends selected cels of the given frame into passed image starting from the origin position func blend_selected_cels( - image: Image, frame: Frame, origin := Vector2(0, 0), project := Global.current_project + image: Image, frame: Frame, origin := Vector2i.ZERO, project := Global.current_project ) -> void: for cel_ind in frame.cels.size(): var test_array := [project.current_frame, cel_ind] @@ -496,7 +483,6 @@ func blend_selected_cels( var cel_image := Image.new() cel_image.copy_from(cel.get_image()) if cel.opacity < 1: # If we have cel transparency - cel_image.lock() for xx in cel_image.get_size().x: for yy in cel_image.get_size().y: var pixel_color := cel_image.get_pixel(xx, yy) @@ -504,9 +490,8 @@ func blend_selected_cels( cel_image.set_pixel( xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha) ) - cel_image.unlock() - image.blend_rect(cel_image, Rect2(Vector2.ZERO, project.size), origin) + image.blend_rect(cel_image, Rect2i(Vector2i.ZERO, project.size), origin) func frames_divided_by_spritesheet_lines() -> int: - return int(ceil(number_of_frames / float(lines_count))) + return ceili(number_of_frames / float(lines_count)) diff --git a/src/Autoload/ExtensionsAPI.gd b/src/Autoload/ExtensionsAPI.gd index 355237f9353..c3c88ffaa04 100644 --- a/src/Autoload/ExtensionsAPI.gd +++ b/src/Autoload/ExtensionsAPI.gd @@ -1,6 +1,6 @@ extends Node -# use these variables in your extension to access the api +# Use these variables in your extension to access the api var general := GeneralAPI.new() var menu := MenuAPI.new() var dialog := DialogAPI.new() @@ -12,7 +12,7 @@ var project := ProjectAPI.new() var exports := ExportAPI.new() var signals := SignalsAPI.new() -# This fail-safe below is designed to work ONLY if Pixelorama is launched in Godot Editor +## This fail-safe below is designed to work ONLY if Pixelorama is launched in Godot Editor var _action_history: Dictionary = {} @@ -54,12 +54,12 @@ func remove_action(action: String): func wait_frame(): # as yield is not available to classes below, so this is the solution # use by yield(ExtensionsApi.wait_frame(), "completed") - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + await get_tree().process_frame + await get_tree().process_frame func _get_caller_extension_name() -> String: - var stack = get_stack() + var stack := get_stack() for trace in stack: # Get extension name that called the action var arr: Array = trace["source"].split("/") @@ -197,13 +197,13 @@ class PanelAPI: # we must make tabs_visible = true for a few moments if it is false if dockable.tabs_visible == false: dockable.tabs_visible = true - yield(ExtensionsApi.wait_frame(), "completed") + await ExtensionsApi.wait_frame() dockable.tabs_visible = false ExtensionsApi.add_action("add_tab") func remove_node_from_tab(node: Node) -> void: var top_menu_container = Global.top_menu_container - var dockable = Global.control.find_node("DockableContainer") + var dockable = Global.control.find_child("DockableContainer") var panels_submenu: PopupMenu = top_menu_container.panels_submenu # find the tab that contains the node if node == null: @@ -227,13 +227,13 @@ class PanelAPI: # we must make tabs_visible = true for a few moments if it is false if dockable.tabs_visible == false: dockable.tabs_visible = true - yield(ExtensionsApi.wait_frame(), "completed") + await ExtensionsApi.wait_frame() dockable.tabs_visible = false ExtensionsApi.remove_action("add_tab") # PRIVATE METHODS func _get_dockable_container_ui() -> Node: - return Global.control.find_node("DockableContainer") + return Global.control.find_child("DockableContainer") func _find_tab_with_node(node_name: String, dockable_container): var root = dockable_container.layout.root @@ -290,22 +290,22 @@ class PanelAPI: class ThemeAPI: func add_theme(theme: Theme) -> void: - var themes: BoxContainer = Global.preferences_dialog.find_node("Themes") + var themes: BoxContainer = Global.preferences_dialog.find_child("Themes") themes.themes.append(theme) themes.add_theme(theme) ExtensionsApi.add_action("add_theme") func find_theme_index(theme: Theme) -> int: - var themes: BoxContainer = Global.preferences_dialog.find_node("Themes") + var themes: BoxContainer = Global.preferences_dialog.find_child("Themes") return themes.themes.find(theme) func get_theme() -> Theme: return Global.control.theme func set_theme(idx: int) -> bool: - var themes: BoxContainer = Global.preferences_dialog.find_node("Themes") + var themes: BoxContainer = Global.preferences_dialog.find_child("Themes") if idx >= 0 and idx < themes.themes.size(): - themes.buttons_container.get_child(idx).emit_signal("pressed") + themes.buttons_container.get_child(idx).pressed.emit() return true else: return false @@ -321,10 +321,10 @@ class ToolAPI: tool_name: String, display_name: String, shortcut: String, - scene: PackedScene, + scene: String, extra_hint := "", extra_shortucts := [], - layer_types: PoolIntArray = [] + layer_types: PackedInt32Array = [] ) -> void: var tool_class := Tools.Tool.new( tool_name, display_name, shortcut, scene, layer_types, extra_hint, extra_shortucts @@ -335,8 +335,8 @@ class ToolAPI: func remove_tool(tool_name: String) -> void: # Re-assigning the tools in case the tool to be removed is also active - Tools.assign_tool("Pencil", BUTTON_LEFT) - Tools.assign_tool("Eraser", BUTTON_RIGHT) + Tools.assign_tool("Pencil", MOUSE_BUTTON_LEFT) + Tools.assign_tool("Eraser", MOUSE_BUTTON_RIGHT) var tool_class: Tools.Tool = Tools.tools[tool_name] if tool_class: Tools.remove_tool(tool_class) @@ -350,11 +350,11 @@ class SelectionAPI: func select_all() -> void: Global.canvas.selection.select_all() - func select_rect(select_rect: Rect2, operation := 0) -> void: + func select_rect(rect: Rect2i, operation := 0) -> void: # 0 for adding, 1 for subtracting, 2 for intersection Global.canvas.selection.transform_content_confirm() var undo_data_tmp = Global.canvas.selection.get_undo_data(false) - Global.canvas.selection.select_rect(select_rect, operation) + Global.canvas.selection.select_rect(rect, operation) Global.canvas.selection.commit_undo("Select", undo_data_tmp) func move_selection(destination: Vector2, with_content := true, transform_standby := false): @@ -402,19 +402,19 @@ class ProjectAPI: frames := [], name := tr("untitled"), size := Vector2(64, 64), - fill_color := Color.transparent + fill_color := Color.TRANSPARENT ) -> Project: if !name.is_valid_filename(): name = tr("untitled") if size.x <= 0 or size.y <= 0: size.x = 1 size.y = 1 - var new_project := Project.new(frames, name, size.floor()) - new_project.layers.append(PixelLayer.new(new_project)) - new_project.fill_color = fill_color - new_project.frames.append(new_project.new_empty_frame()) - Global.projects.append(new_project) - return new_project + var new_proj := Project.new(frames, name, size.floor()) + new_proj.layers.append(PixelLayer.new(new_proj)) + new_proj.fill_color = fill_color + new_proj.frames.append(new_proj.new_empty_frame()) + Global.projects.append(new_proj) + return new_proj func switch_to(project: Project): Global.tabs.current_tab = Global.projects.find(project) @@ -442,7 +442,7 @@ class ProjectAPI: print("cel at frame ", frame, ", layer ", layer, " is not a PixelCel") func add_new_frame(after_frame: int): - var project = Global.current_project + var project := Global.current_project if after_frame < project.frames.size() and after_frame >= 0: var old_current = project.current_frame project.current_frame = after_frame # temporary assignment @@ -498,7 +498,7 @@ class ExportAPI: for i in Export.FileFormat.size(): # use an empty id if it's available if !Export.FileFormat.values().has(i): id = i - Export.FileFormat.merge({format_name: id}) +# Export.FileFormat.merge({format_name: id}) # add exporter generator Export.custom_exporter_generators.merge({id: [exporter_generator, extension]}) # add to animated (or not) @@ -536,50 +536,50 @@ class SignalsAPI: var _last_cel: BaseCel func _init() -> void: - Global.connect("project_changed", self, "_update_texture_signal") - Global.connect("cel_changed", self, "_update_texture_signal") + Global.project_changed.connect(_update_texture_signal) + Global.cel_changed.connect(_update_texture_signal) func _update_texture_signal(): if _last_cel: - _last_cel.disconnect("texture_changed", self, "_on_texture_changed") + _last_cel.texture_changed.disconnect(_on_texture_changed) if Global.current_project: _last_cel = Global.current_project.get_current_cel() - _last_cel.connect("texture_changed", self, "_on_texture_changed") + _last_cel.texture_changed.connect(_on_texture_changed) func _on_texture_changed(): - emit_signal("texture_changed") + texture_changed.emit() # Global signals func connect_project_changed(target: Object, method: String): - Global.connect("project_changed", target, method) + Global.project_changed.connect(Callable(target, method)) ExtensionsApi.add_action("project_changed") func disconnect_project_changed(target: Object, method: String): - Global.disconnect("project_changed", target, method) + Global.project_changed.disconnect(Callable(target, method)) ExtensionsApi.remove_action("project_changed") func connect_cel_changed(target: Object, method: String): - Global.connect("cel_changed", target, method) + Global.cel_changed.connect(Callable(target, method)) ExtensionsApi.add_action("cel_changed") func disconnect_cel_changed(target: Object, method: String): - Global.disconnect("cel_changed", target, method) + Global.cel_changed.disconnect(Callable(target, method)) ExtensionsApi.remove_action("cel_changed") # Tool Signal func connect_tool_color_changed(target: Object, method: String): - Tools.connect("color_changed", target, method) + Tools.color_changed.connect(Callable(target, method)) ExtensionsApi.add_action("color_changed") func disconnect_tool_color_changed(target: Object, method: String): - Tools.disconnect("color_changed", target, method) + Tools.color_changed.disconnect(Callable(target, method)) ExtensionsApi.remove_action("color_changed") # updater signals func connect_current_cel_texture_changed(target: Object, method: String): - connect("texture_changed", target, method) + texture_changed.connect(Callable(target, method)) ExtensionsApi.add_action("texture_changed") func disconnect_current_cel_texture_changed(target: Object, method: String): - disconnect("texture_changed", target, method) + texture_changed.disconnect(Callable(target, method)) ExtensionsApi.remove_action("texture_changed") diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 116c46899f3..006de6ba98a 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -42,27 +42,31 @@ enum ImageMenu { } enum SelectMenu { SELECT_ALL, CLEAR_SELECTION, INVERT, TILE_MODE } enum HelpMenu { - VIEW_SPLASH_SCREEN, - ONLINE_DOCS, - ISSUE_TRACKER, - OPEN_LOGS_FOLDER, - CHANGELOG, - ABOUT_PIXELORAMA + VIEW_SPLASH_SCREEN, ONLINE_DOCS, ISSUE_TRACKER, OPEN_LOGS_FOLDER, CHANGELOG, ABOUT_PIXELORAMA } const OVERRIDE_FILE := "override.cfg" +const HOME_SUBDIR_NAME := "pixelorama" +const CONFIG_SUBDIR_NAME := "pixelorama_data" var root_directory := "." -var window_title := "" setget _title_changed # Why doesn't Godot have get_window_title()? +var home_data_directory := OS.get_data_dir().path_join(HOME_SUBDIR_NAME) +var data_directories: PackedStringArray = [home_data_directory] ## Only read from these directories var config_cache := ConfigFile.new() -var XDGDataPaths = preload("res://src/XDGDataPaths.gd") -var directory_module: Reference -var projects := [] # Array of Projects +var projects: Array[Project] = [] var current_project: Project -var current_project_index := 0 setget _project_changed - -var ui_tooltips := {} +var current_project_index := 0: + set(value): + if value >= projects.size(): + return + canvas.selection.transform_content_confirm() + current_project_index = value + current_project = projects[value] + project_changed.connect(current_project.change_project) + project_changed.emit() + project_changed.disconnect(current_project.change_project) + cel_changed.emit() # Canvas related stuff var can_draw := false @@ -77,62 +81,210 @@ var show_y_symmetry_axis := false var open_last_project := false var quit_confirmation := false var smooth_zoom := true -var integer_zoom := false setget set_integer_zoom +var integer_zoom := false: + set(value): + integer_zoom = value + var zoom_slider: ValueSlider = top_menu_container.get_node("%ZoomSlider") + if value: + zoom_slider.min_value = 100 + zoom_slider.snap_step = 100 + zoom_slider.step = 100 + else: + zoom_slider.min_value = 1 + zoom_slider.snap_step = 1 + zoom_slider.step = 1 + zoom_slider.value = zoom_slider.value # to trigger signal emission var shrink := 1.0 +var font_size := 16: + set(value): + font_size = value + control.theme.default_font_size = value + control.theme.set_font_size("font_size", "HeaderSmall", value + 2) var dim_on_popup := true -var modulate_icon_color := Color.gray -var icon_color_from: int = ColorFrom.THEME -var modulate_clear_color := Color.gray -var clear_color_from: int = ColorFrom.THEME -var custom_icon_color := Color.gray -var tool_button_size: int = ButtonSize.SMALL -var left_tool_color := Color("0086cf") -var right_tool_color := Color("fd6d14") +var modulate_icon_color := Color.GRAY +var icon_color_from := ColorFrom.THEME: + set(value): + icon_color_from = value + var themes = preferences_dialog.themes + if icon_color_from == ColorFrom.THEME: + var current_theme: Theme = themes.themes[themes.theme_index] + modulate_icon_color = current_theme.get_color("modulate_color", "Icons") + else: + modulate_icon_color = custom_icon_color + themes.change_icon_colors() +var custom_icon_color := Color.GRAY: + set(value): + custom_icon_color = value + if icon_color_from == ColorFrom.CUSTOM: + modulate_icon_color = custom_icon_color + preferences_dialog.themes.change_icon_colors() +var modulate_clear_color := Color.GRAY: + set(value): + modulate_clear_color = value + preferences_dialog.themes.change_clear_color() +var clear_color_from := ColorFrom.THEME: + set(value): + clear_color_from = value + preferences_dialog.themes.change_clear_color() +var tool_button_size := ButtonSize.SMALL: + set(value): + tool_button_size = value + Tools.set_button_size(tool_button_size) +var left_tool_color := Color("0086cf"): + set(value): + left_tool_color = value + for child in Tools._tool_buttons.get_children(): + var background: NinePatchRect = child.get_node("BackgroundLeft") + background.modulate = value + Tools._slots[MOUSE_BUTTON_LEFT].tool_node.color_rect.color = value +var right_tool_color := Color("fd6d14"): + set(value): + right_tool_color = value + for child in Tools._tool_buttons.get_children(): + var background: NinePatchRect = child.get_node("BackgroundRight") + background.modulate = value + Tools._slots[MOUSE_BUTTON_RIGHT].tool_node.color_rect.color = value var default_width := 64 var default_height := 64 var default_fill_color := Color(0, 0, 0, 0) var snapping_distance := 32.0 -var grid_type = GridTypes.CARTESIAN -var grid_size := Vector2(2, 2) -var isometric_grid_size := Vector2(16, 8) -var grid_offset := Vector2.ZERO -var grid_draw_over_tile_mode := false -var grid_color := Color.black -var pixel_grid_show_at_zoom := 1500.0 # percentage -var pixel_grid_color := Color("91212121") -var guide_color := Color.purple -var checker_size := 10 -var checker_color_1 := Color(0.47, 0.47, 0.47, 1) -var checker_color_2 := Color(0.34, 0.35, 0.34, 1) -var checker_follow_movement := false -var checker_follow_scale := false +var grid_type := GridTypes.CARTESIAN: + set(value): + grid_type = value + canvas.grid.queue_redraw() +var grid_size := Vector2i(2, 2): + set(value): + grid_size = value + canvas.grid.queue_redraw() +var isometric_grid_size := Vector2i(16, 8): + set(value): + isometric_grid_size = value + canvas.grid.queue_redraw() +var grid_offset := Vector2i.ZERO: + set(value): + grid_offset = value + canvas.grid.queue_redraw() +var grid_draw_over_tile_mode := false: + set(value): + grid_draw_over_tile_mode = value + canvas.grid.queue_redraw() +var grid_color := Color.BLACK: + set(value): + grid_color = value + canvas.grid.queue_redraw() +var pixel_grid_show_at_zoom := 1500.0: # percentage + set(value): + pixel_grid_show_at_zoom = value + canvas.pixel_grid.queue_redraw() +var pixel_grid_color := Color("21212191"): + set(value): + pixel_grid_color = value + canvas.pixel_grid.queue_redraw() +var guide_color := Color.PURPLE: + set(value): + guide_color = value + for guide in canvas.get_children(): + if guide is Guide: + guide.set_color(guide_color) +var checker_size := 10: + set(value): + checker_size = value + transparent_checker.update_rect() +var checker_color_1 := Color(0.47, 0.47, 0.47, 1): + set(value): + checker_color_1 = value + transparent_checker.update_rect() +var checker_color_2 := Color(0.34, 0.35, 0.34, 1): + set(value): + checker_color_2 = value + transparent_checker.update_rect() +var checker_follow_movement := false: + set(value): + checker_follow_movement = value + transparent_checker.update_rect() +var checker_follow_scale := false: + set(value): + checker_follow_scale = value + transparent_checker.update_rect() var tilemode_opacity := 1.0 var select_layer_on_button_click := false -var onion_skinning_past_color := Color.red -var onion_skinning_future_color := Color.blue - -var selection_animated_borders := true -var selection_border_color_1 := Color.white -var selection_border_color_2 := Color.black +var onion_skinning_past_color := Color.RED: + set(value): + onion_skinning_past_color = value + canvas.onion_past.blue_red_color = value + canvas.onion_past.queue_redraw() +var onion_skinning_future_color := Color.BLUE: + set(value): + onion_skinning_future_color = value + canvas.onion_future.blue_red_color = value + canvas.onion_future.queue_redraw() + +var selection_animated_borders := true: + set(value): + selection_animated_borders = value + var marching_ants: Sprite2D = canvas.selection.marching_ants_outline + marching_ants.material.set_shader_parameter("animated", selection_animated_borders) +var selection_border_color_1 := Color.WHITE: + set(value): + selection_border_color_1 = value + var marching_ants: Sprite2D = canvas.selection.marching_ants_outline + marching_ants.material.set_shader_parameter("first_color", selection_border_color_1) + canvas.selection.queue_redraw() +var selection_border_color_2 := Color.BLACK: + set(value): + selection_border_color_2 = value + var marching_ants: Sprite2D = canvas.selection.marching_ants_outline + marching_ants.material.set_shader_parameter("second_color", selection_border_color_2) + canvas.selection.queue_redraw() var pause_when_unfocused := true -var fps_limit := 0 - -var autosave_interval := 1.0 -var enable_autosave := true -var renderer := OS.get_current_video_driver() setget _renderer_changed -var tablet_driver := 0 setget _tablet_driver_changed +var fps_limit := 0: + set(value): + fps_limit = value + Engine.max_fps = fps_limit + +var autosave_interval := 1.0: + set(value): + autosave_interval = value + OpenSave.update_autosave() +var enable_autosave := true: + set(value): + enable_autosave = value + OpenSave.update_autosave() + preferences_dialog.autosave_interval.editable = enable_autosave +var renderer := 0: + set = _renderer_changed +var tablet_driver := 0: + set(value): + tablet_driver = value + if OS.has_feature("editor"): + return + var tablet_driver_name := DisplayServer.tablet_get_current_driver() + ProjectSettings.set_setting("display/window/tablet_driver", tablet_driver_name) + ProjectSettings.save_custom(OVERRIDE_FILE) # Tools & options var show_left_tool_icon := true var show_right_tool_icon := true var left_square_indicator_visible := true var right_square_indicator_visible := true -var native_cursors := false -var cross_cursor := true +var native_cursors := false: + set(value): + native_cursors = value + if native_cursors: + Input.set_custom_mouse_cursor(null, Input.CURSOR_CROSS, Vector2(15, 15)) + else: + control.set_custom_cursor() +var cross_cursor := true: + set(value): + cross_cursor = value + if cross_cursor: + main_viewport.mouse_default_cursor_shape = Control.CURSOR_CROSS + else: + main_viewport.mouse_default_cursor_shape = Control.CURSOR_ARROW # View menu options var greyscale_view := false @@ -163,85 +315,93 @@ var crop_left := 0 var crop_right := 0 # Nodes -var base_layer_button_node: PackedScene = preload("res://src/UI/Timeline/BaseLayerButton.tscn") -var pixel_layer_button_node: PackedScene = preload("res://src/UI/Timeline/PixelLayerButton.tscn") -var group_layer_button_node: PackedScene = preload("res://src/UI/Timeline/GroupLayerButton.tscn") -var pixel_cel_button_node: PackedScene = preload("res://src/UI/Timeline/PixelCelButton.tscn") -var group_cel_button_node: PackedScene = preload("res://src/UI/Timeline/GroupCelButton.tscn") -var cel_3d_button_node: PackedScene = preload("res://src/UI/Timeline/Cel3DButton.tscn") - -onready var control: Node = get_tree().current_scene - -onready var canvas: Canvas = control.find_node("Canvas") -onready var tabs: Tabs = control.find_node("Tabs") -onready var main_viewport: ViewportContainer = control.find_node("ViewportContainer") -onready var second_viewport: ViewportContainer = control.find_node("Second Canvas") -onready var canvas_preview_container: Container = control.find_node("Canvas Preview") -onready var global_tool_options: PanelContainer = control.find_node("Global Tool Options") -onready var small_preview_viewport: ViewportContainer = canvas_preview_container.find_node( +var base_layer_button_node: PackedScene = load("res://src/UI/Timeline/BaseLayerButton.tscn") +var pixel_layer_button_node: PackedScene = load("res://src/UI/Timeline/PixelLayerButton.tscn") +var group_layer_button_node: PackedScene = load("res://src/UI/Timeline/GroupLayerButton.tscn") +var pixel_cel_button_node: PackedScene = load("res://src/UI/Timeline/PixelCelButton.tscn") +var group_cel_button_node: PackedScene = load("res://src/UI/Timeline/GroupCelButton.tscn") +var cel_3d_button_node: PackedScene = load("res://src/UI/Timeline/Cel3DButton.tscn") + +@onready var main_window := get_window() +@onready var control := get_tree().current_scene + +@onready var canvas: Canvas = control.find_child("Canvas") +@onready var tabs: TabBar = control.find_child("TabBar") +@onready var main_viewport: SubViewportContainer = control.find_child("SubViewportContainer") +@onready var second_viewport: SubViewportContainer = control.find_child("Second Canvas") +@onready var canvas_preview_container: Container = control.find_child("Canvas Preview") +@onready var global_tool_options: PanelContainer = control.find_child("Global Tool Options") +@onready var small_preview_viewport: SubViewportContainer = canvas_preview_container.find_child( "PreviewViewportContainer" ) -onready var camera: Camera2D = main_viewport.find_node("Camera2D") -onready var camera2: Camera2D = second_viewport.find_node("Camera2D2") -onready var camera_preview: Camera2D = control.find_node("CameraPreview") -onready var cameras := [camera, camera2, camera_preview] -onready var horizontal_ruler: BaseButton = control.find_node("HorizontalRuler") -onready var vertical_ruler: BaseButton = control.find_node("VerticalRuler") -onready var transparent_checker: ColorRect = control.find_node("TransparentChecker") -onready var preview_zoom_slider: VSlider = control.find_node("PreviewZoomSlider") - -onready var brushes_popup: Popup = control.find_node("BrushesPopup") -onready var patterns_popup: Popup = control.find_node("PatternsPopup") -onready var palette_panel: PalettePanel = control.find_node("Palettes") - -onready var references_panel: ReferencesPanel = control.find_node("Reference Images") -onready var perspective_editor := control.find_node("Perspective Editor") - -onready var top_menu_container: Panel = control.find_node("TopMenuContainer") -onready var cursor_position_label: Label = control.find_node("CursorPosition") -onready var current_frame_mark_label: Label = control.find_node("CurrentFrameMark") - -onready var animation_timeline: Panel = control.find_node("Animation Timeline") -onready var animation_timer: Timer = animation_timeline.find_node("AnimationTimer") -onready var frame_hbox: HBoxContainer = animation_timeline.find_node("FrameHBox") -onready var layer_vbox: VBoxContainer = animation_timeline.find_node("LayerVBox") -onready var cel_vbox: VBoxContainer = animation_timeline.find_node("CelVBox") -onready var tag_container: Control = animation_timeline.find_node("TagContainer") -onready var play_forward: BaseButton = animation_timeline.find_node("PlayForward") -onready var play_backwards: BaseButton = animation_timeline.find_node("PlayBackwards") -onready var remove_frame_button: BaseButton = animation_timeline.find_node("DeleteFrame") -onready var move_left_frame_button: BaseButton = animation_timeline.find_node("MoveLeft") -onready var move_right_frame_button: BaseButton = animation_timeline.find_node("MoveRight") -onready var remove_layer_button: BaseButton = animation_timeline.find_node("RemoveLayer") -onready var move_up_layer_button: BaseButton = animation_timeline.find_node("MoveUpLayer") -onready var move_down_layer_button: BaseButton = animation_timeline.find_node("MoveDownLayer") -onready var merge_down_layer_button: BaseButton = animation_timeline.find_node("MergeDownLayer") -onready var layer_opacity_slider: ValueSlider = animation_timeline.find_node("OpacitySlider") - -onready var tile_mode_offset_dialog: AcceptDialog = control.find_node("TileModeOffsetsDialog") -onready var open_sprites_dialog: FileDialog = control.find_node("OpenSprite") -onready var save_sprites_dialog: FileDialog = control.find_node("SaveSprite") -onready var save_sprites_html5_dialog: ConfirmationDialog = control.find_node("SaveSpriteHTML5") -onready var export_dialog: AcceptDialog = control.find_node("ExportDialog") -onready var preferences_dialog: AcceptDialog = control.find_node("PreferencesDialog") -onready var error_dialog: AcceptDialog = control.find_node("ErrorDialog") - -onready var current_version: String = ProjectSettings.get_setting("application/config/Version") +@onready var camera: Camera2D = main_viewport.find_child("Camera2D") +@onready var camera2: Camera2D = second_viewport.find_child("Camera2D2") +@onready var camera_preview: Camera2D = control.find_child("CameraPreview") +@onready var cameras := [camera, camera2, camera_preview] +@onready var horizontal_ruler: BaseButton = control.find_child("HorizontalRuler") +@onready var vertical_ruler: BaseButton = control.find_child("VerticalRuler") +@onready var transparent_checker: ColorRect = control.find_child("TransparentChecker") + +@onready var brushes_popup: Popup = control.find_child("BrushesPopup") +@onready var patterns_popup: Popup = control.find_child("PatternsPopup") +@onready var palette_panel: PalettePanel = control.find_child("Palettes") + +@onready var references_panel: ReferencesPanel = control.find_child("Reference Images") +@onready var perspective_editor := control.find_child("Perspective Editor") + +@onready var top_menu_container: Panel = control.find_child("TopMenuContainer") +@onready var cursor_position_label: Label = control.find_child("CursorPosition") +@onready var current_frame_mark_label: Label = control.find_child("CurrentFrameMark") + +@onready var animation_timeline: Panel = control.find_child("Animation Timeline") +@onready var animation_timer: Timer = animation_timeline.find_child("AnimationTimer") +@onready var frame_hbox: HBoxContainer = animation_timeline.find_child("FrameHBox") +@onready var layer_vbox: VBoxContainer = animation_timeline.find_child("LayerVBox") +@onready var cel_vbox: VBoxContainer = animation_timeline.find_child("CelVBox") +@onready var tag_container: Control = animation_timeline.find_child("TagContainer") +@onready var play_forward: BaseButton = animation_timeline.find_child("PlayForward") +@onready var play_backwards: BaseButton = animation_timeline.find_child("PlayBackwards") +@onready var remove_frame_button: BaseButton = animation_timeline.find_child("DeleteFrame") +@onready var move_left_frame_button: BaseButton = animation_timeline.find_child("MoveLeft") +@onready var move_right_frame_button: BaseButton = animation_timeline.find_child("MoveRight") +@onready var remove_layer_button: BaseButton = animation_timeline.find_child("RemoveLayer") +@onready var move_up_layer_button: BaseButton = animation_timeline.find_child("MoveUpLayer") +@onready var move_down_layer_button: BaseButton = animation_timeline.find_child("MoveDownLayer") +@onready var merge_down_layer_button: BaseButton = animation_timeline.find_child("MergeDownLayer") +@onready var layer_opacity_slider: ValueSlider = animation_timeline.find_child("OpacitySlider") + +@onready var tile_mode_offset_dialog: AcceptDialog = control.find_child("TileModeOffsetsDialog") +@onready var open_sprites_dialog: FileDialog = control.find_child("OpenSprite") +@onready var save_sprites_dialog: FileDialog = control.find_child("SaveSprite") +@onready var save_sprites_html5_dialog: ConfirmationDialog = control.find_child("SaveSpriteHTML5") +@onready var export_dialog: AcceptDialog = control.find_child("ExportDialog") +@onready var preferences_dialog: AcceptDialog = control.find_child("PreferencesDialog") +@onready var error_dialog: AcceptDialog = control.find_child("ErrorDialog") + +@onready var current_version: String = ProjectSettings.get_setting("application/config/Version") func _init() -> void: + if OS.has_feature("standalone"): + root_directory = OS.get_executable_path().get_base_dir() + data_directories.append(root_directory.path_join(CONFIG_SUBDIR_NAME)) + if OS.get_name() in ["Linux", "FreeBSD", "NetBSD", "OpenBSD", "BSD"]: + # Checks the list of files var, and processes them. + if OS.has_environment("XDG_DATA_DIRS"): + var raw_env_var := OS.get_environment("XDG_DATA_DIRS") # includes empties. + var unappended_subdirs := raw_env_var.split(":", true) + for unapp_subdir in unappended_subdirs: + data_directories.append(unapp_subdir.path_join(HOME_SUBDIR_NAME)) + else: + # Create defaults + for default_loc in ["/usr/local/share", "/usr/share"]: + data_directories.append(default_loc.path_join(HOME_SUBDIR_NAME)) if ProjectSettings.get_setting("display/window/tablet_driver") == "winink": tablet_driver = 1 func _ready() -> void: _initialize_keychain() - - if OS.has_feature("standalone"): - root_directory = OS.get_executable_path().get_base_dir() - # root_directory must be set earlier than this is because XDGDataDirs depends on it - directory_module = XDGDataPaths.new() - # Load settings from the config file config_cache.load("user://cache.ini") @@ -255,125 +415,61 @@ func _ready() -> void: current_project = projects[0] current_project.fill_color = default_fill_color - for node in get_tree().get_nodes_in_group("UIButtons"): - var tooltip: String = node.hint_tooltip - if !tooltip.empty() and node.shortcut: - ui_tooltips[node] = tooltip - yield(get_tree(), "idle_frame") - emit_signal("project_changed") - - -func set_integer_zoom(enabled: bool): - integer_zoom = enabled - var zoom_slider: ValueSlider = top_menu_container.get_node("%ZoomSlider") - if enabled: - zoom_slider.snap_step = 100 - zoom_slider.step = 100 - else: - zoom_slider.snap_step = 1 - zoom_slider.step = 1 - zoom_slider.value = zoom_slider.value # to trigger signal emmission + await get_tree().process_frame + project_changed.emit() func _initialize_keychain() -> void: Keychain.config_file = config_cache Keychain.actions = { - "new_file": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.NEW), - "open_file": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.OPEN), - "open_last_project": - Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.OPEN_LAST_PROJECT), - "save_file": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.SAVE), - "save_file_as": - Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.SAVE_AS), - "export_file": - Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.EXPORT), - "export_file_as": - Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.EXPORT_AS), - "quit": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.QUIT), - "redo": - Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.REDO, true), - "undo": - Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.UNDO, true), - "cut": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.CUT), - "copy": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.COPY), - "paste": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.PASTE), - "paste_in_place": - Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.PASTE_IN_PLACE), - "delete": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.DELETE), - "new_brush": - Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.NEW_BRUSH), - "preferences": - Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.PREFERENCES), - "scale_image": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.SCALE_IMAGE), - "crop_image": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.CROP_IMAGE), - "resize_canvas": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.RESIZE_CANVAS), - "offset_image": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.OFFSET_IMAGE), - "mirror_image": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.FLIP), - "rotate_image": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.ROTATE), - "invert_colors": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.INVERT_COLORS), - "desaturation": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.DESATURATION), - "outline": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.OUTLINE), - "drop_shadow": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.DROP_SHADOW), - "adjust_hsv": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.HSV), - "gradient": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.GRADIENT), - "gradient_map": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.GRADIENT_MAP), - "posterize": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.POSTERIZE), - "mirror_view": - Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.MIRROR_VIEW), - "show_grid": - Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_GRID), - "show_pixel_grid": - Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_PIXEL_GRID), - "show_guides": - Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_GUIDES), - "show_rulers": - Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_RULERS), - "moveable_panels": - Keychain.MenuInputAction.new( - "", "Window menu", true, "WindowMenu", WindowMenu.MOVABLE_PANELS - ), - "zen_mode": - Keychain.MenuInputAction.new("", "Window menu", true, "WindowMenu", WindowMenu.ZEN_MODE), - "toggle_fullscreen": - Keychain.MenuInputAction.new( - "", "Window menu", true, "WindowMenu", WindowMenu.FULLSCREEN_MODE - ), - "clear_selection": - Keychain.MenuInputAction.new( - "", "Select menu", true, "SelectMenu", SelectMenu.CLEAR_SELECTION - ), - "select_all": - Keychain.MenuInputAction.new("", "Select menu", true, "SelectMenu", SelectMenu.SELECT_ALL), - "invert_selection": - Keychain.MenuInputAction.new("", "Select menu", true, "SelectMenu", SelectMenu.INVERT), - "view_splash_screen": - Keychain.MenuInputAction.new( - "", "Help menu", true, "HelpMenu", HelpMenu.VIEW_SPLASH_SCREEN - ), - "open_docs": - Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.ONLINE_DOCS), - "issue_tracker": - Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.ISSUE_TRACKER), - "open_logs_folder": - Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.OPEN_LOGS_FOLDER), - "changelog": - Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.CHANGELOG), - "about_pixelorama": - Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.ABOUT_PIXELORAMA), + "new_file": Keychain.InputAction.new("", "File menu", true), + "open_file": Keychain.InputAction.new("", "File menu", true), + "open_last_project": Keychain.InputAction.new("", "File menu", true), + "save_file": Keychain.InputAction.new("", "File menu", true), + "save_file_as": Keychain.InputAction.new("", "File menu", true), + "export_file": Keychain.InputAction.new("", "File menu", true), + "export_file_as": Keychain.InputAction.new("", "File menu", true), + "quit": Keychain.InputAction.new("", "File menu", true), + "redo": Keychain.InputAction.new("", "Edit menu", true), + "undo": Keychain.InputAction.new("", "Edit menu", true), + "cut": Keychain.InputAction.new("", "Edit menu", true), + "copy": Keychain.InputAction.new("", "Edit menu", true), + "paste": Keychain.InputAction.new("", "Edit menu", true), + "paste_in_place": Keychain.InputAction.new("", "Edit menu", true), + "delete": Keychain.InputAction.new("", "Edit menu", true), + "new_brush": Keychain.InputAction.new("", "Edit menu", true), + "preferences": Keychain.InputAction.new("", "Edit menu", true), + "scale_image": Keychain.InputAction.new("", "Image menu", true), + "crop_image": Keychain.InputAction.new("", "Image menu", true), + "resize_canvas": Keychain.InputAction.new("", "Image menu", true), + "offset_image": Keychain.InputAction.new("", "Image menu", true), + "mirror_image": Keychain.InputAction.new("", "Image menu", true), + "rotate_image": Keychain.InputAction.new("", "Image menu", true), + "invert_colors": Keychain.InputAction.new("", "Image menu", true), + "desaturation": Keychain.InputAction.new("", "Image menu", true), + "outline": Keychain.InputAction.new("", "Image menu", true), + "drop_shadow": Keychain.InputAction.new("", "Image menu", true), + "adjust_hsv": Keychain.InputAction.new("", "Image menu", true), + "gradient": Keychain.InputAction.new("", "Image menu", true), + "gradient_map": Keychain.InputAction.new("", "Image menu", true), + "posterize": Keychain.InputAction.new("", "Image menu", true), + "mirror_view": Keychain.InputAction.new("", "View menu", true), + "show_grid": Keychain.InputAction.new("", "View menu", true), + "show_pixel_grid": Keychain.InputAction.new("", "View menu", true), + "show_guides": Keychain.InputAction.new("", "View menu", true), + "show_rulers": Keychain.InputAction.new("", "View menu", true), + "moveable_panels": Keychain.InputAction.new("", "Window menu", true), + "zen_mode": Keychain.InputAction.new("", "Window menu", true), + "toggle_fullscreen": Keychain.InputAction.new("", "Window menu", true), + "clear_selection": Keychain.InputAction.new("", "Select menu", true), + "select_all": Keychain.InputAction.new("", "Select menu", true), + "invert_selection": Keychain.InputAction.new("", "Select menu", true), + "view_splash_screen": Keychain.InputAction.new("", "Help menu", true), + "open_docs": Keychain.InputAction.new("", "Help menu", true), + "issue_tracker": Keychain.InputAction.new("", "Help menu", true), + "open_logs_folder": Keychain.InputAction.new("", "Help menu", true), + "changelog": Keychain.InputAction.new("", "Help menu", true), + "about_pixelorama": Keychain.InputAction.new("", "Help menu", true), "zoom_in": Keychain.InputAction.new("", "Canvas"), "zoom_out": Keychain.InputAction.new("", "Canvas"), "camera_left": Keychain.InputAction.new("", "Canvas"), @@ -387,13 +483,36 @@ func _initialize_keychain() -> void: "move_mouse_right": Keychain.InputAction.new("", "Cursor movement"), "move_mouse_up": Keychain.InputAction.new("", "Cursor movement"), "move_mouse_down": Keychain.InputAction.new("", "Cursor movement"), + "reset_colors_default": Keychain.InputAction.new("", "Buttons"), "switch_colors": Keychain.InputAction.new("", "Buttons"), + "horizontal_mirror": Keychain.InputAction.new("", "Buttons"), + "vertical_mirror": Keychain.InputAction.new("", "Buttons"), + "pixel_perfect": Keychain.InputAction.new("", "Buttons"), + "new_layer": Keychain.InputAction.new("", "Buttons"), + "remove_layer": Keychain.InputAction.new("", "Buttons"), + "move_layer_up": Keychain.InputAction.new("", "Buttons"), + "move_layer_down": Keychain.InputAction.new("", "Buttons"), + "clone_layer": Keychain.InputAction.new("", "Buttons"), + "merge_down_layer": Keychain.InputAction.new("", "Buttons"), + "add_frame": Keychain.InputAction.new("", "Buttons"), + "remove_frame": Keychain.InputAction.new("", "Buttons"), + "clone_frame": Keychain.InputAction.new("", "Buttons"), + "manage_frame_tags": Keychain.InputAction.new("", "Buttons"), + "move_frame_left": Keychain.InputAction.new("", "Buttons"), + "move_frame_right": Keychain.InputAction.new("", "Buttons"), "go_to_first_frame": Keychain.InputAction.new("", "Buttons"), "go_to_last_frame": Keychain.InputAction.new("", "Buttons"), "go_to_previous_frame": Keychain.InputAction.new("", "Buttons"), "go_to_next_frame": Keychain.InputAction.new("", "Buttons"), "play_backwards": Keychain.InputAction.new("", "Buttons"), "play_forward": Keychain.InputAction.new("", "Buttons"), + "onion_skinning_toggle": Keychain.InputAction.new("", "Buttons"), + "loop_toggle": Keychain.InputAction.new("", "Buttons"), + "onion_skinning_settings": Keychain.InputAction.new("", "Buttons"), + "new_palette": Keychain.InputAction.new("", "Buttons"), + "edit_palette": Keychain.InputAction.new("", "Buttons"), + "brush_size_increment": Keychain.InputAction.new("", "Buttons"), + "brush_size_decrement": Keychain.InputAction.new("", "Buttons"), "change_tool_mode": Keychain.InputAction.new("", "Tool modifiers", false), "draw_create_line": Keychain.InputAction.new("", "Draw tools", false), "draw_snap_angle": Keychain.InputAction.new("", "Draw tools", false), @@ -436,20 +555,19 @@ func _initialize_keychain() -> void: "Transformation tools": Keychain.InputGroup.new("Tool modifiers"), } Keychain.ignore_actions = ["left_mouse", "right_mouse", "middle_mouse", "shift", "ctrl"] - Keychain.multiple_menu_accelerators = true func notification_label(text: String) -> void: - var notification := NotificationLabel.new() - notification.text = tr(text) - notification.rect_position = main_viewport.rect_global_position - notification.rect_position.y += main_viewport.rect_size.y - control.add_child(notification) + var notif := NotificationLabel.new() + notif.text = tr(text) + notif.position = main_viewport.global_position + notif.position.y += main_viewport.size.y + control.add_child(notif) func general_undo(project: Project = current_project) -> void: project.undos -= 1 - var action_name: String = project.undo_redo.get_current_action_name() + var action_name := project.undo_redo.get_current_action_name() notification_label("Undo: %s" % action_name) @@ -457,7 +575,7 @@ func general_redo(project: Project = current_project) -> void: if project.undos < project.undo_redo.get_version(): # If we did undo and then redo project.undos = project.undo_redo.get_version() if control.redone: - var action_name: String = project.undo_redo.get_current_action_name() + var action_name := project.undo_redo.get_current_action_name() notification_label("Redo: %s" % action_name) @@ -490,7 +608,7 @@ func undo_or_redo( for j in project.layers.size(): canvas.update_texture(j, i, project) - canvas.selection.update() + canvas.selection.queue_redraw() if action_name == "Scale": for i in project.frames.size(): for j in project.layers.size(): @@ -498,61 +616,41 @@ func undo_or_redo( if current_cel is Cel3D: current_cel.size_changed(project.size) else: - current_cel.image_texture.create_from_image(current_cel.get_image(), 0) + current_cel.image_texture = ImageTexture.create_from_image( + current_cel.get_image() + ) canvas.camera_zoom() - canvas.grid.update() - canvas.pixel_grid.update() + canvas.grid.queue_redraw() + canvas.pixel_grid.queue_redraw() project.selection_map_changed() cursor_position_label.text = "[%sร—%s]" % [project.size.x, project.size.y] - canvas.update() - second_viewport.get_child(0).get_node("CanvasPreview").update() - canvas_preview_container.canvas_preview.update() + canvas.queue_redraw() + second_viewport.get_child(0).get_node("CanvasPreview").queue_redraw() + canvas_preview_container.canvas_preview.queue_redraw() if !project.has_changed: project.has_changed = true if project == current_project: - self.window_title = window_title + "(*)" - - -func _title_changed(value: String) -> void: - window_title = value - OS.set_window_title(value) - - -func _project_changed(value: int) -> void: - canvas.selection.transform_content_confirm() - current_project_index = value - current_project = projects[value] - connect("project_changed", current_project, "change_project") - emit_signal("project_changed") - disconnect("project_changed", current_project, "change_project") - emit_signal("cel_changed") + main_window.title = main_window.title + "(*)" func _renderer_changed(value: int) -> void: renderer = value - if OS.has_feature("editor"): - return - - # Sets GLES2 as the default value in `override.cfg`. - # Without this, switching to GLES3 does not work, because it will default to GLES2. - ProjectSettings.set_initial_value("rendering/quality/driver/driver_name", "GLES2") - var renderer_name := OS.get_video_driver_name(renderer) - ProjectSettings.set_setting("rendering/quality/driver/driver_name", renderer_name) - ProjectSettings.save_custom(OVERRIDE_FILE) -func _tablet_driver_changed(value: int) -> void: - tablet_driver = value - if OS.has_feature("editor"): - return - var tablet_driver_name := OS.get_tablet_driver_name(tablet_driver) - ProjectSettings.set_setting("display/window/tablet_driver", tablet_driver_name) - ProjectSettings.save_custom(OVERRIDE_FILE) +# if OS.has_feature("editor"): +# return +# +# # Sets GLES2 as the default value in `override.cfg`. +# # Without this, switching to GLES3 does not work, because it will default to GLES2. +# ProjectSettings.set_initial_value("rendering/quality/driver/driver_name", "GLES2") +# var renderer_name := OS.get_video_driver_name(renderer) +# ProjectSettings.set_setting("rendering/quality/driver/driver_name", renderer_name) +# ProjectSettings.save_custom(OVERRIDE_FILE) func dialog_open(open: bool) -> void: - var dim_color := Color.white + var dim_color := Color.WHITE if open: can_draw = false if dim_on_popup: @@ -583,37 +681,11 @@ func change_button_texturerect(texture_button: TextureRect, new_file_name: Strin return var file_name := texture_button.texture.resource_path.get_basename().get_file() var directory_path := texture_button.texture.resource_path.get_basename().replace(file_name, "") - texture_button.texture = load(directory_path.plus_file(new_file_name)) - - -func update_hint_tooltips() -> void: - yield(get_tree(), "idle_frame") - Tools.update_hint_tooltips() - - for tip in ui_tooltips: - var hint := "None" - var event_type: InputEvent = tip.shortcut.shortcut - if event_type is InputEventKey: - hint = event_type.as_text() - elif event_type is InputEventAction: - var first_key: InputEventKey = Keychain.action_get_first_key(event_type.action) - hint = first_key.as_text() if first_key else "None" - tip.hint_tooltip = tr(ui_tooltips[tip]) % hint - - -# Used in case some of the values in a dictionary are Strings, when they should be something else -func convert_dictionary_values(dict: Dictionary) -> void: - for key in dict: - if key == "id" or key == "type": - dict[key] = int(dict[key]) - if typeof(dict[key]) != TYPE_STRING: - continue - if "transform" in key: # Convert a String to a Transform - var transform_string: String = dict[key].replace(" - ", ", ") - dict[key] = str2var("Transform(" + transform_string + ")") - elif "color" in key: # Convert a String to a Color - dict[key] = str2var("Color(" + dict[key] + ")") - elif "v2" in key: # Convert a String to a Vector2 - dict[key] = str2var("Vector2" + dict[key]) - elif "size" in key or "center_offset" in key: # Convert a String to a Vector3 - dict[key] = str2var("Vector3" + dict[key]) + texture_button.texture = load(directory_path.path_join(new_file_name)) + + +func path_join_array(basepaths: PackedStringArray, subpath: String) -> PackedStringArray: + var res := PackedStringArray() + for _path in basepaths: + res.append(_path.path_join(subpath)) + return res diff --git a/src/Autoload/HTML5FileExchange.gd b/src/Autoload/HTML5FileExchange.gd index a2fdbd1f92b..e31a0ce927a 100644 --- a/src/Autoload/HTML5FileExchange.gd +++ b/src/Autoload/HTML5FileExchange.gd @@ -1,25 +1,26 @@ extends Node -# Code taken and modified from https://github.com/Pukkah/HTML5-File-Exchange-for-Godot -# Thanks to Pukkah from GitHub for providing the original code +## Code taken and modified from https://github.com/Pukkah/HTML5-File-Exchange-for-Godot +## Thanks to Pukkah from GitHub for providing the original code signal in_focus -signal image_loaded # emits a signal for returning loaded image info +signal image_loaded ## Emits a signal for returning loaded image info func _ready() -> void: - if OS.get_name() == "HTML5" and OS.has_feature("JavaScript"): + if OS.has_feature("web"): _define_js() -func _notification(notification: int) -> void: - if notification == MainLoop.NOTIFICATION_WM_FOCUS_IN: - emit_signal("in_focus") +func _notification(what: int) -> void: + if what == NOTIFICATION_WM_WINDOW_FOCUS_IN: + in_focus.emit() func _define_js() -> void: - # Define JS script - JavaScript.eval( - """ + ( + JavaScriptBridge + . eval( + """ var fileData; var fileType; var fileName; @@ -67,36 +68,34 @@ func _define_js() -> void: }); } """, - true + true + ) ) -# If (load_directly = false) then image info (image and its name) -# will not be directly farwarded it to OpenSave +## If (load_directly = false) then image info (image and its name) +## will not be directly farwarded it to OpenSave func load_image(load_directly := true): - if OS.get_name() != "HTML5" or !OS.has_feature("JavaScript"): + if !OS.has_feature("web"): return - # Execute JS function - JavaScript.eval("upload_image();", true) # Opens prompt for choosing file - - yield(self, "in_focus") # Wait until JS prompt is closed + JavaScriptBridge.eval("upload_image();", true) # Opens prompt for choosing file + await in_focus # Wait until JS prompt is closed + await get_tree().create_timer(0.5).timeout # Give some time for async JS data load - yield(get_tree().create_timer(0.5), "timeout") # Give some time for async JS data load - - if JavaScript.eval("canceled;", true): # If File Dialog closed w/o file + if JavaScriptBridge.eval("canceled;", true) == 1: # If File Dialog closed w/o file return # Use data from png data var image_data while true: - image_data = JavaScript.eval("fileData;", true) + image_data = JavaScriptBridge.eval("fileData;", true) if image_data != null: break - yield(get_tree().create_timer(1.0), "timeout") # Need more time to load data + await get_tree().create_timer(1.0).timeout # Need more time to load data - var image_type = JavaScript.eval("fileType;", true) - var image_name = JavaScript.eval("fileName;", true) + var image_type = JavaScriptBridge.eval("fileType;", true) + var image_name = JavaScriptBridge.eval("fileName;", true) var image := Image.new() var image_error @@ -131,33 +130,32 @@ func load_image(load_directly := true): image_info = {"image": image, "name": image_name} if load_directly: OpenSave.handle_loading_image(image_name, image) - emit_signal("image_loaded", image_info) + image_loaded.emit(image_info) func load_shader() -> void: - if OS.get_name() != "HTML5" or !OS.has_feature("JavaScript"): + if !OS.has_feature("web"): return # Execute JS function - JavaScript.eval("upload_shader();", true) # Opens prompt for choosing file - - yield(self, "in_focus") # Wait until JS prompt is closed + JavaScriptBridge.eval("upload_shader();", true) # Opens prompt for choosing file - yield(get_tree().create_timer(0.5), "timeout") # Give some time for async JS data load + await in_focus # Wait until JS prompt is closed + await get_tree().create_timer(0.5).timeout # Give some time for async JS data load - if JavaScript.eval("canceled;", true): # If File Dialog closed w/o file + if JavaScriptBridge.eval("canceled;", true): # If File Dialog closed w/o file return # Use data from png data var file_data while true: - file_data = JavaScript.eval("fileData;", true) + file_data = JavaScriptBridge.eval("fileData;", true) if file_data != null: break - yield(get_tree().create_timer(1.0), "timeout") # Need more time to load data + await get_tree().create_timer(1.0).timeout # Need more time to load data -# var file_type = JavaScript.eval("fileType;", true) - var file_name = JavaScript.eval("fileName;", true) +# var file_type = JavaScriptBridge.eval("fileType;", true) + var file_name = JavaScriptBridge.eval("fileName;", true) var shader := Shader.new() shader.code = file_data diff --git a/src/Autoload/Import.gd b/src/Autoload/Import.gd index e8d5225dffe..aa2639810eb 100644 --- a/src/Autoload/Import.gd +++ b/src/Autoload/Import.gd @@ -28,14 +28,13 @@ func get_brush_files_from_directory(directory: String): # -> Array var randomised_subdir_files_map: Dictionary = {} var nonrandomised_subdir_files_map: Dictionary = {} - var main_directory: Directory = Directory.new() - var err := main_directory.open(directory) - if err != OK: + var main_directory := DirAccess.open(directory) + if DirAccess.get_open_error() != OK: return null # Build first the list of base png files and all subdirectories to # scan later (skip navigational . and ..) - main_directory.list_dir_begin(true) + main_directory.list_dir_begin() var fname: String = main_directory.get_next() while fname != "": if main_directory.current_is_dir(): @@ -50,8 +49,6 @@ func get_brush_files_from_directory(directory: String): # -> Array # Now we iterate over subdirectories! for subdirectory in subdirectories: - var the_directory: Directory = Directory.new() - # Holds names of files that make this # a component of a randomised brush ^.^ var randomised_files := [] @@ -59,8 +56,9 @@ func get_brush_files_from_directory(directory: String): # -> Array # Non-randomise-indicated image files var non_randomised_files := [] - the_directory.open(directory.plus_file(subdirectory)) - the_directory.list_dir_begin(true) + var the_directory := DirAccess.open(directory.path_join(subdirectory)) + the_directory.include_navigational = true + the_directory.list_dir_begin() var curr_file := the_directory.get_next() while curr_file != "": @@ -158,7 +156,7 @@ func import_brushes(priority_ordered_search_path: Array) -> void: for subfile in main_directory_file_paths: if not (subfile in processed_basedir_paths): add_plain_brush( - current_main_directory.plus_file(subfile), subfile.get_basename() + current_main_directory.path_join(subfile), subfile.get_basename() ) processed_basedir_paths[subfile] = true @@ -171,7 +169,7 @@ func import_brushes(priority_ordered_search_path: Array) -> void: # opened nya for non_extended_path in randomised_brush_subdirectory_map[randomised_subdir]: full_paths.append( - current_main_directory.plus_file(randomised_subdir).plus_file( + current_main_directory.path_join(randomised_subdir).path_join( non_extended_path ) ) @@ -190,12 +188,14 @@ func import_brushes(priority_ordered_search_path: Array) -> void: for relative_path in relpaths_of_nonrandom_brushes: if not (relative_path in processed_subdir_paths[nonrandomised_subdir]): # We are not yet processed - var full_path: String = current_main_directory.plus_file(nonrandomised_subdir).plus_file( - relative_path + var full_path: String = ( + current_main_directory + . path_join(nonrandomised_subdir) + . path_join(relative_path) ) # Add the path with the tooltip including the directory add_plain_brush( - full_path, nonrandomised_subdir.plus_file(relative_path).get_basename() + full_path, nonrandomised_subdir.path_join(relative_path).get_basename() ) # Mark this as a processed relpath processed_subdir_paths[nonrandomised_subdir][relative_path] = true @@ -204,8 +204,9 @@ func import_brushes(priority_ordered_search_path: Array) -> void: func import_patterns(priority_ordered_search_path: Array) -> void: for path in priority_ordered_search_path: var pattern_list := [] - var dir := Directory.new() - dir.open(path) + var dir := DirAccess.open(path) + if not is_instance_valid(dir): + continue dir.list_dir_begin() var curr_file := dir.get_next() while curr_file != "": @@ -216,7 +217,7 @@ func import_patterns(priority_ordered_search_path: Array) -> void: for pattern in pattern_list: var image := Image.new() - var err := image.load(path.plus_file(pattern)) + var err := image.load(path.path_join(pattern)) if err == OK: image.convert(Image.FORMAT_RGBA8) var tooltip_name = pattern.get_basename() diff --git a/src/Autoload/OpenSave.gd b/src/Autoload/OpenSave.gd index 6d435c0dc74..a1d3adad42b 100644 --- a/src/Autoload/OpenSave.gd +++ b/src/Autoload/OpenSave.gd @@ -1,33 +1,31 @@ # gdlint: ignore=max-public-methods extends Node -var current_save_paths := [] # Array of strings -# Stores a filename of a backup file in user:// until user saves manually -var backup_save_paths := [] # Array of strings -var preview_dialog_tscn = preload("res://src/UI/Dialogs/PreviewDialog.tscn") -var preview_dialogs := [] # Array of preview dialogs -var last_dialog_option: int = 0 - -onready var autosave_timer: Timer +var current_save_paths: PackedStringArray = [] +## Stores a filename of a backup file in user:// until user saves manually +var backup_save_paths: PackedStringArray = [] +var preview_dialog_tscn := preload("res://src/UI/Dialogs/PreviewDialog.tscn") +var preview_dialogs := [] ## Array of preview dialogs +var last_dialog_option := 0 +var autosave_timer: Timer func _ready() -> void: autosave_timer = Timer.new() autosave_timer.one_shot = false - autosave_timer.process_mode = Timer.TIMER_PROCESS_IDLE - autosave_timer.connect("timeout", self, "_on_Autosave_timeout") + autosave_timer.timeout.connect(_on_Autosave_timeout) add_child(autosave_timer) update_autosave() func handle_loading_file(file: String) -> void: file = file.replace("\\", "/") - var file_ext: String = file.get_extension().to_lower() + var file_ext := file.get_extension().to_lower() if file_ext == "pxo": # Pixelorama project file open_pxo_file(file) elif file_ext == "tres": # Godot resource file - var resource = load(file) + var resource := load(file) if resource is Palette: Palettes.import_palette(resource, file.get_file()) else: @@ -35,6 +33,8 @@ func handle_loading_file(file: String) -> void: Global.error_dialog.set_text(tr("Can't load file '%s'.") % [file_name]) Global.error_dialog.popup_centered() Global.dialog_open(true) + elif file_ext == "tscn": # Godot scene file + return elif file_ext == "gpl" or file_ext == "pal" or file_ext == "json": Palettes.import_palette_from_path(file) @@ -43,11 +43,11 @@ func handle_loading_file(file: String) -> void: Global.preferences_dialog.extensions.install_extension(file) elif file_ext == "shader" or file_ext == "gdshader": # Godot shader file - var shader = load(file) - if !shader is Shader: + var shader := load(file) + if not shader is Shader: return var file_name: String = file.get_file().get_basename() - Global.control.find_node("ShaderEffect").change_shader(shader, file_name) + Global.control.find_child("ShaderEffect").change_shader(shader, file_name) else: # Image files # Attempt to load as APNG. @@ -59,16 +59,10 @@ func handle_loading_file(file: String) -> void: handle_loading_aimg(file, apng_res[1]) return # Attempt to load as a regular image. - var image := Image.new() - var err := image.load(file) - if err != OK: # An error occurred + var image := Image.load_from_file(file) + if not is_instance_valid(image): # An error occurred var file_name: String = file.get_file() - Global.error_dialog.set_text( - ( - tr("Can't load file '%s'.\nError code: %s") - % [file_name, str(err, ErrorManager.parse(err, " (", ")"))] - ) - ) + Global.error_dialog.set_text(tr("Can't load file '%s'.") % [file_name]) Global.error_dialog.popup_centered() Global.dialog_open(true) return @@ -76,7 +70,7 @@ func handle_loading_file(file: String) -> void: func handle_loading_image(file: String, image: Image) -> void: - var preview_dialog: ConfirmationDialog = preview_dialog_tscn.instance() + var preview_dialog := preview_dialog_tscn.instantiate() as PreviewDialog preview_dialogs.append(preview_dialog) preview_dialog.path = file preview_dialog.image = image @@ -85,7 +79,7 @@ func handle_loading_image(file: String, image: Image) -> void: Global.dialog_open(true) -# For loading the output of AImgIO as a project +## For loading the output of AImgIO as a project func handle_loading_aimg(path: String, frames: Array) -> void: var project := Project.new([], path.get_file(), frames[0].content.get_size()) project.layers.append(PixelLayer.new(project)) @@ -93,8 +87,8 @@ func handle_loading_aimg(path: String, frames: Array) -> void: # Determine FPS as 1, unless all frames agree. project.fps = 1 - var first_duration = frames[0].duration - var frames_agree = true + var first_duration: float = frames[0].duration + var frames_agree := true for v in frames: var aimg_frame: AImgIOFrame = v if aimg_frame.duration != first_duration: @@ -116,22 +110,21 @@ func handle_loading_aimg(path: String, frames: Array) -> void: set_new_imported_tab(project, path) -func open_pxo_file(path: String, untitled_backup: bool = false, replace_empty: bool = true) -> void: - var file := File.new() - var err := file.open_compressed(path, File.READ, File.COMPRESSION_ZSTD) - if err == ERR_FILE_UNRECOGNIZED: - err = file.open(path, File.READ) # If the file is not compressed open it raw (pre-v0.7) - +func open_pxo_file(path: String, untitled_backup := false, replace_empty := true) -> void: + var file := FileAccess.open_compressed(path, FileAccess.READ, FileAccess.COMPRESSION_ZSTD) + if FileAccess.get_open_error() == ERR_FILE_UNRECOGNIZED: + # If the file is not compressed open it raw (pre-v0.7) + file = FileAccess.open(path, FileAccess.READ) + var err := FileAccess.get_open_error() if err != OK: Global.error_dialog.set_text( - tr("File failed to open. Error code %s") % str(err, ErrorManager.parse(err, " (", ")")) + tr("File failed to open. Error code %s (%s)") % [err, error_string(err)] ) Global.error_dialog.popup_centered() Global.dialog_open(true) - file.close() return - var empty_project: bool = Global.current_project.is_empty() and replace_empty + var empty_project := Global.current_project.is_empty() and replace_empty var new_project: Project if empty_project: new_project = Global.current_project @@ -143,39 +136,43 @@ func open_pxo_file(path: String, untitled_backup: bool = false, replace_empty: b new_project = Project.new([], path.get_file()) var first_line := file.get_line() - var dict := JSON.parse(first_line) - if dict.error != OK: + var test_json_conv := JSON.new() + var error := test_json_conv.parse(first_line) + if error != OK: print("Error, corrupt pxo file") file.close() return else: - if typeof(dict.result) != TYPE_DICTIONARY: - print("Error, json parsed result is: %s" % typeof(dict.result)) + var result = test_json_conv.get_data() + if typeof(result) != TYPE_DICTIONARY: + print("Error, json parsed result is: %s" % typeof(result)) file.close() return - new_project.deserialize(dict.result) + new_project.deserialize(result) for frame in new_project.frames: for cel in frame.cels: cel.load_image_data_from_pxo(file, new_project.size) - if dict.result.has("brushes"): - for brush in dict.result.brushes: + if result.has("brushes"): + for brush in result.brushes: var b_width = brush.size_x var b_height = brush.size_y var buffer := file.get_buffer(b_width * b_height * 4) - var image := Image.new() - image.create_from_data(b_width, b_height, false, Image.FORMAT_RGBA8, buffer) + var image := Image.create_from_data( + b_width, b_height, false, Image.FORMAT_RGBA8, buffer + ) new_project.brushes.append(image) Brushes.add_project_brush(image) - if dict.result.has("tile_mask") and dict.result.has("has_mask"): - if dict.result.has_mask: - var t_width = dict.result.tile_mask.size_x - var t_height = dict.result.tile_mask.size_y + if result.has("tile_mask") and result.has("has_mask"): + if result.has_mask: + var t_width = result.tile_mask.size_x + var t_height = result.tile_mask.size_y var buffer := file.get_buffer(t_width * t_height * 4) - var image := Image.new() - image.create_from_data(t_width, t_height, false, Image.FORMAT_RGBA8, buffer) + var image := Image.create_from_data( + t_width, t_height, false, Image.FORMAT_RGBA8, buffer + ) new_project.tiles.tile_mask = image else: new_project.tiles.reset_mask() @@ -183,8 +180,8 @@ func open_pxo_file(path: String, untitled_backup: bool = false, replace_empty: b file.close() if empty_project: new_project.change_project() - Global.emit_signal("project_changed") - Global.emit_signal("cel_changed") + Global.project_changed.emit() + Global.cel_changed.emit() else: Global.projects.append(new_project) Global.tabs.current_tab = Global.tabs.get_tab_count() - 1 @@ -193,7 +190,7 @@ func open_pxo_file(path: String, untitled_backup: bool = false, replace_empty: b if not untitled_backup: # Untitled backup should not change window title and save path current_save_paths[Global.current_project_index] = path - Global.window_title = path.get_file() + " - Pixelorama " + Global.current_version + Global.main_window.title = path.get_file() + " - Pixelorama " + Global.current_version Global.save_sprites_dialog.current_path = path # Set last opened project path and save Global.config_cache.set_value("preferences", "last_project_path", path) @@ -210,10 +207,7 @@ func open_pxo_file(path: String, untitled_backup: bool = false, replace_empty: b func save_pxo_file( - path: String, - autosave: bool, - use_zstd_compression := true, - project: Project = Global.current_project + path: String, autosave: bool, use_zstd := true, project := Global.current_project ) -> void: if !autosave: project.name = path.get_file() @@ -225,7 +219,7 @@ func save_pxo_file( Global.error_dialog.popup_centered() Global.dialog_open(true) return - var to_save := JSON.print(serialized_data) + var to_save := JSON.stringify(serialized_data) if !to_save: Global.error_dialog.set_text( tr("File failed to save. Converting dictionary to JSON failed.") @@ -237,22 +231,22 @@ func save_pxo_file( # Check if a file with the same name exists. If it does, rename the new file temporarily. # Needed in case of a crash, so that the old file won't be replaced with an empty one. var temp_path := path - var dir := Directory.new() + var dir := DirAccess.open("user://") if dir.file_exists(path): temp_path = path + "1" - var file := File.new() - var err: int - if use_zstd_compression: - err = file.open_compressed(temp_path, File.WRITE, File.COMPRESSION_ZSTD) + var file: FileAccess + if use_zstd: + file = FileAccess.open_compressed(temp_path, FileAccess.WRITE, FileAccess.COMPRESSION_ZSTD) else: - err = file.open(temp_path, File.WRITE) + file = FileAccess.open(temp_path, FileAccess.WRITE) + var err := FileAccess.get_open_error() if err != OK: if temp_path.is_valid_filename(): return Global.error_dialog.set_text( - tr("File failed to save. Error code %s") % str(err, ErrorManager.parse(err, " (", ")")) + tr("File failed to save. Error code %s (%s)") % [err, error_string(err)] ) Global.error_dialog.popup_centered() Global.dialog_open(true) @@ -277,14 +271,14 @@ func save_pxo_file( # Rename the new file to its proper name and remove the old file, if it exists. dir.rename(temp_path, path) - if OS.get_name() == "HTML5" and OS.has_feature("JavaScript") and !autosave: - err = file.open(path, File.READ) - if err == OK: - var file_data := Array(file.get_buffer(file.get_len())) - JavaScript.download_buffer(file_data, path.get_file()) + if OS.has_feature("web") and !autosave: + file = FileAccess.open(path, FileAccess.READ) + if FileAccess.get_open_error() == OK: + var file_data := Array(file.get_buffer(file.get_length())) + JavaScriptBridge.download_buffer(file_data, path.get_file()) file.close() # Remove the .pxo file from memory, as we don't need it anymore - var browser_dir := Directory.new() + var browser_dir := DirAccess.open(path) browser_dir.remove(path) if autosave: @@ -295,7 +289,7 @@ func save_pxo_file( project.has_changed = false remove_backup(Global.current_project_index) Global.notification_label("File saved") - Global.window_title = path.get_file() + " - Pixelorama " + Global.current_version + Global.main_window.title = path.get_file() + " - Pixelorama " + Global.current_version # Set last opened project path and save Global.config_cache.set_value("preferences", "last_project_path", path) @@ -324,29 +318,28 @@ func open_image_as_new_tab(path: String, image: Image) -> void: func open_image_as_spritesheet_tab_smart( - path: String, image: Image, sliced_rects: Array, frame_size: Vector2 + path: String, image: Image, sliced_rects: Array[Rect2i], frame_size: Vector2i ) -> void: if sliced_rects.size() == 0: # Image is empty sprite (manually set data to be consistent) frame_size = image.get_size() - sliced_rects.append(Rect2(Vector2.ZERO, frame_size)) + sliced_rects.append(Rect2i(Vector2i.ZERO, frame_size)) var project := Project.new([], path.get_file(), frame_size) project.layers.append(PixelLayer.new(project)) Global.projects.append(project) for rect in sliced_rects: var offset: Vector2 = (0.5 * (frame_size - rect.size)).floor() var frame := Frame.new() - var cropped_image := Image.new() - cropped_image.create(frame_size.x, frame_size.y, false, Image.FORMAT_RGBA8) + var cropped_image := Image.create(frame_size.x, frame_size.y, false, Image.FORMAT_RGBA8) + image.convert(Image.FORMAT_RGBA8) cropped_image.blit_rect(image, rect, offset) - cropped_image.convert(Image.FORMAT_RGBA8) frame.cels.append(PixelCel.new(cropped_image, 1)) project.frames.append(frame) set_new_imported_tab(project, path) func open_image_as_spritesheet_tab(path: String, image: Image, horiz: int, vert: int) -> void: - horiz = min(horiz, image.get_size().x) - vert = min(vert, image.get_size().y) + horiz = mini(horiz, image.get_size().x) + vert = mini(vert, image.get_size().y) var frame_width := image.get_size().x / horiz var frame_height := image.get_size().y / vert var project := Project.new([], path.get_file(), Vector2(frame_width, frame_height)) @@ -355,9 +348,8 @@ func open_image_as_spritesheet_tab(path: String, image: Image, horiz: int, vert: for yy in range(vert): for xx in range(horiz): var frame := Frame.new() - var cropped_image := Image.new() - cropped_image = image.get_rect( - Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height) + var cropped_image := image.get_region( + Rect2i(frame_width * xx, frame_height * yy, frame_width, frame_height) ) project.size = cropped_image.get_size() cropped_image.convert(Image.FORMAT_RGBA8) @@ -370,15 +362,15 @@ func open_image_as_spritesheet_layer_smart( _path: String, image: Image, file_name: String, - sliced_rects: Array, + sliced_rects: Array[Rect2i], start_frame: int, - frame_size: Vector2 + frame_size: Vector2i ) -> void: # Resize canvas to if "frame_size.x" or "frame_size.y" is too large - var project: Project = Global.current_project - var project_width: int = max(frame_size.x, project.size.x) - var project_height: int = max(frame_size.y, project.size.y) - if project.size < Vector2(project_width, project_height): + var project := Global.current_project + var project_width := maxi(frame_size.x, project.size.x) + var project_height := maxi(frame_size.y, project.size.y) + if project.size < Vector2i(project_width, project_height): DrawingAlgos.resize_canvas(project_width, project_height, 0, 0) # Initialize undo mechanism @@ -386,11 +378,11 @@ func open_image_as_spritesheet_layer_smart( project.undo_redo.create_action("Add Spritesheet Layer") # Create new frames (if needed) - var new_frames_size = max(project.frames.size(), start_frame + sliced_rects.size()) + var new_frames_size := maxi(project.frames.size(), start_frame + sliced_rects.size()) var frames := [] var frame_indices := [] if new_frames_size > project.frames.size(): - var required_frames = new_frames_size - project.frames.size() + var required_frames := new_frames_size - project.frames.size() frame_indices = range( project.current_frame + 1, project.current_frame + required_frames + 1 ) @@ -399,14 +391,14 @@ func open_image_as_spritesheet_layer_smart( for l in range(project.layers.size()): # Create as many cels as there are layers new_frame.cels.append(project.layers[l].new_empty_cel()) if project.layers[l].new_cels_linked: - var prev_cel: BaseCel = project.frames[project.current_frame].cels[l] + var prev_cel := project.frames[project.current_frame].cels[l] if prev_cel.link_set == null: prev_cel.link_set = {} project.undo_redo.add_do_method( - project.layers[l], "link_cel", prev_cel, prev_cel.link_set + project.layers[l].link_cel.bind(prev_cel, prev_cel.link_set) ) project.undo_redo.add_undo_method( - project.layers[l], "link_cel", prev_cel, null + project.layers[l].link_cel.bind(prev_cel, null) ) new_frame.cels[l].set_content(prev_cel.get_content(), prev_cel.image_texture) new_frame.cels[l].link_set = prev_cel.link_set @@ -414,32 +406,35 @@ func open_image_as_spritesheet_layer_smart( # Create new layer for spritesheet var layer := PixelLayer.new(project, file_name) - var cels := [] + var cels: Array[PixelCel] = [] for f in new_frames_size: if f >= start_frame and f < (start_frame + sliced_rects.size()): # Slice spritesheet var offset: Vector2 = (0.5 * (frame_size - sliced_rects[f - start_frame].size)).floor() image.convert(Image.FORMAT_RGBA8) - var cropped_image := Image.new() - cropped_image.create(project_width, project_height, false, Image.FORMAT_RGBA8) + var cropped_image := Image.create( + project_width, project_height, false, Image.FORMAT_RGBA8 + ) cropped_image.blit_rect(image, sliced_rects[f - start_frame], offset) cels.append(PixelCel.new(cropped_image)) else: cels.append(layer.new_empty_cel()) - project.undo_redo.add_do_method(project, "add_frames", frames, frame_indices) - project.undo_redo.add_do_method(project, "add_layers", [layer], [project.layers.size()], [cels]) + project.undo_redo.add_do_method(project.add_frames.bind(frames, frame_indices)) + project.undo_redo.add_do_method( + project.add_layers.bind([layer], [project.layers.size()], [cels]) + ) project.undo_redo.add_do_method( - project, "change_cel", new_frames_size - 1, project.layers.size() + project.change_cel.bind(new_frames_size - 1, project.layers.size()) ) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) - project.undo_redo.add_undo_method(project, "remove_layers", [project.layers.size()]) - project.undo_redo.add_undo_method(project, "remove_frames", frame_indices) + project.undo_redo.add_undo_method(project.remove_layers.bind([project.layers.size()])) + project.undo_redo.add_undo_method(project.remove_frames.bind(frame_indices)) project.undo_redo.add_undo_method( - project, "change_cel", project.current_frame, project.current_layer + project.change_cel.bind(project.current_frame, project.current_layer) ) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) project.undo_redo.commit_action() @@ -447,16 +442,16 @@ func open_image_as_spritesheet_layer( _path: String, image: Image, file_name: String, horizontal: int, vertical: int, start_frame: int ) -> void: # Data needed to slice images - horizontal = min(horizontal, image.get_size().x) - vertical = min(vertical, image.get_size().y) + horizontal = mini(horizontal, image.get_size().x) + vertical = mini(vertical, image.get_size().y) var frame_width := image.get_size().x / horizontal var frame_height := image.get_size().y / vertical # Resize canvas to if "frame_width" or "frame_height" is too large - var project: Project = Global.current_project - var project_width: int = max(frame_width, project.size.x) - var project_height: int = max(frame_height, project.size.y) - if project.size < Vector2(project_width, project_height): + var project := Global.current_project + var project_width := maxi(frame_width, project.size.x) + var project_height := maxi(frame_height, project.size.y) + if project.size < Vector2i(project_width, project_height): DrawingAlgos.resize_canvas(project_width, project_height, 0, 0) # Initialize undo mechanism @@ -464,11 +459,11 @@ func open_image_as_spritesheet_layer( project.undo_redo.create_action("Add Spritesheet Layer") # Create new frames (if needed) - var new_frames_size = max(project.frames.size(), start_frame + (vertical * horizontal)) + var new_frames_size := maxi(project.frames.size(), start_frame + (vertical * horizontal)) var frames := [] var frame_indices := [] if new_frames_size > project.frames.size(): - var required_frames = new_frames_size - project.frames.size() + var required_frames := new_frames_size - project.frames.size() frame_indices = range( project.current_frame + 1, project.current_frame + required_frames + 1 ) @@ -477,14 +472,14 @@ func open_image_as_spritesheet_layer( for l in range(project.layers.size()): # Create as many cels as there are layers new_frame.cels.append(project.layers[l].new_empty_cel()) if project.layers[l].new_cels_linked: - var prev_cel: BaseCel = project.frames[project.current_frame].cels[l] + var prev_cel := project.frames[project.current_frame].cels[l] if prev_cel.link_set == null: prev_cel.link_set = {} project.undo_redo.add_do_method( - project.layers[l], "link_cel", prev_cel, prev_cel.link_set + project.layers[l].link_cel.bind(prev_cel, prev_cel.link_set) ) project.undo_redo.add_undo_method( - project.layers[l], "link_cel", prev_cel, null + project.layers[l].link_cel.bind(prev_cel, null) ) new_frame.cels[l].set_content(prev_cel.get_content(), prev_cel.image_texture) new_frame.cels[l].link_set = prev_cel.link_set @@ -496,41 +491,44 @@ func open_image_as_spritesheet_layer( for f in new_frames_size: if f >= start_frame and f < (start_frame + (vertical * horizontal)): # Slice spritesheet - var xx: int = (f - start_frame) % horizontal - var yy: int = (f - start_frame) / horizontal + var xx := (f - start_frame) % horizontal + var yy := (f - start_frame) / horizontal image.convert(Image.FORMAT_RGBA8) - var cropped_image := Image.new() - cropped_image.create(project_width, project_height, false, Image.FORMAT_RGBA8) + var cropped_image := Image.create( + project_width, project_height, false, Image.FORMAT_RGBA8 + ) cropped_image.blit_rect( image, - Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height), - Vector2.ZERO + Rect2i(frame_width * xx, frame_height * yy, frame_width, frame_height), + Vector2i.ZERO ) cels.append(PixelCel.new(cropped_image)) else: cels.append(layer.new_empty_cel()) - project.undo_redo.add_do_method(project, "add_frames", frames, frame_indices) - project.undo_redo.add_do_method(project, "add_layers", [layer], [project.layers.size()], [cels]) + project.undo_redo.add_do_method(project.add_frames.bind(frames, frame_indices)) + project.undo_redo.add_do_method( + project.add_layers.bind([layer], [project.layers.size()], [cels]) + ) project.undo_redo.add_do_method( - project, "change_cel", new_frames_size - 1, project.layers.size() + project.change_cel.bind(new_frames_size - 1, project.layers.size()) ) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) - project.undo_redo.add_undo_method(project, "remove_layers", [project.layers.size()]) - project.undo_redo.add_undo_method(project, "remove_frames", frame_indices) + project.undo_redo.add_undo_method(project.remove_layers.bind([project.layers.size()])) + project.undo_redo.add_undo_method(project.remove_frames.bind(frame_indices)) project.undo_redo.add_undo_method( - project, "change_cel", project.current_frame, project.current_layer + project.change_cel.bind(project.current_frame, project.current_layer) ) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) project.undo_redo.commit_action() func open_image_at_cel(image: Image, layer_index := 0, frame_index := 0) -> void: - var project: Project = Global.current_project - var project_width: int = max(image.get_width(), project.size.x) - var project_height: int = max(image.get_height(), project.size.y) - if project.size < Vector2(project_width, project_height): + var project := Global.current_project + var project_width := maxi(image.get_width(), project.size.x) + var project_height := maxi(image.get_height(), project.size.y) + if project.size < Vector2i(project_width, project_height): DrawingAlgos.resize_canvas(project_width, project_height, 0, 0) project.undos += 1 project.undo_redo.create_action("Replaced Cel") @@ -538,62 +536,62 @@ func open_image_at_cel(image: Image, layer_index := 0, frame_index := 0) -> void for i in project.frames.size(): if i == frame_index: image.convert(Image.FORMAT_RGBA8) - var cel_image = Image.new() - cel_image.create(project_width, project_height, false, Image.FORMAT_RGBA8) - cel_image.blit_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO) - var cel: PixelCel = project.frames[i].cels[layer_index] + var cel := project.frames[i].cels[layer_index] + if not cel is PixelCel: + continue + var cel_image := Image.create(project_width, project_height, false, Image.FORMAT_RGBA8) + cel_image.blit_rect(image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO) project.undo_redo.add_do_property(cel, "image", cel_image) - project.undo_redo.add_undo_property(cel, "image", cel.image) + project.undo_redo.add_undo_property(cel, "image", cel.get_image()) project.undo_redo.add_do_property(project, "selected_cels", []) - project.undo_redo.add_do_method(project, "change_cel", frame_index, layer_index) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_do_method(project.change_cel.bind(frame_index, layer_index)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) project.undo_redo.add_undo_property(project, "selected_cels", []) project.undo_redo.add_undo_method( - project, "change_cel", project.current_frame, project.current_layer + project.change_cel.bind(project.current_frame, project.current_layer) ) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) project.undo_redo.commit_action() func open_image_as_new_frame(image: Image, layer_index := 0) -> void: - var project: Project = Global.current_project - var project_width: int = max(image.get_width(), project.size.x) - var project_height: int = max(image.get_height(), project.size.y) - if project.size < Vector2(project_width, project_height): + var project := Global.current_project + var project_width := maxi(image.get_width(), project.size.x) + var project_height := maxi(image.get_height(), project.size.y) + if project.size < Vector2i(project_width, project_height): DrawingAlgos.resize_canvas(project_width, project_height, 0, 0) var frame := Frame.new() for i in project.layers.size(): if i == layer_index: image.convert(Image.FORMAT_RGBA8) - var cel_image = Image.new() - cel_image.create(project_width, project_height, false, Image.FORMAT_RGBA8) - cel_image.blit_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO) + var cel_image := Image.create(project_width, project_height, false, Image.FORMAT_RGBA8) + cel_image.blit_rect(image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO) frame.cels.append(PixelCel.new(cel_image, 1)) else: frame.cels.append(project.layers[i].new_empty_cel()) project.undos += 1 project.undo_redo.create_action("Add Frame") - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_do_method(project, "add_frames", [frame], [project.frames.size()]) - project.undo_redo.add_do_method(project, "change_cel", project.frames.size(), layer_index) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_do_method(project.add_frames.bind([frame], [project.frames.size()])) + project.undo_redo.add_do_method(project.change_cel.bind(project.frames.size(), layer_index)) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_undo_method(project, "remove_frames", [project.frames.size()]) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_undo_method(project.remove_frames.bind([project.frames.size()])) project.undo_redo.add_undo_method( - project, "change_cel", project.current_frame, project.current_layer + project.change_cel.bind(project.current_frame, project.current_layer) ) project.undo_redo.commit_action() func open_image_as_new_layer(image: Image, file_name: String, frame_index := 0) -> void: - var project: Project = Global.current_project - var project_width: int = max(image.get_width(), project.size.x) - var project_height: int = max(image.get_height(), project.size.y) - if project.size < Vector2(project_width, project_height): + var project := Global.current_project + var project_width := maxi(image.get_width(), project.size.x) + var project_height := maxi(image.get_height(), project.size.y) + if project.size < Vector2i(project_width, project_height): DrawingAlgos.resize_canvas(project_width, project_height, 0, 0) var layer := PixelLayer.new(project, file_name) var cels := [] @@ -603,28 +601,29 @@ func open_image_as_new_layer(image: Image, file_name: String, frame_index := 0) for i in project.frames.size(): if i == frame_index: image.convert(Image.FORMAT_RGBA8) - var cel_image = Image.new() - cel_image.create(project_width, project_height, false, Image.FORMAT_RGBA8) - cel_image.blit_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO) + var cel_image := Image.create(project_width, project_height, false, Image.FORMAT_RGBA8) + cel_image.blit_rect(image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO) cels.append(PixelCel.new(cel_image, 1)) else: cels.append(layer.new_empty_cel()) - project.undo_redo.add_do_method(project, "add_layers", [layer], [project.layers.size()], [cels]) - project.undo_redo.add_do_method(project, "change_cel", frame_index, project.layers.size()) + project.undo_redo.add_do_method( + project.add_layers.bind([layer], [project.layers.size()], [cels]) + ) + project.undo_redo.add_do_method(project.change_cel.bind(frame_index, project.layers.size())) - project.undo_redo.add_undo_method(project, "remove_layers", [project.layers.size()]) + project.undo_redo.add_undo_method(project.remove_layers.bind([project.layers.size()])) project.undo_redo.add_undo_method( - project, "change_cel", project.current_frame, project.current_layer + project.change_cel.bind(project.current_frame, project.current_layer) ) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) project.undo_redo.commit_action() func import_reference_image_from_path(path: String) -> void: - var project: Project = Global.current_project + var project := Global.current_project var ri := ReferenceImage.new() ri.project = project ri.deserialize({"image_path": path}) @@ -632,9 +631,9 @@ func import_reference_image_from_path(path: String) -> void: project.change_project() -# Useful for HTML5 +## Useful for Web func import_reference_image_from_image(image: Image) -> void: - var project: Project = Global.current_project + var project := Global.current_project var ri := ReferenceImage.new() ri.project = project ri.create_from_image(image) @@ -643,18 +642,14 @@ func import_reference_image_from_image(image: Image) -> void: func set_new_imported_tab(project: Project, path: String) -> void: - var prev_project_empty: bool = Global.current_project.is_empty() - var prev_project_pos: int = Global.current_project_index - - Global.window_title = ( - path.get_file() - + " (" - + tr("imported") - + ") - Pixelorama " - + Global.current_version + var prev_project_empty := Global.current_project.is_empty() + var prev_project_pos := Global.current_project_index + + Global.main_window.title = ( + path.get_file() + " (" + tr("imported") + ") - Pixelorama " + Global.current_version ) if project.has_changed: - Global.window_title = Global.window_title + "(*)" + Global.main_window.title = Global.main_window.title + "(*)" var file_name := path.get_basename().get_file() var directory_path := path.get_base_dir() project.directory_path = directory_path @@ -682,15 +677,17 @@ func _on_Autosave_timeout() -> void: for i in range(backup_save_paths.size()): if backup_save_paths[i] == "": # Create a new backup file if it doesn't exist yet - backup_save_paths[i] = "user://backup-" + String(OS.get_unix_time()) + "-%s" % i + backup_save_paths[i] = ( + "user://backup-" + str(Time.get_unix_time_from_system()) + "-%s" % i + ) store_backup_path(i) save_pxo_file(backup_save_paths[i], true, true, Global.projects[i]) -# Backup paths are stored in two ways: -# 1) User already manually saved and defined a save path -> {current_save_path, backup_save_path} -# 2) User didn't manually saved, "untitled" backup is stored -> {backup_save_path, backup_save_path} +## Backup paths are stored in two ways: +## 1) User already manually saved and defined a save path -> {current_save_path, backup_save_path} +## 2) User didn't manually save, "untitled" backup is stored -> {backup_save_path, backup_save_path} func store_backup_path(i: int) -> void: if current_save_paths[i] != "": # Remove "untitled" backup if it existed on this project instance @@ -716,7 +713,7 @@ func remove_backup(i: int) -> void: func remove_backup_by_path(project_path: String, backup_path: String) -> void: - Directory.new().remove(backup_path) + DirAccess.open("user://").remove(backup_path) if Global.config_cache.has_section_key("backups", project_path): Global.config_cache.erase_section_key("backups", project_path) elif Global.config_cache.has_section_key("backups", backup_path): @@ -728,8 +725,8 @@ func reload_backup_file(project_paths: Array, backup_paths: Array) -> void: assert(project_paths.size() == backup_paths.size()) # Clear non-existent backups var existing_backups_count := 0 - var dir := Directory.new() for i in range(backup_paths.size()): + var dir := DirAccess.open("user://") if dir.file_exists(backup_paths[i]): project_paths[existing_backups_count] = project_paths[i] backup_paths[existing_backups_count] = backup_paths[i] @@ -749,10 +746,8 @@ func reload_backup_file(project_paths: Array, backup_paths: Array) -> void: # If project path is the same as backup save path -> the backup was untitled if project_paths[i] != backup_paths[i]: # If the user has saved current_save_paths[i] = project_paths[i] - Global.window_title = ( - project_paths[i].get_file() - + " - Pixelorama(*) " - + Global.current_version + Global.main_window.title = ( + project_paths[i].get_file() + " - Pixelorama(*) " + Global.current_version ) Global.current_project.has_changed = true @@ -760,7 +755,7 @@ func reload_backup_file(project_paths: Array, backup_paths: Array) -> void: func save_project_to_recent_list(path: String) -> void: - var top_menu_container: Panel = Global.top_menu_container + var top_menu_container := Global.top_menu_container if path.get_file().substr(0, 7) == "backup-" or path == "": return diff --git a/src/Autoload/Palettes.gd b/src/Autoload/Palettes.gd index ca1c3399dec..befd57fb6c6 100644 --- a/src/Autoload/Palettes.gd +++ b/src/Autoload/Palettes.gd @@ -3,20 +3,18 @@ extends Node # Presets for creating a new palette enum NewPalettePresetType { - EMPTY = 0, - FROM_CURRENT_PALETTE = 1, - FROM_CURRENT_SPRITE = 2, - FROM_CURRENT_SELECTION = 3 + EMPTY = 0, FROM_CURRENT_PALETTE = 1, FROM_CURRENT_SPRITE = 2, FROM_CURRENT_SELECTION = 3 } # Color options when user creates a new palette from current sprite or selection enum GetColorsFrom { CURRENT_FRAME = 0, CURRENT_CEL = 1, ALL_FRAMES = 2 } -const DEFAULT_PALETTE_NAME = "Default" +const DEFAULT_PALETTE_NAME := "Default" +var palettes_write_path := Global.home_data_directory.path_join("Palettes") # All available palettes var palettes := {} # Currently displayed palette -var current_palette = null +var current_palette: Palette = null # Indexes of colors that are selected in palette # by left and right mouse button @@ -64,23 +62,27 @@ func _current_palette_save() -> String: return save_path -func _save_palette(palette: Palette) -> String: - Global.directory_module.ensure_xdg_user_dirs_exist() - var palettes_write_path: String = Global.directory_module.get_palette_write_path() +func _ensure_palette_directory_exists() -> void: + var dir := DirAccess.open(Global.home_data_directory) + if not dir.dir_exists(palettes_write_path): + dir.make_dir(palettes_write_path) + +func _save_palette(palette: Palette) -> String: + _ensure_palette_directory_exists() # Save old resource name and set new resource name - var old_resource_name = palette.resource_name + var old_resource_name := palette.resource_name palette.set_resource_name(palette.name) # If resource name changed remove the old palette file if old_resource_name != palette.resource_name: - var old_palette = palettes_write_path.plus_file(old_resource_name) + ".tres" + var old_palette := palettes_write_path.path_join(old_resource_name) + ".tres" _delete_palette(old_palette) # Save palette - var save_path = palettes_write_path.plus_file(palette.resource_name) + ".tres" + var save_path := palettes_write_path.path_join(palette.resource_name) + ".tres" palette.resource_path = save_path - var err = ResourceSaver.save(save_path, palette) + var err := ResourceSaver.save(palette, save_path) if err != OK: Global.notification_label("Failed to save palette") return save_path @@ -88,93 +90,95 @@ func _save_palette(palette: Palette) -> String: func create_new_palette( preset: int, - name: String, + palette_name: String, comment: String, width: int, height: int, add_alpha_colors: bool, get_colors_from: int ) -> void: - _check_palette_settings_values(name, width, height) + _check_palette_settings_values(palette_name, width, height) match preset: NewPalettePresetType.EMPTY: - _create_new_empty_palette(name, comment, width, height) + _create_new_empty_palette(palette_name, comment, width, height) NewPalettePresetType.FROM_CURRENT_PALETTE: - _create_new_palette_from_current_palette(name, comment) + _create_new_palette_from_current_palette(palette_name, comment) NewPalettePresetType.FROM_CURRENT_SPRITE: _create_new_palette_from_current_sprite( - name, comment, width, height, add_alpha_colors, get_colors_from + palette_name, comment, width, height, add_alpha_colors, get_colors_from ) NewPalettePresetType.FROM_CURRENT_SELECTION: _create_new_palette_from_current_selection( - name, comment, width, height, add_alpha_colors, get_colors_from + palette_name, comment, width, height, add_alpha_colors, get_colors_from ) -func _create_new_empty_palette(name: String, comment: String, width: int, height: int) -> void: - var new_palette: Palette = Palette.new(name, width, height, comment) +func _create_new_empty_palette( + palette_name: String, comment: String, width: int, height: int +) -> void: + var new_palette: Palette = Palette.new(palette_name, width, height, comment) var palette_path := _save_palette(new_palette) palettes[palette_path] = new_palette select_palette(palette_path) -func _create_new_palette_from_current_palette(name: String, comment: String) -> void: +func _create_new_palette_from_current_palette(palette_name: String, comment: String) -> void: if !current_palette: return - var new_palette: Palette = current_palette.duplicate() - new_palette.name = name + var new_palette := current_palette.duplicate() as Palette + new_palette.name = palette_name new_palette.comment = comment - new_palette.set_resource_name(name) + new_palette.set_resource_name(palette_name) var palette_path := _save_palette(new_palette) palettes[palette_path] = new_palette select_palette(palette_path) func _create_new_palette_from_current_selection( - name: String, + palette_name: String, comment: String, width: int, height: int, add_alpha_colors: bool, get_colors_from: int ): - var new_palette: Palette = Palette.new(name, width, height, comment) - var current_project = Global.current_project - var pixels := [] + var new_palette := Palette.new(palette_name, width, height, comment) + var current_project := Global.current_project + var pixels: Array[Vector2i] = [] for x in current_project.size.x: for y in current_project.size.y: - var pos := Vector2(x, y) + var pos := Vector2i(x, y) if current_project.selection_map.is_pixel_selected(pos): pixels.append(pos) _fill_new_palette_with_colors(pixels, new_palette, add_alpha_colors, get_colors_from) func _create_new_palette_from_current_sprite( - name: String, + palette_name: String, comment: String, width: int, height: int, add_alpha_colors: bool, get_colors_from: int ): - var new_palette: Palette = Palette.new(name, width, height, comment) - var current_project = Global.current_project - var pixels := [] + var new_palette := Palette.new(palette_name, width, height, comment) + var current_project := Global.current_project + var pixels: Array[Vector2i] = [] for x in current_project.size.x: for y in current_project.size.y: - pixels.append(Vector2(x, y)) + pixels.append(Vector2i(x, y)) _fill_new_palette_with_colors(pixels, new_palette, add_alpha_colors, get_colors_from) func _fill_new_palette_with_colors( - pixels: Array, new_palette: Palette, add_alpha_colors: bool, get_colors_from: int + pixels: Array[Vector2i], new_palette: Palette, add_alpha_colors: bool, get_colors_from: int ): - var current_project = Global.current_project - var cels := [] + var current_project := Global.current_project + var cels: Array[BaseCel] = [] match get_colors_from: GetColorsFrom.CURRENT_CEL: for cel_index in current_project.selected_cels: - var cel = current_project.frames[cel_index[0]].cels[cel_index[1]] + var cel := current_project.frames[cel_index[0]].cels[cel_index[1]] cels.append(cel) GetColorsFrom.CURRENT_FRAME: for cel in current_project.frames[current_project.current_frame].cels: @@ -187,33 +191,30 @@ func _fill_new_palette_with_colors( for cel in cels: var cel_image := Image.new() cel_image.copy_from(cel.get_image()) - cel_image.lock() if cel_image.is_invisible(): continue for i in pixels: - var color: Color = cel_image.get_pixelv(i) + var color := cel_image.get_pixelv(i) if color.a > 0: if not add_alpha_colors: color.a = 1 - if not new_palette.has_color(color): + if not new_palette.has_theme_color(color): new_palette.add_color(color) - cel_image.unlock() var palette_path := _save_palette(new_palette) palettes[palette_path] = new_palette select_palette(palette_path) -func current_palette_edit(name: String, comment: String, width: int, height: int) -> void: - _check_palette_settings_values(name, width, height) - current_palette.edit(name, width, height, comment) - var palette_path = _current_palette_save() +func current_palette_edit(palette_name: String, comment: String, width: int, height: int) -> void: + _check_palette_settings_values(palette_name, width, height) + current_palette.edit(palette_name, width, height, comment) + var palette_path := _current_palette_save() palettes[palette_path] = current_palette func _delete_palette(path: String) -> void: - var dir = Directory.new() - dir.remove(path) + DirAccess.open(path).remove(path) palettes.erase(path) @@ -229,10 +230,10 @@ func current_palete_delete() -> void: func current_palette_add_color(mouse_button: int, start_index: int = 0) -> void: if ( not current_palette.is_full() - and (mouse_button == BUTTON_LEFT or mouse_button == BUTTON_RIGHT) + and (mouse_button == MOUSE_BUTTON_LEFT or mouse_button == MOUSE_BUTTON_RIGHT) ): # Get color on left or right tool - var color = Tools.get_assigned_color(mouse_button) + var color := Tools.get_assigned_color(mouse_button) current_palette.add_color(color, start_index) _current_palette_save() @@ -253,7 +254,7 @@ func current_palette_delete_color(index: int) -> void: func current_palette_swap_colors(source_index: int, target_index: int) -> void: current_palette.swap_colors(source_index, target_index) - _select_color(BUTTON_LEFT, target_index) + _select_color(MOUSE_BUTTON_LEFT, target_index) _current_palette_save() @@ -271,23 +272,23 @@ func current_palette_insert_color(from: int, to: int) -> void: func current_palette_get_selected_color_index(mouse_button: int) -> int: match mouse_button: - BUTTON_LEFT: + MOUSE_BUTTON_LEFT: return left_selected_color - BUTTON_RIGHT: + MOUSE_BUTTON_RIGHT: return right_selected_color _: return -1 func current_palette_select_color(mouse_button: int, index: int) -> void: - var color = current_palette_get_color(index) + var color := current_palette_get_color(index) if color == null: return match mouse_button: - BUTTON_LEFT: + MOUSE_BUTTON_LEFT: Tools.assign_color(color, mouse_button) - BUTTON_RIGHT: + MOUSE_BUTTON_RIGHT: Tools.assign_color(color, mouse_button) _select_color(mouse_button, index) @@ -295,9 +296,9 @@ func current_palette_select_color(mouse_button: int, index: int) -> void: func _select_color(mouse_button: int, index: int) -> void: match mouse_button: - BUTTON_LEFT: + MOUSE_BUTTON_LEFT: left_selected_color = index - BUTTON_RIGHT: + MOUSE_BUTTON_RIGHT: right_selected_color = index @@ -314,37 +315,36 @@ func current_palette_is_full() -> bool: return current_palette.is_full() -func _check_palette_settings_values(name: String, width: int, height: int) -> bool: +func _check_palette_settings_values(palette_name: String, width: int, height: int) -> bool: # Just in case. These values should be not allowed in gui. - if name.length() <= 0 or width <= 0 or height <= 0: + if palette_name.length() <= 0 or width <= 0 or height <= 0: printerr("Palette width, height and name length must be greater than 0!") return false return true func _load_palettes() -> void: - Global.directory_module.ensure_xdg_user_dirs_exist() - var search_locations = Global.directory_module.get_palette_search_path_in_order() + _ensure_palette_directory_exists() + var search_locations := Global.path_join_array(Global.data_directories, "Palettes") var priority_ordered_files := _get_palette_priority_file_map(search_locations) - var palettes_write_path: String = Global.directory_module.get_palette_write_path() # Iterate backwards, so any palettes defined in default files # get overwritten by those of the same name in user files - search_locations.invert() - priority_ordered_files.invert() + search_locations.reverse() + priority_ordered_files.reverse() var default_palette_name = Global.config_cache.get_value( "data", "last_palette", DEFAULT_PALETTE_NAME ) - for i in range(len(search_locations)): + for i in range(search_locations.size()): # If palette is not in palettes write path - make its copy in the write path var make_copy := false if search_locations[i] != palettes_write_path: make_copy = true - var base_directory: String = search_locations[i] + var base_directory := search_locations[i] var palette_files: Array = priority_ordered_files[i] for file_name in palette_files: - var palette: Palette = load(base_directory.plus_file(file_name)) + var palette := load(base_directory.path_join(file_name)) as Palette if palette: if make_copy: _save_palette(palette) # Makes a copy of the palette @@ -394,17 +394,16 @@ func _get_palette_priority_file_map(looking_paths: Array) -> Array: # Get the palette files in a single directory. # if it does not exist, return [] func _get_palette_files(path: String) -> Array: - var dir := Directory.new() - var results = [] + var dir := DirAccess.open(path) + var results := [] - if not dir.dir_exists(path): + if not is_instance_valid(dir) or not dir.dir_exists(path): return [] - dir.open(path) dir.list_dir_begin() while true: - var file_name = dir.get_next() + var file_name := dir.get_next() if file_name == "": break elif ( @@ -422,11 +421,11 @@ func _get_palette_files(path: String) -> Array: # If none is found in the directories, then do nothing and return null func _get_best_palette_file_location(looking_paths: Array, fname: String): # -> String: var priority_fmap: Array = _get_palette_priority_file_map(looking_paths) - for i in range(len(looking_paths)): + for i in range(looking_paths.size()): var base_path: String = looking_paths[i] var the_files: Array = priority_fmap[i] if the_files.has(fname): - return base_path.plus_file(fname) + return base_path.path_join(fname) return null @@ -438,18 +437,12 @@ func import_palette_from_path(path: String) -> void: var palette: Palette = null match path.to_lower().get_extension(): "gpl": - var file = File.new() - if file.file_exists(path): - file.open(path, File.READ) - var text = file.get_as_text() - file.close() + if FileAccess.file_exists(path): + var text := FileAccess.open(path, FileAccess.READ).get_as_text() palette = _import_gpl(path, text) "pal": - var file = File.new() - if file.file_exists(path): - file.open(path, File.READ) - var text = file.get_as_text() - file.close() + if FileAccess.file_exists(path): + var text := FileAccess.open(path, FileAccess.READ).get_as_text() palette = _import_pal_palette(path, text) "png", "bmp", "hdr", "jpg", "jpeg", "svg", "tga", "webp": var image := Image.new() @@ -457,11 +450,8 @@ func import_palette_from_path(path: String) -> void: if !err: palette = _import_image_palette(path, image) "json": - var file = File.new() - if file.file_exists(path): - file.open(path, File.READ) - var text = file.get_as_text() - file.close() + if FileAccess.file_exists(path): + var text := FileAccess.open(path, FileAccess.READ).get_as_text() palette = _import_json_palette(text) import_palette(palette, path.get_file()) @@ -488,11 +478,11 @@ func import_palette(palette: Palette, file_name: String) -> void: func _import_gpl(path: String, text: String) -> Palette: # Refer to app/core/gimppalette-load.c of the GIMP for the "living spec" var result: Palette = null - var lines = text.split("\n") + var lines := text.split("\n") var line_number := 0 var palette_name := path.get_basename().get_file() var comments := "" - var colors := PoolColorArray() + var colors := PackedColorArray() for line in lines: # Check if valid Gimp Palette Library file @@ -513,11 +503,11 @@ func _import_gpl(path: String, text: String) -> Palette: continue elif line_number > 0 && line.length() >= 9: line = line.replace("\t", " ") - var color_data: PoolStringArray = line.split(" ", false, 4) + var color_data: PackedStringArray = line.split(" ", false, 4) var red: float = color_data[0].to_float() / 255.0 var green: float = color_data[1].to_float() / 255.0 var blue: float = color_data[2].to_float() / 255.0 - var color = Color(red, green, blue) + var color := Color(red, green, blue) if color_data.size() >= 4: # Ignore color name for now - result.add_color(color, color_data[3]) colors.append(color) @@ -527,7 +517,7 @@ func _import_gpl(path: String, text: String) -> Palette: line_number += 1 if line_number > 0: - var height: int = ceil(colors.size() / 8.0) + var height := ceili(colors.size() / 8.0) result = Palette.new(palette_name, 8, height, comments) for color in colors: result.add_color(color) @@ -537,13 +527,13 @@ func _import_gpl(path: String, text: String) -> Palette: func _import_pal_palette(path: String, text: String) -> Palette: var result: Palette = null - var colors := PoolColorArray() - var lines = text.split("\n") + var colors := PackedColorArray() + var lines := text.split("\n") if not "JASC-PAL" in lines[0] or not "0100" in lines[1]: return result - var num_colors = int(lines[2]) + var num_colors := int(lines[2]) for i in range(3, num_colors + 3): var color_data = lines[i].split(" ") @@ -551,10 +541,10 @@ func _import_pal_palette(path: String, text: String) -> Palette: var green: float = color_data[1].to_float() / 255.0 var blue: float = color_data[2].to_float() / 255.0 - var color = Color(red, green, blue) + var color := Color(red, green, blue) colors.append(color) - var height: int = ceil(colors.size() / 8.0) + var height := ceili(colors.size() / 8.0) result = Palette.new(path.get_basename().get_file(), 8, height) for color in colors: result.add_color(color) @@ -563,19 +553,17 @@ func _import_pal_palette(path: String, text: String) -> Palette: func _import_image_palette(path: String, image: Image) -> Palette: var colors := [] - var height: int = image.get_height() - var width: int = image.get_width() + var height := image.get_height() + var width := image.get_width() # Iterate all pixels and store unique colors to palette - image.lock() for y in range(0, height): for x in range(0, width): - var color: Color = image.get_pixel(x, y) + var color := image.get_pixel(x, y) if !colors.has(color): colors.append(color) - image.unlock() - var palette_height: int = ceil(colors.size() / 8.0) + var palette_height := ceili(colors.size() / 8.0) var result: Palette = Palette.new(path.get_basename().get_file(), 8, palette_height) for color in colors: result.add_color(color) @@ -583,10 +571,12 @@ func _import_image_palette(path: String, image: Image) -> Palette: return result -# Import of deprecated older json palette format +## Import of deprecated older json palette format func _import_json_palette(text: String) -> Palette: - var result: Palette = Palette.new() - var result_json = JSON.parse(text) + var result := Palette.new() + var test_json_conv := JSON.new() + test_json_conv.parse(text) + var result_json = test_json_conv.get_data() if result_json.error != OK: # If parse has errors printerr("JSON palette import error") @@ -602,7 +592,7 @@ func _import_json_palette(text: String) -> Palette: result.comment = data.comments if data.has("colors"): for color_data in data.colors: - var color: Color = Color(color_data.data) + var color := Color(color_data.data) result.add_color(color) return result diff --git a/src/Autoload/Tools.gd b/src/Autoload/Tools.gd index 0672623a855..4fc1a9ce6b7 100644 --- a/src/Autoload/Tools.gd +++ b/src/Autoload/Tools.gd @@ -30,21 +30,21 @@ var tools := { "RectSelect", "Rectangular Selection", "rectangle_select", - preload("res://src/Tools/SelectionTools/RectSelect.tscn") + "res://src/Tools/SelectionTools/RectSelect.tscn" ), "EllipseSelect": Tool.new( "EllipseSelect", "Elliptical Selection", "ellipse_select", - preload("res://src/Tools/SelectionTools/EllipseSelect.tscn") + "res://src/Tools/SelectionTools/EllipseSelect.tscn" ), "PolygonSelect": Tool.new( "PolygonSelect", "Polygonal Selection", "polygon_select", - preload("res://src/Tools/SelectionTools/PolygonSelect.tscn"), + "res://src/Tools/SelectionTools/PolygonSelect.tscn", [], "Double-click to connect the last point to the starting point" ), @@ -53,54 +53,44 @@ var tools := { "ColorSelect", "Select By Color", "color_select", - preload("res://src/Tools/SelectionTools/ColorSelect.tscn") + "res://src/Tools/SelectionTools/ColorSelect.tscn" ), "MagicWand": Tool.new( - "MagicWand", - "Magic Wand", - "magic_wand", - preload("res://src/Tools/SelectionTools/MagicWand.tscn") + "MagicWand", "Magic Wand", "magic_wand", "res://src/Tools/SelectionTools/MagicWand.tscn" ), "Lasso": Tool.new( - "Lasso", - "Lasso / Free Select Tool", - "lasso", - preload("res://src/Tools/SelectionTools/Lasso.tscn") + "Lasso", "Lasso / Free Select Tool", "lasso", "res://src/Tools/SelectionTools/Lasso.tscn" ), "PaintSelect": Tool.new( "PaintSelect", "Select by Drawing", "paint_selection", - preload("res://src/Tools/SelectionTools/PaintSelect.tscn") + "res://src/Tools/SelectionTools/PaintSelect.tscn" ), "Move": - Tool.new( - "Move", "Move", "move", preload("res://src/Tools/Move.tscn"), [Global.LayerTypes.PIXEL] - ), - "Zoom": Tool.new("Zoom", "Zoom", "zoom", preload("res://src/Tools/Zoom.tscn")), - "Pan": Tool.new("Pan", "Pan", "pan", preload("res://src/Tools/Pan.tscn")), + Tool.new("Move", "Move", "move", "res://src/Tools/Move.tscn", [Global.LayerTypes.PIXEL]), + "Zoom": Tool.new("Zoom", "Zoom", "zoom", "res://src/Tools/Zoom.tscn"), + "Pan": Tool.new("Pan", "Pan", "pan", "res://src/Tools/Pan.tscn"), "ColorPicker": Tool.new( "ColorPicker", "Color Picker", "colorpicker", - preload("res://src/Tools/ColorPicker.tscn"), + "res://src/Tools/ColorPicker.tscn", [], "Select a color from a pixel of the sprite" ), "Crop": - Tool.new( - "Crop", "Crop", "crop", preload("res://src/Tools/CropTool.tscn"), [], "Resize the canvas" - ), + Tool.new("Crop", "Crop", "crop", "res://src/Tools/CropTool.tscn", [], "Resize the canvas"), "Pencil": Tool.new( "Pencil", "Pencil", "pencil", - preload("res://src/Tools/Pencil.tscn"), + "res://src/Tools/Pencil.tscn", [Global.LayerTypes.PIXEL], "Hold %s to make a line", ["draw_create_line"] @@ -110,77 +100,80 @@ var tools := { "Eraser", "Eraser", "eraser", - preload("res://src/Tools/Eraser.tscn"), + "res://src/Tools/Eraser.tscn", [Global.LayerTypes.PIXEL], "Hold %s to make a line", ["draw_create_line"] ), "Bucket": - Tool.new( - "Bucket", - "Bucket", - "fill", - preload("res://src/Tools/Bucket.tscn"), - [Global.LayerTypes.PIXEL] - ), + Tool.new("Bucket", "Bucket", "fill", "res://src/Tools/Bucket.tscn", [Global.LayerTypes.PIXEL]), "Shading": Tool.new( "Shading", "Shading Tool", "shading", - preload("res://src/Tools/Shading.tscn"), + "res://src/Tools/Shading.tscn", [Global.LayerTypes.PIXEL] ), "LineTool": - Tool.new( - "LineTool", - "Line Tool", - "linetool", - preload("res://src/Tools/LineTool.tscn"), - [Global.LayerTypes.PIXEL], - """Hold %s to snap the angle of the line + ( + Tool + . new( + "LineTool", + "Line Tool", + "linetool", + "res://src/Tools/LineTool.tscn", + [Global.LayerTypes.PIXEL], + """Hold %s to snap the angle of the line Hold %s to center the shape on the click origin Hold %s to displace the shape's origin""", - ["shape_perfect", "shape_center", "shape_displace"] + ["shape_perfect", "shape_center", "shape_displace"] + ) ), "RectangleTool": - Tool.new( - "RectangleTool", - "Rectangle Tool", - "rectangletool", - preload("res://src/Tools/RectangleTool.tscn"), - [Global.LayerTypes.PIXEL], - """Hold %s to create a 1:1 shape + ( + Tool + . new( + "RectangleTool", + "Rectangle Tool", + "rectangletool", + "res://src/Tools/RectangleTool.tscn", + [Global.LayerTypes.PIXEL], + """Hold %s to create a 1:1 shape Hold %s to center the shape on the click origin Hold %s to displace the shape's origin""", - ["shape_perfect", "shape_center", "shape_displace"] + ["shape_perfect", "shape_center", "shape_displace"] + ) ), "EllipseTool": - Tool.new( - "EllipseTool", - "Ellipse Tool", - "ellipsetool", - preload("res://src/Tools/EllipseTool.tscn"), - [Global.LayerTypes.PIXEL], - """Hold %s to create a 1:1 shape + ( + Tool + . new( + "EllipseTool", + "Ellipse Tool", + "ellipsetool", + "res://src/Tools/EllipseTool.tscn", + [Global.LayerTypes.PIXEL], + """Hold %s to create a 1:1 shape Hold %s to center the shape on the click origin Hold %s to displace the shape's origin""", - ["shape_perfect", "shape_center", "shape_displace"] + ["shape_perfect", "shape_center", "shape_displace"] + ) ), "3DShapeEdit": Tool.new( "3DShapeEdit", "3D Shape Edit", "3dshapeedit", - preload("res://src/Tools/3DShapeEdit.tscn"), + "res://src/Tools/3DShapeEdit.tscn", [Global.LayerTypes.THREE_D] ), } -var _tool_button_scene: PackedScene = preload("res://src/Tools/ToolButton.tscn") +var _tool_button_scene := preload("res://src/Tools/ToolButton.tscn") var _slots := {} var _panels := {} -var _curr_layer_type: int = Global.LayerTypes.PIXEL +var _curr_layer_type := Global.LayerTypes.PIXEL var _left_tools_per_layer_type := { Global.LayerTypes.PIXEL: "Pencil", Global.LayerTypes.THREE_D: "3DShapeEdit", @@ -191,75 +184,81 @@ var _right_tools_per_layer_type := { } var _tool_buttons: Node var _active_button := -1 -var _last_position := Vector2.INF +var _last_position := Vector2i(Vector2.INF) class Tool: var name := "" var display_name := "" + var scene_path: String var scene: PackedScene - var icon: Texture - var cursor_icon: Texture + var icon: Texture2D + var cursor_icon: Texture2D var shortcut := "" var extra_hint := "" - var extra_shortcuts := [] # Array of String(s) - var layer_types: PoolIntArray = [] + var extra_shortcuts: PackedStringArray = [] + var layer_types: PackedInt32Array = [] var button_node: BaseButton func _init( _name: String, _display_name: String, _shortcut: String, - _scene: PackedScene, - _layer_types: PoolIntArray = [], + _scene_path: String, + _layer_types: PackedInt32Array = [], _extra_hint := "", - _extra_shortucts := [] + _extra_shortucts: PackedStringArray = [] ) -> void: name = _name display_name = _display_name shortcut = _shortcut - scene = _scene + scene_path = _scene_path layer_types = _layer_types extra_hint = _extra_hint extra_shortcuts = _extra_shortucts icon = load("res://assets/graphics/tools/%s.png" % name.to_lower()) cursor_icon = load("res://assets/graphics/tools/cursors/%s.png" % name.to_lower()) + func instantiate_scene() -> Node: + if not is_instance_valid(scene): + scene = load(scene_path) + return scene.instantiate() + func generate_hint_tooltip() -> String: var hint := display_name var shortcuts := [] var left_text := "" var right_text := "" if InputMap.has_action("left_" + shortcut + "_tool"): - var left_list := InputMap.get_action_list("left_" + shortcut + "_tool") + var left_list := InputMap.action_get_events("left_" + shortcut + "_tool") if left_list.size() > 0: var left_shortcut: String = left_list[0].as_text() shortcuts.append(left_shortcut) left_text = "\n%s for left mouse button" if InputMap.has_action("right_" + shortcut + "_tool"): - var right_list := InputMap.get_action_list("right_" + shortcut + "_tool") + var right_list := InputMap.action_get_events("right_" + shortcut + "_tool") if right_list.size() > 0: var right_shortcut: String = right_list[0].as_text() shortcuts.append(right_shortcut) right_text = "\n%s for right mouse button" - if !shortcuts.empty(): + if !shortcuts.is_empty(): hint += "\n" + left_text + right_text - if !extra_hint.empty(): + if !extra_hint.is_empty(): hint += "\n\n" + extra_hint var extra_shortcuts_mapped := [] - for event in extra_shortcuts: - var key: InputEventKey = Keychain.action_get_first_key(event) + for action in extra_shortcuts: var key_string := "None" - if key: - key_string = OS.get_scancode_string(key.get_scancode_with_modifiers()) + var events := InputMap.action_get_events(action) + if events.size() > 0: + key_string = events[0].as_text() extra_shortcuts_mapped.append(key_string) shortcuts.append_array(extra_shortcuts_mapped) - if shortcuts.empty(): + if shortcuts.is_empty(): hint = tr(hint) else: hint = tr(hint) % shortcuts @@ -279,8 +278,8 @@ class Slot: func _ready() -> void: - Global.connect("cel_changed", self, "_cel_changed") - _tool_buttons = Global.control.find_node("ToolButtons") + Global.cel_changed.connect(_cel_changed) + _tool_buttons = Global.control.find_child("ToolButtons") for t in tools: add_tool_button(tools[t]) var tool_shortcut: String = tools[t].shortcut @@ -289,25 +288,25 @@ func _ready() -> void: Keychain.actions[left_tool_shortcut] = Keychain.InputAction.new("", "Left") Keychain.actions[right_tool_shortcut] = Keychain.InputAction.new("", "Right") - _slots[BUTTON_LEFT] = Slot.new("Left tool") - _slots[BUTTON_RIGHT] = Slot.new("Right tool") - _panels[BUTTON_LEFT] = Global.control.find_node("LeftPanelContainer", true, false) - _panels[BUTTON_RIGHT] = Global.control.find_node("RightPanelContainer", true, false) + _slots[MOUSE_BUTTON_LEFT] = Slot.new("Left tool") + _slots[MOUSE_BUTTON_RIGHT] = Slot.new("Right tool") + _panels[MOUSE_BUTTON_LEFT] = Global.control.find_child("LeftPanelContainer", true, false) + _panels[MOUSE_BUTTON_RIGHT] = Global.control.find_child("RightPanelContainer", true, false) var default_left_tool: String = _left_tools_per_layer_type[0] var default_right_tool: String = _right_tools_per_layer_type[0] var tool_name: String = Global.config_cache.get_value( - _slots[BUTTON_LEFT].kname, "tool", default_left_tool + _slots[MOUSE_BUTTON_LEFT].kname, "tool", default_left_tool ) if not tool_name in tools or not _is_tool_available(Global.LayerTypes.PIXEL, tools[tool_name]): tool_name = default_left_tool - set_tool(tool_name, BUTTON_LEFT) + set_tool(tool_name, MOUSE_BUTTON_LEFT) tool_name = Global.config_cache.get_value( - _slots[BUTTON_RIGHT].kname, "tool", default_right_tool + _slots[MOUSE_BUTTON_RIGHT].kname, "tool", default_right_tool ) if not tool_name in tools or not _is_tool_available(Global.LayerTypes.PIXEL, tools[tool_name]): tool_name = default_right_tool - set_tool(tool_name, BUTTON_RIGHT) + set_tool(tool_name, MOUSE_BUTTON_RIGHT) update_tool_buttons() horizontal_mirror = Global.config_cache.get_value("preferences", "horizontal_mirror", false) @@ -315,13 +314,15 @@ func _ready() -> void: pixel_perfect = Global.config_cache.get_value("preferences", "pixel_perfect", false) # Yield is necessary for the color picker nodes to update their color values - yield(get_tree(), "idle_frame") + await get_tree().process_frame var color_value: Color = Global.config_cache.get_value( - _slots[BUTTON_LEFT].kname, "color", Color.black + _slots[MOUSE_BUTTON_LEFT].kname, "color", Color.BLACK + ) + assign_color(color_value, MOUSE_BUTTON_LEFT, false) + color_value = Global.config_cache.get_value( + _slots[MOUSE_BUTTON_RIGHT].kname, "color", Color.WHITE ) - assign_color(color_value, BUTTON_LEFT, false) - color_value = Global.config_cache.get_value(_slots[BUTTON_RIGHT].kname, "color", Color.white) - assign_color(color_value, BUTTON_RIGHT, false) + assign_color(color_value, MOUSE_BUTTON_RIGHT, false) update_tool_cursors() var layer: BaseLayer = Global.current_project.layers[Global.current_project.current_layer] var layer_type := layer.get_layer_type() @@ -329,15 +330,15 @@ func _ready() -> void: func add_tool_button(t: Tool) -> void: - var tool_button: BaseButton = _tool_button_scene.instance() + var tool_button: BaseButton = _tool_button_scene.instantiate() tool_button.name = t.name tool_button.get_node("BackgroundLeft").modulate = Global.left_tool_color tool_button.get_node("BackgroundRight").modulate = Global.right_tool_color tool_button.get_node("ToolIcon").texture = t.icon - tool_button.hint_tooltip = t.generate_hint_tooltip() + tool_button.tooltip_text = t.generate_hint_tooltip() t.button_node = tool_button _tool_buttons.add_child(tool_button) - tool_button.connect("pressed", _tool_buttons, "_on_Tool_pressed", [tool_button]) + tool_button.pressed.connect(_tool_buttons._on_Tool_pressed.bind(tool_button)) func remove_tool(t: Tool) -> void: @@ -345,16 +346,16 @@ func remove_tool(t: Tool) -> void: tools.erase(t.name) -func set_tool(name: String, button: int) -> void: +func set_tool(tool_name: String, button: int) -> void: var slot: Slot = _slots[button] var panel: Node = _panels[button] - var node: Node = tools[name].scene.instance() - if button == BUTTON_LEFT: # As guides are only moved with left mouse - if name == "Pan": # tool you want to give more access at guides + var node: Node = tools[tool_name].instantiate_scene() + if button == MOUSE_BUTTON_LEFT: # As guides are only moved with left mouse + if tool_name == "Pan": # tool you want to give more access at guides Global.move_guides_on_canvas = true else: Global.move_guides_on_canvas = false - node.name = name + node.name = tool_name node.tool_slot = slot slot.tool_node = node slot.button = button @@ -362,38 +363,38 @@ func set_tool(name: String, button: int) -> void: if _curr_layer_type == Global.LayerTypes.GROUP: return - if button == BUTTON_LEFT: - _left_tools_per_layer_type[_curr_layer_type] = name - elif button == BUTTON_RIGHT: - _right_tools_per_layer_type[_curr_layer_type] = name + if button == MOUSE_BUTTON_LEFT: + _left_tools_per_layer_type[_curr_layer_type] = tool_name + elif button == MOUSE_BUTTON_RIGHT: + _right_tools_per_layer_type[_curr_layer_type] = tool_name -func assign_tool(name: String, button: int) -> void: +func assign_tool(tool_name: String, button: int) -> void: var slot: Slot = _slots[button] var panel: Node = _panels[button] if slot.tool_node != null: - if slot.tool_node.name == name: + if slot.tool_node.name == tool_name: return panel.remove_child(slot.tool_node) slot.tool_node.queue_free() - set_tool(name, button) + set_tool(tool_name, button) update_tool_buttons() update_tool_cursors() - Global.config_cache.set_value(slot.kname, "tool", name) + Global.config_cache.set_value(slot.kname, "tool", tool_name) func default_color() -> void: - assign_color(Color.black, BUTTON_LEFT) - assign_color(Color.white, BUTTON_RIGHT) + assign_color(Color.BLACK, MOUSE_BUTTON_LEFT) + assign_color(Color.WHITE, MOUSE_BUTTON_RIGHT) func swap_color() -> void: - var left = _slots[BUTTON_LEFT].color - var right = _slots[BUTTON_RIGHT].color - assign_color(right, BUTTON_LEFT, false) - assign_color(left, BUTTON_RIGHT, false) + var left = _slots[MOUSE_BUTTON_LEFT].color + var right = _slots[MOUSE_BUTTON_RIGHT].color + assign_color(right, MOUSE_BUTTON_LEFT, false) + assign_color(left, MOUSE_BUTTON_RIGHT, false) func assign_color(color: Color, button: int, change_alpha := true) -> void: @@ -404,7 +405,7 @@ func assign_color(color: Color, button: int, change_alpha := true) -> void: color.a = 1 _slots[button].color = color Global.config_cache.set_value(_slots[button].kname, "color", color) - emit_signal("color_changed", color, button) + color_changed.emit(color, button) # If current palette has that color then select that color Global.palette_panel.palette_grid.find_and_select_color(button, color) @@ -416,47 +417,45 @@ func get_assigned_color(button: int) -> Color: func set_button_size(button_size: int) -> void: var size := Vector2(24, 24) if button_size == Global.ButtonSize.SMALL else Vector2(32, 32) for t in _tool_buttons.get_children(): - t.rect_min_size = size - t.get_node("BackgroundLeft").rect_size.x = size.x / 2 - t.get_node("BackgroundRight").rect_size.x = size.x / 2 - t.get_node("BackgroundRight").rect_position = size + t.custom_minimum_size = size func update_tool_buttons() -> void: for child in _tool_buttons.get_children(): var left_background: NinePatchRect = child.get_node("BackgroundLeft") var right_background: NinePatchRect = child.get_node("BackgroundRight") - left_background.visible = _slots[BUTTON_LEFT].tool_node.name == child.name - right_background.visible = _slots[BUTTON_RIGHT].tool_node.name == child.name + left_background.visible = _slots[MOUSE_BUTTON_LEFT].tool_node.name == child.name + right_background.visible = _slots[MOUSE_BUTTON_RIGHT].tool_node.name == child.name func update_hint_tooltips() -> void: + await get_tree().process_frame for tool_name in tools: var t: Tool = tools[tool_name] - t.button_node.hint_tooltip = t.generate_hint_tooltip() + t.button_node.tooltip_text = t.generate_hint_tooltip() func update_tool_cursors() -> void: - var left_tool: Tool = tools[_slots[BUTTON_LEFT].tool_node.name] + var left_tool: Tool = tools[_slots[MOUSE_BUTTON_LEFT].tool_node.name] Global.control.left_cursor.texture = left_tool.cursor_icon - var right_tool: Tool = tools[_slots[BUTTON_RIGHT].tool_node.name] + var right_tool: Tool = tools[_slots[MOUSE_BUTTON_RIGHT].tool_node.name] Global.control.right_cursor.texture = right_tool.cursor_icon func draw_indicator() -> void: if Global.right_square_indicator_visible: - _slots[BUTTON_RIGHT].tool_node.draw_indicator(false) + _slots[MOUSE_BUTTON_RIGHT].tool_node.draw_indicator(false) if Global.left_square_indicator_visible: - _slots[BUTTON_LEFT].tool_node.draw_indicator(true) + _slots[MOUSE_BUTTON_LEFT].tool_node.draw_indicator(true) func draw_preview() -> void: - _slots[BUTTON_LEFT].tool_node.draw_preview() - _slots[BUTTON_RIGHT].tool_node.draw_preview() + _slots[MOUSE_BUTTON_LEFT].tool_node.draw_preview() + _slots[MOUSE_BUTTON_RIGHT].tool_node.draw_preview() -func handle_draw(position: Vector2, event: InputEvent) -> void: - if not (Global.can_draw and Global.has_focus): +func handle_draw(position: Vector2i, event: InputEvent) -> void: + if not Global.can_draw: return var draw_pos := position @@ -464,15 +463,15 @@ func handle_draw(position: Vector2, event: InputEvent) -> void: draw_pos.x = Global.current_project.size.x - position.x - 1 if event.is_action_pressed("activate_left_tool") and _active_button == -1: - _active_button = BUTTON_LEFT + _active_button = MOUSE_BUTTON_LEFT _slots[_active_button].tool_node.draw_start(draw_pos) - elif event.is_action_released("activate_left_tool") and _active_button == BUTTON_LEFT: + elif event.is_action_released("activate_left_tool") and _active_button == MOUSE_BUTTON_LEFT: _slots[_active_button].tool_node.draw_end(draw_pos) _active_button = -1 elif event.is_action_pressed("activate_right_tool") and _active_button == -1: - _active_button = BUTTON_RIGHT + _active_button = MOUSE_BUTTON_RIGHT _slots[_active_button].tool_node.draw_start(draw_pos) - elif event.is_action_released("activate_right_tool") and _active_button == BUTTON_RIGHT: + elif event.is_action_released("activate_right_tool") and _active_button == MOUSE_BUTTON_RIGHT: _slots[_active_button].tool_node.draw_end(draw_pos) _active_button = -1 @@ -484,44 +483,44 @@ func handle_draw(position: Vector2, event: InputEvent) -> void: # correct the jumping to 1 error while also allowing values that # are "supposed" to be 1. if pen_pressure == 1 && pressure_buf[0] != 0: - pen_pressure = min(1, pressure_buf[0] + pressure_buf[0] - pressure_buf[1]) + pen_pressure = minf(1, pressure_buf[0] + pressure_buf[0] - pressure_buf[1]) pressure_buf.pop_back() pressure_buf.push_front(pen_pressure) - pen_pressure = range_lerp(pen_pressure, pen_pressure_min, pen_pressure_max, 0.0, 1.0) - pen_pressure = clamp(pen_pressure, 0.0, 1.0) + pen_pressure = remap(pen_pressure, pen_pressure_min, pen_pressure_max, 0.0, 1.0) + pen_pressure = clampf(pen_pressure, 0.0, 1.0) - mouse_velocity = event.speed.length() / mouse_velocity_max - mouse_velocity = range_lerp( + mouse_velocity = event.velocity.length() / mouse_velocity_max + mouse_velocity = remap( mouse_velocity, mouse_velocity_min_thres, mouse_velocity_max_thres, 0.0, 1.0 ) - mouse_velocity = clamp(mouse_velocity, 0.0, 1.0) + mouse_velocity = clampf(mouse_velocity, 0.0, 1.0) if dynamics_alpha != Dynamics.PRESSURE and dynamics_size != Dynamics.PRESSURE: pen_pressure = 1.0 if dynamics_alpha != Dynamics.VELOCITY and dynamics_size != Dynamics.VELOCITY: mouse_velocity = 1.0 - if not position.is_equal_approx(_last_position): + if not position == _last_position: _last_position = position - _slots[BUTTON_LEFT].tool_node.cursor_move(position) - _slots[BUTTON_RIGHT].tool_node.cursor_move(position) + _slots[MOUSE_BUTTON_LEFT].tool_node.cursor_move(position) + _slots[MOUSE_BUTTON_RIGHT].tool_node.cursor_move(position) if _active_button != -1: _slots[_active_button].tool_node.draw_move(draw_pos) - var project: Project = Global.current_project + var project := Global.current_project var text := "[%sร—%s]" % [project.size.x, project.size.y] if Global.has_focus: text += " %s, %s" % [position.x, position.y] - if not _slots[BUTTON_LEFT].tool_node.cursor_text.empty(): - text += " %s" % _slots[BUTTON_LEFT].tool_node.cursor_text - if not _slots[BUTTON_RIGHT].tool_node.cursor_text.empty(): - text += " %s" % _slots[BUTTON_RIGHT].tool_node.cursor_text + if not _slots[MOUSE_BUTTON_LEFT].tool_node.cursor_text.is_empty(): + text += " %s" % _slots[MOUSE_BUTTON_LEFT].tool_node.cursor_text + if not _slots[MOUSE_BUTTON_RIGHT].tool_node.cursor_text.is_empty(): + text += " %s" % _slots[MOUSE_BUTTON_RIGHT].tool_node.cursor_text Global.cursor_position_label.text = text func get_alpha_dynamic(strength := 1.0) -> float: if dynamics_alpha == Dynamics.PRESSURE: - strength *= lerp(alpha_min, alpha_max, pen_pressure) + strength *= lerpf(alpha_min, alpha_max, pen_pressure) elif dynamics_alpha == Dynamics.VELOCITY: - strength *= lerp(alpha_min, alpha_max, mouse_velocity) + strength *= lerpf(alpha_min, alpha_max, mouse_velocity) return strength @@ -534,7 +533,7 @@ func _cel_changed() -> void: _show_relevant_tools(layer_type) -func _show_relevant_tools(layer_type: int) -> void: +func _show_relevant_tools(layer_type: Global.LayerTypes) -> void: # Hide tools that are not available in the current layer type for button in _tool_buttons.get_children(): var tool_name: String = button.name @@ -545,11 +544,11 @@ func _show_relevant_tools(layer_type: int) -> void: # Assign new tools if the layer type has changed _curr_layer_type = layer_type var new_tool_name: String = _left_tools_per_layer_type[layer_type] - assign_tool(new_tool_name, BUTTON_LEFT) + assign_tool(new_tool_name, MOUSE_BUTTON_LEFT) new_tool_name = _right_tools_per_layer_type[layer_type] - assign_tool(new_tool_name, BUTTON_RIGHT) + assign_tool(new_tool_name, MOUSE_BUTTON_RIGHT) func _is_tool_available(layer_type: int, t: Tool) -> bool: - return t.layer_types.empty() or layer_type in t.layer_types + return t.layer_types.is_empty() or layer_type in t.layer_types diff --git a/src/Classes/AnimationExporters/GIFAnimationExporter.gd b/src/Classes/AnimationExporters/GIFAnimationExporter.gd index d98477fc442..adf8cbc36a4 100644 --- a/src/Classes/AnimationExporters/GIFAnimationExporter.gd +++ b/src/Classes/AnimationExporters/GIFAnimationExporter.gd @@ -4,8 +4,8 @@ extends AImgIOBaseExporter # Note that if the interface needs changing for new features, do just change it! # Gif exporter -const GIFExporter = preload("res://addons/gdgifexporter/exporter.gd") -const MedianCutQuantization = preload("res://addons/gdgifexporter/quantization/median_cut.gd") +const GIFExporter := preload("res://addons/gdgifexporter/exporter.gd") +const MedianCutQuantization := preload("res://addons/gdgifexporter/quantization/median_cut.gd") func _init(): @@ -18,10 +18,10 @@ func export_animation( progress_report_obj: Object, progress_report_method, progress_report_args -) -> PoolByteArray: +) -> PackedByteArray: var first_frame: AImgIOFrame = frames[0] var first_img := first_frame.content - var exporter = GIFExporter.new(first_img.get_width(), first_img.get_height()) + var exporter := GIFExporter.new(first_img.get_width(), first_img.get_height()) for v in frames: var frame: AImgIOFrame = v exporter.add_frame(frame.content, frame.duration, MedianCutQuantization) diff --git a/src/Classes/AnimationTag.gd b/src/Classes/AnimationTag.gd index a6cfb697a51..04b70ecd9d6 100644 --- a/src/Classes/AnimationTag.gd +++ b/src/Classes/AnimationTag.gd @@ -1,5 +1,5 @@ class_name AnimationTag -extends Reference +extends RefCounted # A class for frame tag properties var name: String diff --git a/src/Classes/BaseCel.gd b/src/Classes/BaseCel.gd index 57c3c78c15e..3d5744000e0 100644 --- a/src/Classes/BaseCel.gd +++ b/src/Classes/BaseCel.gd @@ -1,26 +1,27 @@ class_name BaseCel -extends Reference +extends RefCounted ## Base class for cel properties. ## The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel). signal texture_changed var opacity := 1.0 -var image_texture: Texture setget , _get_image_texture -# If the cel is linked a ref to the link set Dictionary this cel is in, or null if not linked: -var link_set = null # { "cels": Array, "hue": float } or null -var transformed_content: Image # Used in transformations (moving, scaling etc with selections) +var image_texture: Texture2D: + get = _get_image_texture +## If the cel is linked a ref to the link set Dictionary this cel is in, or null if not linked: +var link_set = null ## { "cels": Array, "hue": float } or null +var transformed_content: Image ## Used in transformations (moving, scaling etc with selections) # Methods to Override: -func _get_image_texture() -> Texture: +func _get_image_texture() -> Texture2D: return image_texture -# The content methods deal with the unique content of each cel type. For example, an Image for -# PixelLayers, or a Dictionary of settings for a procedural layer type, and null for Groups. -# Can be used for linking/unlinking cels, copying, and deleting content +## The content methods deal with the unique content of each cel type. For example, an Image for +## PixelLayers, or a Dictionary of settings for a procedural layer type, and null for Groups. +## Can be used for linking/unlinking cels, copying, and deleting content func get_content(): return null @@ -29,31 +30,31 @@ func set_content(_content, _texture: ImageTexture = null) -> void: return -# Can be used to delete the content of the cel with set_content -# (using the old content from get_content as undo data) +## Can be used to delete the content of the cel with set_content +## (using the old content from get_content as undo data) func create_empty_content(): return [] -# Can be used for creating copy content for copying cels or unlinking cels +## Can be used for creating copy content for copying cels or unlinking cels func copy_content(): return [] -# Returns the image var for image based cel types, or a render for procedural types. -# It's meant for read-only usage of image data, such as copying selections or color picking. +## Returns the image var for image based cel types, or a render for procedural types. +## It's meant for read-only usage of image data, such as copying selections or color picking. func get_image() -> Image: return null func update_texture() -> void: - emit_signal("texture_changed") + texture_changed.emit() if link_set != null: var frame: int = Global.current_project.current_frame # This check is needed in case the user has selected multiple cels that are also linked if self in Global.current_project.frames[frame].cels: for cel in link_set["cels"]: - cel.emit_signal("texture_changed") + cel.texture_changed.emit() func serialize() -> Dictionary: @@ -64,11 +65,11 @@ func deserialize(dict: Dictionary) -> void: opacity = dict["opacity"] -func save_image_data_to_pxo(_file: File) -> void: +func save_image_data_to_pxo(_file: FileAccess) -> void: return -func load_image_data_from_pxo(_file: File, _project_size: Vector2) -> void: +func load_image_data_from_pxo(_file: FileAccess, _project_size: Vector2i) -> void: return diff --git a/src/Classes/BaseLayer.gd b/src/Classes/BaseLayer.gd index 37a0ce12622..70509a6ee3f 100644 --- a/src/Classes/BaseLayer.gd +++ b/src/Classes/BaseLayer.gd @@ -1,31 +1,31 @@ class_name BaseLayer -extends Reference -# Base class for layer properties. Different layer types extend from this class. +extends RefCounted +## Base class for layer properties. Different layer types extend from this class. var name := "" -var project +var project: Project var index: int var parent: BaseLayer var visible := true var locked := false var new_cels_linked := false -var cel_link_sets := [] # Array of Dictionaries (Each Dictionary represents a cel's "link set") +var cel_link_sets: Array[Dictionary] = [] ## Each Dictionary represents a cel's "link set" -# Returns true if this is a direct or indirect parent of layer -func is_a_parent_of(layer: BaseLayer) -> bool: +## Returns true if this is a direct or indirect parent of layer +func is_ancestor_of(layer: BaseLayer) -> bool: if layer.parent == self: return true elif is_instance_valid(layer.parent): - return is_a_parent_of(layer.parent) + return is_ancestor_of(layer.parent) return false -func get_children(recursive: bool) -> Array: - var children := [] +func get_children(recursive: bool) -> Array[BaseLayer]: + var children: Array[BaseLayer] = [] if recursive: for i in index: - if is_a_parent_of(project.layers[i]): + if is_ancestor_of(project.layers[i]): children.append(project.layers[i]) else: for i in index: @@ -38,7 +38,7 @@ func get_child_count(recursive: bool) -> int: var count := 0 if recursive: for i in index: - if is_a_parent_of(project.layers[i]): + if is_ancestor_of(project.layers[i]): count += 1 else: for i in index: @@ -83,14 +83,14 @@ func get_layer_path() -> String: return name -# Links a cel to link_set if its a Dictionary, or unlinks if null. -# Content/image_texture are handled separately for undo related reasons +## Links a cel to link_set if its a Dictionary, or unlinks if null. +## Content/image_texture are handled separately for undo related reasons func link_cel(cel: BaseCel, link_set = null) -> void: # Erase from the cel's current link_set if cel.link_set != null: if cel.link_set.has("cels"): cel.link_set["cels"].erase(cel) - if cel.link_set["cels"].empty(): + if cel.link_set["cels"].is_empty(): cel_link_sets.erase(cel.link_set) else: cel_link_sets.erase(cel.link_set) @@ -102,11 +102,11 @@ func link_cel(cel: BaseCel, link_set = null) -> void: link_set["cels"].append(cel) if not cel_link_sets.has(link_set): if not link_set.has("hue"): - var hues := PoolRealArray() + var hues := PackedFloat32Array() for other_link_set in cel_link_sets: hues.append(other_link_set["hue"]) - if hues.empty(): - link_set["hue"] = Color.green.h + if hues.is_empty(): + link_set["hue"] = Color.GREEN.h else: # Calculate the largest gap in hue between existing link sets: hues.sort() # Start gap between the highest and lowest hues, otherwise its hard to include @@ -132,7 +132,7 @@ func serialize() -> Dictionary: "locked": locked, "parent": parent.index if is_instance_valid(parent) else -1 } - if not cel_link_sets.empty(): + if not cel_link_sets.is_empty(): var cels := [] # Cels array for easy finding of the frame index for link_set saving for frame in project.frames: cels.append(frame.cels[index]) @@ -150,8 +150,8 @@ func deserialize(dict: Dictionary) -> void: locked = dict.locked if dict.get("parent", -1) != -1: parent = project.layers[dict.parent] - if dict.has("linked_cels") and not dict["linked_cels"].empty(): # Backwards compatibility - dict["link_sets"] = [{"cels": dict["linked_cels"], "hue": Color.green.h}] + if dict.has("linked_cels") and not dict["linked_cels"].is_empty(): # Backwards compatibility + dict["link_sets"] = [{"cels": dict["linked_cels"], "hue": Color.GREEN.h}] if dict.has("link_sets"): for serialized_link_set in dict["link_sets"]: var link_set := {"cels": [], "hue": serialized_link_set["hue"]} diff --git a/src/Classes/Cel3D.gd b/src/Classes/Cel3D.gd index 9f242c18d78..3de3e1d4721 100644 --- a/src/Classes/Cel3D.gd +++ b/src/Classes/Cel3D.gd @@ -5,36 +5,45 @@ signal selected_object(object) signal scene_property_changed signal objects_changed -var size: Vector2 -var viewport: Viewport -var parent_node: Spatial -var camera: Camera +var size: Vector2i +var viewport: SubViewport +var parent_node: Node3D +var camera: Camera3D var scene_properties := {} -# Key = Cel3DObject's id, Value = Dictionary containing the properties of the Cel3DObject +## Key = Cel3DObject's id, Value = Dictionary containing the properties of the Cel3DObject var object_properties := {} -var selected: Cel3DObject = null setget _set_selected -var current_object_id := 0 # Its value never decreases +var selected: Cel3DObject = null: + set(value): + if value == selected: + return + if is_instance_valid(selected): # Unselect previous object if we selected something else + selected.deselect() + selected = value + if is_instance_valid(selected): # Select new object + selected.select() + selected_object.emit(value) +var current_object_id := 0 ## Its value never decreases -func _init(_size: Vector2, from_pxo := false, _object_prop := {}, _scene_prop := {}) -> void: +func _init(_size: Vector2i, from_pxo := false, _object_prop := {}, _scene_prop := {}) -> void: size = _size object_properties = _object_prop scene_properties = _scene_prop - if scene_properties.empty(): - var camera_transform := Transform() + if scene_properties.is_empty(): + var camera_transform := Transform3D() camera_transform.origin = Vector3(0, 0, 3) scene_properties = { "camera_transform": camera_transform, - "camera_projection": Camera.PROJECTION_PERSPECTIVE, + "camera_projection": Camera3D.PROJECTION_PERSPECTIVE, "camera_fov": 70.0, "camera_size": 1.0, - "ambient_light_color": Color.black, + "ambient_light_color": Color.BLACK, "ambient_light_energy": 1, } _add_nodes() if not from_pxo: - if object_properties.empty(): - var transform := Transform() + if object_properties.is_empty(): + var transform := Transform3D() transform.origin = Vector3(-2.5, 0, 0) object_properties[0] = {"type": Cel3DObject.Type.DIR_LIGHT, "transform": transform} _add_object_node(0) @@ -42,17 +51,16 @@ func _init(_size: Vector2, from_pxo := false, _object_prop := {}, _scene_prop := func _add_nodes() -> void: - viewport = Viewport.new() + viewport = SubViewport.new() viewport.size = size - viewport.own_world = true + viewport.own_world_3d = true viewport.transparent_bg = true - viewport.render_target_v_flip = true - var world := World.new() - var environment := Environment.new() - world.environment = environment - viewport.world = world - parent_node = Spatial.new() - camera = Camera.new() + var world := World3D.new() + world.environment = Environment.new() + world.environment.ambient_light_source = Environment.AMBIENT_SOURCE_COLOR + viewport.world_3d = world + parent_node = Node3D.new() + camera = Camera3D.new() camera.current = true deserialize_scene_properties() viewport.add_child(camera) @@ -64,7 +72,7 @@ func _add_nodes() -> void: image_texture = viewport.get_texture() -func _get_image_texture() -> Texture: +func _get_image_texture() -> Texture2D: if not is_instance_valid(viewport): _add_nodes() return image_texture @@ -78,8 +86,8 @@ func serialize_scene_properties() -> Dictionary: "camera_projection": camera.projection, "camera_fov": camera.fov, "camera_size": camera.size, - "ambient_light_color": viewport.world.environment.ambient_light_color, - "ambient_light_energy": viewport.world.environment.ambient_light_energy + "ambient_light_color": viewport.world_3d.environment.ambient_light_color, + "ambient_light_energy": viewport.world_3d.environment.ambient_light_energy } @@ -88,8 +96,8 @@ func deserialize_scene_properties() -> void: camera.projection = scene_properties["camera_projection"] camera.fov = scene_properties["camera_fov"] camera.size = scene_properties["camera_size"] - viewport.world.environment.ambient_light_color = scene_properties["ambient_light_color"] - viewport.world.environment.ambient_light_energy = scene_properties["ambient_light_energy"] + viewport.world_3d.environment.ambient_light_color = scene_properties["ambient_light_color"] + viewport.world_3d.environment.ambient_light_energy = scene_properties["ambient_light_energy"] func _update_objects_transform(id: int) -> void: # Called by undo/redo @@ -110,7 +118,7 @@ func get_object_from_id(id: int) -> Cel3DObject: return null -func size_changed(new_size: Vector2) -> void: +func size_changed(new_size: Vector2i) -> void: size = new_size viewport.size = size image_texture = viewport.get_texture() @@ -118,7 +126,7 @@ func size_changed(new_size: Vector2) -> void: func _scene_property_changed() -> void: # Called by undo/redo deserialize_scene_properties() - emit_signal("scene_property_changed") + scene_property_changed.emit() func _add_object_node(id: int) -> void: @@ -139,57 +147,53 @@ func _add_object_node(id: int) -> void: if object_properties[id].has("type"): node3d.type = object_properties[id]["type"] object_properties[id] = node3d.serialize() - emit_signal("objects_changed") + objects_changed.emit() -func _remove_object_node(id: int) -> void: # Called by undo/redo +func _remove_object_node(id: int) -> void: ## Called by undo/redo var object := get_object_from_id(id) if is_instance_valid(object): if selected == object: - self.selected = null + selected = null object.queue_free() - emit_signal("objects_changed") - - -func _set_selected(value: Cel3DObject) -> void: - if value == selected: - return - if is_instance_valid(selected): # Unselect previous object if we selected something else - selected.unselect() - selected = value - if is_instance_valid(selected): # Select new object - selected.select() - emit_signal("selected_object", value) + objects_changed.emit() # Overridden methods func get_image() -> Image: - return viewport.get_texture().get_data() + return viewport.get_texture().get_image() func serialize() -> Dictionary: - var dict := .serialize() - dict["scene_properties"] = scene_properties - dict["object_properties"] = object_properties + var dict := super.serialize() + var scene_properties_str := {} + for prop in scene_properties: + scene_properties_str[prop] = var_to_str(scene_properties[prop]) + var object_properties_str := {} + for prop in object_properties: + object_properties_str[prop] = var_to_str(object_properties[prop]) + dict["scene_properties"] = scene_properties_str + dict["object_properties"] = object_properties_str return dict func deserialize(dict: Dictionary) -> void: - .deserialize(dict) - scene_properties = dict["scene_properties"] - var objects_copy = dict["object_properties"] - for object in objects_copy: + super.deserialize(dict) + scene_properties = {} + var scene_properties_str: Dictionary = dict["scene_properties"] + for prop in scene_properties_str: + scene_properties[prop] = str_to_var(scene_properties_str[prop]) + var objects_copy_str: Dictionary = dict["object_properties"] + for object in objects_copy_str: if typeof(object) != TYPE_STRING: return - Global.convert_dictionary_values(objects_copy[object]) var id := int(object) if current_object_id < id: current_object_id = id - object_properties[id] = objects_copy[object] + object_properties[id] = str_to_var(objects_copy_str[object]) current_object_id += 1 - Global.convert_dictionary_values(scene_properties) deserialize_scene_properties() for object in object_properties: _add_object_node(object) @@ -200,17 +204,17 @@ func on_remove() -> void: viewport.queue_free() -func save_image_data_to_pxo(file: File) -> void: +func save_image_data_to_pxo(file: FileAccess) -> void: file.store_buffer(get_image().get_data()) -func load_image_data_from_pxo(file: File, project_size: Vector2) -> void: - # Don't do anything with it, just read it so that the file can move on +## Don't do anything with it, just read it so that the file can move on +func load_image_data_from_pxo(file: FileAccess, project_size: Vector2i) -> void: file.get_buffer(project_size.x * project_size.y * 4) func instantiate_cel_button() -> Node: - return Global.cel_3d_button_node.instance() + return Global.cel_3d_button_node.instantiate() func get_class_name() -> String: diff --git a/src/Classes/Cel3DObject.gd b/src/Classes/Cel3DObject.gd index 694e3877119..bd73debb140 100644 --- a/src/Classes/Cel3DObject.gd +++ b/src/Classes/Cel3DObject.gd @@ -1,5 +1,5 @@ class_name Cel3DObject -extends Spatial +extends Node3D signal property_changed @@ -21,35 +21,37 @@ enum Gizmos { NONE, X_POS, Y_POS, Z_POS, X_ROT, Y_ROT, Z_ROT, X_SCALE, Y_SCALE, var cel var id := -1 -var type: int = Type.BOX setget _set_type +var type := Type.BOX: + set = _set_type var selected := false var hovered := false -var box_shape: BoxShape -var camera: Camera -var file_path := "" setget _set_file_path # Only useful for Type.IMPORTED +var box_shape: BoxShape3D +var camera: Camera3D +var file_path := "": + set = _set_file_path var applying_gizmos: int = Gizmos.NONE -var node3d_type: VisualInstance +var node3d_type: VisualInstance3D var dir_light_texture := preload("res://assets/graphics/gizmos/directional_light.svg") var spot_light_texture := preload("res://assets/graphics/gizmos/spot_light.svg") var omni_light_texture := preload("res://assets/graphics/gizmos/omni_light.svg") -onready var gizmos_3d: Node2D = Global.canvas.gizmos_3d +@onready var gizmos_3d: Node2D = Global.canvas.gizmos_3d func _ready() -> void: - camera = get_viewport().get_camera() - var static_body := StaticBody.new() - var collision_shape := CollisionShape.new() - box_shape = BoxShape.new() - box_shape.extents = scale + camera = get_viewport().get_camera_3d() + var static_body := StaticBody3D.new() + var collision_shape := CollisionShape3D.new() + box_shape = BoxShape3D.new() + box_shape.size = scale collision_shape.shape = box_shape static_body.add_child(collision_shape) add_child(static_body) func find_cel() -> bool: - var project = Global.current_project + var project := Global.current_project return cel == project.frames[project.current_frame].cels[project.current_layer] @@ -76,7 +78,7 @@ func serialize() -> Dictionary: dict["mesh_is_hemisphere"] = mesh.is_hemisphere Type.CAPSULE: dict["mesh_radius"] = mesh.radius - dict["mesh_mid_height"] = mesh.mid_height + dict["mesh_height"] = mesh.height dict["mesh_radial_segments"] = mesh.radial_segments dict["mesh_rings"] = mesh.rings Type.CYLINDER: @@ -85,6 +87,11 @@ func serialize() -> Dictionary: dict["mesh_height"] = mesh.height dict["mesh_radial_segments"] = mesh.radial_segments dict["mesh_rings"] = mesh.rings + Type.TORUS: + dict["mesh_inner_radius"] = mesh.inner_radius + dict["mesh_outer_radius"] = mesh.outer_radius + dict["mesh_ring_segments"] = mesh.ring_segments + dict["mesh_rings"] = mesh.rings Type.TEXT: dict["mesh_text"] = mesh.text dict["mesh_pixel_size"] = mesh.pixel_size @@ -95,7 +102,6 @@ func serialize() -> Dictionary: dict["light_energy"] = node3d_type.light_energy dict["light_negative"] = node3d_type.light_negative dict["shadow_enabled"] = node3d_type.shadow_enabled - dict["shadow_color"] = node3d_type.shadow_color match type: Type.OMNI_LIGHT: dict["omni_range"] = node3d_type.omni_range @@ -108,7 +114,7 @@ func serialize() -> Dictionary: func deserialize(dict: Dictionary) -> void: id = dict["id"] file_path = dict["file_path"] - self.type = dict["type"] + type = dict["type"] transform = dict["transform"] visible = dict["visible"] if _is_mesh(): @@ -130,7 +136,7 @@ func deserialize(dict: Dictionary) -> void: mesh.is_hemisphere = dict["mesh_is_hemisphere"] Type.CAPSULE: mesh.radius = dict["mesh_radius"] - mesh.mid_height = dict["mesh_mid_height"] + mesh.height = dict["mesh_height"] mesh.radial_segments = dict["mesh_radial_segments"] mesh.rings = dict["mesh_rings"] Type.CYLINDER: @@ -139,6 +145,11 @@ func deserialize(dict: Dictionary) -> void: mesh.height = dict["mesh_height"] mesh.radial_segments = dict["mesh_radial_segments"] mesh.rings = dict["mesh_rings"] + Type.TORUS: + mesh.inner_radius = dict["mesh_inner_radius"] + mesh.outer_radius = dict["mesh_outer_radius"] + mesh.ring_segments = dict["mesh_ring_segments"] + mesh.rings = dict["mesh_rings"] Type.TEXT: mesh.text = dict["mesh_text"] mesh.pixel_size = dict["mesh_pixel_size"] @@ -149,7 +160,6 @@ func deserialize(dict: Dictionary) -> void: node3d_type.light_energy = dict["light_energy"] node3d_type.light_negative = dict["light_negative"] node3d_type.shadow_enabled = dict["shadow_enabled"] - node3d_type.shadow_color = dict["shadow_color"] match type: Type.OMNI_LIGHT: node3d_type.omni_range = dict["omni_range"] @@ -160,10 +170,10 @@ func deserialize(dict: Dictionary) -> void: func _is_mesh() -> bool: - return node3d_type is MeshInstance + return node3d_type is MeshInstance3D -func _set_type(value: int) -> void: +func _set_type(value: Type) -> void: if type == value and is_instance_valid(node3d_type): # No reason to set the same type twice return type = value @@ -171,50 +181,55 @@ func _set_type(value: int) -> void: node3d_type.queue_free() match type: Type.BOX: - node3d_type = MeshInstance.new() - node3d_type.mesh = CubeMesh.new() + node3d_type = MeshInstance3D.new() + node3d_type.mesh = BoxMesh.new() Type.SPHERE: - node3d_type = MeshInstance.new() + node3d_type = MeshInstance3D.new() node3d_type.mesh = SphereMesh.new() Type.CAPSULE: - node3d_type = MeshInstance.new() + node3d_type = MeshInstance3D.new() node3d_type.mesh = CapsuleMesh.new() Type.CYLINDER: - node3d_type = MeshInstance.new() + node3d_type = MeshInstance3D.new() node3d_type.mesh = CylinderMesh.new() Type.PRISM: - node3d_type = MeshInstance.new() + node3d_type = MeshInstance3D.new() node3d_type.mesh = PrismMesh.new() Type.PLANE: - node3d_type = MeshInstance.new() + node3d_type = MeshInstance3D.new() node3d_type.mesh = PlaneMesh.new() + Type.TORUS: + node3d_type = MeshInstance3D.new() + node3d_type.mesh = TorusMesh.new() Type.TEXT: - node3d_type = MeshInstance.new() + node3d_type = MeshInstance3D.new() var mesh := TextMesh.new() mesh.font = Global.control.theme.default_font mesh.text = "Sample" node3d_type.mesh = mesh Type.DIR_LIGHT: - node3d_type = DirectionalLight.new() + node3d_type = DirectionalLight3D.new() gizmos_3d.add_always_visible(self, dir_light_texture) Type.SPOT_LIGHT: - node3d_type = SpotLight.new() + node3d_type = SpotLight3D.new() gizmos_3d.add_always_visible(self, spot_light_texture) Type.OMNI_LIGHT: - node3d_type = OmniLight.new() + node3d_type = OmniLight3D.new() gizmos_3d.add_always_visible(self, omni_light_texture) Type.IMPORTED: - node3d_type = MeshInstance.new() + node3d_type = MeshInstance3D.new() var mesh: Mesh - if not file_path.empty(): + if not file_path.is_empty(): mesh = ObjParse.load_obj(file_path) node3d_type.mesh = mesh add_child(node3d_type) func _set_file_path(value: String) -> void: + if file_path == value: + return file_path = value - if file_path.empty(): + if file_path.is_empty(): return if type == Type.IMPORTED: node3d_type.mesh = ObjParse.load_obj(file_path) @@ -222,7 +237,7 @@ func _set_file_path(value: String) -> void: func _notification(what: int) -> void: if what == NOTIFICATION_EXIT_TREE: - unselect() + deselect() gizmos_3d.remove_always_visible(self) @@ -231,7 +246,7 @@ func select() -> void: gizmos_3d.get_points(camera, self) -func unselect() -> void: +func deselect() -> void: selected = false gizmos_3d.clear_points(self) @@ -279,25 +294,25 @@ func change_transform(a: Vector3, b: Vector3) -> void: move(diff) -func move(position: Vector3) -> void: - translation += position +func move(pos: Vector3) -> void: + position += pos change_property() +## Move the object in the direction it is facing, and restrict mouse movement in that axis func move_axis(diff: Vector3, axis: Vector3) -> void: - # Move the object in the direction it is facing, and restrict mouse movement in that axis var axis_v2 := Vector2(axis.x, axis.y).normalized() if axis_v2 == Vector2.ZERO: axis_v2 = Vector2(axis.y, axis.z).normalized() var diff_v2 := Vector2(diff.x, diff.y).normalized() - translation += axis * axis_v2.dot(diff_v2) * diff.length() + position += axis * axis_v2.dot(diff_v2) * diff.length() change_property() func change_rotation(a: Vector3, b: Vector3, axis: Vector3) -> void: - var a_local := a - translation + var a_local := a - position var a_local_v2 := Vector2(a_local.x, a_local.y) - var b_local := b - translation + var b_local := b - position var b_local_v2 := Vector2(b_local.x, b_local.y) var angle := b_local_v2.angle_to(a_local_v2) # Rotate the object around a basis axis, instead of a fixed axis, such as @@ -309,8 +324,8 @@ func change_rotation(a: Vector3, b: Vector3, axis: Vector3) -> void: change_property() +## Scale the object in the direction it is facing, and restrict mouse movement in that axis func change_scale(diff: Vector3, axis: Vector3, dir: Vector3) -> void: - # Scale the object in the direction it is facing, and restrict mouse movement in that axis var axis_v2 := Vector2(axis.x, axis.y).normalized() if axis_v2 == Vector2.ZERO: axis_v2 = Vector2(axis.y, axis.z).normalized() @@ -325,5 +340,5 @@ func change_property() -> void: else: # Check is needed in case this runs before _ready(), and thus onready variables if is_instance_valid(gizmos_3d): - gizmos_3d.update() - emit_signal("property_changed") + gizmos_3d.queue_redraw() + property_changed.emit() diff --git a/src/Classes/Drawers.gd b/src/Classes/Drawers.gd index b75d8384503..dcf72a85ec8 100644 --- a/src/Classes/Drawers.gd +++ b/src/Classes/Drawers.gd @@ -1,12 +1,18 @@ class_name Drawer -var pixel_perfect := false setget set_pixel_perfect +var pixel_perfect := false: + set(value): + pixel_perfect = value + if pixel_perfect: + drawers = pixel_perfect_drawers.duplicate() + else: + drawers = [simple_drawer, simple_drawer, simple_drawer, simple_drawer] var horizontal_mirror := false var vertical_mirror := false var color_op := ColorOp.new() var simple_drawer := SimpleDrawer.new() -var pixel_perfect_drawers := [ +var pixel_perfect_drawers: Array[PixelPerfectDrawer] = [ PixelPerfectDrawer.new(), PixelPerfectDrawer.new(), PixelPerfectDrawer.new(), @@ -23,7 +29,7 @@ class ColorOp: class SimpleDrawer: - func set_pixel(image: Image, position: Vector2, color: Color, op: ColorOp) -> void: + func set_pixel(image: Image, position: Vector2i, color: Color, op: ColorOp) -> void: var color_old := image.get_pixelv(position) var color_str = color.to_html() var color_new := op.process(Color(color_str), color_old) @@ -32,16 +38,16 @@ class SimpleDrawer: class PixelPerfectDrawer: - const NEIGHBOURS = [Vector2(0, 1), Vector2(1, 0), Vector2(-1, 0), Vector2(0, -1)] - const CORNERS = [Vector2(1, 1), Vector2(-1, -1), Vector2(-1, 1), Vector2(1, -1)] - var last_pixels = [null, null] + const NEIGHBOURS: Array[Vector2i] = [Vector2i.DOWN, Vector2i.RIGHT, Vector2i.LEFT, Vector2i.UP] + const CORNERS: Array[Vector2i] = [Vector2i.ONE, -Vector2i.ONE, Vector2i(-1, 1), Vector2i(1, -1)] + var last_pixels := [null, null] func reset() -> void: last_pixels = [null, null] - func set_pixel(image: Image, position: Vector2, color: Color, op: ColorOp) -> void: - var color_old = image.get_pixelv(position) - var color_str = color.to_html() + func set_pixel(image: Image, position: Vector2i, color: Color, op: ColorOp) -> void: + var color_old := image.get_pixelv(position) + var color_str := color.to_html() last_pixels.push_back([position, color_old]) image.set_pixelv(position, op.process(Color(color_str), color_old)) @@ -61,27 +67,19 @@ func reset() -> void: drawer.reset() -func set_pixel_perfect(value: bool) -> void: - pixel_perfect = value - if pixel_perfect: - drawers = pixel_perfect_drawers.duplicate() - else: - drawers = [simple_drawer, simple_drawer, simple_drawer, simple_drawer] - - -func set_pixel(image: Image, position: Vector2, color: Color, ignore_mirroring := false) -> void: - var project: Project = Global.current_project +func set_pixel(image: Image, position: Vector2i, color: Color, ignore_mirroring := false) -> void: + var project := Global.current_project drawers[0].set_pixel(image, position, color, color_op) if ignore_mirroring: return # Handle Mirroring - var mirror_x = project.x_symmetry_point - position.x - var mirror_y = project.y_symmetry_point - position.y - - if horizontal_mirror and project.can_pixel_get_drawn(Vector2(mirror_x, position.y)): - drawers[1].set_pixel(image, Vector2(mirror_x, position.y), color, color_op) - if vertical_mirror and project.can_pixel_get_drawn(Vector2(position.x, mirror_y)): - drawers[2].set_pixel(image, Vector2(mirror_x, mirror_y), color, color_op) - if vertical_mirror and project.can_pixel_get_drawn(Vector2(position.x, mirror_y)): - drawers[3].set_pixel(image, Vector2(position.x, mirror_y), color, color_op) + var mirror_x := project.x_symmetry_point - position.x + var mirror_y := project.y_symmetry_point - position.y + + if horizontal_mirror and project.can_pixel_get_drawn(Vector2i(mirror_x, position.y)): + drawers[1].set_pixel(image, Vector2i(mirror_x, position.y), color, color_op) + if vertical_mirror and project.can_pixel_get_drawn(Vector2i(position.x, mirror_y)): + drawers[2].set_pixel(image, Vector2i(mirror_x, mirror_y), color, color_op) + if vertical_mirror and project.can_pixel_get_drawn(Vector2i(position.x, mirror_y)): + drawers[3].set_pixel(image, Vector2i(position.x, mirror_y), color, color_op) diff --git a/src/Classes/Frame.gd b/src/Classes/Frame.gd index 6c73bcc361f..c2104466150 100644 --- a/src/Classes/Frame.gd +++ b/src/Classes/Frame.gd @@ -1,12 +1,12 @@ class_name Frame -extends Reference -# A class for frame properties. -# A frame is a collection of cels, for each layer. +extends RefCounted +## A class for frame properties. +## A frame is a collection of cels, for each layer. -var cels: Array # An array of Cels +var cels: Array[BaseCel] var duration := 1.0 -func _init(_cels := [], _duration := 1.0) -> void: +func _init(_cels: Array[BaseCel] = [], _duration := 1.0) -> void: cels = _cels duration = _duration diff --git a/src/Classes/GroupCel.gd b/src/Classes/GroupCel.gd index d9f006628e5..a33e39cdd5a 100644 --- a/src/Classes/GroupCel.gd +++ b/src/Classes/GroupCel.gd @@ -1,7 +1,7 @@ class_name GroupCel extends BaseCel -# A class for the properties of cels in GroupLayers. -# The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel). +## A class for the properties of cels in GroupLayers. +## The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel). func _init(_opacity := 1.0) -> void: @@ -10,15 +10,14 @@ func _init(_opacity := 1.0) -> void: func get_image() -> Image: - var image := Image.new() - image.create( + var image := Image.create( Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8 ) return image func instantiate_cel_button() -> Node: - return Global.group_cel_button_node.instance() + return Global.group_cel_button_node.instantiate() func get_class_name() -> String: diff --git a/src/Classes/GroupLayer.gd b/src/Classes/GroupLayer.gd index 6188094d607..c955931814b 100644 --- a/src/Classes/GroupLayer.gd +++ b/src/Classes/GroupLayer.gd @@ -1,40 +1,35 @@ class_name GroupLayer extends BaseLayer -# A class for group layer properties +## A class for group layer properties var expanded := true -func _init(_project, _name := "") -> void: +func _init(_project: Project, _name := "") -> void: project = _project name = _name -func blend_children(frame: Frame, origin := Vector2.ZERO) -> Image: - var image := Image.new() - image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) +## Blends all of the images of children layer of the group layer into a single image. +func blend_children(frame: Frame, origin := Vector2i.ZERO) -> Image: + var image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) var children := get_children(false) - var blend_rect := Rect2(Vector2.ZERO, project.size) + var blend_rect := Rect2i(Vector2i.ZERO, project.size) for layer in children: if not layer.is_visible_in_hierarchy(): continue - # Checks if layer is GroupLayer, cannot define this due to cyclic reference error - if layer is get_script(): + if layer is GroupLayer: image.blend_rect(layer.blend_children(frame, origin), blend_rect, origin) else: - var cel: BaseCel = frame.cels[layer.index] + var cel := frame.cels[layer.index] var cel_image := Image.new() cel_image.copy_from(cel.get_image()) - if cel.opacity < 1: # If we have cel transparency - cel_image.lock() + if cel.opacity < 1.0: # If we have cel transparency for xx in cel_image.get_size().x: for yy in cel_image.get_size().y: var pixel_color := cel_image.get_pixel(xx, yy) - var alpha: float = pixel_color.a * cel.opacity - cel_image.set_pixel( - xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha) - ) - cel_image.unlock() + pixel_color.a *= cel.opacity + cel_image.set_pixel(xx, yy, pixel_color) image.blend_rect(cel_image, blend_rect, origin) return image @@ -43,14 +38,14 @@ func blend_children(frame: Frame, origin := Vector2.ZERO) -> Image: func serialize() -> Dictionary: - var data := .serialize() + var data := super.serialize() data["type"] = get_layer_type() data["expanded"] = expanded return data func deserialize(dict: Dictionary) -> void: - .deserialize(dict) + super.deserialize(dict) expanded = dict.expanded @@ -71,4 +66,4 @@ func accepts_child(_layer: BaseLayer) -> bool: func instantiate_layer_button() -> Node: - return Global.group_layer_button_node.instance() + return Global.group_layer_button_node.instantiate() diff --git a/src/Classes/ImageEffect.gd b/src/Classes/ImageEffect.gd index fad90236395..8fc45f935d0 100644 --- a/src/Classes/ImageEffect.gd +++ b/src/Classes/ImageEffect.gd @@ -5,43 +5,43 @@ extends ConfirmationDialog enum { SELECTED_CELS, FRAME, ALL_FRAMES, ALL_PROJECTS } -var affect := SELECTED_CELS -var selected_cels := Image.new() -var current_frame := Image.new() +var affect: int = SELECTED_CELS +var selected_cels: Image +var current_frame: Image var preview_image := Image.new() var preview_texture := ImageTexture.new() var preview: TextureRect var selection_checkbox: CheckBox var affect_option_button: OptionButton var animate_panel: AnimatePanel -var commit_idx := -1 # the current frame, image effect is applied to -var confirmed := false -var _preview_idx := 0 # the current frame, being previewed +var commit_idx := -1 ## The current frame the image effect is being applied to +var has_been_confirmed := false +var _preview_idx := 0 ## The current frame being previewed func _ready() -> void: set_nodes() - get_ok().size_flags_horizontal = Control.SIZE_EXPAND_FILL - get_cancel().size_flags_horizontal = Control.SIZE_EXPAND_FILL - current_frame.create( + get_ok_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL + get_cancel_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL + current_frame = Image.create( Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8 ) - selected_cels.create( + selected_cels = Image.create( Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8 ) - connect("about_to_show", self, "_about_to_show") - connect("popup_hide", self, "_popup_hide") - connect("confirmed", self, "_confirmed") + about_to_popup.connect(_about_to_popup) + visibility_changed.connect(_visibility_changed) + confirmed.connect(_confirmed) if selection_checkbox: - selection_checkbox.connect("toggled", self, "_on_SelectionCheckBox_toggled") + selection_checkbox.toggled.connect(_on_SelectionCheckBox_toggled) if affect_option_button: - affect_option_button.connect("item_selected", self, "_on_AffectOptionButton_item_selected") + affect_option_button.item_selected.connect(_on_AffectOptionButton_item_selected) if animate_panel: - $"%ShowAnimate".connect("pressed", self, "display_animate_dialog") + $"%ShowAnimate".pressed.connect(display_animate_dialog) -func _about_to_show() -> void: - confirmed = false +func _about_to_popup() -> void: + has_been_confirmed = false Global.canvas.selection.transform_content_confirm() prepare_animator(Global.current_project) set_and_update_preview_image(Global.current_project.current_frame) @@ -50,11 +50,11 @@ func _about_to_show() -> void: # prepares "animate_panel.frames" according to affect func prepare_animator(project: Project) -> void: - var frames = [] + var frames: PackedInt32Array = [] if affect == SELECTED_CELS: - for fram_layer in project.selected_cels: - if not fram_layer[0] in frames: - frames.append(fram_layer[0]) + for frame_layer in project.selected_cels: + if not frame_layer[0] in frames: + frames.append(frame_layer[0]) frames.sort() # To always start animating from left side of the timeline animate_panel.frames = frames elif affect == FRAME: @@ -67,21 +67,20 @@ func prepare_animator(project: Project) -> void: func _confirmed() -> void: - confirmed = true + has_been_confirmed = true commit_idx = -1 - var project: Project = Global.current_project + var project := Global.current_project if affect == SELECTED_CELS: prepare_animator(project) var undo_data := _get_undo_data(project) for cel_index in project.selected_cels: if !project.layers[cel_index[1]].can_layer_get_drawn(): continue - var cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]] + var cel := project.frames[cel_index[0]].cels[cel_index[1]] if not cel is PixelCel: continue - var cel_image: Image = cel.image commit_idx = cel_index[0] # frame is cel_index[0] in this mode - commit_action(cel_image) + commit_action(cel.image) _commit_undo("Draw", undo_data, project) elif affect == FRAME: @@ -132,7 +131,7 @@ func _confirmed() -> void: _commit_undo("Draw", undo_data, _project) -func commit_action(_cel: Image, _project: Project = Global.current_project) -> void: +func commit_action(_cel: Image, _project := Global.current_project) -> void: pass @@ -146,8 +145,8 @@ func set_nodes() -> void: func display_animate_dialog(): var animate_dialog: Popup = animate_panel.get_parent() - var pos = Vector2(rect_global_position.x + rect_size.x, rect_global_position.y) - var animate_dialog_rect := Rect2(pos, Vector2(animate_dialog.rect_size.x, rect_size.y)) + var pos := Vector2(position.x + size.x, position.y) + var animate_dialog_rect := Rect2(pos, Vector2(animate_dialog.size.x, size.y)) animate_dialog.popup(animate_dialog_rect) animate_panel.re_calibrate_preview_slider() @@ -160,8 +159,8 @@ func _commit_undo(action: String, undo_data: Dictionary, project: Project) -> vo project.undo_redo.add_do_property(image, "data", redo_data[image]) for image in undo_data: project.undo_redo.add_undo_property(image, "data", undo_data[image]) - project.undo_redo.add_do_method(Global, "undo_or_redo", false, -1, -1, project) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true, -1, -1, project) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, -1, -1, project)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, -1, -1, project)) project.undo_redo.commit_action() @@ -169,23 +168,22 @@ func _get_undo_data(project: Project) -> Dictionary: var data := {} var images := _get_selected_draw_images(project) for image in images: - image.unlock() data[image] = image.data return data -func _get_selected_draw_images(project: Project) -> Array: # Array of Images - var images := [] +func _get_selected_draw_images(project: Project) -> Array[Image]: + var images: Array[Image] = [] if affect == SELECTED_CELS: for cel_index in project.selected_cels: var cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]] if cel is PixelCel: - images.append(cel.image) + images.append(cel.get_image()) else: for frame in project.frames: for cel in frame.cels: if cel is PixelCel: - images.append(cel.image) + images.append(cel.get_image()) return images @@ -203,7 +201,7 @@ func _on_AffectOptionButton_item_selected(index: int) -> void: func set_and_update_preview_image(frame_idx: int) -> void: _preview_idx = frame_idx - var frame: Frame = Global.current_project.frames[frame_idx] + var frame := Global.current_project.frames[frame_idx] selected_cels.resize(Global.current_project.size.x, Global.current_project.size.y) selected_cels.fill(Color(0, 0, 0, 0)) Export.blend_selected_cels(selected_cels, frame) @@ -221,30 +219,25 @@ func update_preview() -> void: preview_image.copy_from(current_frame) commit_idx = _preview_idx commit_action(preview_image) - preview_image.unlock() - preview_texture.create_from_image(preview_image, 0) + preview_texture = ImageTexture.create_from_image(preview_image) preview.texture = preview_texture func update_transparent_background_size() -> void: if !preview: return - var image_size_y := preview.rect_size.y - var image_size_x := preview.rect_size.x + var image_size_y := preview.size.y + var image_size_x := preview.size.x if preview_image.get_size().x > preview_image.get_size().y: - var scale_ratio = preview_image.get_size().x / image_size_x + var scale_ratio := preview_image.get_size().x / image_size_x image_size_y = preview_image.get_size().y / scale_ratio else: - var scale_ratio = preview_image.get_size().y / image_size_y + var scale_ratio := preview_image.get_size().y / image_size_y image_size_x = preview_image.get_size().x / scale_ratio - preview.get_node("TransparentChecker").rect_size.x = image_size_x - preview.get_node("TransparentChecker").rect_size.y = image_size_y + preview.get_node("TransparentChecker").size.x = image_size_x + preview.get_node("TransparentChecker").size.y = image_size_y -func _popup_hide() -> void: +func _visibility_changed() -> void: Global.dialog_open(false) - - -func _is_webgl1() -> bool: - return OS.get_name() == "HTML5" and OS.get_current_video_driver() == OS.VIDEO_DRIVER_GLES2 diff --git a/src/Classes/Layer3D.gd b/src/Classes/Layer3D.gd index 3160075b3fd..6d96c8446bc 100644 --- a/src/Classes/Layer3D.gd +++ b/src/Classes/Layer3D.gd @@ -1,8 +1,9 @@ class_name Layer3D extends BaseLayer +## A class for 3D layer properties. -func _init(_project, _name := "") -> void: +func _init(_project: Project, _name := "") -> void: project = _project name = _name @@ -11,7 +12,7 @@ func _init(_project, _name := "") -> void: func serialize() -> Dictionary: - var dict = .serialize() + var dict = super.serialize() dict["type"] = get_layer_type() return dict @@ -29,4 +30,4 @@ func can_layer_get_drawn() -> bool: func instantiate_layer_button() -> Node: - return Global.base_layer_button_node.instance() + return Global.base_layer_button_node.instantiate() diff --git a/src/Classes/ObjParse.gd b/src/Classes/ObjParse.gd index 3b3c4d1d681..9c639e71c41 100644 --- a/src/Classes/ObjParse.gd +++ b/src/Classes/ObjParse.gd @@ -1,20 +1,19 @@ class_name ObjParse -const DEBUG := false - -# Obj parser made by Ezcha, updated by Deakcor -# Created on 7/11/2018 -# https://ezcha.net -# https://github.com/Ezcha/gd-obj -# MIT License -# https://github.com/Ezcha/gd-obj/blob/master/LICENSE +## Obj parser made by Ezcha, updated by Deakcor +## Created on 7/11/2018 +## https://ezcha.net +## https://github.com/Ezcha/gd-obj +## MIT License +## https://github.com/Ezcha/gd-obj/blob/master/LICENSE +## Returns an array of materials from a MTL file -# Returns an array of materials from a MTL file +const DEBUG := false # Public methods -# Create mesh from obj and mtl paths +## Create mesh from obj and mtl paths static func load_obj(obj_path: String, mtl_path: String = "") -> Mesh: if mtl_path == "": mtl_path = search_mtl_path(obj_path) @@ -25,29 +24,28 @@ static func load_obj(obj_path: String, mtl_path: String = "") -> Mesh: return _create_obj(obj, mats) if obj and mats else null -# Create mesh from obj, materials. Materials should be {"matname":data} +## Create mesh from obj, materials. Materials should be {"matname":data} static func load_obj_from_buffer(obj_data: String, materials: Dictionary) -> Mesh: return _create_obj(obj_data, materials) -# Create materials +## Create materials static func load_mtl_from_buffer(mtl_data: String, textures: Dictionary) -> Dictionary: return _create_mtl(mtl_data, textures) -# Get data from file path +## Get data from file path static func get_data(path: String) -> String: if path != "": - var file := File.new() - var err := file.open(path, File.READ) - if err == OK: + var file := FileAccess.open(path, FileAccess.READ) + if FileAccess.get_open_error() == OK: var res := file.get_as_text() file.close() return res return "" -# Get textures from mtl path (return {"tex_path":data}) +## Get textures from mtl path (return {"tex_path":data}) static func get_mtl_tex(mtl_path: String) -> Dictionary: var file_paths := get_mtl_tex_paths(mtl_path) var textures := {} @@ -56,31 +54,29 @@ static func get_mtl_tex(mtl_path: String) -> Dictionary: return textures -# Get textures paths from mtl path +## Get textures paths from mtl path static func get_mtl_tex_paths(mtl_path: String) -> Array: - var file := File.new() - var err := file.open(mtl_path, File.READ) + var file := FileAccess.open(mtl_path, FileAccess.READ) var paths := [] - if err == OK: + if FileAccess.get_open_error() == OK: var lines := file.get_as_text().split("\n", false) file.close() for line in lines: - var parts = line.split(" ", false, 1) + var parts := line.split(" ", false, 1) if parts[0] in ["map_Kd", "map_Ks", "map_Ka"]: if !parts[1] in paths: paths.push_back(parts[1]) return paths -# Try to find mtl path from obj path +## Try to find mtl path from obj path static func search_mtl_path(obj_path: String) -> String: - var mtl_path := obj_path.get_base_dir().plus_file( + var mtl_path := obj_path.get_base_dir().path_join( obj_path.get_file().rsplit(".", false, 1)[0] + ".mtl" ) - var dir: Directory = Directory.new() - if !dir.file_exists(mtl_path): - mtl_path = obj_path.get_base_dir().plus_file(obj_path.get_file() + ".mtl") - if !dir.file_exists(mtl_path): + if !FileAccess.file_exists(mtl_path): + mtl_path = obj_path.get_base_dir().path_join(obj_path.get_file() + ".mtl") + if !FileAccess.file_exists(mtl_path): return "" return mtl_path @@ -90,11 +86,11 @@ static func search_mtl_path(obj_path: String) -> String: static func _create_mtl(obj: String, textures: Dictionary) -> Dictionary: var mats := {} - var current_mat: SpatialMaterial = null + var current_mat: StandardMaterial3D = null var lines := obj.split("\n", false) for line in lines: - var parts = line.split(" ", false) + var parts := line.split(" ", false) match parts[0]: "#": # Comment @@ -104,7 +100,7 @@ static func _create_mtl(obj: String, textures: Dictionary) -> Dictionary: # Create a new material if DEBUG: print("Adding new material " + parts[1]) - current_mat = SpatialMaterial.new() + current_mat = StandardMaterial3D.new() mats[parts[1]] = current_mat "Ka": # Ambient color @@ -117,7 +113,7 @@ static func _create_mtl(obj: String, textures: Dictionary) -> Dictionary: print("Setting material color " + str(current_mat.albedo_color)) _: if parts[0] in ["map_Kd", "map_Ks", "map_Ka"]: - var path = line.split(" ", false, 1)[1] + var path := line.split(" ", false, 1)[1] if textures.has(path): current_mat.albedo_texture = _create_texture(textures[path]) return mats @@ -127,31 +123,29 @@ static func _get_image(mtl_filepath: String, tex_filename: String) -> Image: if DEBUG: print(" Debug: Mapping texture file " + tex_filename) var texfilepath := tex_filename - if tex_filename.is_rel_path(): - texfilepath = mtl_filepath.get_base_dir().plus_file(tex_filename) + if tex_filename.is_relative_path(): + texfilepath = mtl_filepath.get_base_dir().path_join(tex_filename) var filetype := texfilepath.get_extension() if DEBUG: print(" Debug: texture file path: " + texfilepath + " of type " + filetype) - var img: Image = Image.new() + var img := Image.new() img.load(texfilepath) return img -static func _create_texture(data: PoolByteArray) -> ImageTexture: - var img: Image = Image.new() - var tex: ImageTexture = ImageTexture.new() +static func _create_texture(data: PackedByteArray) -> ImageTexture: + var img := Image.new() img.load_png_from_buffer(data) - tex.create_from_image(img) - return tex + return ImageTexture.create_from_image(img) static func _create_obj(obj: String, mats: Dictionary) -> Mesh: # Setup var mesh := ArrayMesh.new() - var vertices := PoolVector3Array() - var normals := PoolVector3Array() - var uvs := PoolVector2Array() + var vertices := PackedVector3Array() + var normals := PackedVector3Array() + var uvs := PackedVector2Array() var faces := {} var mat_name := "default" @@ -160,7 +154,7 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh: # Parse var lines := obj.split("\n", false) for line in lines: - var parts = line.split(" ", false) + var parts := line.split(" ", false) match parts[0]: "#": # Comment @@ -168,15 +162,15 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh: pass "v": # Vertex - var n_v = Vector3(float(parts[1]), float(parts[2]), float(parts[3])) + var n_v := Vector3(float(parts[1]), float(parts[2]), float(parts[3])) vertices.append(n_v) "vn": # Normal - var n_vn = Vector3(float(parts[1]), float(parts[2]), float(parts[3])) + var n_vn := Vector3(float(parts[1]), float(parts[2]), float(parts[3])) normals.append(n_vn) "vt": # UV - var n_uv = Vector2(float(parts[1]), 1 - float(parts[2])) + var n_uv := Vector2(float(parts[1]), 1 - float(parts[2])) uvs.append(n_uv) "usemtl": # Material group @@ -197,9 +191,9 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh: # Face if parts.size() == 4: # Tri - var face = {"v": [], "vt": [], "vn": []} + var face := {"v": [], "vt": [], "vn": []} for map in parts: - var vertices_index = map.split("/") + var vertices_index := map.split("/") if str(vertices_index[0]) != "f": face["v"].append(int(vertices_index[0]) - 1) face["vt"].append(int(vertices_index[1]) - 1) @@ -209,11 +203,11 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh: faces[mat_name].append(face) elif parts.size() > 4: # Triangulate - var points = [] + var points: Array[PackedInt64Array] = [] for map in parts: var vertices_index = map.split("/") if str(vertices_index[0]) != "f": - var point = [] + var point: PackedInt64Array = [] point.append(int(vertices_index[0]) - 1) point.append(int(vertices_index[1]) - 1) if vertices_index.size() > 2: @@ -222,9 +216,9 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh: for i in points.size(): if i != 0: var face = {"v": [], "vt": [], "vn": []} - var point0 = points[0] - var point1 = points[i] - var point2 = points[i - 1] + var point0 := points[0] + var point1 := points[i] + var point2 := points[i - 1] face["v"].append(point0[0]) face["v"].append(point2[0]) face["v"].append(point1[0]) @@ -253,28 +247,28 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh: ) # Mesh Assembler - var st = SurfaceTool.new() + var st := SurfaceTool.new() st.begin(Mesh.PRIMITIVE_TRIANGLES) if !mats.has(matgroup): - mats[matgroup] = SpatialMaterial.new() + mats[matgroup] = StandardMaterial3D.new() st.set_material(mats[matgroup]) for face in faces[matgroup]: if face["v"].size() == 3: # Vertices - var fan_v = PoolVector3Array() + var fan_v := PackedVector3Array() fan_v.append(vertices[face["v"][0]]) fan_v.append(vertices[face["v"][2]]) fan_v.append(vertices[face["v"][1]]) # Normals - var fan_vn = PoolVector3Array() + var fan_vn := PackedVector3Array() if face["vn"].size() > 0: fan_vn.append(normals[face["vn"][0]]) fan_vn.append(normals[face["vn"][2]]) fan_vn.append(normals[face["vn"][1]]) # Textures - var fan_vt = PoolVector2Array() + var fan_vt := PackedVector2Array() if face["vt"].size() > 0: for k in [0, 2, 1]: var f = face["vt"][k] @@ -282,10 +276,12 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh: var uv = uvs[f] fan_vt.append(uv) - st.add_triangle_fan(fan_v, fan_vt, PoolColorArray(), PoolVector2Array(), fan_vn, []) + st.add_triangle_fan( + fan_v, fan_vt, PackedColorArray(), PackedVector2Array(), fan_vn, [] + ) mesh = st.commit(mesh) for k in mesh.get_surface_count(): - var mat = mesh.surface_get_material(k) + var mat := mesh.surface_get_material(k) mat_name = "" for m in mats: if mats[m] == mat: diff --git a/src/Classes/PixelCel.gd b/src/Classes/PixelCel.gd index dff5d835779..4d5507752ae 100644 --- a/src/Classes/PixelCel.gd +++ b/src/Classes/PixelCel.gd @@ -1,10 +1,11 @@ class_name PixelCel extends BaseCel -# A class for the properties of cels in PixelLayers. -# The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel). -# The "image" variable is where the image data of each cel are. +## A class for the properties of cels in PixelLayers. +## The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel). -var image: Image setget image_changed +## This variable is where the image data of each cel are. +var image: Image: + set = image_changed func _init(_image := Image.new(), _opacity := 1.0, _image_texture: ImageTexture = null) -> void: @@ -12,14 +13,14 @@ func _init(_image := Image.new(), _opacity := 1.0, _image_texture: ImageTexture image_texture = _image_texture else: image_texture = ImageTexture.new() - self.image = _image # Set image and call setter + image = _image # Set image and call setter opacity = _opacity func image_changed(value: Image) -> void: image = value if !image.is_empty(): - image_texture.create_from_image(image, 0) + image_texture = ImageTexture.create_from_image(image) func get_content(): @@ -30,21 +31,21 @@ func set_content(content, texture: ImageTexture = null) -> void: image = content if is_instance_valid(texture): image_texture = texture - if image_texture.get_size() != image.get_size(): - image_texture.create_from_image(image, 0) + if image_texture.get_image().get_size() != image.get_size(): + image_texture = ImageTexture.create_from_image(image) else: - image_texture.create_from_image(image, 0) + image_texture = ImageTexture.create_from_image(image) func create_empty_content(): - var empty_image := Image.new() - empty_image.create(image.get_size().x, image.get_size().y, false, Image.FORMAT_RGBA8) + var empty_image := Image.create( + image.get_size().x, image.get_size().y, false, Image.FORMAT_RGBA8 + ) return empty_image func copy_content(): - var copy_image := Image.new() - copy_image.create_from_data( + var copy_image := Image.create_from_data( image.get_width(), image.get_height(), false, Image.FORMAT_RGBA8, image.get_data() ) return copy_image @@ -55,22 +56,24 @@ func get_image() -> Image: func update_texture() -> void: - image_texture.set_data(image) - .update_texture() + image_texture.set_image(image) + super.update_texture() -func save_image_data_to_pxo(file: File) -> void: +func save_image_data_to_pxo(file: FileAccess) -> void: file.store_buffer(image.get_data()) -func load_image_data_from_pxo(file: File, project_size: Vector2) -> void: +func load_image_data_from_pxo(file: FileAccess, project_size: Vector2i) -> void: var buffer := file.get_buffer(project_size.x * project_size.y * 4) - image.create_from_data(project_size.x, project_size.y, false, Image.FORMAT_RGBA8, buffer) + image = Image.create_from_data( + project_size.x, project_size.y, false, Image.FORMAT_RGBA8, buffer + ) image_changed(image) func instantiate_cel_button() -> Node: - return Global.pixel_cel_button_node.instance() + return Global.pixel_cel_button_node.instantiate() func get_class_name() -> String: diff --git a/src/Classes/PixelLayer.gd b/src/Classes/PixelLayer.gd index 6e6915ea0de..6efc7ae626f 100644 --- a/src/Classes/PixelLayer.gd +++ b/src/Classes/PixelLayer.gd @@ -1,9 +1,9 @@ class_name PixelLayer extends BaseLayer -# A class for standard pixel layer properties. +## A class for standard pixel layer properties. -func _init(_project, _name := "") -> void: +func _init(_project: Project, _name := "") -> void: project = _project name = _name @@ -12,14 +12,14 @@ func _init(_project, _name := "") -> void: func serialize() -> Dictionary: - var dict := .serialize() + var dict := super.serialize() dict["type"] = get_layer_type() dict["new_cels_linked"] = new_cels_linked return dict func deserialize(dict: Dictionary) -> void: - .deserialize(dict) + super.deserialize(dict) new_cels_linked = dict.new_cels_linked @@ -28,8 +28,7 @@ func get_layer_type() -> int: func new_empty_cel() -> BaseCel: - var image := Image.new() - image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) + var image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) return PixelCel.new(image) @@ -38,4 +37,4 @@ func can_layer_get_drawn() -> bool: func instantiate_layer_button() -> Node: - return Global.pixel_layer_button_node.instance() + return Global.pixel_layer_button_node.instantiate() diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd index eb25c63a79e..3a3caf56541 100644 --- a/src/Classes/Project.gd +++ b/src/Classes/Project.gd @@ -1,65 +1,81 @@ # gdlint: ignore=max-public-methods class_name Project -extends Reference -# A class for project properties. - -var name := "" setget _name_changed -var size: Vector2 setget _size_changed +extends RefCounted +## A class for project properties. + +var name := "": + set(value): + name = value + if Global.tabs.tab_count < Global.tabs.current_tab: + Global.tabs.set_tab_title(Global.tabs.current_tab, name) +var size: Vector2i: + set = _size_changed var undo_redo := UndoRedo.new() var tiles: Tiles -var undos := 0 # The number of times we added undo properties -var can_undo = true +var undos := 0 ## The number of times we added undo properties +var can_undo := true var fill_color := Color(0) -var has_changed := false setget _has_changed_changed +var has_changed := false: + set(value): + has_changed = value + if value: + Global.tabs.set_tab_title(Global.tabs.current_tab, name + "(*)") + else: + Global.tabs.set_tab_title(Global.tabs.current_tab, name) # frames and layers Arrays should generally only be modified directly when # opening/creating a project. When modifying the current project, use # the add/remove/move/swap_frames/layers methods -var frames := [] # Array of Frames (that contain Cels) -var layers := [] # Array of Layers +var frames: Array[Frame] = [] +var layers: Array[BaseLayer] = [] var current_frame := 0 var current_layer := 0 var selected_cels := [[0, 0]] # Array of Arrays of 2 integers (frame & layer) -var animation_tags := [] setget _animation_tags_changed # Array of AnimationTags -var guides := [] # Array of Guides -var brushes := [] # Array of Images -var reference_images := [] # Array of ReferenceImages +var animation_tags: Array[AnimationTag] = []: + set = _animation_tags_changed +var guides: Array[Guide] = [] +var brushes: Array[Image] = [] +var reference_images: Array[ReferenceImage] = [] var vanishing_points := [] # Array of Vanishing Points var fps := 6.0 -var x_symmetry_point -var y_symmetry_point +var x_symmetry_point: float +var y_symmetry_point: float var x_symmetry_axis := SymmetryGuide.new() var y_symmetry_axis := SymmetryGuide.new() var selection_map := SelectionMap.new() # This is useful for when the selection is outside of the canvas boundaries, # on the left and/or above (negative coords) -var selection_offset := Vector2.ZERO setget _selection_offset_changed +var selection_offset := Vector2i.ZERO: + set(value): + selection_offset = value + Global.canvas.selection.marching_ants_outline.offset = selection_offset var has_selection := false # For every camera (currently there are 3) -var cameras_rotation := [0.0, 0.0, 0.0] # Array of float -var cameras_zoom := [Vector2(0.15, 0.15), Vector2(0.15, 0.15), Vector2(0.15, 0.15)] -var cameras_offset := [Vector2.ZERO, Vector2.ZERO, Vector2.ZERO] -var cameras_zoom_max := [Vector2.ONE, Vector2.ONE, Vector2.ONE] +var cameras_rotation: PackedFloat32Array = [0.0, 0.0, 0.0] +var cameras_zoom: PackedVector2Array = [ + Vector2(0.15, 0.15), Vector2(0.15, 0.15), Vector2(0.15, 0.15) +] +var cameras_offset: PackedVector2Array = [Vector2.ZERO, Vector2.ZERO, Vector2.ZERO] # Export directory path and export file name var directory_path := "" var file_name := "untitled" -var file_format: int = Export.FileFormat.PNG +var file_format := Export.FileFormat.PNG var was_exported := false var export_overwrite := false -var animation_tag_node = preload("res://src/UI/Timeline/AnimationTagUI.tscn") +var animation_tag_node := preload("res://src/UI/Timeline/AnimationTagUI.tscn") -func _init(_frames := [], _name := tr("untitled"), _size := Vector2(64, 64)) -> void: +func _init(_frames: Array[Frame] = [], _name := tr("untitled"), _size := Vector2i(64, 64)) -> void: frames = _frames name = _name size = _size tiles = Tiles.new(size) - selection_map.create(size.x, size.y, false, Image.FORMAT_LA8) + selection_map.copy_from(Image.create(size.x, size.y, false, Image.FORMAT_LA8)) Global.tabs.add_tab(name) OpenSave.current_save_paths.append("") @@ -80,7 +96,7 @@ func _init(_frames := [], _name := tr("untitled"), _size := Vector2(64, 64)) -> y_symmetry_axis.add_point(Vector2(x_symmetry_point / 2 + 0.5, 19999)) Global.canvas.add_child(y_symmetry_axis) - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": directory_path = "user://" else: directory_path = Global.config_cache.get_value( @@ -130,7 +146,7 @@ func new_empty_frame() -> Frame: var frame := Frame.new() var bottom_layer := true for l in layers: # Create as many cels as there are layers - var cel: BaseCel = l.new_empty_cel() + var cel := l.new_empty_cel() if cel is PixelCel and bottom_layer and fill_color.a > 0: cel.image.fill(fill_color) frame.cels.append(cel) @@ -143,20 +159,15 @@ func get_current_cel() -> BaseCel: func selection_map_changed() -> void: - var image_texture := ImageTexture.new() + var image_texture: ImageTexture has_selection = !selection_map.is_invisible() if has_selection: - image_texture.create_from_image(selection_map, 0) + image_texture = ImageTexture.create_from_image(selection_map) Global.canvas.selection.marching_ants_outline.texture = image_texture var edit_menu_popup: PopupMenu = Global.top_menu_container.edit_menu_button.get_popup() edit_menu_popup.set_item_disabled(Global.EditMenu.NEW_BRUSH, !has_selection) -func _selection_offset_changed(value: Vector2) -> void: - selection_offset = value - Global.canvas.selection.marching_ants_outline.offset = selection_offset - - func change_project() -> void: Global.animation_timeline.project_changed() @@ -168,8 +179,7 @@ func change_project() -> void: Global.move_right_frame_button, frames.size() == 1 or current_frame == frames.size() - 1 ) toggle_layer_buttons() - - self.animation_tags = animation_tags + animation_tags = animation_tags # Change the guides for guide in Global.canvas.get_children(): @@ -189,22 +199,17 @@ func change_project() -> void: for brush in brushes: Brushes.add_project_brush(brush) - Global.canvas.update() - Global.canvas.grid.update() - Global.canvas.tile_mode.update() Global.transparent_checker.update_rect() Global.animation_timeline.fps_spinbox.value = fps - Global.horizontal_ruler.update() - Global.vertical_ruler.update() Global.references_panel.project_changed() Global.perspective_editor.update_points() Global.cursor_position_label.text = "[%sร—%s]" % [size.x, size.y] - Global.window_title = "%s - Pixelorama %s" % [name, Global.current_version] + Global.main_window.title = "%s - Pixelorama %s" % [name, Global.current_version] if has_changed: - Global.window_title = Global.window_title + "(*)" + Global.main_window.title = Global.main_window.title + "(*)" - var save_path = OpenSave.current_save_paths[Global.current_project_index] + var save_path := OpenSave.current_save_paths[Global.current_project_index] if save_path != "": Global.open_sprites_dialog.current_path = save_path Global.save_sprites_dialog.current_path = save_path @@ -236,35 +241,18 @@ func change_project() -> void: selection_map_changed() Global.canvas.selection.big_bounding_rectangle = selection_map.get_used_rect() Global.canvas.selection.big_bounding_rectangle.position += selection_offset - Global.canvas.selection.update() + Global.canvas.selection.queue_redraw() var edit_menu_popup: PopupMenu = Global.top_menu_container.edit_menu_button.get_popup() edit_menu_popup.set_item_disabled(Global.EditMenu.NEW_BRUSH, !has_selection) var i := 0 for camera in Global.cameras: - camera.zoom_max = cameras_zoom_max[i] - if camera == Global.camera_preview: - Global.preview_zoom_slider.disconnect( - "value_changed", - Global.canvas_preview_container, - "_on_PreviewZoomSlider_value_changed" - ) - Global.preview_zoom_slider.min_value = -camera.zoom_max.x - Global.preview_zoom_slider.connect( - "value_changed", - Global.canvas_preview_container, - "_on_PreviewZoomSlider_value_changed" - ) - - if camera == Global.camera: - camera.set_zoom_max_value() camera.rotation = cameras_rotation[i] camera.zoom = cameras_zoom[i] camera.offset = cameras_offset[i] - camera.emit_signal("rotation_changed") - camera.emit_signal("zoom_changed") + camera.rotation_changed.emit() + camera.zoom_changed.emit() i += 1 - Global.tile_mode_offset_dialog.change_mask() func serialize() -> Dictionary: @@ -275,13 +263,16 @@ func serialize() -> Dictionary: var tag_data := [] for tag in animation_tags: - tag_data.append( - { - "name": tag.name, - "color": tag.color.to_html(), - "from": tag.from, - "to": tag.to, - } + ( + tag_data + . append( + { + "name": tag.name, + "color": tag.color.to_html(), + "from": tag.from, + "to": tag.to, + } + ) ) var guide_data := [] @@ -370,7 +361,7 @@ func deserialize(dict: Dictionary) -> void: var frame_i := 0 for frame in dict.frames: - var cels := [] + var cels: Array[BaseCel] = [] var cel_i := 0 for cel in frame.cels: match int(dict.layers[cel_i].get("type", Global.LayerTypes.PIXEL)): @@ -403,7 +394,7 @@ func deserialize(dict: Dictionary) -> void: if dict.has("tags"): for tag in dict.tags: animation_tags.append(AnimationTag.new(tag.name, Color(tag.color), tag.from, tag.to)) - self.animation_tags = animation_tags + animation_tags = animation_tags if dict.has("guides"): for g in dict.guides: var guide := Guide.new() @@ -425,14 +416,14 @@ func deserialize(dict: Dictionary) -> void: Global.canvas.add_child(ri) if dict.has("vanishing_points"): vanishing_points = dict.vanishing_points - Global.perspective_editor.update() + Global.perspective_editor.queue_redraw() if dict.has("symmetry_points"): x_symmetry_point = dict.symmetry_points[0] y_symmetry_point = dict.symmetry_points[1] for point in x_symmetry_axis.points.size(): - x_symmetry_axis.points[point].y = floor(y_symmetry_point / 2 + 1) + x_symmetry_axis.points[point].y = floorf(y_symmetry_point / 2 + 1) for point in y_symmetry_axis.points.size(): - y_symmetry_axis.points[point].x = floor(x_symmetry_point / 2 + 1) + y_symmetry_axis.points[point].x = floorf(x_symmetry_point / 2 + 1) if dict.has("export_directory_path"): directory_path = dict.export_directory_path if dict.has("export_file_name"): @@ -459,20 +450,18 @@ func _deserialize_metadata(object: Object, dict: Dictionary) -> void: object.set_meta(meta, metadata[meta]) -func _name_changed(value: String) -> void: - name = value - Global.tabs.set_tab_title(Global.tabs.current_tab, name) - - -func _size_changed(value: Vector2) -> void: +func _size_changed(value: Vector2i) -> void: + if not is_instance_valid(tiles): + size = value + return if size.x != 0: - tiles.x_basis = (tiles.x_basis * value.x / size.x).round() + tiles.x_basis = tiles.x_basis * value.x / size.x else: - tiles.x_basis = Vector2(value.x, 0) + tiles.x_basis = Vector2i(value.x, 0) if size.y != 0: - tiles.y_basis = (tiles.y_basis * value.y / size.y).round() + tiles.y_basis = tiles.y_basis * value.y / size.y else: - tiles.y_basis = Vector2(0, value.y) + tiles.y_basis = Vector2i(0, value.y) tiles.tile_size = value Global.tile_mode_offset_dialog.change_mask() size = value @@ -488,34 +477,34 @@ func change_cel(new_frame: int, new_layer := -1) -> void: # Unpress all buttons for i in frames.size(): var frame_button: BaseButton = Global.frame_hbox.get_child(i) - frame_button.pressed = false # Unpress all frame buttons + frame_button.button_pressed = false # Unpress all frame buttons for cel_hbox in Global.cel_vbox.get_children(): if i < cel_hbox.get_child_count(): - cel_hbox.get_child(i).pressed = false # Unpress all cel buttons + cel_hbox.get_child(i).button_pressed = false # Unpress all cel buttons for layer_button in Global.layer_vbox.get_children(): - layer_button.pressed = false # Unpress all layer buttons + layer_button.button_pressed = false # Unpress all layer buttons - if selected_cels.empty(): + if selected_cels.is_empty(): selected_cels.append([new_frame, new_layer]) for cel in selected_cels: # Press selected buttons var frame: int = cel[0] var layer: int = cel[1] if frame < Global.frame_hbox.get_child_count(): var frame_button: BaseButton = Global.frame_hbox.get_child(frame) - frame_button.pressed = true # Press selected frame buttons + frame_button.button_pressed = true # Press selected frame buttons var layer_vbox_child_count: int = Global.layer_vbox.get_child_count() if layer < layer_vbox_child_count: var layer_button = Global.layer_vbox.get_child(layer_vbox_child_count - 1 - layer) - layer_button.pressed = true # Press selected layer buttons + layer_button.button_pressed = true # Press selected layer buttons var cel_vbox_child_count: int = Global.cel_vbox.get_child_count() if layer < cel_vbox_child_count: var cel_hbox: Container = Global.cel_vbox.get_child(cel_vbox_child_count - 1 - layer) if frame < cel_hbox.get_child_count(): var cel_button: BaseButton = cel_hbox.get_child(frame) - cel_button.pressed = true # Press selected cel buttons + cel_button.button_pressed = true # Press selected cel buttons if new_frame != current_frame: # If the frame has changed current_frame = new_frame @@ -529,9 +518,9 @@ func change_cel(new_frame: int, new_layer := -1) -> void: if current_frame < frames.size(): # Set opacity slider var cel_opacity: float = frames[current_frame].cels[current_layer].opacity Global.layer_opacity_slider.value = cel_opacity * 100 - Global.canvas.update() + Global.canvas.queue_redraw() Global.transparent_checker.update_rect() - Global.emit_signal("cel_changed") + Global.cel_changed.emit() func toggle_frame_buttons() -> void: @@ -543,7 +532,7 @@ func toggle_frame_buttons() -> void: func toggle_layer_buttons() -> void: - if layers.empty() or current_layer >= layers.size(): + if layers.is_empty() or current_layer >= layers.size(): return var child_count: int = layers[current_layer].get_child_count(true) @@ -567,30 +556,30 @@ func toggle_layer_buttons() -> void: ) -func _animation_tags_changed(value: Array) -> void: +func _animation_tags_changed(value: Array[AnimationTag]) -> void: animation_tags = value for child in Global.tag_container.get_children(): child.queue_free() for tag in animation_tags: var tag_base_size = Global.animation_timeline.cel_size + 4 - var tag_c: Container = animation_tag_node.instance() + var tag_c: Container = animation_tag_node.instantiate() Global.tag_container.add_child(tag_c) tag_c.tag = tag - var tag_position: int = Global.tag_container.get_child_count() - 1 + var tag_position := Global.tag_container.get_child_count() - 1 Global.tag_container.move_child(tag_c, tag_position) tag_c.get_node("Label").text = tag.name tag_c.get_node("Label").modulate = tag.color tag_c.get_node("Line2D").default_color = tag.color # Added 1 to answer to get starting position of next cel - tag_c.rect_position.x = (tag.from - 1) * tag_base_size + 1 - var tag_size: int = tag.to - tag.from + tag_c.position.x = (tag.from - 1) * tag_base_size + 1 + var tag_size := tag.to - tag.from # We dont need the 4 pixels at the end of last cel - tag_c.rect_min_size.x = (tag_size + 1) * tag_base_size - 8 - tag_c.rect_position.y = 1 # To make top line of tag visible - tag_c.get_node("Line2D").points[2] = Vector2(tag_c.rect_min_size.x, 0) - tag_c.get_node("Line2D").points[3] = Vector2(tag_c.rect_min_size.x, 32) + tag_c.custom_minimum_size.x = (tag_size + 1) * tag_base_size - 8 + tag_c.position.y = 1 # To make top line of tag visible + tag_c.get_node("Line2D").points[2] = Vector2(tag_c.custom_minimum_size.x, 0) + tag_c.get_node("Line2D").points[3] = Vector2(tag_c.custom_minimum_size.x, 32) _set_timeline_first_and_last_frames() @@ -608,14 +597,6 @@ func _set_timeline_first_and_last_frames() -> void: Global.animation_timeline.last_frame = min(frames.size() - 1, tag.to - 1) -func _has_changed_changed(value: bool) -> void: - has_changed = value - if value: - Global.tabs.set_tab_title(Global.tabs.current_tab, name + "(*)") - else: - Global.tabs.set_tab_title(Global.tabs.current_tab, name) - - func is_empty() -> bool: return ( frames.size() == 1 @@ -627,9 +608,9 @@ func is_empty() -> bool: func can_pixel_get_drawn( - pixel: Vector2, + pixel: Vector2i, image: SelectionMap = selection_map, - selection_position: Vector2 = Global.canvas.selection.big_bounding_rectangle.position + selection_position: Vector2i = Global.canvas.selection.big_bounding_rectangle.position ) -> bool: if pixel.x < 0 or pixel.y < 0 or pixel.x >= size.x or pixel.y >= size.y: return false @@ -683,10 +664,10 @@ func remove_frames(indices: Array) -> void: # indices should be in ascending or cel.on_remove() if cel.link_set != null: cel.link_set["cels"].erase(cel) - if cel.link_set["cels"].empty(): + if cel.link_set["cels"].is_empty(): layers[l].cel_link_sets.erase(cel.link_set) # Remove frame - frames.remove(indices[i] - i) + frames.remove_at(indices[i] - i) Global.animation_timeline.project_frame_removed(indices[i] - i) _update_frame_ui() @@ -694,8 +675,8 @@ func remove_frames(indices: Array) -> void: # indices should be in ascending or func move_frame(from_index: int, to_index: int) -> void: Global.canvas.selection.transform_content_confirm() selected_cels.clear() - var frame = frames[from_index] - frames.remove(from_index) + var frame := frames[from_index] + frames.remove_at(from_index) Global.animation_timeline.project_frame_removed(from_index) frames.insert(to_index, frame) Global.animation_timeline.project_frame_added(to_index) @@ -705,7 +686,7 @@ func move_frame(from_index: int, to_index: int) -> void: func swap_frame(a_index: int, b_index: int) -> void: Global.canvas.selection.transform_content_confirm() selected_cels.clear() - var temp: Frame = frames[a_index] + var temp := frames[a_index] frames[a_index] = frames[b_index] frames[b_index] = temp Global.animation_timeline.project_frame_removed(a_index) @@ -717,11 +698,10 @@ func swap_frame(a_index: int, b_index: int) -> void: func reverse_frames(frame_indices: Array) -> void: Global.canvas.selection.transform_content_confirm() -# warning-ignore:integer_division for i in frame_indices.size() / 2: var index: int = frame_indices[i] var reverse_index: int = frame_indices[-i - 1] - var temp: Frame = frames[index] + var temp := frames[index] frames[index] = frames[reverse_index] frames[reverse_index] = temp Global.animation_timeline.project_frame_removed(index) @@ -749,10 +729,10 @@ func remove_layers(indices: Array) -> void: selected_cels.clear() for i in indices.size(): # With each removed index, future indices need to be lowered, so subtract by i - layers.remove(indices[i] - i) + layers.remove_at(indices[i] - i) for frame in frames: frame.cels[indices[i] - i].on_remove() - frame.cels.remove(indices[i] - i) + frame.cels.remove_at(indices[i] - i) Global.animation_timeline.project_layer_removed(indices[i] - i) _update_layer_ui() @@ -843,7 +823,7 @@ func move_cel(from_frame: int, to_frame: int, layer: int) -> void: func swap_cel(a_frame: int, a_layer: int, b_frame: int, b_layer: int) -> void: Global.canvas.selection.transform_content_confirm() selected_cels.clear() - var temp: BaseCel = frames[a_frame].cels[a_layer] + var temp := frames[a_frame].cels[a_layer] frames[a_frame].cels[a_layer] = frames[b_frame].cels[b_layer] frames[b_frame].cels[b_layer] = temp Global.animation_timeline.project_cel_removed(a_frame, a_layer) diff --git a/src/Classes/SelectionMap.gd b/src/Classes/SelectionMap.gd index 117d1e5aab7..3d92ea00238 100644 --- a/src/Classes/SelectionMap.gd +++ b/src/Classes/SelectionMap.gd @@ -1,33 +1,29 @@ class_name SelectionMap extends Image -var invert_shader: Shader = preload("res://src/Shaders/Invert.shader") +var invert_shader := preload("res://src/Shaders/Invert.gdshader") -func is_pixel_selected(pixel: Vector2) -> bool: +func is_pixel_selected(pixel: Vector2i) -> bool: if pixel.x < 0 or pixel.y < 0 or pixel.x >= get_width() or pixel.y >= get_height(): return false - lock() var selected: bool = get_pixelv(pixel).a > 0 - unlock() return selected -func get_nearest_position(pixel: Vector2) -> Vector2: +func get_nearest_position(pixel: Vector2i) -> Vector2i: if Global.canvas.selection.flag_tilemode: # functions more or less the same way as the tilemode - var size = Global.current_project.size - var selection_rect = get_used_rect() - var start_x = selection_rect.position.x - selection_rect.size.x - var end_x = selection_rect.position.x + 2 * selection_rect.size.x - var start_y = selection_rect.position.y - selection_rect.size.y - var end_y = selection_rect.position.y + 2 * selection_rect.size.y + var size := Global.current_project.size + var selection_rect := get_used_rect() + var start_x := selection_rect.position.x - selection_rect.size.x + var end_x := selection_rect.position.x + 2 * selection_rect.size.x + var start_y := selection_rect.position.y - selection_rect.size.y + var end_y := selection_rect.position.y + 2 * selection_rect.size.y for x in range(start_x, end_x, selection_rect.size.x): for y in range(start_y, end_y, selection_rect.size.y): - var test_image = Image.new() - test_image.create(size.x, size.y, false, Image.FORMAT_LA8) + var test_image := Image.create(size.x, size.y, false, Image.FORMAT_LA8) test_image.blit_rect(self, selection_rect, Vector2(x, y)) - test_image.lock() if ( pixel.x < 0 or pixel.y < 0 @@ -36,45 +32,42 @@ func get_nearest_position(pixel: Vector2) -> Vector2: ): continue var selected: bool = test_image.get_pixelv(pixel).a > 0 - test_image.unlock() if selected: - var offset = Vector2(x, y) - selection_rect.position + var offset := Vector2i(x, y) - selection_rect.position return offset - return Vector2.ZERO + return Vector2i.ZERO else: - return Vector2.ZERO + return Vector2i.ZERO -func get_point_in_tile_mode(pixel: Vector2) -> Array: - var result = [] +func get_point_in_tile_mode(pixel: Vector2i) -> Array[Vector2i]: + var result: Array[Vector2i] = [] if Global.canvas.selection.flag_tilemode: - var selection_rect = get_used_rect() - var start_x = selection_rect.position.x - selection_rect.size.x - var end_x = selection_rect.position.x + 2 * selection_rect.size.x - var start_y = selection_rect.position.y - selection_rect.size.y - var end_y = selection_rect.position.y + 2 * selection_rect.size.y + var selection_rect := get_used_rect() + var start_x := selection_rect.position.x - selection_rect.size.x + var end_x := selection_rect.position.x + 2 * selection_rect.size.x + var start_y := selection_rect.position.y - selection_rect.size.y + var end_y := selection_rect.position.y + 2 * selection_rect.size.y for x in range(start_x, end_x, selection_rect.size.x): for y in range(start_y, end_y, selection_rect.size.y): - result.append(Vector2(x, y) + pixel - selection_rect.position) + result.append(Vector2i(x, y) + pixel - selection_rect.position) else: result.append(pixel) return result -func get_canon_position(position) -> Vector2: +func get_canon_position(position: Vector2i) -> Vector2i: if Global.canvas.selection.flag_tilemode: return position - get_nearest_position(position) else: return position -func select_pixel(pixel: Vector2, select := true) -> void: - lock() +func select_pixel(pixel: Vector2i, select := true) -> void: if select: set_pixelv(pixel, Color(1, 1, 1, 1)) else: set_pixelv(pixel, Color(0)) - unlock() func select_all() -> void: @@ -92,20 +85,20 @@ func invert() -> void: self.convert(Image.FORMAT_LA8) -func move_bitmap_values(project, move_offset := true) -> void: - var size: Vector2 = project.size +func move_bitmap_values(project: Project, move_offset := true) -> void: + var size := project.size var selection_node = Global.canvas.selection - var selection_position: Vector2 = selection_node.big_bounding_rectangle.position - var selection_end: Vector2 = selection_node.big_bounding_rectangle.end + var selection_position: Vector2i = selection_node.big_bounding_rectangle.position + var selection_end: Vector2i = selection_node.big_bounding_rectangle.end var selection_rect := get_used_rect() - var smaller_image := get_rect(selection_rect) + var smaller_image := get_region(selection_rect) clear() var dst := selection_position - var x_diff = selection_end.x - size.x - var y_diff = selection_end.y - size.y - var nw = max(size.x, size.x + x_diff) - var nh = max(size.y, size.y + y_diff) + var x_diff := selection_end.x - size.x + var y_diff := selection_end.y - size.y + var nw := maxi(size.x, size.x + x_diff) + var nh := maxi(size.y, size.y + y_diff) if selection_position.x < 0: nw -= selection_position.x @@ -130,19 +123,21 @@ func move_bitmap_values(project, move_offset := true) -> void: nh = size.y crop(nw, nh) - blit_rect(smaller_image, Rect2(Vector2.ZERO, Vector2(nw, nh)), dst) + blit_rect(smaller_image, Rect2i(Vector2i.ZERO, Vector2i(nw, nh)), dst) -func resize_bitmap_values(project, new_size: Vector2, flip_x: bool, flip_y: bool) -> void: - var size: Vector2 = project.size +func resize_bitmap_values( + project: Project, new_size: Vector2i, flip_hor: bool, flip_ver: bool +) -> void: + var size := project.size var selection_node: Node2D = Global.canvas.selection - var selection_position: Vector2 = selection_node.big_bounding_rectangle.position + var selection_position: Vector2i = selection_node.big_bounding_rectangle.position var dst := selection_position var new_bitmap_size := size - new_bitmap_size.x = max(size.x, abs(selection_position.x) + new_size.x) - new_bitmap_size.y = max(size.y, abs(selection_position.y) + new_size.y) + new_bitmap_size.x = maxi(size.x, absi(selection_position.x) + new_size.x) + new_bitmap_size.y = maxi(size.y, absi(selection_position.y) + new_size.y) var selection_rect := get_used_rect() - var smaller_image := get_rect(selection_rect) + var smaller_image := get_region(selection_rect) if selection_position.x <= 0: project.selection_offset.x = selection_position.x dst.x = 0 @@ -155,10 +150,10 @@ func resize_bitmap_values(project, new_size: Vector2, flip_x: bool, flip_y: bool project.selection_offset.y = 0 clear() smaller_image.resize(new_size.x, new_size.y, Image.INTERPOLATE_NEAREST) - if flip_x: + if flip_hor: smaller_image.flip_x() - if flip_y: + if flip_ver: smaller_image.flip_y() if new_bitmap_size != size: crop(new_bitmap_size.x, new_bitmap_size.y) - blit_rect(smaller_image, Rect2(Vector2.ZERO, new_bitmap_size), dst) + blit_rect(smaller_image, Rect2i(Vector2i.ZERO, new_bitmap_size), dst) diff --git a/src/Classes/ShaderImageEffect.gd b/src/Classes/ShaderImageEffect.gd index 2746a545b2d..9988f1440a7 100644 --- a/src/Classes/ShaderImageEffect.gd +++ b/src/Classes/ShaderImageEffect.gd @@ -1,45 +1,49 @@ class_name ShaderImageEffect -extends Reference -# Helper class to generate image effects using shaders +extends RefCounted +## Helper class to generate image effects using shaders + signal done -func generate_image(img: Image, shader: Shader, params: Dictionary, size: Vector2) -> void: - img.unlock() +func generate_image(img: Image, shader: Shader, params: Dictionary, size: Vector2i) -> void: # duplicate shader before modifying code to avoid affecting original resource shader = shader.duplicate() shader.code = shader.code.replace("unshaded", "unshaded, blend_premul_alpha") - var vp := VisualServer.viewport_create() - var canvas := VisualServer.canvas_create() - VisualServer.viewport_attach_canvas(vp, canvas) - VisualServer.viewport_set_size(vp, size.x, size.y) - VisualServer.viewport_set_disable_3d(vp, true) - VisualServer.viewport_set_usage(vp, VisualServer.VIEWPORT_USAGE_2D) - VisualServer.viewport_set_active(vp, true) - VisualServer.viewport_set_transparent_background(vp, true) + var vp := RenderingServer.viewport_create() + var canvas := RenderingServer.canvas_create() + RenderingServer.viewport_attach_canvas(vp, canvas) + RenderingServer.viewport_set_size(vp, size.x, size.y) + RenderingServer.viewport_set_disable_3d(vp, true) + RenderingServer.viewport_set_active(vp, true) + RenderingServer.viewport_set_transparent_background(vp, true) + RenderingServer.viewport_set_default_canvas_item_texture_filter( + vp, RenderingServer.CANVAS_ITEM_TEXTURE_FILTER_NEAREST + ) - var ci_rid := VisualServer.canvas_item_create() - VisualServer.viewport_set_canvas_transform(vp, canvas, Transform()) - VisualServer.canvas_item_set_parent(ci_rid, canvas) - var texture := VisualServer.texture_create_from_image(img, 0) - VisualServer.canvas_item_add_texture_rect(ci_rid, Rect2(Vector2.ZERO, size), texture) + var ci_rid := RenderingServer.canvas_item_create() + RenderingServer.viewport_set_canvas_transform(vp, canvas, Transform3D()) + RenderingServer.canvas_item_set_parent(ci_rid, canvas) + var texture := RenderingServer.texture_2d_create(img) + RenderingServer.canvas_item_add_texture_rect(ci_rid, Rect2(Vector2.ZERO, size), texture) - var mat_rid := VisualServer.material_create() - VisualServer.material_set_shader(mat_rid, shader.get_rid()) - VisualServer.canvas_item_set_material(ci_rid, mat_rid) + var mat_rid := RenderingServer.material_create() + RenderingServer.material_set_shader(mat_rid, shader.get_rid()) + RenderingServer.canvas_item_set_material(ci_rid, mat_rid) for key in params: - VisualServer.material_set_param(mat_rid, key, params[key]) + var param = params[key] + if param is Texture2D: + RenderingServer.material_set_param(mat_rid, key, [param]) + else: + RenderingServer.material_set_param(mat_rid, key, param) - VisualServer.viewport_set_update_mode(vp, VisualServer.VIEWPORT_UPDATE_ONCE) - VisualServer.viewport_set_vflip(vp, true) - VisualServer.force_draw(false) - var viewport_texture := Image.new() - viewport_texture = VisualServer.texture_get_data(VisualServer.viewport_get_texture(vp)) - VisualServer.free_rid(vp) - VisualServer.free_rid(canvas) - VisualServer.free_rid(ci_rid) - VisualServer.free_rid(mat_rid) - VisualServer.free_rid(texture) + RenderingServer.viewport_set_update_mode(vp, RenderingServer.VIEWPORT_UPDATE_ONCE) + RenderingServer.force_draw(false) + var viewport_texture := RenderingServer.texture_2d_get(RenderingServer.viewport_get_texture(vp)) + RenderingServer.free_rid(vp) + RenderingServer.free_rid(canvas) + RenderingServer.free_rid(ci_rid) + RenderingServer.free_rid(mat_rid) + RenderingServer.free_rid(texture) viewport_texture.convert(Image.FORMAT_RGBA8) img.copy_from(viewport_texture) - emit_signal("done") + done.emit() diff --git a/src/Classes/Tiles.gd b/src/Classes/Tiles.gd index 3bc2142374e..c24b736491e 100644 --- a/src/Classes/Tiles.gd +++ b/src/Classes/Tiles.gd @@ -1,114 +1,103 @@ class_name Tiles -extends Reference +extends RefCounted enum MODE { NONE, BOTH, X_AXIS, Y_AXIS } -var mode: int = MODE.NONE -var x_basis: Vector2 -var y_basis: Vector2 -var tile_size: Vector2 +var mode := MODE.NONE +var x_basis: Vector2i +var y_basis: Vector2i +var tile_size: Vector2i var tile_mask := Image.new() var has_mask := false -func _init(size: Vector2): - x_basis = Vector2(size.x, 0) - y_basis = Vector2(0, size.y) +func _init(size: Vector2i): + x_basis = Vector2i(size.x, 0) + y_basis = Vector2i(0, size.y) tile_size = size - tile_mask.create(tile_size.x, tile_size.y, false, Image.FORMAT_RGBA8) - tile_mask.fill(Color.white) + tile_mask = Image.create(tile_size.x, tile_size.y, false, Image.FORMAT_RGBA8) + tile_mask.fill(Color.WHITE) -func get_bounding_rect() -> Rect2: +func get_bounding_rect() -> Rect2i: match mode: MODE.BOTH: var diagonal := x_basis + y_basis var cross_diagonal := x_basis - y_basis - var bounding_rect := Rect2(-diagonal, Vector2.ZERO) + var bounding_rect := Rect2i(-diagonal, Vector2.ZERO) bounding_rect = bounding_rect.expand(diagonal) bounding_rect = bounding_rect.expand(-cross_diagonal) bounding_rect = bounding_rect.expand(cross_diagonal) bounding_rect = bounding_rect.grow_individual(0, 0, tile_size.x, tile_size.y) return bounding_rect MODE.X_AXIS: - var bounding_rect := Rect2(-x_basis, Vector2.ZERO) + var bounding_rect := Rect2i(-x_basis, Vector2.ZERO) bounding_rect = bounding_rect.expand(x_basis) bounding_rect = bounding_rect.grow_individual(0, 0, tile_size.x, tile_size.y) return bounding_rect MODE.Y_AXIS: - var bounding_rect := Rect2(-y_basis, Vector2.ZERO) + var bounding_rect := Rect2i(-y_basis, Vector2.ZERO) bounding_rect = bounding_rect.expand(y_basis) bounding_rect = bounding_rect.grow_individual(0, 0, tile_size.x, tile_size.y) return bounding_rect _: - return Rect2(Vector2.ZERO, tile_size) + return Rect2i(Vector2i.ZERO, tile_size) -func get_nearest_tile(point: Vector2) -> Rect2: - var positions = Global.canvas.tile_mode.get_tile_positions() - positions.append(Vector2.ZERO) +func get_nearest_tile(point: Vector2i) -> Rect2i: + var positions: Array[Vector2i] = Global.canvas.tile_mode.get_tile_positions() + positions.append(Vector2i.ZERO) - var candidates := [] + var candidates: Array[Rect2i] = [] for pos in positions: - var test_rect = Rect2(pos, tile_size) + var test_rect := Rect2i(pos, tile_size) if test_rect.has_point(point): candidates.append(test_rect) - if candidates.empty(): - return Rect2(Vector2.ZERO, tile_size) + if candidates.is_empty(): + return Rect2i(Vector2i.ZERO, tile_size) - var final := [] - tile_mask.lock() + var final: Array[Rect2i] = [] for candidate in candidates: - var rel_pos = point - candidate.position + var rel_pos := point - candidate.position if tile_mask.get_pixelv(rel_pos).a == 1.0: final.append(candidate) - tile_mask.unlock() - if final.empty(): - return Rect2(Vector2.ZERO, tile_size) - final.sort_custom(self, "sort_by_height") + if final.is_empty(): + return Rect2i(Vector2i.ZERO, tile_size) + final.sort_custom(func(a: Rect2i, b: Rect2i): return a.position.y < b.position.y) return final[0] -func sort_by_height(a: Rect2, b: Rect2): - if a.position.y > b.position.y: - return false - else: - return true - - -func get_canon_position(position: Vector2) -> Vector2: +func get_canon_position(position: Vector2i) -> Vector2i: if mode == MODE.NONE: return position - var nearest_tile = get_nearest_tile(position) + var nearest_tile := get_nearest_tile(position) if nearest_tile.has_point(position): position -= nearest_tile.position return position -func get_point_in_tiles(pixel: Vector2) -> Array: - var positions = Global.canvas.tile_mode.get_tile_positions() - positions.append(Vector2.ZERO) - var result = [] +func get_point_in_tiles(pixel: Vector2i) -> Array[Vector2i]: + var positions: Array[Vector2i] = Global.canvas.tile_mode.get_tile_positions() + positions.append(Vector2i.ZERO) + var result: Array[Vector2i] = [] for pos in positions: result.append(pos + pixel) return result -func has_point(point: Vector2) -> bool: - var positions = Global.canvas.tile_mode.get_tile_positions() - positions.append(Vector2.ZERO) # The central tile is included manually - tile_mask.lock() +func has_point(point: Vector2i) -> bool: + var positions: Array[Vector2i] = Global.canvas.tile_mode.get_tile_positions() + positions.append(Vector2i.ZERO) # The central tile is included manually for tile_pos in positions: - var test_rect = Rect2(tile_pos, tile_size) - var rel_pos = point - tile_pos + var test_rect := Rect2i(tile_pos, tile_size) + var rel_pos := point - tile_pos if test_rect.has_point(point) and tile_mask.get_pixelv(rel_pos).a == 1.0: return true - tile_mask.unlock() return false func reset_mask(): - tile_mask.create(tile_size.x, tile_size.y, false, Image.FORMAT_RGBA8) - tile_mask.fill(Color.white) + tile_mask = Image.create(tile_size.x, tile_size.y, false, Image.FORMAT_RGBA8) + tile_mask.fill(Color.WHITE) has_mask = false diff --git a/src/Main.gd b/src/Main.gd index 4ba23971b55..904b8c7f15e 100644 --- a/src/Main.gd +++ b/src/Main.gd @@ -3,39 +3,36 @@ extends Control var opensprite_file_selected := false var redone := false var is_quitting_on_save := false -var cursor_image: Texture = preload("res://assets/graphics/cursor.png") +var cursor_image: Texture2D = preload("res://assets/graphics/cursor.png") -onready var ui := $MenuAndUI/UI/DockableContainer -onready var backup_confirmation: ConfirmationDialog = $Dialogs/BackupConfirmation -onready var quit_dialog: ConfirmationDialog = $Dialogs/QuitDialog -onready var quit_and_save_dialog: ConfirmationDialog = $Dialogs/QuitAndSaveDialog -onready var left_cursor: Sprite = $LeftCursor -onready var right_cursor: Sprite = $RightCursor +@onready var ui := $MenuAndUI/UI/DockableContainer as DockableContainer +@onready var backup_confirmation: ConfirmationDialog = $Dialogs/BackupConfirmation +@onready var quit_dialog: ConfirmationDialog = $Dialogs/QuitDialog +@onready var quit_and_save_dialog: ConfirmationDialog = $Dialogs/QuitAndSaveDialog +@onready var left_cursor: Sprite2D = $LeftCursor +@onready var right_cursor: Sprite2D = $RightCursor func _init() -> void: Global.shrink = _get_auto_display_scale() - if OS.get_name() == "OSX": - _use_osx_shortcuts() func _ready() -> void: - randomize() get_tree().set_auto_accept_quit(false) _setup_application_window_size() - Global.window_title = tr("untitled") + " - Pixelorama " + Global.current_version + Global.main_window.title = tr("untitled") + " - Pixelorama " + Global.current_version Global.current_project.layers.append(PixelLayer.new(Global.current_project)) Global.current_project.frames.append(Global.current_project.new_empty_frame()) Global.animation_timeline.project_changed() Global.current_project.toggle_frame_buttons() - Import.import_brushes(Global.directory_module.get_brushes_search_path_in_order()) - Import.import_patterns(Global.directory_module.get_patterns_search_path_in_order()) + Import.import_brushes(Global.path_join_array(Global.data_directories, "Brushes")) + Import.import_patterns(Global.path_join_array(Global.data_directories, "Patterns")) quit_and_save_dialog.add_button("Exit without saving", false, "ExitWithoutSaving") - quit_and_save_dialog.get_ok().text = "Save & Exit" + quit_and_save_dialog.get_ok_button().text = "Save & Exit" Global.open_sprites_dialog.current_dir = Global.config_cache.get_value( "data", "current_dir", OS.get_system_dir(OS.SYSTEM_DIR_DESKTOP) @@ -56,7 +53,7 @@ func _ready() -> void: var zstd_checkbox := CheckBox.new() zstd_checkbox.name = "ZSTDCompression" - zstd_checkbox.pressed = true + zstd_checkbox.button_pressed = true zstd_checkbox.text = "Use ZSTD Compression" zstd_checkbox.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND Global.save_sprites_dialog.get_vbox().add_child(zstd_checkbox) @@ -64,7 +61,7 @@ func _ready() -> void: _handle_backup() _handle_cmdline_arguments() - get_tree().connect("files_dropped", self, "_on_files_dropped") + get_tree().root.files_dropped.connect(_on_files_dropped) if OS.get_name() == "Android": OS.request_permissions() @@ -76,18 +73,20 @@ func _input(event: InputEvent) -> void: left_cursor.position = get_global_mouse_position() + Vector2(-32, 32) right_cursor.position = get_global_mouse_position() + Vector2(32, 32) - if event is InputEventKey and (event.scancode == KEY_ENTER or event.scancode == KEY_KP_ENTER): - if get_focus_owner() is LineEdit: - get_focus_owner().release_focus() + if event is InputEventKey and (event.keycode == KEY_ENTER or event.keycode == KEY_KP_ENTER): + if get_viewport().gui_get_focus_owner() is LineEdit: + get_viewport().gui_get_focus_owner().release_focus() # Taken from https://github.com/godotengine/godot/blob/3.x/editor/editor_settings.cpp#L1474 func _get_auto_display_scale() -> float: - if OS.get_name() == "OSX": - return OS.get_screen_max_scale() + if OS.get_name() == "macOS": + return DisplayServer.screen_get_max_scale() - var dpi := OS.get_screen_dpi() - var smallest_dimension: int = min(OS.get_screen_size().x, OS.get_screen_size().y) + var dpi := DisplayServer.screen_get_dpi() + var smallest_dimension := mini( + DisplayServer.screen_get_size().x, DisplayServer.screen_get_size().y + ) if dpi >= 192 && smallest_dimension >= 1400: return 2.0 # hiDPI display. elif smallest_dimension >= 1700: @@ -96,30 +95,33 @@ func _get_auto_display_scale() -> float: func _setup_application_window_size() -> void: - get_tree().set_screen_stretch( - SceneTree.STRETCH_MODE_DISABLED, - SceneTree.STRETCH_ASPECT_IGNORE, - Vector2(1024, 576), - Global.shrink - ) + var root := get_tree().root + root.content_scale_aspect = Window.CONTENT_SCALE_ASPECT_IGNORE + root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED + root.min_size = Vector2(1024, 576) + root.content_scale_factor = Global.shrink set_custom_cursor() - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": return # Set a minimum window size to prevent UI elements from collapsing on each other. - OS.min_window_size = Vector2(1024, 576) + get_window().min_size = Vector2(1024, 576) # Restore the window position/size if values are present in the configuration cache if Global.config_cache.has_section_key("window", "screen"): - OS.current_screen = Global.config_cache.get_value("window", "screen") + get_window().current_screen = Global.config_cache.get_value("window", "screen") if Global.config_cache.has_section_key("window", "maximized"): - OS.window_maximized = Global.config_cache.get_value("window", "maximized") + get_window().mode = ( + Window.MODE_MAXIMIZED + if (Global.config_cache.get_value("window", "maximized")) + else Window.MODE_WINDOWED + ) - if !OS.window_maximized: + if !(get_window().mode == Window.MODE_MAXIMIZED): if Global.config_cache.has_section_key("window", "position"): - OS.window_position = Global.config_cache.get_value("window", "position") + get_window().position = Global.config_cache.get_value("window", "position") if Global.config_cache.has_section_key("window", "size"): - OS.window_size = Global.config_cache.get_value("window", "size") + get_window().size = Global.config_cache.get_value("window", "size") func set_custom_cursor() -> void: @@ -129,14 +131,12 @@ func set_custom_cursor() -> void: if Global.shrink == 1.0: Input.set_custom_mouse_cursor(cursor_image, Input.CURSOR_CROSS, Vector2(15, 15)) else: - var cursor_data := cursor_image.get_data() - cursor_data.resize( - cursor_data.get_width() * Global.shrink, cursor_data.get_height() * Global.shrink, 0 - ) - var new_cursor_tex := ImageTexture.new() - new_cursor_tex.create_from_image(cursor_data, 0) + var cursor_data := cursor_image.get_image() + var cursor_size := cursor_data.get_size() * Global.shrink + cursor_data.resize(cursor_size.x, cursor_size.y, Image.INTERPOLATE_NEAREST) + var cursor_tex := ImageTexture.create_from_image(cursor_data) Input.set_custom_mouse_cursor( - new_cursor_tex, Input.CURSOR_CROSS, Vector2(15, 15) * Global.shrink + cursor_tex, Input.CURSOR_CROSS, Vector2(15, 15) * Global.shrink ) @@ -146,8 +146,8 @@ func _show_splash_screen() -> void: if Global.config_cache.get_value("preferences", "startup"): # Wait for the window to adjust itself, so the popup is correctly centered - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + await get_tree().process_frame + await get_tree().process_frame $Dialogs/SplashDialog.popup_centered() # Splash screen modulate = Color(0.5, 0.5, 0.5) @@ -167,14 +167,11 @@ func _handle_backup() -> void: backup_paths.append(Global.config_cache.get_value("backups", p_path)) # Temporatily stop autosave until user confirms backup OpenSave.autosave_timer.stop() - backup_confirmation.connect( - "confirmed", self, "_on_BackupConfirmation_confirmed", [project_paths, backup_paths] + backup_confirmation.confirmed.connect( + _on_BackupConfirmation_confirmed.bind(project_paths, backup_paths) ) - backup_confirmation.connect( - "custom_action", - self, - "_on_BackupConfirmation_custom_action", - [project_paths, backup_paths] + backup_confirmation.custom_action.connect( + _on_BackupConfirmation_custom_action.bind(project_paths, backup_paths) ) backup_confirmation.popup_centered() Global.can_draw = false @@ -189,7 +186,7 @@ func _handle_backup() -> void: func _handle_cmdline_arguments() -> void: var args := OS.get_cmdline_args() - if args.empty(): + if args.is_empty(): return for arg in args: @@ -202,31 +199,31 @@ func _handle_cmdline_arguments() -> void: func _notification(what: int) -> void: match what: - MainLoop.NOTIFICATION_WM_QUIT_REQUEST: + NOTIFICATION_WM_CLOSE_REQUEST: show_quit_dialog() # If the mouse exits the window and another application has the focus, # pause the application - MainLoop.NOTIFICATION_WM_FOCUS_OUT: + NOTIFICATION_APPLICATION_FOCUS_OUT: Global.has_focus = false if Global.pause_when_unfocused: get_tree().paused = true - MainLoop.NOTIFICATION_WM_MOUSE_EXIT: - if !OS.is_window_focused() and Global.pause_when_unfocused: + NOTIFICATION_WM_MOUSE_EXIT: + if !get_window().has_focus() and Global.pause_when_unfocused: get_tree().paused = true # Unpause it when the mouse enters the window or when it gains focus - MainLoop.NOTIFICATION_WM_MOUSE_ENTER: + NOTIFICATION_WM_MOUSE_ENTER: get_tree().paused = false - MainLoop.NOTIFICATION_WM_FOCUS_IN: + NOTIFICATION_APPLICATION_FOCUS_IN: get_tree().paused = false var mouse_pos := get_global_mouse_position() var viewport_rect := Rect2( - Global.main_viewport.rect_global_position, Global.main_viewport.rect_size + Global.main_viewport.global_position, Global.main_viewport.size ) if viewport_rect.has_point(mouse_pos): Global.has_focus = true -func _on_files_dropped(files: PoolStringArray, _screen: int) -> void: +func _on_files_dropped(files: PackedStringArray) -> void: for file in files: OpenSave.handle_loading_file(file) var splash_dialog = Global.control.get_node("Dialogs/SplashDialog") @@ -235,14 +232,13 @@ func _on_files_dropped(files: PoolStringArray, _screen: int) -> void: func load_last_project() -> void: - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": return # Check if any project was saved or opened last time if Global.config_cache.has_section_key("preferences", "last_project_path"): # Check if file still exists on disk var file_path = Global.config_cache.get_value("preferences", "last_project_path") - var file_check := File.new() - if file_check.file_exists(file_path): # If yes then load the file + if FileAccess.file_exists(file_path): # If yes then load the file OpenSave.open_pxo_file(file_path) # Sync file dialogs Global.save_sprites_dialog.current_dir = file_path.get_base_dir() @@ -256,12 +252,11 @@ func load_last_project() -> void: func load_recent_project_file(path: String) -> void: - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": return # Check if file still exists on disk - var file_check := File.new() - if file_check.file_exists(path): # If yes then load the file + if FileAccess.file_exists(path): # If yes then load the file OpenSave.handle_loading_file(path) # Sync file dialogs Global.save_sprites_dialog.current_dir = path.get_base_dir() @@ -274,7 +269,7 @@ func load_recent_project_file(path: String) -> void: Global.dialog_open(true) -func _on_OpenSprite_files_selected(paths: PoolStringArray) -> void: +func _on_OpenSprite_files_selected(paths: PackedStringArray) -> void: for path in paths: OpenSave.handle_loading_file(path) Global.save_sprites_dialog.current_dir = paths[0].get_base_dir() @@ -286,7 +281,9 @@ func _on_SaveSprite_file_selected(path: String) -> void: func save_project(path: String) -> void: - var zstd: bool = Global.save_sprites_dialog.get_vbox().get_node("ZSTDCompression").pressed + var zstd: bool = ( + Global.save_sprites_dialog.get_vbox().get_node("ZSTDCompression").button_pressed + ) OpenSave.save_pxo_file(path, false, zstd) Global.open_sprites_dialog.current_dir = path.get_base_dir() Global.config_cache.set_value("data", "current_dir", path.get_base_dir()) @@ -296,15 +293,15 @@ func save_project(path: String) -> void: func _on_SaveSpriteHTML5_confirmed() -> void: - var file_name = Global.save_sprites_html5_dialog.get_node( - "FileNameContainer/FileNameLineEdit" - ).text + var file_name: String = ( + Global.save_sprites_html5_dialog.get_node("FileNameContainer/FileNameLineEdit").text + ) file_name += ".pxo" - var path = "user://".plus_file(file_name) + var path := "user://".path_join(file_name) OpenSave.save_pxo_file(path, false, false) -func _on_OpenSprite_popup_hide() -> void: +func _on_open_sprite_visibility_changed() -> void: if !opensprite_file_selected: _can_draw_true() @@ -343,7 +340,7 @@ func _on_QuitAndSaveDialog_custom_action(action: String) -> void: func _on_QuitAndSaveDialog_confirmed() -> void: is_quitting_on_save = true - Global.save_sprites_dialog.get_ok().text = "Save & Exit" + Global.save_sprites_dialog.get_ok_button().text = "Save & Exit" Global.save_sprites_dialog.popup_centered() quit_dialog.hide() Global.dialog_open(true) @@ -380,34 +377,30 @@ func _on_BackupConfirmation_custom_action( load_last_project() -func _on_BackupConfirmation_popup_hide() -> void: +func _on_backup_confirmation_visibility_changed() -> void: + if backup_confirmation.visible: + return if Global.enable_autosave: OpenSave.autosave_timer.start() - - -func _use_osx_shortcuts() -> void: - for action in InputMap.get_actions(): - var action_list: Array = InputMap.get_action_list(action) - if action_list.size() == 0: - continue - var event: InputEvent = action_list[0] - - if event.is_action("show_pixel_grid"): - event.shift = true - - if event.control: - event.control = false - event.command = true + Global.dialog_open(false) func _exit_tree() -> void: Global.config_cache.set_value("window", "layout", Global.top_menu_container.selected_layout) - Global.config_cache.set_value("window", "screen", OS.current_screen) + Global.config_cache.set_value("window", "screen", get_window().current_screen) Global.config_cache.set_value( - "window", "maximized", OS.window_maximized || OS.window_fullscreen + "window", + "maximized", + ( + (get_window().mode == Window.MODE_MAXIMIZED) + || ( + (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN) + or (get_window().mode == Window.MODE_FULLSCREEN) + ) + ) ) - Global.config_cache.set_value("window", "position", OS.window_position) - Global.config_cache.set_value("window", "size", OS.window_size) + Global.config_cache.set_value("window", "position", get_window().position) + Global.config_cache.set_value("window", "size", get_window().size) Global.config_cache.set_value("view_menu", "draw_grid", Global.draw_grid) Global.config_cache.set_value("view_menu", "draw_pixel_grid", Global.draw_pixel_grid) Global.config_cache.set_value("view_menu", "show_rulers", Global.show_rulers) diff --git a/src/Main.tscn b/src/Main.tscn index 9987e703966..13b0dd3271a 100644 --- a/src/Main.tscn +++ b/src/Main.tscn @@ -1,160 +1,129 @@ -[gd_scene load_steps=20 format=2] - -[ext_resource path="res://assets/themes/dark/theme.tres" type="Theme" id=1] -[ext_resource path="res://src/Main.gd" type="Script" id=2] -[ext_resource path="res://src/UI/TopMenuContainer/TopMenuContainer.tscn" type="PackedScene" id=3] -[ext_resource path="res://src/UI/UI.tscn" type="PackedScene" id=4] -[ext_resource path="res://src/UI/Buttons/PatternsPopup.tscn" type="PackedScene" id=5] -[ext_resource path="res://src/UI/Buttons/BrushesPopup.tscn" type="PackedScene" id=6] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffects.tscn" type="PackedScene" id=7] -[ext_resource path="res://src/UI/Dialogs/SaveSpriteHTML5.tscn" type="PackedScene" id=8] -[ext_resource path="res://src/UI/Timeline/FrameProperties.tscn" type="PackedScene" id=9] -[ext_resource path="res://src/UI/Dialogs/WindowOpacityDialog.tscn" type="PackedScene" id=10] -[ext_resource path="res://src/UI/Dialogs/SaveSprite.tscn" type="PackedScene" id=11] -[ext_resource path="res://src/UI/Dialogs/OpenSprite.tscn" type="PackedScene" id=12] -[ext_resource path="res://src/UI/Dialogs/ManageLayouts.tscn" type="PackedScene" id=13] -[ext_resource path="res://src/UI/Dialogs/TileModeOffsetsDialog.tscn" type="PackedScene" id=14] -[ext_resource path="res://src/UI/Dialogs/SplashDialog.tscn" type="PackedScene" id=27] -[ext_resource path="res://src/UI/Dialogs/CreateNewImage.tscn" type="PackedScene" id=28] -[ext_resource path="res://src/Preferences/PreferencesDialog.tscn" type="PackedScene" id=32] -[ext_resource path="res://src/UI/Dialogs/AboutDialog.tscn" type="PackedScene" id=34] -[ext_resource path="res://src/UI/Dialogs/ExportDialog.tscn" type="PackedScene" id=39] +[gd_scene load_steps=20 format=3 uid="uid://dbylw5k04ulp8"] + +[ext_resource type="Theme" uid="uid://w1q3piojx08s" path="res://assets/themes/dark/theme.tres" id="1"] +[ext_resource type="Script" path="res://src/Main.gd" id="2"] +[ext_resource type="PackedScene" uid="uid://bsgwar3l6qtgv" path="res://src/UI/TopMenuContainer/TopMenuContainer.tscn" id="3"] +[ext_resource type="PackedScene" uid="uid://c8dsi6ggkqa7a" path="res://src/UI/UI.tscn" id="4"] +[ext_resource type="PackedScene" uid="uid://d1jyt8wleg8ft" path="res://src/UI/Buttons/PatternsPopup.tscn" id="5"] +[ext_resource type="PackedScene" uid="uid://c5x85ysdouh4t" path="res://src/UI/Buttons/BrushesPopup.tscn" id="6"] +[ext_resource type="PackedScene" uid="uid://cfihuvhy4ocx7" path="res://src/UI/Dialogs/ImageEffects/ImageEffects.tscn" id="7"] +[ext_resource type="PackedScene" uid="uid://cltlo2whtiejd" path="res://src/UI/Dialogs/SaveSpriteHTML5.tscn" id="8"] +[ext_resource type="PackedScene" uid="uid://bs3dnnvnxyp68" path="res://src/UI/Timeline/FrameProperties.tscn" id="9"] +[ext_resource type="PackedScene" uid="uid://bcdt0pa7rojy5" path="res://src/UI/Dialogs/WindowOpacityDialog.tscn" id="10"] +[ext_resource type="PackedScene" uid="uid://d4euwo633u33b" path="res://src/UI/Dialogs/SaveSprite.tscn" id="11"] +[ext_resource type="PackedScene" uid="uid://b3aeqj2k58wdk" path="res://src/UI/Dialogs/OpenSprite.tscn" id="12"] +[ext_resource type="PackedScene" uid="uid://d1phd84dk4t5e" path="res://src/UI/Dialogs/ManageLayouts.tscn" id="13"] +[ext_resource type="PackedScene" uid="uid://c0nuukjakmai2" path="res://src/UI/Dialogs/TileModeOffsetsDialog.tscn" id="14"] +[ext_resource type="PackedScene" uid="uid://bnpb1aip3wdvw" path="res://src/UI/Dialogs/SplashDialog.tscn" id="27"] +[ext_resource type="PackedScene" uid="uid://btjf3lj873q1t" path="res://src/UI/Dialogs/CreateNewImage.tscn" id="28"] +[ext_resource type="PackedScene" uid="uid://b3hkjj3s6pe4x" path="res://src/Preferences/PreferencesDialog.tscn" id="32"] +[ext_resource type="PackedScene" uid="uid://w1v6plnv6ppt" path="res://src/UI/Dialogs/AboutDialog.tscn" id="34"] +[ext_resource type="PackedScene" uid="uid://clgu8wb5o6oup" path="res://src/UI/Dialogs/ExportDialog.tscn" id="39"] [node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -theme = ExtResource( 1 ) -script = ExtResource( 2 ) -__meta__ = { -"_edit_horizontal_guides_": [ ], -"_edit_vertical_guides_": [ ] -} +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1") +script = ExtResource("2") [node name="MenuAndUI" type="VBoxContainer" parent="."] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -custom_constants/separation = 0 -__meta__ = { -"_edit_use_anchors_": false -} +theme_override_constants/separation = 0 -[node name="TopMenuContainer" parent="MenuAndUI" instance=ExtResource( 3 )] +[node name="TopMenuContainer" parent="MenuAndUI" instance=ExtResource("3")] +layout_mode = 2 -[node name="UI" parent="MenuAndUI" instance=ExtResource( 4 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_top = 28.0 -margin_right = 1280.0 -margin_bottom = 720.0 +[node name="UI" parent="MenuAndUI" instance=ExtResource("4")] +layout_mode = 2 [node name="Dialogs" type="Control" parent="."] +anchors_preset = 0 mouse_filter = 2 -__meta__ = { -"_edit_use_anchors_": false -} -[node name="ImageEffects" parent="Dialogs" instance=ExtResource( 7 )] +[node name="ImageEffects" parent="Dialogs" instance=ExtResource("7")] -[node name="BrushesPopup" parent="Dialogs" instance=ExtResource( 6 )] +[node name="BrushesPopup" parent="Dialogs" instance=ExtResource("6")] -[node name="PatternsPopup" parent="Dialogs" instance=ExtResource( 5 )] +[node name="PatternsPopup" parent="Dialogs" instance=ExtResource("5")] -[node name="SplashDialog" parent="Dialogs" instance=ExtResource( 27 )] +[node name="SplashDialog" parent="Dialogs" instance=ExtResource("27")] -[node name="CreateNewImage" parent="Dialogs" instance=ExtResource( 28 )] +[node name="CreateNewImage" parent="Dialogs" instance=ExtResource("28")] -[node name="OpenSprite" parent="Dialogs" instance=ExtResource( 12 )] -window_title = "Open File(s)" -mode = 1 +[node name="OpenSprite" parent="Dialogs" instance=ExtResource("12")] -[node name="SaveSprite" parent="Dialogs" instance=ExtResource( 11 )] -margin_left = 108.0 -margin_top = 40.0 -margin_right = 623.0 -margin_bottom = 388.0 +[node name="SaveSprite" parent="Dialogs" instance=ExtResource("11")] -[node name="SaveSpriteHTML5" parent="Dialogs" instance=ExtResource( 8 )] +[node name="SaveSpriteHTML5" parent="Dialogs" instance=ExtResource("8")] -[node name="ExportDialog" parent="Dialogs" instance=ExtResource( 39 )] +[node name="ExportDialog" parent="Dialogs" instance=ExtResource("39")] -[node name="PreferencesDialog" parent="Dialogs" instance=ExtResource( 32 )] +[node name="PreferencesDialog" parent="Dialogs" instance=ExtResource("32")] -[node name="ManageLayouts" parent="Dialogs" instance=ExtResource( 13 )] +[node name="ManageLayouts" parent="Dialogs" instance=ExtResource("13")] -[node name="AboutDialog" parent="Dialogs" instance=ExtResource( 34 )] +[node name="AboutDialog" parent="Dialogs" instance=ExtResource("34")] +position = Vector2i(0, 24) [node name="UnsavedCanvasDialog" type="ConfirmationDialog" parent="Dialogs"] -margin_right = 467.0 -margin_bottom = 70.0 -rect_min_size = Vector2( 180, 63 ) -window_title = "Unsaved Image" +title = "Unsaved Image" +exclusive = false dialog_text = "You have unsaved changes. If you proceed, the progress you have made will be lost." [node name="QuitDialog" type="ConfirmationDialog" parent="Dialogs"] -margin_right = 243.0 -margin_bottom = 70.0 -resizable = true +exclusive = false dialog_text = "Are you sure you want to exit Pixelorama?" [node name="QuitAndSaveDialog" type="ConfirmationDialog" parent="Dialogs"] -margin_right = 330.0 -margin_bottom = 70.0 -window_title = "Save before exiting?" -resizable = true +title = "Save before exiting?" +exclusive = false dialog_text = "You have unsaved progress. How do you wish to proceed?" -__meta__ = { -"_edit_use_anchors_": false -} [node name="ErrorDialog" type="AcceptDialog" parent="Dialogs"] -margin_right = 151.0 -margin_bottom = 60.0 -window_title = "Error" +exclusive = false dialog_text = "This is an error message!" [node name="BackupConfirmation" type="ConfirmationDialog" parent="Dialogs"] -margin_right = 200.0 -margin_bottom = 88.0 -popup_exclusive = true -resizable = true +exclusive = false dialog_text = "Autosaved project(s) from a crashed session were found. Do you want to recover the data?" dialog_autowrap = true -[node name="FrameProperties" parent="Dialogs" instance=ExtResource( 9 )] +[node name="FrameProperties" parent="Dialogs" instance=ExtResource("9")] -[node name="WindowOpacityDialog" parent="Dialogs" instance=ExtResource( 10 )] +[node name="WindowOpacityDialog" parent="Dialogs" instance=ExtResource("10")] -[node name="TileModeOffsetsDialog" parent="Dialogs" instance=ExtResource( 14 )] +[node name="TileModeOffsetsDialog" parent="Dialogs" instance=ExtResource("14")] [node name="Extensions" type="Control" parent="."] -__meta__ = { -"_edit_use_anchors_": false -} +anchors_preset = 0 -[node name="LeftCursor" type="Sprite" parent="."] +[node name="LeftCursor" type="Sprite2D" parent="."] visible = false -[node name="RightCursor" type="Sprite" parent="."] +[node name="RightCursor" type="Sprite2D" parent="."] visible = false -[connection signal="popup_hide" from="Dialogs/SplashDialog" to="." method="_can_draw_true"] -[connection signal="popup_hide" from="Dialogs/CreateNewImage" to="." method="_can_draw_true"] +[connection signal="visibility_changed" from="Dialogs/SplashDialog" to="." method="_can_draw_true"] +[connection signal="visibility_changed" from="Dialogs/CreateNewImage" to="." method="_can_draw_true"] [connection signal="files_selected" from="Dialogs/OpenSprite" to="." method="_on_OpenSprite_files_selected"] -[connection signal="popup_hide" from="Dialogs/OpenSprite" to="." method="_on_OpenSprite_popup_hide"] +[connection signal="visibility_changed" from="Dialogs/OpenSprite" to="." method="_on_open_sprite_visibility_changed"] [connection signal="file_selected" from="Dialogs/SaveSprite" to="." method="_on_SaveSprite_file_selected"] -[connection signal="popup_hide" from="Dialogs/SaveSprite" to="." method="_can_draw_true"] +[connection signal="visibility_changed" from="Dialogs/SaveSprite" to="." method="_can_draw_true"] [connection signal="confirmed" from="Dialogs/SaveSpriteHTML5" to="." method="_on_SaveSpriteHTML5_confirmed"] -[connection signal="popup_hide" from="Dialogs/SaveSpriteHTML5" to="." method="_can_draw_true"] -[connection signal="popup_hide" from="Dialogs/ExportDialog" to="." method="_can_draw_true"] -[connection signal="popup_hide" from="Dialogs/PreferencesDialog" to="." method="_can_draw_true"] -[connection signal="popup_hide" from="Dialogs/AboutDialog" to="." method="_can_draw_true"] -[connection signal="popup_hide" from="Dialogs/UnsavedCanvasDialog" to="." method="_can_draw_true"] +[connection signal="visibility_changed" from="Dialogs/SaveSpriteHTML5" to="." method="_can_draw_true"] +[connection signal="visibility_changed" from="Dialogs/ExportDialog" to="." method="_can_draw_true"] +[connection signal="visibility_changed" from="Dialogs/UnsavedCanvasDialog" to="." method="_can_draw_true"] [connection signal="confirmed" from="Dialogs/QuitDialog" to="." method="_on_QuitDialog_confirmed"] -[connection signal="popup_hide" from="Dialogs/QuitDialog" to="." method="_can_draw_true"] +[connection signal="visibility_changed" from="Dialogs/QuitDialog" to="." method="_can_draw_true"] [connection signal="confirmed" from="Dialogs/QuitAndSaveDialog" to="." method="_on_QuitAndSaveDialog_confirmed"] [connection signal="custom_action" from="Dialogs/QuitAndSaveDialog" to="." method="_on_QuitAndSaveDialog_custom_action"] -[connection signal="popup_hide" from="Dialogs/QuitAndSaveDialog" to="." method="_can_draw_true"] -[connection signal="popup_hide" from="Dialogs/ErrorDialog" to="." method="_can_draw_true"] -[connection signal="popup_hide" from="Dialogs/BackupConfirmation" to="." method="_on_BackupConfirmation_popup_hide"] -[connection signal="popup_hide" from="Dialogs/BackupConfirmation" to="." method="_can_draw_true"] +[connection signal="visibility_changed" from="Dialogs/QuitAndSaveDialog" to="." method="_can_draw_true"] +[connection signal="visibility_changed" from="Dialogs/ErrorDialog" to="." method="_can_draw_true"] +[connection signal="visibility_changed" from="Dialogs/BackupConfirmation" to="." method="_on_backup_confirmation_visibility_changed"] diff --git a/src/Palette/CreatePaletteDialog.gd b/src/Palette/CreatePaletteDialog.gd index 14735009f58..ad963971533 100644 --- a/src/Palette/CreatePaletteDialog.gd +++ b/src/Palette/CreatePaletteDialog.gd @@ -6,17 +6,17 @@ signal saved(preset, name, comment, width, height, add_alpha_colors, colors_from # Reference to current palette stored when dialog opens var current_palette: Palette -onready var preset_input := $VBoxContainer/PaletteMetadata/Preset -onready var name_input := $VBoxContainer/PaletteMetadata/Name -onready var comment_input := $VBoxContainer/PaletteMetadata/Comment -onready var width_input := $VBoxContainer/PaletteMetadata/Width -onready var height_input := $VBoxContainer/PaletteMetadata/Height -onready var alpha_colors_input := $VBoxContainer/ColorsSettings/AddAlphaColors -onready var get_colors_from_input := $VBoxContainer/ColorsSettings/GetColorsFrom/GetColorsFrom +@onready var preset_input := $VBoxContainer/PaletteMetadata/Preset +@onready var name_input := $VBoxContainer/PaletteMetadata/Name +@onready var comment_input := $VBoxContainer/PaletteMetadata/Comment +@onready var width_input := $VBoxContainer/PaletteMetadata/Width +@onready var height_input := $VBoxContainer/PaletteMetadata/Height +@onready var alpha_colors_input := $VBoxContainer/ColorsSettings/AddAlphaColors +@onready var get_colors_from_input := $VBoxContainer/ColorsSettings/GetColorsFrom/GetColorsFrom -onready var colors_settings := $VBoxContainer/ColorsSettings -onready var already_exists_warning := $VBoxContainer/AlreadyExistsWarning -onready var enter_name_warning := $VBoxContainer/EnterNameWarning +@onready var colors_settings := $VBoxContainer/ColorsSettings +@onready var already_exists_warning := $VBoxContainer/AlreadyExistsWarning +@onready var enter_name_warning := $VBoxContainer/EnterNameWarning # Opens dialog @@ -51,36 +51,35 @@ func set_default_values() -> void: comment_input.text = "" width_input.value = Palette.DEFAULT_WIDTH height_input.value = Palette.DEFAULT_HEIGHT - alpha_colors_input.pressed = true + alpha_colors_input.button_pressed = true get_colors_from_input.selected = Palettes.GetColorsFrom.CURRENT_FRAME # Shows/hides a warning when palette already exists -func toggle_already_exists_warning(visible: bool) -> void: - already_exists_warning.visible = visible +func toggle_already_exists_warning(to_show: bool) -> void: + already_exists_warning.visible = to_show # Required to resize window to correct size if warning causes content overflow - rect_size = rect_size + size = size func toggle_ok_button_disability(disable: bool) -> void: - get_ok().disabled = disable + get_ok_button().disabled = disable enter_name_warning.visible = disable -func _on_CreatePaletteDialog_popup_hide() -> void: +func _on_CreatePaletteDialog_visibility_changed() -> void: Global.dialog_open(false) func _on_CreatePaletteDialog_confirmed() -> void: - emit_signal( - "saved", + saved.emit( preset_input.selected, name_input.text, comment_input.text, width_input.value, height_input.value, - alpha_colors_input.pressed, + alpha_colors_input.button_pressed, get_colors_from_input.selected ) diff --git a/src/Palette/CreatePaletteDialog.tscn b/src/Palette/CreatePaletteDialog.tscn index b422053f3ef..939718f33de 100644 --- a/src/Palette/CreatePaletteDialog.tscn +++ b/src/Palette/CreatePaletteDialog.tscn @@ -1,184 +1,131 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://68aakj2l6ee1"] -[ext_resource path="res://src/Palette/CreatePaletteDialog.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/Palette/CreatePaletteDialog.gd" id="1"] [node name="CreatePaletteDialog" type="ConfirmationDialog"] -margin_top = 1.0 -margin_right = 300.0 -margin_bottom = 438.0 -window_title = "Create a new palette" -resizable = true -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = -1 anchor_left = 0.000793701 anchor_right = 0.000793701 -margin_left = 7.76189 -margin_top = 8.0 -margin_right = 291.762 -margin_bottom = 401.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 7.76189 +offset_top = 8.0 +offset_right = 291.762 +offset_bottom = 401.0 [node name="PaletteMetadata" type="GridContainer" parent="VBoxContainer"] -margin_right = 284.0 -margin_bottom = 162.0 +layout_mode = 2 columns = 2 -__meta__ = { -"_edit_use_anchors_": false -} [node name="PresetLabel" type="Label" parent="VBoxContainer/PaletteMetadata"] -margin_right = 67.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 0, 24 ) +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 text = "Preset:" -valign = 1 [node name="Preset" type="OptionButton" parent="VBoxContainer/PaletteMetadata"] -margin_left = 71.0 -margin_right = 284.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 0, 24 ) +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 -text = "Empty" -items = [ "Empty", null, false, 0, null, "From Current Palette", null, false, 1, null, "From Current Sprite", null, false, 2, null, "From Current Selection", null, false, 3, null ] +item_count = 4 selected = 0 +popup/item_0/text = "Empty" +popup/item_0/id = 0 +popup/item_1/text = "From Current Palette" +popup/item_1/id = 1 +popup/item_2/text = "From Current Sprite" +popup/item_2/id = 2 +popup/item_3/text = "From Current Selection" +popup/item_3/id = 3 [node name="NameLabel" type="Label" parent="VBoxContainer/PaletteMetadata"] -margin_top = 33.0 -margin_right = 67.0 -margin_bottom = 47.0 -rect_min_size = Vector2( 50, 0 ) +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 text = "Name:" [node name="Name" type="LineEdit" parent="VBoxContainer/PaletteMetadata"] -margin_left = 71.0 -margin_top = 28.0 -margin_right = 284.0 -margin_bottom = 52.0 -rect_min_size = Vector2( 0, 24 ) +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 [node name="CommentLabel" type="Label" parent="VBoxContainer/PaletteMetadata"] -margin_top = 74.0 -margin_right = 67.0 -margin_bottom = 88.0 -rect_min_size = Vector2( 50, 0 ) +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 text = "Comment:" [node name="Comment" type="TextEdit" parent="VBoxContainer/PaletteMetadata"] -margin_left = 71.0 -margin_top = 56.0 -margin_right = 284.0 -margin_bottom = 106.0 -rect_min_size = Vector2( 0, 75 ) +custom_minimum_size = Vector2(0, 75) +layout_mode = 2 size_flags_horizontal = 3 [node name="WidthLabel" type="Label" parent="VBoxContainer/PaletteMetadata"] -margin_top = 115.0 -margin_right = 67.0 -margin_bottom = 129.0 +layout_mode = 2 text = "Width:" [node name="Width" type="SpinBox" parent="VBoxContainer/PaletteMetadata"] -margin_left = 71.0 -margin_top = 110.0 -margin_right = 284.0 -margin_bottom = 134.0 -rect_min_size = Vector2( 0, 24 ) +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 min_value = 1.0 max_value = 64.0 value = 1.0 -align = 2 [node name="HeightLabel" type="Label" parent="VBoxContainer/PaletteMetadata"] -margin_top = 143.0 -margin_right = 67.0 -margin_bottom = 157.0 +layout_mode = 2 text = "Height:" [node name="Height" type="SpinBox" parent="VBoxContainer/PaletteMetadata"] -margin_left = 71.0 -margin_top = 138.0 -margin_right = 284.0 -margin_bottom = 162.0 -rect_min_size = Vector2( 0, 24 ) +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 min_value = 1.0 max_value = 64.0 value = 1.0 -align = 2 [node name="ColorsSettings" type="VBoxContainer" parent="VBoxContainer"] -margin_top = 166.0 -margin_right = 284.0 -margin_bottom = 226.0 +layout_mode = 2 [node name="HSeparator" type="HSeparator" parent="VBoxContainer/ColorsSettings"] -margin_right = 284.0 -margin_bottom = 4.0 +layout_mode = 2 [node name="AddAlphaColors" type="CheckBox" parent="VBoxContainer/ColorsSettings"] -margin_top = 8.0 -margin_right = 284.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 0, 24 ) +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 text = "Create colors with alpha component" [node name="GetColorsFrom" type="HBoxContainer" parent="VBoxContainer/ColorsSettings"] -margin_top = 36.0 -margin_right = 284.0 -margin_bottom = 60.0 -__meta__ = { -"_edit_use_anchors_": false -} +layout_mode = 2 [node name="GetColorsFromLabel" type="Label" parent="VBoxContainer/ColorsSettings/GetColorsFrom"] -margin_top = 5.0 -margin_right = 104.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Get colors from:" [node name="GetColorsFrom" type="OptionButton" parent="VBoxContainer/ColorsSettings/GetColorsFrom"] -margin_left = 108.0 -margin_right = 284.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 0, 24 ) -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 -text = "Current frame" -items = [ "Current frame", null, false, 0, null, "Selected cels", null, false, 1, null, "All frames", null, false, 2, null ] -selected = 0 +mouse_default_cursor_shape = 2 +item_count = 3 +popup/item_0/text = "Current frame" +popup/item_0/id = 0 +popup/item_1/text = "Selected cels" +popup/item_1/id = 1 +popup/item_2/text = "All frames" +popup/item_2/id = 2 [node name="AlreadyExistsWarning" type="Label" parent="VBoxContainer"] -margin_top = 230.0 -margin_right = 284.0 -margin_bottom = 309.0 +layout_mode = 2 size_flags_vertical = 7 -custom_colors/font_color = Color( 1, 0.603922, 0.603922, 1 ) +theme_override_colors/font_color = Color(1, 0.603922, 0.603922, 1) text = "Palette with the same name and path already exists!" -align = 1 -valign = 2 -autowrap = true [node name="EnterNameWarning" type="Label" parent="VBoxContainer"] -margin_top = 313.0 -margin_right = 284.0 -margin_bottom = 393.0 +layout_mode = 2 size_flags_vertical = 7 -custom_colors/font_color = Color( 1, 0.603922, 0.603922, 1 ) +theme_override_colors/font_color = Color(1, 0.603922, 0.603922, 1) text = "Palette name is required!" -align = 1 -valign = 2 -autowrap = true [connection signal="confirmed" from="." to="." method="_on_CreatePaletteDialog_confirmed"] -[connection signal="popup_hide" from="." to="." method="_on_CreatePaletteDialog_popup_hide"] +[connection signal="visibility_changed" from="." to="." method="_on_CreatePaletteDialog_visibility_changed"] [connection signal="item_selected" from="VBoxContainer/PaletteMetadata/Preset" to="." method="_on_Preset_item_selected"] [connection signal="text_changed" from="VBoxContainer/PaletteMetadata/Name" to="." method="_on_Name_text_changed"] diff --git a/src/Palette/EditPaletteDialog.gd b/src/Palette/EditPaletteDialog.gd index 4be95e6049c..110df19b5bb 100644 --- a/src/Palette/EditPaletteDialog.gd +++ b/src/Palette/EditPaletteDialog.gd @@ -12,14 +12,14 @@ var origin_height := 0 var old_name := "" -onready var name_input := $VBoxContainer/PaletteMetadata/Name -onready var comment_input := $VBoxContainer/PaletteMetadata/Comment -onready var width_input := $VBoxContainer/PaletteMetadata/Width -onready var height_input := $VBoxContainer/PaletteMetadata/Height -onready var path_input := $VBoxContainer/PaletteMetadata/Path +@onready var name_input := $VBoxContainer/PaletteMetadata/Name +@onready var comment_input := $VBoxContainer/PaletteMetadata/Comment +@onready var width_input := $VBoxContainer/PaletteMetadata/Width +@onready var height_input := $VBoxContainer/PaletteMetadata/Height +@onready var path_input := $VBoxContainer/PaletteMetadata/Path3D -onready var size_reduced_warning := $VBoxContainer/SizeReducedWarning -onready var already_exists_warning := $VBoxContainer/AlreadyExistsWarning +@onready var size_reduced_warning := $VBoxContainer/SizeReducedWarning +@onready var already_exists_warning := $VBoxContainer/AlreadyExistsWarning func _ready() -> void: @@ -50,43 +50,42 @@ func open(current_palette: Palette) -> void: popup_centered() -# Shows/hides a warning when palette size is being reduced -func toggle_size_reduced_warning(visible: bool) -> void: - size_reduced_warning.visible = visible +## Shows/hides a warning when palette size is being reduced +func toggle_size_reduced_warning(to_show: bool) -> void: + size_reduced_warning.visible = to_show # Required to resize window to correct size if warning causes content overflow - rect_size = rect_size + size = size -# Shows/hides a warning when palette already exists -func toggle_already_exists_warning(visible: bool) -> void: - already_exists_warning.visible = visible +## Shows/hides a warning when palette already exists +func toggle_already_exists_warning(to_show: bool) -> void: + already_exists_warning.visible = to_show # Disable confirm button so user cannot save - get_ok().disabled = visible + get_ok_button().disabled = to_show # Required to resize window to correct size if warning causes content overflow - rect_size = rect_size + size = size -func _on_EditPaletteDialog_popup_hide() -> void: +func _on_EditPaletteDialog_visibility_changed() -> void: Global.dialog_open(false) func _on_EditPaletteDialog_confirmed() -> void: - emit_signal("saved", name_input.text, comment_input.text, width_input.value, height_input.value) + saved.emit(name_input.text, comment_input.text, width_input.value, height_input.value) func _on_EditPaletteDialog_custom_action(action: String) -> void: if action == DELETE_ACTION: hide() - emit_signal("deleted") + deleted.emit(deleted) func _on_size_value_changed(_value): # Toggle resize warning label if palette size was reduced var size_decreased: bool = ( - height_input.value < origin_height - or width_input.value < origin_width + height_input.value < origin_height or width_input.value < origin_width ) toggle_size_reduced_warning(size_decreased) @@ -100,4 +99,4 @@ func _on_Name_text_changed(new_name): # Disable ok button on empty name if new_name == "": - get_ok().disabled = true + get_ok_button().disabled = true diff --git a/src/Palette/EditPaletteDialog.tscn b/src/Palette/EditPaletteDialog.tscn index a2574460b4f..76864a17097 100644 --- a/src/Palette/EditPaletteDialog.tscn +++ b/src/Palette/EditPaletteDialog.tscn @@ -1,146 +1,89 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://c0p84w7umxwt1"] -[ext_resource path="res://src/Palette/EditPaletteDialog.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/Palette/EditPaletteDialog.gd" id="1"] [node name="EditPaletteDialog" type="ConfirmationDialog"] -margin_right = 409.0 -margin_bottom = 535.0 -window_title = "Edit Palette" -resizable = true -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -36.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -36.0 [node name="PaletteMetadata" type="GridContainer" parent="VBoxContainer"] -margin_right = 393.0 -margin_bottom = 188.0 +layout_mode = 2 columns = 2 -__meta__ = { -"_edit_use_anchors_": false -} [node name="NameLabel" type="Label" parent="VBoxContainer/PaletteMetadata"] -margin_top = 5.0 -margin_right = 67.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 50, 0 ) +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 text = "Name:" [node name="Name" type="LineEdit" parent="VBoxContainer/PaletteMetadata"] -margin_left = 71.0 -margin_right = 393.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 0, 24 ) +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 [node name="CommentLabel" type="Label" parent="VBoxContainer/PaletteMetadata"] -margin_top = 46.0 -margin_right = 67.0 -margin_bottom = 60.0 -rect_min_size = Vector2( 50, 0 ) +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 text = "Comment:" [node name="Comment" type="TextEdit" parent="VBoxContainer/PaletteMetadata"] -margin_left = 71.0 -margin_top = 28.0 -margin_right = 393.0 -margin_bottom = 78.0 -rect_min_size = Vector2( 0, 75 ) +custom_minimum_size = Vector2(0, 75) +layout_mode = 2 size_flags_horizontal = 3 [node name="WidthLabel" type="Label" parent="VBoxContainer/PaletteMetadata"] -margin_top = 87.0 -margin_right = 67.0 -margin_bottom = 101.0 +layout_mode = 2 text = "Width:" [node name="Width" type="SpinBox" parent="VBoxContainer/PaletteMetadata"] -margin_left = 71.0 -margin_top = 82.0 -margin_right = 393.0 -margin_bottom = 106.0 -rect_min_size = Vector2( 0, 24 ) +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 min_value = 1.0 max_value = 64.0 value = 1.0 -align = 2 [node name="HeightLabel" type="Label" parent="VBoxContainer/PaletteMetadata"] -margin_top = 115.0 -margin_right = 67.0 -margin_bottom = 129.0 +layout_mode = 2 text = "Height:" [node name="Height" type="SpinBox" parent="VBoxContainer/PaletteMetadata"] -margin_left = 71.0 -margin_top = 110.0 -margin_right = 393.0 -margin_bottom = 134.0 -rect_min_size = Vector2( 0, 24 ) +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 min_value = 1.0 max_value = 64.0 value = 1.0 -align = 2 [node name="PathLabel" type="Label" parent="VBoxContainer/PaletteMetadata"] -margin_top = 156.0 -margin_right = 67.0 -margin_bottom = 170.0 -text = "Path:" - -[node name="Path" type="TextEdit" parent="VBoxContainer/PaletteMetadata"] -margin_left = 71.0 -margin_top = 138.0 -margin_right = 393.0 -margin_bottom = 188.0 -rect_min_size = Vector2( 0, 50 ) +layout_mode = 2 +text = "Path3D:" + +[node name="Path3D" type="TextEdit" parent="VBoxContainer/PaletteMetadata"] +custom_minimum_size = Vector2(0, 50) +layout_mode = 2 size_flags_horizontal = 3 -readonly = true -wrap_enabled = true [node name="SizeReducedWarning" type="Label" parent="VBoxContainer"] -margin_top = 192.0 -margin_right = 393.0 -margin_bottom = 223.0 -custom_colors/font_color = Color( 1, 0.603922, 0.603922, 1 ) +layout_mode = 2 +theme_override_colors/font_color = Color(1, 0.603922, 0.603922, 1) text = "Reducing palette size will reset positions of colors. Colors that don't fit in new palette size will be lost!" -align = 1 -valign = 2 -autowrap = true -__meta__ = { -"_edit_use_anchors_": false -} [node name="AlreadyExistsWarning" type="Label" parent="VBoxContainer"] -margin_top = 227.0 -margin_right = 393.0 -margin_bottom = 241.0 -custom_colors/font_color = Color( 1, 0.603922, 0.603922, 1 ) +layout_mode = 2 +theme_override_colors/font_color = Color(1, 0.603922, 0.603922, 1) text = "Palette with the same name and path already exists!" -align = 1 -valign = 1 -autowrap = true -__meta__ = { -"_edit_use_anchors_": false -} [connection signal="confirmed" from="." to="." method="_on_EditPaletteDialog_confirmed"] [connection signal="custom_action" from="." to="." method="_on_EditPaletteDialog_custom_action"] -[connection signal="popup_hide" from="." to="." method="_on_EditPaletteDialog_popup_hide"] +[connection signal="visibility_changed" from="." to="." method="_on_EditPaletteDialog_visibility_changed"] [connection signal="text_changed" from="VBoxContainer/PaletteMetadata/Name" to="." method="_on_Name_text_changed"] [connection signal="value_changed" from="VBoxContainer/PaletteMetadata/Width" to="." method="_on_size_value_changed"] [connection signal="value_changed" from="VBoxContainer/PaletteMetadata/Height" to="." method="_on_size_value_changed"] diff --git a/src/Palette/Palette.gd b/src/Palette/Palette.gd index 389ce6dcec8..f2f9d7948c3 100644 --- a/src/Palette/Palette.gd +++ b/src/Palette/Palette.gd @@ -1,22 +1,22 @@ class_name Palette extends Resource -const DEFAULT_WIDTH = 8 -const DEFAULT_HEIGHT = 8 +const DEFAULT_WIDTH := 8 +const DEFAULT_HEIGHT := 8 # Metadata -export var name: String = "Custom Palette" -export var comment: String = "" +@export var name := "Custom Palette" +@export var comment := "" # Grid size -export var width := DEFAULT_WIDTH -export var height := DEFAULT_HEIGHT +@export var width := DEFAULT_WIDTH +@export var height := DEFAULT_HEIGHT -# Sparse colors dictionary - actual color position in the palette is determined by its index -export var colors: Dictionary = {} +## Sparse colors dictionary - actual color position in the palette is determined by its index +@export var colors := {} -# How many colors fit in palette grid -export var colors_max := 0 +## How many colors fit in palette grid +@export var colors_max := 0 func _init( @@ -54,8 +54,8 @@ func edit(new_name: String, new_width: int, new_height: int, new_comment: String reindex_colors_on_width_increase(old_width) -# Iterates all colors from lowest index and reindexes them so they start at zero index -# Remove trailing removes all colors that are over colors_max limit and thus don't fit into grid +## Iterates all colors from lowest index and reindexes them so they start at zero index +## Remove trailing removes all colors that are over colors_max limit and thus don't fit into grid func reindex_colors_on_size_reduce(remove_trailing: bool) -> void: var sorted_colors_indexes = colors.keys() sorted_colors_indexes.sort() @@ -75,8 +75,8 @@ func reindex_colors_on_size_reduce(remove_trailing: bool) -> void: new_index += 1 -# Adds difference of old and new width to color indexes -# so they remain on the same position as before resize +## Adds difference of old and new width to color indexes +## so they remain on the same position as before resize func reindex_colors_on_width_increase(old_width: int) -> void: var sorted_colors_indexes = colors.keys() sorted_colors_indexes.sort() @@ -89,7 +89,7 @@ func reindex_colors_on_width_increase(old_width: int) -> void: colors = new_colors -# Adds new color to the first empty swatch +## Adds new color to the first empty swatch func add_color(new_color: Color, start_index: int = 0) -> void: if start_index >= colors_max: return @@ -105,7 +105,7 @@ func add_color(new_color: Color, start_index: int = 0) -> void: break -# Returns color at index or null if no color exists +## Returns color at index or null if no color exists func get_color(index: int): var palette_color = colors.get(index) if palette_color != null: @@ -113,19 +113,19 @@ func get_color(index: int): return null -# Changes color data +## Changes color data func set_color(index: int, new_color: Color) -> void: if self.colors.has(index): self.colors[index].color = new_color -# Removes a color at the specified index +## Removes a color at the specified index func remove_color(index: int) -> void: colors.erase(index) -# Inserts a color to the specified index -# If index is already occupied move the original color to right +## Inserts a color to the specified index +## If index is already occupied move the original color to right func insert_color(index: int, new_color: Color) -> void: var c := PaletteColor.new(new_color, index) # If insert happens on non empty swatch recursively move the original color @@ -135,7 +135,7 @@ func insert_color(index: int, new_color: Color) -> void: colors[index] = c -# Recursive function that moves every color to right until one of them is moved to empty swatch +## Recursive function that moves every color to right until one of them is moved to empty swatch func move_right(index: int) -> void: # Moving colors to right would overflow the size of the palette # so increase its height automatically @@ -150,7 +150,7 @@ func move_right(index: int) -> void: colors[index + 1] = colors.get(index) -# Swaps two colors +## Swaps two colors func swap_colors(from_index: int, to_index: int) -> void: var from_color = colors.get(from_index) var to_color = colors.get(to_index) @@ -170,7 +170,7 @@ func swap_colors(from_index: int, to_index: int) -> void: colors[from_index].index = from_index -# Copies color +## Copies color func copy_colors(from_index: int, to_index: int) -> void: # Only allow copy of existing colors if colors.has(from_index): @@ -178,27 +178,27 @@ func copy_colors(from_index: int, to_index: int) -> void: colors[to_index].index = to_index -# True if all swatches are occupied +## True if all swatches are occupied func is_full() -> bool: return self.colors.size() >= self.colors_max -# True if palette has no colors +## True if palette has no colors func is_empty() -> bool: return self.colors.size() == 0 -func has_color(color: Color) -> bool: +func has_theme_color(color: Color) -> bool: for palette_color in colors.values(): if palette_color.color == color: return true return false -# Sets name that is used to save the palette to disk +## Sets name that is used to save the palette to disk func set_resource_name(new_resource_name: String) -> void: # Store palette path name only with valid path characters - resource_name = strip_unvalid_characters(new_resource_name) + resource_name = Palette.strip_unvalid_characters(new_resource_name) static func strip_unvalid_characters(string_to_strip: String) -> String: diff --git a/src/Palette/PaletteColor.gd b/src/Palette/PaletteColor.gd index 19c5134c966..5bf6191f516 100644 --- a/src/Palette/PaletteColor.gd +++ b/src/Palette/PaletteColor.gd @@ -3,10 +3,10 @@ extends Resource const UNSET_INDEX := -1 -export var color: Color = Color.transparent -export var index := UNSET_INDEX +@export var color: Color = Color.TRANSPARENT +@export var index := UNSET_INDEX -func _init(init_color: Color = Color.black, init_index: int = UNSET_INDEX) -> void: +func _init(init_color: Color = Color.BLACK, init_index: int = UNSET_INDEX) -> void: color = init_color index = init_index diff --git a/src/Palette/PaletteGrid.gd b/src/Palette/PaletteGrid.gd index 1b46baf66c9..46cff51e8e7 100644 --- a/src/Palette/PaletteGrid.gd +++ b/src/Palette/PaletteGrid.gd @@ -5,13 +5,13 @@ signal swatch_pressed(mouse_button, index) signal swatch_double_clicked(mouse_button, index, position) signal swatch_dropped(source_index, target_index) -const PaletteSwatchScene := preload("res://src/Palette/PaletteSwatch.tscn") -const DEFAULT_SWATCH_SIZE = Vector2(26, 26) -const MIN_SWATCH_SIZE = Vector2(8, 8) -const MAX_SWATCH_SIZE = Vector2(64, 64) +const PALETTE_SWATCH_SCENE := preload("res://src/Palette/PaletteSwatch.tscn") +const DEFAULT_SWATCH_SIZE := Vector2(26, 26) +const MIN_SWATCH_SIZE := Vector2(8, 8) +const MAX_SWATCH_SIZE := Vector2(64, 64) -var swatches := [] # PaletteSwatch -var current_palette = null +var swatches: Array[PaletteSwatch] = [] +var current_palette: Palette = null var grid_window_origin := Vector2.ZERO var grid_size := Vector2.ZERO var swatch_size := DEFAULT_SWATCH_SIZE @@ -35,18 +35,18 @@ func setup_swatches() -> void: columns = 1.0 if grid_size.x == 0.0 else grid_size.x if grid_size.x * grid_size.y > swatches.size(): for i in range(swatches.size(), grid_size.x * grid_size.y): - var swatch: PaletteSwatch = PaletteSwatchScene.instance() + var swatch := PALETTE_SWATCH_SCENE.instantiate() as PaletteSwatch swatch.index = i init_swatch(swatch) - swatch.connect("pressed", self, "_on_PaletteSwatch_pressed", [i]) - swatch.connect("double_clicked", self, "_on_PaletteSwatch_double_clicked", [i]) - swatch.connect("dropped", self, "_on_PaletteSwatch_dropped") + swatch.pressed.connect(_on_PaletteSwatch_pressed.bind(i)) + swatch.double_clicked.connect(_on_PaletteSwatch_double_clicked.bind(i)) + swatch.dropped.connect(_on_PaletteSwatch_dropped) add_child(swatch) swatches.push_back(swatch) else: - var diff = swatches.size() - grid_size.x * grid_size.y + var diff := swatches.size() - grid_size.x * grid_size.y for _i in range(0, diff): - var swatch = swatches.pop_back() + var swatch: PaletteSwatch = swatches.pop_back() remove_child(swatch) swatch.queue_free() @@ -65,8 +65,8 @@ func init_swatch(swatch: PaletteSwatch) -> void: func draw_palette() -> void: for j in range(grid_size.y): for i in range(grid_size.x): - var grid_index: int = i + grid_size.x * j - var index: int = convert_grid_index_to_palette_index(grid_index) + var grid_index := i + grid_size.x * j + var index := convert_grid_index_to_palette_index(grid_index) var swatch = swatches[grid_index] swatch.show_left_highlight = false swatch.show_right_highlight = false @@ -90,14 +90,14 @@ func find_and_select_color(mouse_button: int, target_color: Color) -> void: if target_color.is_equal_approx(swatches[color_ind].color): select_swatch(mouse_button, color_ind, old_index) match mouse_button: - BUTTON_LEFT: + MOUSE_BUTTON_LEFT: Palettes.left_selected_color = color_ind - BUTTON_RIGHT: + MOUSE_BUTTON_RIGHT: Palettes.right_selected_color = color_ind break -# Displays a left/right highlight over a swatch +## Displays a left/right highlight over a swatch func select_swatch(mouse_button: int, palette_index: int, old_palette_index: int) -> void: var index = convert_palette_index_to_grid_index(palette_index) var old_index = convert_palette_index_to_grid_index(old_palette_index) @@ -125,17 +125,17 @@ func get_swatch_color(palette_index: int) -> Color: var index = convert_palette_index_to_grid_index(palette_index) if index >= 0 and index < swatches.size(): return swatches[index].color - return Color.transparent + return Color.TRANSPARENT -# Used to reload empty swatch color from a theme +## Used to reload empty swatch color from a theme func reset_empty_swatches_color() -> void: for swatch in swatches: if swatch.empty: swatch.empty = true -# Grid index adds grid window origin +## Grid index adds grid window origin func convert_grid_index_to_palette_index(index: int) -> int: return ( int(index / grid_size.x + grid_window_origin.y) * current_palette.width @@ -144,16 +144,22 @@ func convert_grid_index_to_palette_index(index: int) -> int: func convert_palette_index_to_grid_index(palette_index: int) -> int: - var x: int = palette_index % current_palette.width - var y: int = palette_index / current_palette.width + var x := palette_index % current_palette.width + var y := palette_index / current_palette.width return int((x - grid_window_origin.x) + (y - grid_window_origin.y) * grid_size.x) func resize_grid(new_rect_size: Vector2) -> void: - var grid_x: int = new_rect_size.x / (swatch_size.x + get("custom_constants/hseparation")) - var grid_y: int = new_rect_size.y / (swatch_size.y + get("custom_constants/vseparation")) - grid_size.x = min(grid_x, current_palette.width) - grid_size.y = min(grid_y, current_palette.height) + if not is_instance_valid(current_palette): + return + var grid_x: int = ( + new_rect_size.x / (swatch_size.x + get("theme_override_constants/h_separation")) + ) + var grid_y: int = ( + new_rect_size.y / (swatch_size.y + get("theme_override_constants/v_separation")) + ) + grid_size.x = mini(grid_x, current_palette.width) + grid_size.y = mini(grid_y, current_palette.height) setup_swatches() draw_palette() @@ -173,15 +179,15 @@ func change_swatch_size(size_diff: Vector2) -> void: func _on_PaletteSwatch_pressed(mouse_button: int, index: int) -> void: var palette_index = convert_grid_index_to_palette_index(index) - emit_signal("swatch_pressed", mouse_button, palette_index) + swatch_pressed.emit(mouse_button, palette_index) -func _on_PaletteSwatch_double_clicked(mouse_button: int, position: Vector2, index: int) -> void: +func _on_PaletteSwatch_double_clicked(mouse_button: int, pos: Vector2, index: int) -> void: var palette_index = convert_grid_index_to_palette_index(index) - emit_signal("swatch_double_clicked", mouse_button, palette_index, position) + swatch_double_clicked.emit(mouse_button, palette_index, pos) func _on_PaletteSwatch_dropped(source_index: int, target_index: int) -> void: - var palette_source_index = convert_grid_index_to_palette_index(source_index) - var palette_target_index = convert_grid_index_to_palette_index(target_index) - emit_signal("swatch_dropped", palette_source_index, palette_target_index) + var palette_source_index := convert_grid_index_to_palette_index(source_index) + var palette_target_index := convert_grid_index_to_palette_index(target_index) + swatch_dropped.emit(palette_source_index, palette_target_index) diff --git a/src/Palette/PalettePanel.gd b/src/Palette/PalettePanel.gd index 302b7331c2a..97150333c2a 100644 --- a/src/Palette/PalettePanel.gd +++ b/src/Palette/PalettePanel.gd @@ -5,24 +5,24 @@ var palettes_path_id := {} var palettes_id_path := {} var edited_swatch_index := -1 -var edited_swatch_color := Color.transparent +var edited_swatch_color := Color.TRANSPARENT -onready var palette_select := $"%PaletteSelect" -onready var palette_grid := $"%PaletteGrid" -onready var palette_scroll := $"%PaletteScroll" +@onready var palette_select := $"%PaletteSelect" +@onready var palette_grid := $"%PaletteGrid" +@onready var palette_scroll := $"%PaletteScroll" -onready var add_color_button := $"%AddColor" -onready var delete_color_button := $"%DeleteColor" +@onready var add_color_button := $"%AddColor" +@onready var delete_color_button := $"%DeleteColor" -onready var edit_palette_dialog := $"%EditPaletteDialog" -onready var create_palette_dialog := $"%CreatePaletteDialog" +@onready var edit_palette_dialog := $"%EditPaletteDialog" +@onready var create_palette_dialog := $"%CreatePaletteDialog" # Color picker button itself is hidden but its popup is used to edit color swatches -onready var hidden_color_picker := $"%HiddenColorPickerButton" +@onready var hidden_color_picker := $"%HiddenColorPickerButton" as ColorPickerButton func _ready() -> void: - Tools.connect("color_changed", self, "_color_changed") + Tools.color_changed.connect(_color_changed) setup_palettes_selector() redraw_current_palette() @@ -31,7 +31,7 @@ func _ready() -> void: hidden_color_picker.get_picker().presets_visible = false -# Setup palettes selector with available palettes +## Setup palettes selector with available palettes func setup_palettes_selector() -> void: # Clear selector palettes_path_id.clear() @@ -58,28 +58,27 @@ func select_palette(palette_path: String) -> void: palette_scroll.resize_grid() palette_scroll.set_sliders(Palettes.get_current_palette(), palette_grid.grid_window_origin) - var left_selected = Palettes.current_palette_get_selected_color_index(BUTTON_LEFT) - var right_selected = Palettes.current_palette_get_selected_color_index(BUTTON_RIGHT) - palette_grid.select_swatch(BUTTON_LEFT, left_selected, left_selected) - palette_grid.select_swatch(BUTTON_RIGHT, right_selected, right_selected) + var left_selected := Palettes.current_palette_get_selected_color_index(MOUSE_BUTTON_LEFT) + var right_selected := Palettes.current_palette_get_selected_color_index(MOUSE_BUTTON_RIGHT) + palette_grid.select_swatch(MOUSE_BUTTON_LEFT, left_selected, left_selected) + palette_grid.select_swatch(MOUSE_BUTTON_RIGHT, right_selected, right_selected) toggle_add_delete_buttons() -# Has to be called on every Pixelorama theme change +## Has to be called on every Pixelorama theme change func reset_empty_palette_swatches_color() -> void: palette_grid.reset_empty_swatches_color() func redraw_current_palette() -> void: # Select and display current palette - var current_palette = Palettes.get_current_palette() + var current_palette := Palettes.get_current_palette() if current_palette: select_palette(current_palette.resource_path) add_color_button.show() delete_color_button.show() else: - palette_grid.clear_swatches() add_color_button.hide() delete_color_button.hide() @@ -114,7 +113,9 @@ func _on_AddColor_gui_input(event: InputEvent) -> void: if ( event is InputEventMouseButton and event.pressed - and (event.button_index == BUTTON_LEFT or event.button_index == BUTTON_RIGHT) + and ( + event.button_index == MOUSE_BUTTON_LEFT or event.button_index == MOUSE_BUTTON_RIGHT + ) ): # Gets the grid index that corresponds to the top left of current grid window # Color will be added at the start of the currently scrolled part of palette @@ -140,40 +141,44 @@ func _on_DeleteColor_gui_input(event: InputEvent) -> void: func _on_CreatePaletteDialog_saved( preset: int, - name: String, + palette_name: String, comment: String, width: int, height: int, add_alpha_colors: bool, colors_from: int ) -> void: - Palettes.create_new_palette(preset, name, comment, width, height, add_alpha_colors, colors_from) + Palettes.create_new_palette( + preset, palette_name, comment, width, height, add_alpha_colors, colors_from + ) setup_palettes_selector() redraw_current_palette() -func _on_EditPaletteDialog_saved(name: String, comment: String, width: int, height: int) -> void: - Palettes.current_palette_edit(name, comment, width, height) +func _on_EditPaletteDialog_saved( + palette_name: String, comment: String, width: int, height: int +) -> void: + Palettes.current_palette_edit(palette_name, comment, width, height) setup_palettes_selector() redraw_current_palette() func _on_PaletteGrid_swatch_double_clicked(_mb: int, index: int, click_position: Vector2) -> void: - var color = Palettes.current_palette_get_color(index) + var color := Palettes.current_palette_get_color(index) edited_swatch_index = index hidden_color_picker.color = color - hidden_color_picker.emit_signal("color_changed", hidden_color_picker.color) + hidden_color_picker.color_changed.emit(hidden_color_picker.color) # Open color picker popup with its right bottom corner next to swatch - var popup = hidden_color_picker.get_popup() - popup.rect_position = click_position - popup.rect_size + var popup := hidden_color_picker.get_popup() + popup.position = click_position - Vector2(popup.size) popup.popup() func _on_PaletteGrid_swatch_dropped(source_index: int, target_index: int) -> void: if Input.is_key_pressed(KEY_SHIFT): Palettes.current_palette_insert_color(source_index, target_index) - elif Input.is_key_pressed(KEY_CONTROL): + elif Input.is_key_pressed(KEY_CTRL): Palettes.current_palette_copy_colors(source_index, target_index) else: Palettes.current_palette_swap_colors(source_index, target_index) @@ -183,7 +188,7 @@ func _on_PaletteGrid_swatch_dropped(source_index: int, target_index: int) -> voi func _on_PaletteGrid_swatch_pressed(mouse_button: int, index: int) -> void: # Gets previously selected color index - var old_index = Palettes.current_palette_get_selected_color_index(mouse_button) + var old_index := Palettes.current_palette_get_selected_color_index(mouse_button) Palettes.current_palette_select_color(mouse_button, index) palette_grid.select_swatch(mouse_button, index, old_index) @@ -193,10 +198,16 @@ func _on_ColorPicker_color_changed(color: Color) -> void: edited_swatch_color = color palette_grid.set_swatch_color(edited_swatch_index, color) - if edited_swatch_index == Palettes.current_palette_get_selected_color_index(BUTTON_LEFT): - Tools.assign_color(color, BUTTON_LEFT) - if edited_swatch_index == Palettes.current_palette_get_selected_color_index(BUTTON_RIGHT): - Tools.assign_color(color, BUTTON_RIGHT) + if ( + edited_swatch_index + == Palettes.current_palette_get_selected_color_index(MOUSE_BUTTON_LEFT) + ): + Tools.assign_color(color, MOUSE_BUTTON_LEFT) + if ( + edited_swatch_index + == Palettes.current_palette_get_selected_color_index(MOUSE_BUTTON_RIGHT) + ): + Tools.assign_color(color, MOUSE_BUTTON_RIGHT) func _on_HiddenColorPickerButton_popup_closed(): @@ -213,12 +224,12 @@ func _on_EditPaletteDialog_deleted() -> void: func _color_changed(_color: Color, button: int) -> void: if hidden_color_picker.get_popup().visible == false and Palettes.get_current_palette(): # Unselect swatches when tools color is changed - var swatch_to_unselect = -1 + var swatch_to_unselect := -1 - if button == BUTTON_LEFT: + if button == MOUSE_BUTTON_LEFT: swatch_to_unselect = Palettes.left_selected_color Palettes.left_selected_color = -1 - elif button == BUTTON_RIGHT: + elif button == MOUSE_BUTTON_RIGHT: swatch_to_unselect = Palettes.right_selected_color Palettes.right_selected_color = -1 diff --git a/src/Palette/PalettePanel.tscn b/src/Palette/PalettePanel.tscn index 8e8bed3b5b8..04f37f2c2cd 100644 --- a/src/Palette/PalettePanel.tscn +++ b/src/Palette/PalettePanel.tscn @@ -1,211 +1,178 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=12 format=3 uid="uid://wplk62pbgih4"] -[ext_resource path="res://src/Palette/EditPaletteDialog.tscn" type="PackedScene" id=1] -[ext_resource path="res://assets/graphics/palette/edit.png" type="Texture" id=2] -[ext_resource path="res://assets/graphics/palette/add.png" type="Texture" id=3] -[ext_resource path="res://src/Palette/CreatePaletteDialog.tscn" type="PackedScene" id=4] -[ext_resource path="res://src/Palette/PaletteGrid.gd" type="Script" id=5] -[ext_resource path="res://src/Palette/PaletteScroll.gd" type="Script" id=6] -[ext_resource path="res://src/Palette/PalettePanel.gd" type="Script" id=8] +[ext_resource type="PackedScene" uid="uid://c0p84w7umxwt1" path="res://src/Palette/EditPaletteDialog.tscn" id="1"] +[ext_resource type="Texture2D" uid="uid://biyn51upnlxle" path="res://assets/graphics/palette/edit.png" id="2"] +[ext_resource type="Texture2D" uid="uid://b7ydn1tt37rcl" path="res://assets/graphics/palette/add.png" id="3"] +[ext_resource type="PackedScene" uid="uid://68aakj2l6ee1" path="res://src/Palette/CreatePaletteDialog.tscn" id="4"] +[ext_resource type="Script" path="res://src/Palette/PaletteGrid.gd" id="5"] +[ext_resource type="Script" path="res://src/Palette/PaletteScroll.gd" id="6"] +[ext_resource type="Script" path="res://src/Palette/PalettePanel.gd" id="8"] + +[sub_resource type="InputEventAction" id="InputEventAction_4n3yg"] +action = &"edit_palette" + +[sub_resource type="Shortcut" id="Shortcut_jl8vt"] +events = [SubResource("InputEventAction_4n3yg")] + +[sub_resource type="InputEventAction" id="InputEventAction_mdfjt"] +action = &"new_palette" + +[sub_resource type="Shortcut" id="Shortcut_6f4gc"] +events = [SubResource("InputEventAction_mdfjt")] [node name="PalettePanel" type="PanelContainer"] size_flags_horizontal = 3 size_flags_vertical = 3 -script = ExtResource( 8 ) +script = ExtResource("8") [node name="PaletteVBoxContainer" type="VBoxContainer" parent="."] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 159.0 -margin_bottom = 93.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="PaletteButtons" type="HBoxContainer" parent="PaletteVBoxContainer"] -margin_right = 152.0 -margin_bottom = 22.0 +layout_mode = 2 [node name="PaletteSelect" type="OptionButton" parent="PaletteVBoxContainer/PaletteButtons"] unique_name_in_owner = true -margin_right = 100.0 -margin_bottom = 22.0 -grow_horizontal = 0 -rect_min_size = Vector2( 100, 0 ) -hint_tooltip = "Choose a palette" -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Choose a palette" +mouse_default_cursor_shape = 2 clip_text = true [node name="EditPalette" type="Button" parent="PaletteVBoxContainer/PaletteButtons" groups=["UIButtons"]] -margin_left = 104.0 -margin_right = 126.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Edit currently selected palette" +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 +tooltip_text = "Edit currently selected palette" mouse_default_cursor_shape = 2 -__meta__ = { -"_edit_group_": true -} +shortcut = SubResource("Shortcut_jl8vt") [node name="TextureRect" type="TextureRect" parent="PaletteVBoxContainer/PaletteButtons/EditPalette"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 2 ) +texture = ExtResource("2") [node name="AddPalette" type="Button" parent="PaletteVBoxContainer/PaletteButtons" groups=["UIButtons"]] -margin_left = 130.0 -margin_right = 152.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Create a new palette" +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 +tooltip_text = "Create a new palette" mouse_default_cursor_shape = 2 -__meta__ = { -"_edit_group_": true -} +shortcut = SubResource("Shortcut_6f4gc") [node name="TextureRect" type="TextureRect" parent="PaletteVBoxContainer/PaletteButtons/AddPalette"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 3 ) +texture = ExtResource("3") [node name="HSeparator" type="HSeparator" parent="PaletteVBoxContainer"] -margin_top = 26.0 -margin_right = 152.0 -margin_bottom = 30.0 +layout_mode = 2 [node name="SwatchesContainer" type="HBoxContainer" parent="PaletteVBoxContainer"] -margin_top = 34.0 -margin_right = 152.0 -margin_bottom = 86.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="ColorButtons" type="VBoxContainer" parent="PaletteVBoxContainer/SwatchesContainer"] -margin_right = 24.0 -margin_bottom = 52.0 +layout_mode = 2 [node name="AddColor" type="Button" parent="PaletteVBoxContainer/SwatchesContainer/ColorButtons"] unique_name_in_owner = true -margin_right = 24.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 24, 24 ) -hint_tooltip = "Add a new color" +custom_minimum_size = Vector2(24, 24) +layout_mode = 2 +tooltip_text = "Add a new color" mouse_default_cursor_shape = 2 text = "+" [node name="DeleteColor" type="Button" parent="PaletteVBoxContainer/SwatchesContainer/ColorButtons"] unique_name_in_owner = true -margin_top = 28.0 -margin_right = 24.0 -margin_bottom = 52.0 -rect_min_size = Vector2( 24, 24 ) -hint_tooltip = "Remove a selected color" +custom_minimum_size = Vector2(24, 24) +layout_mode = 2 +tooltip_text = "Remove a selected color" mouse_default_cursor_shape = 2 text = "-" [node name="PaletteScroll" type="VBoxContainer" parent="PaletteVBoxContainer/SwatchesContainer"] unique_name_in_owner = true -margin_left = 28.0 -margin_right = 152.0 -margin_bottom = 52.0 +layout_mode = 2 size_flags_horizontal = 3 -script = ExtResource( 6 ) +script = ExtResource("6") [node name="HBoxContainer" type="HBoxContainer" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll"] -margin_right = 124.0 -margin_bottom = 52.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 alignment = 1 [node name="VBoxContainer" type="VBoxContainer" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer"] -margin_right = 120.0 -margin_bottom = 52.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 alignment = 1 [node name="ScrollContainer" type="ScrollContainer" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer/VBoxContainer"] unique_name_in_owner = true -margin_right = 120.0 -margin_bottom = 52.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="PaletteGrid" type="GridContainer" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer/VBoxContainer/ScrollContainer"] unique_name_in_owner = true -margin_right = 120.0 -margin_bottom = 52.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -custom_constants/vseparation = 3 -custom_constants/hseparation = 3 -script = ExtResource( 5 ) +theme_override_constants/h_separation = 3 +theme_override_constants/v_separation = 3 +script = ExtResource("5") [node name="HScrollBar" type="HScrollBar" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer/VBoxContainer"] unique_name_in_owner = true visible = false -margin_left = -132.0 -margin_top = 4.0 -margin_right = 118.0 -margin_bottom = 16.0 +layout_mode = 2 step = 1.0 page = 8.0 custom_step = 1.0 [node name="MarginContainer" type="MarginContainer" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer"] -margin_left = 124.0 -margin_right = 124.0 -margin_bottom = 52.0 -custom_constants/margin_bottom = 15 +layout_mode = 2 +theme_override_constants/margin_bottom = 15 [node name="VScrollBar" type="VScrollBar" parent="PaletteVBoxContainer/SwatchesContainer/PaletteScroll/HBoxContainer/MarginContainer"] unique_name_in_owner = true visible = false -margin_right = 12.0 -margin_bottom = 37.0 +layout_mode = 2 step = 1.0 page = 8.0 custom_step = 1.0 -[node name="EditPaletteDialog" parent="." instance=ExtResource( 1 )] +[node name="EditPaletteDialog" parent="." instance=ExtResource("1")] unique_name_in_owner = true -margin_left = 7.0 -margin_top = 7.0 -margin_right = 317.0 -margin_bottom = 442.0 -rect_min_size = Vector2( 250, 87.5 ) -[node name="CreatePaletteDialog" parent="." instance=ExtResource( 4 )] +[node name="CreatePaletteDialog" parent="." instance=ExtResource("4")] unique_name_in_owner = true -margin_left = 7.0 -margin_top = 7.0 -margin_right = 317.0 -margin_bottom = 312.0 -rect_min_size = Vector2( 250, 87.5 ) [node name="HiddenColorPickerButton" type="ColorPickerButton" parent="."] unique_name_in_owner = true visible = false -margin_left = 7.0 -margin_top = 7.0 -margin_right = 311.0 -margin_bottom = 111.0 +layout_mode = 2 [connection signal="item_selected" from="PaletteVBoxContainer/PaletteButtons/PaletteSelect" to="." method="_on_PaletteSelect_item_selected"] [connection signal="pressed" from="PaletteVBoxContainer/PaletteButtons/EditPalette" to="." method="_on_EditPalette_pressed"] diff --git a/src/Palette/PaletteScroll.gd b/src/Palette/PaletteScroll.gd index 1006a6d9719..6f763a15296 100644 --- a/src/Palette/PaletteScroll.gd +++ b/src/Palette/PaletteScroll.gd @@ -4,26 +4,28 @@ var scroll := Vector2.ZERO var drag_started := false var drag_start_position := Vector2.ZERO -onready var h_slider := $"%HScrollBar" -onready var v_slider := $"%VScrollBar" -onready var palette_grid := $"%PaletteGrid" -onready var scroll_container := $"%ScrollContainer" +@onready var h_slider := %HScrollBar +@onready var v_slider := %VScrollBar +@onready var palette_grid := %PaletteGrid +@onready var scroll_container := %ScrollContainer func _ready() -> void: # Hide default scollbars - scroll_container.get_h_scrollbar().rect_scale = Vector2.ZERO - scroll_container.get_v_scrollbar().rect_scale = Vector2.ZERO + scroll_container.get_h_scroll_bar().scale = Vector2.ZERO + scroll_container.get_v_scroll_bar().scale = Vector2.ZERO func _input(event) -> void: # Stops dragging even if middle mouse is released outside of this container if event is InputEventMouseButton: - if event.button_index == BUTTON_MIDDLE and not event.pressed: + if event.button_index == MOUSE_BUTTON_MIDDLE and not event.pressed: drag_started = false func set_sliders(palette: Palette, origin: Vector2) -> void: + if not is_instance_valid(palette): + return h_slider.value = origin.x h_slider.max_value = palette.width h_slider.page = palette_grid.grid_size.x @@ -40,7 +42,7 @@ func reset_sliders() -> void: func resize_grid() -> void: - palette_grid.resize_grid(rect_size - Vector2(v_slider.rect_size.x, h_slider.rect_size.y)) + palette_grid.resize_grid(size - Vector2(v_slider.size.x, h_slider.size.y)) func scroll_grid() -> void: @@ -59,12 +61,11 @@ func _on_HSlider_value_changed(value: int) -> void: func _on_PaletteGrid_gui_input(event) -> void: if event is InputEventMouseButton: - if event.button_index == BUTTON_MIDDLE and event.pressed: + if event.button_index == MOUSE_BUTTON_MIDDLE and event.pressed: drag_started = true # Keeps position where the dragging started drag_start_position = ( - event.position - + Vector2(h_slider.value, v_slider.value) * palette_grid.swatch_size + event.position + Vector2(h_slider.value, v_slider.value) * palette_grid.swatch_size ) if event is InputEventMouseMotion and drag_started: @@ -73,22 +74,24 @@ func _on_PaletteGrid_gui_input(event) -> void: func _on_PaletteScroll_resized() -> void: + if not is_instance_valid(palette_grid): + return resize_grid() reset_sliders() func _on_PaletteScroll_gui_input(event) -> void: if event is InputEventMouseButton and event.pressed: - var scroll_vector = Vector2.ZERO - if event.button_index == BUTTON_WHEEL_UP: - if event.control: + var scroll_vector := Vector2.ZERO + if event.button_index == MOUSE_BUTTON_WHEEL_UP: + if event.ctrl_pressed: palette_grid.change_swatch_size(Vector2.ONE) else: - scroll_vector = Vector2.LEFT if event.shift else Vector2.UP - if event.button_index == BUTTON_WHEEL_DOWN: - if event.control: + scroll_vector = Vector2.LEFT if event.shift_pressed else Vector2.UP + if event.button_index == MOUSE_BUTTON_WHEEL_DOWN: + if event.ctrl_pressed: palette_grid.change_swatch_size(-Vector2.ONE) else: - scroll_vector = Vector2.RIGHT if event.shift else Vector2.DOWN + scroll_vector = Vector2.RIGHT if event.shift_pressed else Vector2.DOWN resize_grid() set_sliders(palette_grid.current_palette, palette_grid.grid_window_origin + scroll_vector) diff --git a/src/Palette/PaletteSwatch.gd b/src/Palette/PaletteSwatch.gd index 0742f159515..cca67e645e9 100644 --- a/src/Palette/PaletteSwatch.gd +++ b/src/Palette/PaletteSwatch.gd @@ -10,58 +10,52 @@ const DEFAULT_COLOR := Color(0.0, 0.0, 0.0, 0.0) var index := -1 var show_left_highlight := false var show_right_highlight := false -var empty := true setget set_empty +var empty := true: + set(value): + empty = value + if empty: + mouse_default_cursor_shape = Control.CURSOR_ARROW + color = Global.control.theme.get_stylebox("disabled", "Button").bg_color + else: + mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND -func set_swatch_size(size: Vector2) -> void: - rect_min_size = size - rect_size = size +func set_swatch_size(swatch_size: Vector2) -> void: + custom_minimum_size = swatch_size + size = swatch_size func _draw() -> void: if not empty: # Black border around swatches with a color - draw_rect(Rect2(Vector2.ZERO, rect_size), Color.black, false, 1) + draw_rect(Rect2(Vector2.ZERO, size), Color.BLACK, false, 1) if show_left_highlight: # Display outer border highlight - draw_rect(Rect2(Vector2.ZERO, rect_size), Color.white, false, 1) - draw_rect(Rect2(Vector2.ONE, rect_size - Vector2(2, 2)), Color.black, false, 1) + draw_rect(Rect2(Vector2.ZERO, size), Color.WHITE, false, 1) + draw_rect(Rect2(Vector2.ONE, size - Vector2(2, 2)), Color.BLACK, false, 1) if show_right_highlight: # Display inner border highlight - var margin := rect_size / 4 - draw_rect(Rect2(margin, rect_size - margin * 2), Color.black, false, 1) + var margin := size / 4 + draw_rect(Rect2(margin, size - margin * 2), Color.BLACK, false, 1) draw_rect( - Rect2(margin - Vector2.ONE, rect_size - margin * 2 + Vector2(2, 2)), - Color.white, - false, - 1 + Rect2(margin - Vector2.ONE, size - margin * 2 + Vector2(2, 2)), Color.WHITE, false, 1 ) -# Enables drawing of highlights which indicate selected swatches +## Enables drawing of highlights which indicate selected swatches func show_selected_highlight(new_value: bool, mouse_button: int) -> void: if not empty: match mouse_button: - BUTTON_LEFT: + MOUSE_BUTTON_LEFT: show_left_highlight = new_value - BUTTON_RIGHT: + MOUSE_BUTTON_RIGHT: show_right_highlight = new_value - update() - - -# Empties the swatch and displays disabled color from theme -func set_empty(new_value: bool) -> void: - empty = new_value - if empty: - mouse_default_cursor_shape = Control.CURSOR_ARROW - color = Global.control.theme.get_stylebox("disabled", "Button").bg_color - else: - mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND + queue_redraw() -func get_drag_data(_position): +func _get_drag_data(_position: Vector2): var data = null if not empty: var drag_icon: PaletteSwatch = self.duplicate() @@ -73,17 +67,17 @@ func get_drag_data(_position): return data -func can_drop_data(_position, _data) -> bool: +func _can_drop_data(_position: Vector2, _data) -> bool: return true -func drop_data(_position, data) -> void: - emit_signal("dropped", data.source_index, index) +func _drop_data(_position: Vector2, data) -> void: + dropped.emit(data.source_index, index) func _on_PaletteSlot_gui_input(event: InputEvent) -> void: if event is InputEventMouseButton and event.is_pressed() and not empty: - if event.doubleclick: - emit_signal("double_clicked", event.button_index, get_global_rect().position) + if event.double_click: + double_clicked.emit(event.button_index, get_global_rect().position) else: - emit_signal("pressed", event.button_index) + pressed.emit(event.button_index) diff --git a/src/Palette/PaletteSwatch.tscn b/src/Palette/PaletteSwatch.tscn index f9b922b2079..64486c6f119 100644 --- a/src/Palette/PaletteSwatch.tscn +++ b/src/Palette/PaletteSwatch.tscn @@ -1,79 +1,42 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://src/Palette/PaletteSwatch.gd" type="Script" id=1] - -[sub_resource type="Shader" id=1] -code = "shader_type canvas_item; -render_mode unshaded; - -uniform float size = 10.0; -uniform vec4 color1 : hint_color = vec4(0.7, 0.7, 0.7, 1.0); -uniform vec4 color2 : hint_color = vec4(1.0); -uniform vec2 offset = vec2(0.0); -uniform vec2 scale = vec2(0.0); -uniform vec2 rect_size = vec2(0.0); -uniform bool follow_movement = false; -uniform bool follow_scale = false; - -void fragment() { - vec2 ref_pos = FRAGCOORD.xy; - if (follow_scale) { - if (!follow_movement) - ref_pos /= scale; - else - ref_pos = UV * rect_size; - } - else if (follow_movement) - ref_pos -= mod(offset, size * 2.0); - - vec2 pos = mod(ref_pos, size * 2.0); - bool c1 = any(lessThan(pos, vec2(size))); - bool c2 = any(greaterThanEqual(pos, vec2(size))); - float c = c1 && c2 ? 1.0: 0.0; - COLOR = mix(color1, color2, c); - COLOR.a = 1.0; -} -" - -[sub_resource type="ShaderMaterial" id=2] -shader = SubResource( 1 ) -shader_param/size = 10.0 -shader_param/color1 = Color( 0.878431, 0.878431, 0.878431, 1 ) -shader_param/color2 = Color( 1, 1, 1, 1 ) -shader_param/offset = Vector2( 0, 0 ) -shader_param/scale = Vector2( 0.8, 0.8 ) -shader_param/rect_size = Vector2( 0, 0 ) -shader_param/follow_movement = false -shader_param/follow_scale = true +[gd_scene load_steps=4 format=3 uid="uid://bwrn3rwka2ssa"] + +[ext_resource type="Script" path="res://src/Palette/PaletteSwatch.gd" id="1"] +[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="2_8xme1"] + +[sub_resource type="ShaderMaterial" id="2"] +shader = ExtResource("2_8xme1") +shader_parameter/size = 10.0 +shader_parameter/alpha = 1.0 +shader_parameter/color1 = Color(0.878431, 0.878431, 0.878431, 1) +shader_parameter/color2 = Color(1, 1, 1, 1) +shader_parameter/offset = Vector2(0, 0) +shader_parameter/scale = Vector2(0.8, 0.8) +shader_parameter/rect_size = Vector2(0, 0) +shader_parameter/follow_movement = false +shader_parameter/follow_scale = true [node name="PaletteSwatch" type="ColorRect"] +custom_minimum_size = Vector2(8, 8) +anchors_preset = -1 anchor_left = 2.60711e-05 anchor_top = -2.75612e-05 anchor_right = 2.60711e-05 anchor_bottom = -2.75612e-05 -margin_left = -0.033371 -margin_top = 0.0198441 -margin_right = 25.9666 -margin_bottom = 26.0198 -rect_min_size = Vector2( 8, 8 ) +offset_left = -0.033371 +offset_top = 0.0198441 +offset_right = 25.9666 +offset_bottom = 26.0198 mouse_filter = 1 mouse_default_cursor_shape = 2 -color = Color( 0, 0, 0, 0 ) -script = ExtResource( 1 ) -__meta__ = { -"_edit_lock_": true, -"_edit_use_anchors_": false -} +color = Color(0, 0, 0, 0) +script = ExtResource("1") [node name="TransparentChecker" type="ColorRect" parent="."] show_behind_parent = true -material = SubResource( 2 ) +material = SubResource("2") +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 mouse_filter = 2 -__meta__ = { -"_edit_lock_": true, -"_edit_use_anchors_": false -} [connection signal="gui_input" from="." to="." method="_on_PaletteSlot_gui_input"] diff --git a/src/Preferences/HandleExtensions.gd b/src/Preferences/HandleExtensions.gd index fa88fef1210..00f1b6972bf 100644 --- a/src/Preferences/HandleExtensions.gd +++ b/src/Preferences/HandleExtensions.gd @@ -2,14 +2,14 @@ extends Control const EXTENSIONS_PATH := "user://extensions" -var extensions := {} # Extension name : Extension class +var extensions := {} ## Extension name: Extension class var extension_selected := -1 var damaged_extension: String -onready var extension_list: ItemList = $InstalledExtensions -onready var enable_button: Button = $HBoxContainer/EnableButton -onready var uninstall_button: Button = $HBoxContainer/UninstallButton -onready var extension_parent: Node = Global.control.get_node("Extensions") +@onready var extension_list: ItemList = $InstalledExtensions +@onready var enable_button: Button = $HBoxContainer/EnableButton +@onready var uninstall_button: Button = $HBoxContainer/UninstallButton +@onready var extension_parent: Node = Global.control.get_node("Extensions") class Extension: @@ -40,23 +40,25 @@ class Extension: func _ready() -> void: - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": $HBoxContainer/AddExtensionButton.disabled = true $HBoxContainer/OpenFolderButton.visible = false - var dir := Directory.new() - var file_names := [] # Array of String(s) + var file_names: PackedStringArray = [] + var dir := DirAccess.open("user://") dir.make_dir(EXTENSIONS_PATH) - if dir.open(EXTENSIONS_PATH) == OK: + dir = DirAccess.open(EXTENSIONS_PATH) + if DirAccess.get_open_error() == OK: dir.list_dir_begin() - var file_name = dir.get_next() + var file_name := dir.get_next() while file_name != "": - var ext: String = file_name.to_lower().get_extension() - if !dir.current_is_dir() and ext in ["pck", "zip"]: + var ext := file_name.to_lower().get_extension() + if not dir.current_is_dir() and ext in ["pck", "zip"]: file_names.append(file_name) file_name = dir.get_next() + dir.list_dir_end() - if file_names.empty(): + if file_names.is_empty(): return for file_name in file_names: @@ -64,16 +66,16 @@ func _ready() -> void: func install_extension(path: String) -> void: - var dir := Directory.new() - var file_name: String = path.get_file() - dir.copy(path, EXTENSIONS_PATH.plus_file(file_name)) + var file_name := path.get_file() + var dir := DirAccess.open(path.get_base_dir()) + dir.copy(path, EXTENSIONS_PATH.path_join(file_name)) _add_extension(file_name) func _uninstall_extension(file_name := "", remove_file := true, item := extension_selected) -> void: if remove_file: - var dir := Directory.new() - var err := dir.remove(EXTENSIONS_PATH.plus_file(file_name)) + var dir := DirAccess.open(EXTENSIONS_PATH.path_join(file_name)) + var err := dir.remove(EXTENSIONS_PATH.path_join(file_name)) if err != OK: print(err) return @@ -90,17 +92,17 @@ func _uninstall_extension(file_name := "", remove_file := true, item := extensio func _add_extension(file_name: String) -> void: - var tester_file := File.new() # For testing and deleting damaged extensions - var remover_directory := Directory.new() + var tester_file: FileAccess # For testing and deleting damaged extensions + var remover_directory := DirAccess.open(EXTENSIONS_PATH) # Remove any extension that was proven guilty before this extension is loaded - if tester_file.file_exists(EXTENSIONS_PATH.plus_file("Faulty.txt")): + if remover_directory.file_exists(EXTENSIONS_PATH.path_join("Faulty.txt")): # This code will only run if pixelorama crashed - var faulty_path = EXTENSIONS_PATH.plus_file("Faulty.txt") - tester_file.open(faulty_path, File.READ) + var faulty_path := EXTENSIONS_PATH.path_join("Faulty.txt") + tester_file = FileAccess.open(faulty_path, FileAccess.READ) damaged_extension = tester_file.get_as_text() tester_file.close() - remover_directory.remove(EXTENSIONS_PATH.plus_file(damaged_extension)) - remover_directory.remove(EXTENSIONS_PATH.plus_file("Faulty.txt")) + remover_directory.remove(EXTENSIONS_PATH.path_join(damaged_extension)) + remover_directory.remove(EXTENSIONS_PATH.path_join("Faulty.txt")) # Don't load a deleted extension if damaged_extension == file_name: @@ -109,7 +111,7 @@ func _add_extension(file_name: String) -> void: return # The new (about to load) extension will be considered guilty till it's proven innocent - tester_file.open(EXTENSIONS_PATH.plus_file("Faulty.txt"), File.WRITE) + tester_file = FileAccess.open(EXTENSIONS_PATH.path_join("Faulty.txt"), FileAccess.WRITE) tester_file.store_string(file_name) # Guilty till proven innocent ;) tester_file.close() @@ -124,56 +126,59 @@ func _add_extension(file_name: String) -> void: return _uninstall_extension(file_name, false, item) # Wait two frames so the previous nodes can get freed - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + await get_tree().process_frame + await get_tree().process_frame - var file_name_no_ext: String = file_name.get_basename() - var file_path: String = EXTENSIONS_PATH.plus_file(file_name) + var file_name_no_ext := file_name.get_basename() + var file_path := EXTENSIONS_PATH.path_join(file_name) var success := ProjectSettings.load_resource_pack(file_path) if !success: print("Failed loading resource pack.") - var dir := Directory.new() + var dir := DirAccess.open(EXTENSIONS_PATH) dir.remove(file_path) return - var extension_path: String = "res://src/Extensions/%s/" % file_name_no_ext - var extension_config_file_path: String = extension_path.plus_file("extension.json") - var extension_config_file := File.new() - var err := extension_config_file.open(extension_config_file_path, File.READ) + var extension_path := "res://src/Extensions/%s/" % file_name_no_ext + var extension_config_file_path := extension_path.path_join("extension.json") + var extension_config_file := FileAccess.open(extension_config_file_path, FileAccess.READ) + var err := FileAccess.get_open_error() if err != OK: - print("Error loading config file: ", err, ErrorManager.parse(err, " (", ")")) + print("Error loading config file: ", err, " (", error_string(err), ")") extension_config_file.close() return - var extension_json = parse_json(extension_config_file.get_as_text()) + var test_json_conv := JSON.new() + test_json_conv.parse(extension_config_file.get_as_text()) + var extension_json = test_json_conv.get_data() extension_config_file.close() - if !extension_json: + if not extension_json: print("No JSON data found.") return if extension_json.has("supported_api_versions"): var supported_api_versions = extension_json["supported_api_versions"] if typeof(supported_api_versions) == TYPE_ARRAY: - if !ExtensionsApi.get_api_version() in supported_api_versions: - var err_text = ( + supported_api_versions = PackedInt32Array(supported_api_versions) + if not ExtensionsApi.get_api_version() in supported_api_versions: + var err_text := ( "The extension %s will not work on this version of Pixelorama \n" % file_name_no_ext ) - var required_text = "Requires Api : %s" % str(supported_api_versions) + var required_text := "Requires API version: %s" % str(supported_api_versions) Global.error_dialog.set_text(str(err_text, required_text)) Global.error_dialog.popup_centered() Global.dialog_open(true) print("Incompatible API") # Don't put it in faulty, (it's merely incompatible) - remover_directory.remove(EXTENSIONS_PATH.plus_file("Faulty.txt")) + remover_directory.remove(EXTENSIONS_PATH.path_join("Faulty.txt")) return var extension := Extension.new() extension.serialize(extension_json) extensions[file_name] = extension extension_list.add_item(extension.display_name) - var item_count: int = extension_list.get_item_count() - 1 + var item_count := extension_list.get_item_count() - 1 extension_list.set_item_tooltip(item_count, extension.description) extension_list.set_item_metadata(item_count, file_name) extension.enabled = Global.config_cache.get_value("extensions", extension.file_name, false) @@ -182,7 +187,7 @@ func _add_extension(file_name: String) -> void: # If an extension doesn't crash pixelorama then it is proven innocent # And we should now delete its "Faulty.txt" file - remover_directory.remove(EXTENSIONS_PATH.plus_file("Faulty.txt")) + remover_directory.remove(EXTENSIONS_PATH.path_join("Faulty.txt")) func _enable_extension(extension: Extension, save_to_config := true) -> void: @@ -196,10 +201,10 @@ func _enable_extension(extension: Extension, save_to_config := true) -> void: if extension.enabled: ExtensionsApi.clear_history(extension.file_name) for node in extension.nodes: - var scene_path: String = extension_path.plus_file(node) + var scene_path: String = extension_path.path_join(node) var extension_scene: PackedScene = load(scene_path) if extension_scene: - var extension_node: Node = extension_scene.instance() + var extension_node: Node = extension_scene.instantiate() extension_parent.add_child(extension_node) extension_node.add_to_group(id) # Keep track of what to remove later else: @@ -228,7 +233,7 @@ func _on_InstalledExtensions_item_selected(index: int) -> void: uninstall_button.disabled = false -func _on_InstalledExtensions_nothing_selected() -> void: +func _on_InstalledExtensions_empty_clicked(_position: Vector2, _button_index: int) -> void: enable_button.disabled = true uninstall_button.disabled = true @@ -256,6 +261,6 @@ func _on_OpenFolderButton_pressed() -> void: OS.shell_open(ProjectSettings.globalize_path(EXTENSIONS_PATH)) -func _on_AddExtensionFileDialog_files_selected(paths: PoolStringArray) -> void: +func _on_AddExtensionFileDialog_files_selected(paths: PackedStringArray) -> void: for path in paths: install_extension(path) diff --git a/src/Preferences/HandleLanguages.gd b/src/Preferences/HandleLanguages.gd index 17249c921d3..1bf34f3bc99 100644 --- a/src/Preferences/HandleLanguages.gd +++ b/src/Preferences/HandleLanguages.gd @@ -6,7 +6,7 @@ const LANGUAGES_DICT := { "da_DK": ["Dansk", "Danish"], "de_DE": ["Deutsch", "German"], "el_GR": ["ฮ•ฮปฮปฮทฮฝฮนฮบฮฌ", "Greek"], - "eo": ["Esperanto", "Esperanto"], + "eo_UY": ["Esperanto", "Esperanto"], "es_ES": ["Espaรฑol", "Spanish"], "fr_FR": ["Franรงais", "French"], "id_ID": ["Indonesian", "Indonesian"], @@ -27,7 +27,7 @@ const LANGUAGES_DICT := { "uk_UA": ["ะฃะบั€ะฐั—ะฝััŒะบะฐ", "Ukrainian"], } -var loaded_locales := LANGUAGES_DICT.keys() +var loaded_locales: PackedStringArray = LANGUAGES_DICT.keys() func _ready() -> void: @@ -38,30 +38,41 @@ func _ready() -> void: if Global.config_cache.has_section_key("preferences", "locale"): saved_locale = Global.config_cache.get_value("preferences", "locale") locale_index = loaded_locales.find(saved_locale) - TranslationServer.set_locale(saved_locale) # If no language is saved, OS' locale is used + _set_locale(saved_locale) # If no language is saved, OS' locale is used - var button_group: ButtonGroup = $"System Language".group + var button_group: ButtonGroup = $"System Language".button_group for locale in loaded_locales: # Create radiobuttons for each language var button := CheckBox.new() button.text = LANGUAGES_DICT[locale][0] + " [%s]" % [locale] button.name = LANGUAGES_DICT[locale][1] - button.hint_tooltip = LANGUAGES_DICT[locale][1] + button.tooltip_text = LANGUAGES_DICT[locale][1] button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND - button.group = button_group + button.button_group = button_group add_child(button) - button.connect("pressed", self, "_on_Language_pressed", [button.get_index()]) - get_child(locale_index + 2).pressed = true # Select the appropriate button + button.pressed.connect(_on_Language_pressed.bind(button.get_index())) + get_child(locale_index + 2).button_pressed = true # Select the appropriate button func _on_Language_pressed(index: int) -> void: - if index == 1: - TranslationServer.set_locale(OS.get_locale()) - else: - TranslationServer.set_locale(loaded_locales[index - 2]) + var locale := OS.get_locale() + if index > 1: + locale = loaded_locales[index - 2] + _set_locale(locale) Global.config_cache.set_value("preferences", "locale", TranslationServer.get_locale()) Global.config_cache.save("user://cache.ini") # Update some UI elements with the new translations - Global.update_hint_tooltips() + Tools.update_hint_tooltips() Global.preferences_dialog.list.clear() Global.preferences_dialog.add_tabs(true) + + +func _set_locale(locale: String) -> void: + if TranslationServer.get_locale() == locale: + return + if not locale in TranslationServer.get_loaded_locales(): + var translation := load("res://Translations/%s.po" % locale) + if is_instance_valid(translation) and translation is Translation: + TranslationServer.add_translation(translation) + Keychain.load_translation(locale) + TranslationServer.set_locale(locale) diff --git a/src/Preferences/HandleThemes.gd b/src/Preferences/HandleThemes.gd index 582780be5bd..da1b7ae002b 100644 --- a/src/Preferences/HandleThemes.gd +++ b/src/Preferences/HandleThemes.gd @@ -3,7 +3,7 @@ extends Node var theme_index := 0 var theme_button_group := ButtonGroup.new() -onready var themes := [ +@onready var themes: Array[Theme] = [ preload("res://assets/themes/dark/theme.tres"), preload("res://assets/themes/gray/theme.tres"), preload("res://assets/themes/blue/theme.tres"), @@ -12,25 +12,24 @@ onready var themes := [ preload("res://assets/themes/purple/theme.tres"), ] -onready var buttons_container: BoxContainer = $ThemeButtons -onready var colors_container: BoxContainer = $ThemeColorsSpacer/ThemeColors -onready var theme_color_preview_scene := preload("res://src/Preferences/ThemeColorPreview.tscn") +@onready var buttons_container: BoxContainer = $ThemeButtons +@onready var colors_container: BoxContainer = $ThemeColorsSpacer/ThemeColors +@onready var theme_color_preview_scene := preload("res://src/Preferences/ThemeColorPreview.tscn") func _ready() -> void: for theme in themes: add_theme(theme) - yield(get_tree(), "idle_frame") - var theme_id: int = Global.config_cache.get_value("preferences", "theme", 0) if theme_id >= themes.size(): theme_id = 0 - change_theme(theme_id) - buttons_container.get_child(theme_id).pressed = true + if theme_id != 0: + change_theme(theme_id) + buttons_container.get_child(theme_id).button_pressed = true func _on_Theme_pressed(index: int) -> void: - buttons_container.get_child(index).pressed = true + buttons_container.get_child(index).button_pressed = true change_theme(index) Global.config_cache.set_value("preferences", "theme", index) @@ -39,18 +38,18 @@ func _on_Theme_pressed(index: int) -> void: func add_theme(theme: Theme) -> void: var button := CheckBox.new() - var theme_name: String = theme.resource_name + var theme_name := theme.resource_name button.name = theme_name button.text = theme_name button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND - button.group = theme_button_group + button.button_group = theme_button_group buttons_container.add_child(button) - button.connect("pressed", self, "_on_Theme_pressed", [button.get_index()]) + button.pressed.connect(_on_Theme_pressed.bind(button.get_index())) var panel_stylebox: StyleBox = theme.get_stylebox("panel", "Panel") var panel_container_stylebox: StyleBox = theme.get_stylebox("panel", "PanelContainer") if panel_stylebox is StyleBoxFlat and panel_container_stylebox is StyleBoxFlat: - var theme_color_preview: ColorRect = theme_color_preview_scene.instance() + var theme_color_preview: ColorRect = theme_color_preview_scene.instantiate() var color1: Color = panel_stylebox.bg_color var color2: Color = panel_container_stylebox.bg_color theme_color_preview.get_child(0).get_child(0).color = color1 @@ -59,7 +58,7 @@ func add_theme(theme: Theme) -> void: func remove_theme(theme: Theme) -> void: - var index: int = themes.find(theme) + var index := themes.find(theme) var theme_button = buttons_container.get_child(index) var color_previews = colors_container.get_child(index) buttons_container.remove_child(theme_button) @@ -71,7 +70,9 @@ func remove_theme(theme: Theme) -> void: func change_theme(id: int) -> void: theme_index = id - var theme: Theme = themes[id] + var theme := themes[id] + theme.default_font_size = Global.font_size + theme.set_font_size("font_size", "HeaderSmall", Global.font_size + 2) var icon_color: Color = theme.get_color("modulate_color", "Icons") if Global.icon_color_from == Global.ColorFrom.THEME: @@ -88,7 +89,7 @@ func change_theme(id: int) -> void: if panel_stylebox is StyleBoxFlat: clear_color = panel_stylebox.bg_color else: - clear_color = Color.gray + clear_color = Color.GRAY for child in Global.preferences_dialog.get_node("Popups").get_children(): child.theme = theme @@ -104,11 +105,11 @@ func change_clear_color() -> void: if panel_stylebox is StyleBoxFlat: clear_color = panel_stylebox.bg_color else: - clear_color = Color.gray + clear_color = Color.GRAY if Global.clear_color_from == Global.ColorFrom.THEME: - VisualServer.set_default_clear_color(clear_color) + RenderingServer.set_default_clear_color(clear_color) else: - VisualServer.set_default_clear_color(Global.modulate_clear_color) + RenderingServer.set_default_clear_color(Global.modulate_clear_color) func change_icon_colors() -> void: @@ -128,5 +129,5 @@ func change_icon_colors() -> void: texture.modulate = Global.modulate_icon_color if node.disabled: texture.modulate.a = 0.5 - elif node is TextureRect or node is Sprite: + elif node is TextureRect or node is Sprite2D: node.modulate = Global.modulate_icon_color diff --git a/src/Preferences/PreferencesDialog.gd b/src/Preferences/PreferencesDialog.gd index b8fae681850..9720c3dbb56 100644 --- a/src/Preferences/PreferencesDialog.gd +++ b/src/Preferences/PreferencesDialog.gd @@ -1,11 +1,15 @@ extends AcceptDialog -# Array of Preference(s) -var preferences := [ - Preference.new("open_last_project", "Startup/StartupContainer/OpenLastProject", "pressed"), - Preference.new("quit_confirmation", "Startup/StartupContainer/QuitConfirmation", "pressed"), +var preferences: Array[Preference] = [ + Preference.new( + "open_last_project", "Startup/StartupContainer/OpenLastProject", "button_pressed" + ), + Preference.new( + "quit_confirmation", "Startup/StartupContainer/QuitConfirmation", "button_pressed" + ), Preference.new("shrink", "%ShrinkSlider", "value"), - Preference.new("dim_on_popup", "Interface/InterfaceOptions/DimCheckBox", "pressed"), + Preference.new("font_size", "Interface/InterfaceOptions/FontSizeSlider", "value"), + Preference.new("dim_on_popup", "Interface/InterfaceOptions/DimCheckBox", "button_pressed"), Preference.new("icon_color_from", "Interface/ButtonOptions/IconColorOptionButton", "selected"), Preference.new("custom_icon_color", "Interface/ButtonOptions/IconColorButton", "color"), Preference.new("left_tool_color", "Interface/ButtonOptions/LeftToolColorButton", "color"), @@ -14,35 +18,41 @@ var preferences := [ "tool_button_size", "Interface/ButtonOptions/ToolButtonSizeOptionButton", "selected" ), Preference.new( - "show_left_tool_icon", "Cursors/CursorsContainer/LeftToolIconCheckbox", "pressed" + "show_left_tool_icon", "Cursors/CursorsContainer/LeftToolIconCheckbox", "button_pressed" ), Preference.new( - "show_right_tool_icon", "Cursors/CursorsContainer/RightToolIconCheckbox", "pressed" + "show_right_tool_icon", "Cursors/CursorsContainer/RightToolIconCheckbox", "button_pressed" ), Preference.new( - "left_square_indicator_visible", "Cursors/CursorsContainer/LeftIndicatorCheckbox", "pressed" + "left_square_indicator_visible", + "Cursors/CursorsContainer/LeftIndicatorCheckbox", + "button_pressed" ), Preference.new( "right_square_indicator_visible", "Cursors/CursorsContainer/RightIndicatorCheckbox", - "pressed" + "button_pressed" + ), + Preference.new( + "native_cursors", "Cursors/CursorsContainer/NativeCursorsCheckbox", "button_pressed" + ), + Preference.new( + "cross_cursor", "Cursors/CursorsContainer/CrossCursorCheckbox", "button_pressed" ), - Preference.new("native_cursors", "Cursors/CursorsContainer/NativeCursorsCheckbox", "pressed"), - Preference.new("cross_cursor", "Cursors/CursorsContainer/CrossCursorCheckbox", "pressed"), Preference.new("autosave_interval", "Backup/AutosaveContainer/AutosaveInterval", "value"), - Preference.new("enable_autosave", "Backup/AutosaveContainer/EnableAutosave", "pressed"), + Preference.new("enable_autosave", "Backup/AutosaveContainer/EnableAutosave", "button_pressed"), Preference.new("default_width", "Image/ImageOptions/ImageDefaultWidth", "value"), Preference.new("default_height", "Image/ImageOptions/ImageDefaultHeight", "value"), Preference.new("default_fill_color", "Image/ImageOptions/DefaultFillColor", "color"), - Preference.new("smooth_zoom", "Canvas/ZoomOptions/SmoothZoom", "pressed"), - Preference.new("integer_zoom", "Canvas/ZoomOptions/IntegerZoom", "pressed"), + Preference.new("smooth_zoom", "Canvas/ZoomOptions/SmoothZoom", "button_pressed"), + Preference.new("integer_zoom", "Canvas/ZoomOptions/IntegerZoom", "button_pressed"), Preference.new("snapping_distance", "Canvas/SnappingOptions/DistanceValue", "value"), Preference.new("grid_type", "Canvas/GridOptions/GridType", "selected"), Preference.new("grid_size", "Canvas/GridOptions/GridSizeValue", "value"), Preference.new("isometric_grid_size", "Canvas/GridOptions/IsometricGridSizeValue", "value"), Preference.new("grid_offset", "Canvas/GridOptions/GridOffsetValue", "value"), Preference.new( - "grid_draw_over_tile_mode", "Canvas/GridOptions/GridDrawOverTileMode", "pressed" + "grid_draw_over_tile_mode", "Canvas/GridOptions/GridDrawOverTileMode", "button_pressed" ), Preference.new("grid_color", "Canvas/GridOptions/GridColor", "color"), Preference.new("pixel_grid_show_at_zoom", "Canvas/PixelGridOptions/ShowAtZoom", "value"), @@ -52,14 +62,18 @@ var preferences := [ Preference.new("checker_color_1", "Canvas/CheckerOptions/CheckerColor1", "color"), Preference.new("checker_color_2", "Canvas/CheckerOptions/CheckerColor2", "color"), Preference.new( - "checker_follow_movement", "Canvas/CheckerOptions/CheckerFollowMovement", "pressed" + "checker_follow_movement", "Canvas/CheckerOptions/CheckerFollowMovement", "button_pressed" + ), + Preference.new( + "checker_follow_scale", "Canvas/CheckerOptions/CheckerFollowScale", "button_pressed" ), - Preference.new("checker_follow_scale", "Canvas/CheckerOptions/CheckerFollowScale", "pressed"), Preference.new("tilemode_opacity", "Canvas/CheckerOptions/TileModeOpacity", "value"), Preference.new("clear_color_from", "Canvas/BackgroundOptions/ColorOptionButton", "selected"), Preference.new("modulate_clear_color", "Canvas/BackgroundOptions/BackgroundColor", "color"), Preference.new( - "select_layer_on_button_click", "Timeline/TimelineOptions/SelectLayerOnButton", "pressed" + "select_layer_on_button_click", + "Timeline/TimelineOptions/SelectLayerOnButton", + "button_pressed" ), Preference.new( "onion_skinning_past_color", "Timeline/TimelineOptions/OnionSkinningPastColor", "color" @@ -67,34 +81,35 @@ var preferences := [ Preference.new( "onion_skinning_future_color", "Timeline/TimelineOptions/OnionSkinningFutureColor", "color" ), - Preference.new("selection_animated_borders", "Selection/SelectionOptions/Animate", "pressed"), + Preference.new( + "selection_animated_borders", "Selection/SelectionOptions/Animate", "button_pressed" + ), Preference.new("selection_border_color_1", "Selection/SelectionOptions/BorderColor1", "color"), Preference.new("selection_border_color_2", "Selection/SelectionOptions/BorderColor2", "color"), Preference.new("fps_limit", "Performance/PerformanceContainer/SetFPSLimit", "value"), Preference.new( - "pause_when_unfocused", "Performance/PerformanceContainer/PauseAppFocus", "pressed" - ), - Preference.new( - "renderer", "Drivers/DriversContainer/Renderer", "selected", true, OS.VIDEO_DRIVER_GLES2 + "pause_when_unfocused", "Performance/PerformanceContainer/PauseAppFocus", "button_pressed" ), + # Preference.new( + # "renderer", "Drivers/DriversContainer/Renderer", "selected", true, OS.VIDEO_DRIVER_GLES2 + # ), Preference.new("tablet_driver", "Drivers/DriversContainer/TabletDriver", "selected", true, 0) ] var content_list := [] var selected_item := 0 -var restore_default_button_tcsn := preload("res://src/Preferences/RestoreDefaultButton.tscn") -onready var list: ItemList = $HSplitContainer/List -onready var right_side: VBoxContainer = $"%RightSide" -onready var autosave_container: Container = right_side.get_node("Backup/AutosaveContainer") -onready var autosave_interval: SpinBox = autosave_container.get_node("AutosaveInterval") -onready var shrink_slider: ValueSlider = $"%ShrinkSlider" -onready var themes: BoxContainer = right_side.get_node("Interface/Themes") -onready var shortcuts: Control = right_side.get_node("Shortcuts/ShortcutEdit") -onready var tablet_driver_label: Label = $"%TabletDriverLabel" -onready var tablet_driver: OptionButton = $"%TabletDriver" -onready var extensions: BoxContainer = right_side.get_node("Extensions") -onready var must_restart: BoxContainer = $"%MustRestart" +@onready var list: ItemList = $HSplitContainer/List +@onready var right_side: VBoxContainer = $"%RightSide" +@onready var autosave_container: Container = right_side.get_node("Backup/AutosaveContainer") +@onready var autosave_interval: SpinBox = autosave_container.get_node("AutosaveInterval") +@onready var shrink_slider: ValueSlider = $"%ShrinkSlider" +@onready var themes: BoxContainer = right_side.get_node("Interface/Themes") +@onready var shortcuts: Control = right_side.get_node("Shortcuts/ShortcutEdit") +@onready var tablet_driver_label: Label = $"%TabletDriverLabel" +@onready var tablet_driver: OptionButton = $"%TabletDriver" +@onready var extensions: BoxContainer = right_side.get_node("Extensions") +@onready var must_restart: BoxContainer = $"%MustRestart" class Preference: @@ -123,19 +138,23 @@ class Preference: func _ready() -> void: # Replace OK since preference changes are being applied immediately, not after OK confirmation - get_ok().text = "Close" - get_ok().size_flags_horizontal = Control.SIZE_EXPAND_FILL + get_ok_button().text = "Close" + get_ok_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL shrink_slider.value = Global.shrink # In case shrink is not equal to 1 + shortcuts.profile_option_button.item_selected.connect(func(_i): Tools.update_hint_tooltips()) + if shortcuts.profile_option_button.selected != 0: + # Manually update tooltips if the shortcut profile is not the default + Tools.update_hint_tooltips() for child in shortcuts.get_children(): if not child is AcceptDialog: continue - child.connect("confirmed", Global, "update_hint_tooltips") + child.confirmed.connect(Tools.update_hint_tooltips) for child in right_side.get_children(): content_list.append(child.name) - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": content_list.erase("Startup") right_side.get_node("Startup").queue_free() right_side.get_node("Language").visible = true @@ -143,13 +162,13 @@ func _ready() -> void: elif OS.get_name() == "Windows": tablet_driver_label.visible = true tablet_driver.visible = true - for driver in OS.get_tablet_driver_count(): - var driver_name := OS.get_tablet_driver_name(driver) + for driver in DisplayServer.tablet_get_driver_count(): + var driver_name := DisplayServer.tablet_get_driver_name(driver) tablet_driver.add_item(driver_name, driver) for pref in preferences: - var node: Node = right_side.get_node(pref.node_path) - var restore_default_button: BaseButton = restore_default_button_tcsn.instance() + var node := right_side.get_node(pref.node_path) + var restore_default_button := RestoreDefaultButton.new() restore_default_button.setting_name = pref.prop_name restore_default_button.value_type = pref.value_type restore_default_button.default_value = pref.default_value @@ -166,31 +185,22 @@ func _ready() -> void: node.get_parent().move_child(restore_default_button, node_position) match pref.value_type: - "pressed": - node.connect( - "toggled", self, "_on_Preference_value_changed", [pref, restore_default_button] + "button_pressed": + node.toggled.connect( + _on_Preference_value_changed.bind(pref, restore_default_button) ) "value": - node.connect( - "value_changed", - self, - "_on_Preference_value_changed", - [pref, restore_default_button] + node.value_changed.connect( + _on_Preference_value_changed.bind(pref, restore_default_button) ) "color": node.get_picker().presets_visible = false - node.connect( - "color_changed", - self, - "_on_Preference_value_changed", - [pref, restore_default_button] + node.color_changed.connect( + _on_Preference_value_changed.bind(pref, restore_default_button) ) "selected": - node.connect( - "item_selected", - self, - "_on_Preference_value_changed", - [pref, restore_default_button] + node.item_selected.connect( + _on_Preference_value_changed.bind(pref, restore_default_button) ) var global_value = Global.get(pref.prop_name) @@ -202,12 +212,17 @@ func _ready() -> void: # This is needed because color_changed doesn't fire if the color changes in code if typeof(value) == TYPE_VECTOR2 or typeof(value) == TYPE_COLOR: - preference_update(pref.prop_name, pref.require_restart) - disable_restore_default_button( - restore_default_button, global_value.is_equal_approx(pref.default_value) - ) + preference_update(pref.require_restart) + if typeof(global_value) == TYPE_VECTOR2I: + disable_restore_default_button( + restore_default_button, global_value == pref.default_value + ) + else: + disable_restore_default_button( + restore_default_button, global_value.is_equal_approx(pref.default_value) + ) elif pref.value_type == "selected": - preference_update(pref.prop_name, pref.require_restart) + preference_update(pref.require_restart) disable_restore_default_button( restore_default_button, global_value == pref.default_value ) @@ -218,114 +233,33 @@ func _ready() -> void: ) -func _on_Preference_value_changed(value, pref: Preference, restore_default: BaseButton) -> void: +func _on_Preference_value_changed(value, pref: Preference, button: RestoreDefaultButton) -> void: var prop := pref.prop_name var default_value = pref.default_value Global.set(prop, value) if not pref.require_restart: Global.config_cache.set_value("preferences", prop, value) - preference_update(prop, pref.require_restart) + preference_update(pref.require_restart) var disable: bool = Global.get(prop) == default_value if typeof(value) == TYPE_COLOR: disable = Global.get(prop).is_equal_approx(default_value) - disable_restore_default_button(restore_default, disable) + disable_restore_default_button(button, disable) -func preference_update(prop: String, require_restart := false) -> void: +func preference_update(require_restart := false) -> void: if require_restart: must_restart.visible = true return - if prop in ["autosave_interval", "enable_autosave"]: - OpenSave.update_autosave() - autosave_interval.editable = Global.enable_autosave - if autosave_interval.editable: - autosave_interval.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND - else: - autosave_interval.mouse_default_cursor_shape = Control.CURSOR_FORBIDDEN - - elif "grid" in prop: - Global.canvas.grid.update() - - elif prop in ["pixel_grid_show_at_zoom", "pixel_grid_color"]: - Global.canvas.pixel_grid.update() - - elif "checker" in prop: - Global.transparent_checker.update_rect() - - elif prop in ["guide_color"]: - for guide in Global.canvas.get_children(): - if guide is SymmetryGuide: - # Add a subtle difference to the normal guide color by mixing in some blue - guide.default_color = Global.guide_color.linear_interpolate(Color(.2, .2, .65), .6) - elif guide is Guide: - guide.default_color = Global.guide_color - - elif prop in ["fps_limit"]: - Engine.set_target_fps(Global.fps_limit) - - elif "selection" in prop: - var marching_ants: Sprite = Global.canvas.selection.marching_ants_outline - marching_ants.material.set_shader_param("animated", Global.selection_animated_borders) - marching_ants.material.set_shader_param("first_color", Global.selection_border_color_1) - marching_ants.material.set_shader_param("second_color", Global.selection_border_color_2) - Global.canvas.selection.update() - - elif prop in ["icon_color_from", "custom_icon_color"]: - if Global.icon_color_from == Global.ColorFrom.THEME: - var current_theme: Theme = themes.themes[themes.theme_index] - Global.modulate_icon_color = current_theme.get_color("modulate_color", "Icons") - else: - Global.modulate_icon_color = Global.custom_icon_color - themes.change_icon_colors() - - elif prop in ["modulate_clear_color", "clear_color_from"]: - themes.change_clear_color() - - elif prop == "left_tool_color": - for child in Tools._tool_buttons.get_children(): - var left_background: NinePatchRect = child.get_node("BackgroundLeft") - left_background.modulate = Global.left_tool_color - Tools._slots[BUTTON_LEFT].tool_node.color_rect.color = Global.left_tool_color - - elif prop == "right_tool_color": - for child in Tools._tool_buttons.get_children(): - var left_background: NinePatchRect = child.get_node("BackgroundRight") - left_background.modulate = Global.right_tool_color - Tools._slots[BUTTON_RIGHT].tool_node.color_rect.color = Global.right_tool_color - - elif prop == "tool_button_size": - Tools.set_button_size(Global.tool_button_size) - - elif prop == "native_cursors": - if Global.native_cursors: - Input.set_custom_mouse_cursor(null, Input.CURSOR_CROSS, Vector2(15, 15)) - else: - Global.control.set_custom_cursor() - - elif prop == "cross_cursor": - if Global.cross_cursor: - Global.main_viewport.mouse_default_cursor_shape = Control.CURSOR_CROSS - else: - Global.main_viewport.mouse_default_cursor_shape = Control.CURSOR_ARROW - - elif prop == "onion_skinning_past_color": - Global.canvas.onion_past.blue_red_color = Global.onion_skinning_past_color - Global.canvas.refresh_onion() - elif prop == "onion_skinning_future_color": - Global.canvas.onion_future.blue_red_color = Global.onion_skinning_future_color - Global.canvas.refresh_onion() - - Global.config_cache.save("user://cache.ini") -func disable_restore_default_button(button: BaseButton, disable: bool) -> void: +func disable_restore_default_button(button: RestoreDefaultButton, disable: bool) -> void: button.disabled = disable if disable: button.mouse_default_cursor_shape = Control.CURSOR_ARROW - button.hint_tooltip = "" + button.tooltip_text = "" else: button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND - button.hint_tooltip = "Restore default value" + button.tooltip_text = "Restore default value" func _on_PreferencesDialog_about_to_show() -> void: @@ -341,8 +275,11 @@ func add_tabs(changed_language := false) -> void: autosave_interval.suffix = tr("minute(s)") -func _on_PreferencesDialog_popup_hide() -> void: - list.clear() +func _on_PreferencesDialog_visibility_changed() -> void: + if not visible: + list.clear() + Global.dialog_open(false) + Global.config_cache.save("user://cache.ini") func _on_List_item_selected(index: int) -> void: @@ -352,15 +289,14 @@ func _on_List_item_selected(index: int) -> void: func _on_ShrinkApplyButton_pressed() -> void: - get_tree().set_screen_stretch( - SceneTree.STRETCH_MODE_DISABLED, - SceneTree.STRETCH_ASPECT_IGNORE, - Vector2(1024, 576), - Global.shrink - ) + var root := get_tree().root + root.content_scale_aspect = Window.CONTENT_SCALE_ASPECT_IGNORE + root.content_scale_mode = Window.CONTENT_SCALE_MODE_DISABLED + root.min_size = Vector2(1024, 576) + root.content_scale_factor = Global.shrink Global.control.set_custom_cursor() hide() popup_centered(Vector2(600, 400)) Global.dialog_open(true) - yield(get_tree(), "idle_frame") + await get_tree().process_frame Global.camera.fit_to_frame(Global.current_project.size) diff --git a/src/Preferences/PreferencesDialog.tscn b/src/Preferences/PreferencesDialog.tscn index b8b8fe7c516..0ea68fdb579 100644 --- a/src/Preferences/PreferencesDialog.tscn +++ b/src/Preferences/PreferencesDialog.tscn @@ -1,201 +1,155 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=9 format=3 uid="uid://b3hkjj3s6pe4x"] -[ext_resource path="res://src/Preferences/PreferencesDialog.gd" type="Script" id=1] -[ext_resource path="res://src/Preferences/HandleExtensions.gd" type="Script" id=2] -[ext_resource path="res://addons/keychain/ShortcutEdit.tscn" type="PackedScene" id=3] -[ext_resource path="res://src/Preferences/HandleLanguages.gd" type="Script" id=4] -[ext_resource path="res://src/Preferences/HandleThemes.gd" type="Script" id=5] -[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=7] -[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=8] +[ext_resource type="Script" path="res://src/Preferences/PreferencesDialog.gd" id="1"] +[ext_resource type="Script" path="res://src/Preferences/HandleExtensions.gd" id="2"] +[ext_resource type="PackedScene" uid="uid://bq7ibhm0txl5p" path="res://addons/keychain/ShortcutEdit.tscn" id="3"] +[ext_resource type="Script" path="res://src/Preferences/HandleLanguages.gd" id="4"] +[ext_resource type="Script" path="res://src/Preferences/HandleThemes.gd" id="5"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="7"] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="8"] -[sub_resource type="ButtonGroup" id=1] +[sub_resource type="ButtonGroup" id="ButtonGroup_8vsfb"] [node name="PreferencesDialog" type="AcceptDialog"] -margin_right = 620.0 -margin_bottom = 450.0 -window_title = "Preferences" -resizable = true -script = ExtResource( 1 ) -__meta__ = { -"_edit_horizontal_guides_": [ ], -"_edit_use_anchors_": false, -"_edit_vertical_guides_": [ ] -} +title = "Preferences" +size = Vector2i(800, 500) +exclusive = false +script = ExtResource("1") [node name="HSplitContainer" type="HSplitContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -36.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -36.0 size_flags_horizontal = 3 -custom_constants/autohide = 0 -custom_constants/separation = 20 +theme_override_constants/separation = 20 +theme_override_constants/autohide = 0 split_offset = 1 [node name="List" type="ItemList" parent="HSplitContainer"] -margin_right = 86.0 -margin_bottom = 406.0 -rect_min_size = Vector2( 85, 0 ) +custom_minimum_size = Vector2(85, 0) +layout_mode = 2 [node name="VBoxContainer" type="VBoxContainer" parent="HSplitContainer"] -margin_left = 106.0 -margin_right = 604.0 -margin_bottom = 406.0 +layout_mode = 2 [node name="ScrollContainer" type="ScrollContainer" parent="HSplitContainer/VBoxContainer"] -margin_right = 498.0 -margin_bottom = 406.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="RightSide" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer"] unique_name_in_owner = true -margin_right = 498.0 -margin_bottom = 406.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="Startup" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] -margin_right = 498.0 -margin_bottom = 70.0 +layout_mode = 2 [node name="StartupHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup"] -margin_right = 498.0 -margin_bottom = 14.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupHeader"] -margin_right = 45.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Startup" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupHeader"] -margin_left = 45.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="StartupContainer" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup"] -margin_top = 18.0 -margin_right = 498.0 -margin_bottom = 70.0 +layout_mode = 2 columns = 3 [node name="OpenLastProjectLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupContainer"] -margin_top = 5.0 -margin_right = 189.0 -margin_bottom = 19.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Open last project on startup" [node name="OpenLastProject" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupContainer"] -margin_left = 193.0 -margin_right = 381.0 -margin_bottom = 24.0 -hint_tooltip = "Opens last opened project on startup" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Opens last opened project on startup" +mouse_default_cursor_shape = 2 text = "On" [node name="QuitConfirmationLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupContainer"] -margin_left = 385.0 -margin_top = 5.0 -margin_right = 498.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Quit confirmation" [node name="QuitConfirmation" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Startup/StartupContainer"] -margin_top = 28.0 -margin_right = 189.0 -margin_bottom = 52.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "On" [node name="Language" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 184.0 -margin_right = 506.0 -margin_bottom = 632.0 -script = ExtResource( 4 ) +layout_mode = 2 +script = ExtResource("4") [node name="LanguageHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language"] -margin_top = 108.0 -margin_right = 498.0 -margin_bottom = 122.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language/LanguageHeader"] -margin_right = 51.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Language" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language/LanguageHeader"] -margin_left = 51.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="System Language" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language"] -margin_right = 506.0 -margin_bottom = 24.0 -hint_tooltip = "System Language" +layout_mode = 2 +tooltip_text = "System Language" mouse_default_cursor_shape = 2 -pressed = true -group = SubResource( 1 ) +button_group = SubResource("ButtonGroup_8vsfb") text = "System Language" [node name="Interface" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 74.0 -margin_right = 498.0 -margin_bottom = 284.0 +layout_mode = 2 [node name="InterfaceHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"] -margin_right = 498.0 -margin_bottom = 14.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceHeader"] -margin_right = 57.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Interface" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceHeader"] -margin_left = 57.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="InterfaceOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"] -margin_right = 40.0 -margin_bottom = 40.0 +layout_mode = 2 columns = 3 -[node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"] -margin_top = 23.0 -margin_right = 88.0 -margin_bottom = 37.0 +[node name="ShrinkLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"] +layout_mode = 2 size_flags_horizontal = 3 text = "Display scale:" [node name="ShrinkContainer" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"] -margin_top = 18.0 -margin_right = 498.0 -margin_bottom = 42.0 +layout_mode = 2 -[node name="ShrinkSlider" type="TextureProgress" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions/ShrinkContainer"] +[node name="ShrinkSlider" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions/ShrinkContainer"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 0.5 max_value = 4.0 step = 0.25 @@ -205,332 +159,273 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 8 ) +script = ExtResource("8") [node name="ShrinkApplyButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions/ShrinkContainer"] -margin_left = 297.0 -margin_right = 498.0 -margin_bottom = 24.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Apply" +[node name="FontSizeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Font size:" + +[node name="FontSizeSlider" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"] +layout_mode = 2 +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" +min_value = 4.0 +max_value = 32.0 +value = 6.0 +allow_greater = true +nine_patch_stretch = true +stretch_margin_left = 3 +stretch_margin_top = 3 +stretch_margin_right = 3 +stretch_margin_bottom = 3 +script = ExtResource("8") + [node name="DimLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"] -margin_top = 51.0 -margin_right = 247.0 -margin_bottom = 65.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Dim interface on dialog popup" [node name="DimCheckBox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"] -margin_left = 251.0 -margin_top = 46.0 -margin_right = 498.0 -margin_bottom = 70.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -pressed = true +mouse_default_cursor_shape = 2 +button_pressed = true text = "On" [node name="ThemesHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"] -margin_top = 74.0 -margin_right = 498.0 -margin_bottom = 88.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ThemesHeader"] -margin_right = 51.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Themes" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ThemesHeader"] -margin_left = 51.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Themes" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"] -margin_top = 92.0 -margin_right = 498.0 -margin_bottom = 96.0 -script = ExtResource( 5 ) +layout_mode = 2 +script = ExtResource("5") [node name="ThemeButtons" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/Themes"] -margin_right = 247.0 -margin_bottom = 4.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="ThemeColorsSpacer" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/Themes"] -margin_left = 251.0 -margin_right = 498.0 -margin_bottom = 4.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Control" type="Control" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/Themes/ThemeColorsSpacer"] -margin_right = 247.0 +layout_mode = 2 [node name="ThemeColors" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/Themes/ThemeColorsSpacer"] -margin_top = 4.0 -margin_right = 247.0 -margin_bottom = 4.0 -custom_constants/separation = 12 +layout_mode = 2 +theme_override_constants/separation = 12 [node name="ButtonHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"] -margin_top = 100.0 -margin_right = 498.0 -margin_bottom = 114.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonHeader"] -margin_right = 50.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Buttons" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonHeader"] -margin_left = 50.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="ButtonOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface"] -margin_top = 118.0 -margin_right = 498.0 -margin_bottom = 210.0 +layout_mode = 2 columns = 3 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -margin_top = 3.0 -margin_right = 194.0 -margin_bottom = 17.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Tool button size:" [node name="ToolButtonSizeOptionButton" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -margin_left = 198.0 -margin_right = 392.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Small" -items = [ "Small", null, false, 0, null, "Big", null, false, 1, null ] +mouse_default_cursor_shape = 2 +item_count = 2 selected = 0 +popup/item_0/text = "Small" +popup/item_0/id = 0 +popup/item_1/text = "Big" +popup/item_1/id = 1 [node name="Label2" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -margin_left = 396.0 -margin_top = 3.0 -margin_right = 498.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Icon color from:" [node name="IconColorOptionButton" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -margin_top = 24.0 -margin_right = 194.0 -margin_bottom = 44.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "Theme" -items = [ "Theme", null, false, 0, null, "Custom", null, false, 1, null ] +item_count = 2 selected = 0 +popup/item_0/text = "Theme" +popup/item_0/id = 0 +popup/item_1/text = "Custom" +popup/item_1/id = 1 [node name="Label3" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -margin_left = 198.0 -margin_top = 27.0 -margin_right = 392.0 -margin_bottom = 41.0 +layout_mode = 2 text = "Icon color:" [node name="IconColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -margin_left = 396.0 -margin_top = 24.0 -margin_right = 498.0 -margin_bottom = 44.0 -rect_min_size = Vector2( 64, 20 ) +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 mouse_default_cursor_shape = 2 -color = Color( 0.75, 0.75, 0.75, 1 ) +color = Color(0.75, 0.75, 0.75, 1) [node name="Label4" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -margin_top = 51.0 -margin_right = 194.0 -margin_bottom = 65.0 +layout_mode = 2 text = "Left tool color:" [node name="LeftToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -margin_left = 198.0 -margin_top = 48.0 -margin_right = 392.0 -margin_bottom = 68.0 -rect_min_size = Vector2( 64, 20 ) +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 mouse_default_cursor_shape = 2 -color = Color( 0, 0.52549, 0.811765, 1 ) +color = Color(0, 0.52549, 0.811765, 1) [node name="Label5" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -margin_left = 396.0 -margin_top = 51.0 -margin_right = 498.0 -margin_bottom = 65.0 +layout_mode = 2 text = "Right tool color:" [node name="RightToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -margin_top = 72.0 -margin_right = 194.0 -margin_bottom = 92.0 -rect_min_size = Vector2( 64, 20 ) +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 mouse_default_cursor_shape = 2 -color = Color( 0.992157, 0.427451, 0.0784314, 1 ) +color = Color(0.992157, 0.427451, 0.0784314, 1) [node name="Canvas" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_right = 486.0 -margin_bottom = 572.0 +layout_mode = 2 [node name="ZoomHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_right = 486.0 -margin_bottom = 14.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="ZoomLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomHeader"] -margin_right = 37.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Zoom" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomHeader"] -margin_left = 37.0 -margin_right = 486.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="ZoomOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 18.0 -margin_right = 486.0 -margin_bottom = 70.0 +layout_mode = 2 columns = 3 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomOptions"] -margin_top = 5.0 -margin_right = 149.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 110, 0 ) +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_horizontal = 3 text = "Smooth Zoom" [node name="SmoothZoom" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomOptions"] -margin_left = 153.0 -margin_right = 302.0 -margin_bottom = 24.0 -hint_tooltip = "Adds a smoother transition when zooming in or out" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -pressed = true +tooltip_text = "Adds a smoother transition when zooming in or out" +mouse_default_cursor_shape = 2 +button_pressed = true text = "On" [node name="Label2" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomOptions"] -margin_left = 306.0 -margin_top = 5.0 -margin_right = 486.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 110, 0 ) +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_horizontal = 3 text = "Integer Zoom" [node name="IntegerZoom" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/ZoomOptions"] -margin_top = 28.0 -margin_right = 149.0 -margin_bottom = 52.0 -hint_tooltip = "Restricts the value to be an integer multiple of 100%" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Restricts the value to be an integer multiple of 100%" +mouse_default_cursor_shape = 2 +button_pressed = true text = "On" [node name="GuideHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 74.0 -margin_right = 486.0 -margin_bottom = 88.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="GuideLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GuideHeader"] -margin_right = 45.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Guides" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GuideHeader"] -margin_left = 45.0 -margin_right = 486.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="GuideOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 92.0 -margin_right = 486.0 -margin_bottom = 112.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 3 [node name="GuideColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GuideOptions"] -margin_top = 3.0 -margin_right = 161.0 -margin_bottom = 17.0 -rect_min_size = Vector2( 110, 0 ) -hint_tooltip = "A color of ruler guides displayed on the canvas" -mouse_filter = 0 +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "A color of ruler guides displayed on the canvas" +mouse_filter = 0 text = "Guides color:" [node name="GuideColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GuideOptions"] -margin_left = 165.0 -margin_right = 326.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 64, 20 ) -hint_tooltip = "A color of ruler guides displayed on the canvas" -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 size_flags_horizontal = 3 -color = Color( 0.63, 0.13, 0.94, 1 ) +tooltip_text = "A color of ruler guides displayed on the canvas" +mouse_default_cursor_shape = 2 +color = Color(0.63, 0.13, 0.94, 1) [node name="SnappingHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 116.0 -margin_right = 486.0 -margin_bottom = 130.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="SnappingLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/SnappingHeader"] -margin_right = 57.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Snapping" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/SnappingHeader"] -margin_left = 57.0 -margin_right = 486.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="SnappingOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 134.0 -margin_right = 486.0 -margin_bottom = 148.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 3 [node name="DistanceLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/SnappingOptions"] -margin_right = 161.0 -margin_bottom = 14.0 -rect_min_size = Vector2( 110, 0 ) -hint_tooltip = "This is the distance in screen pixels where guide and grid snapping gets activated." -mouse_filter = 0 +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "This is the distance in screen pixels where guide and grid snapping gets activated." +mouse_filter = 0 text = "Snapping distance:" -[node name="DistanceValue" type="TextureProgress" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/SnappingOptions"] -margin_left = 165.0 -margin_right = 326.0 -margin_bottom = 14.0 -hint_tooltip = "This is the distance in screen pixels where guide and grid snapping gets activated." -mouse_default_cursor_shape = 2 +[node name="DistanceValue" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/SnappingOptions"] +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +tooltip_text = "This is the distance in screen pixels where guide and grid snapping gets activated." +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 max_value = 255.0 value = 32.0 @@ -540,75 +435,62 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 8 ) +script = ExtResource("8") suffix = "px" snap_step = 10.0 [node name="GridHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 152.0 -margin_right = 486.0 -margin_bottom = 166.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="GridLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridHeader"] -margin_right = 27.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Grid" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridHeader"] -margin_left = 27.0 -margin_right = 486.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="GridOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 170.0 -margin_right = 486.0 -margin_bottom = 330.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 3 [node name="GridTypeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"] -margin_top = 3.0 -margin_right = 160.0 -margin_bottom = 17.0 -hint_tooltip = "Sets the type of the grid between rectangular, isometric or both" -mouse_filter = 0 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Sets the type of the grid between rectangular, isometric or both" +mouse_filter = 0 text = "Grid type:" -__meta__ = { -"_editor_description_": "" -} [node name="GridType" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"] -margin_left = 164.0 -margin_right = 323.0 -margin_bottom = 20.0 -hint_tooltip = "Sets the type of the grid between rectangular, isometric or both" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Rectangular" -items = [ "Rectangular", null, false, 0, null, "Isometric", null, false, 1, null, "All", null, false, 2, null ] +tooltip_text = "Sets the type of the grid between rectangular, isometric or both" +mouse_default_cursor_shape = 2 +item_count = 3 selected = 0 +popup/item_0/text = "Rectangular" +popup/item_0/id = 0 +popup/item_1/text = "Isometric" +popup/item_1/id = 1 +popup/item_2/text = "All" +popup/item_2/id = 2 [node name="GridSizeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"] -margin_left = 327.0 -margin_right = 486.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 110, 0 ) -mouse_filter = 0 +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_vertical = 1 +mouse_filter = 0 text = "Rectangular grid size:" -[node name="GridSizeValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource( 7 )] -margin_top = 24.0 -margin_right = 160.0 -margin_bottom = 76.0 +[node name="GridSizeValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource("7")] +layout_mode = 2 size_flags_horizontal = 3 -value = Vector2( 2, 2 ) -min_value = Vector2( 1, 1 ) +value = Vector2(2, 2) +min_value = Vector2(1, 1) allow_greater = true show_ratio = true prefix_x = "Width:" @@ -617,22 +499,16 @@ suffix_x = "px" suffix_y = "px" [node name="IsometricGridSizeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"] -margin_left = 164.0 -margin_top = 24.0 -margin_right = 323.0 -margin_bottom = 76.0 -mouse_filter = 0 +layout_mode = 2 size_flags_vertical = 1 +mouse_filter = 0 text = "Isometric grid size:" -[node name="IsometricGridSizeValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource( 7 )] -margin_left = 327.0 -margin_top = 24.0 -margin_right = 486.0 -margin_bottom = 76.0 +[node name="IsometricGridSizeValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource("7")] +layout_mode = 2 size_flags_horizontal = 3 -value = Vector2( 16, 8 ) -min_value = Vector2( 2, 2 ) +value = Vector2(16, 8) +min_value = Vector2(2, 2) allow_greater = true show_ratio = true prefix_x = "Width:" @@ -641,105 +517,80 @@ suffix_x = "px" suffix_y = "px" [node name="GridOffsetLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"] -margin_top = 80.0 -margin_right = 160.0 -margin_bottom = 132.0 -hint_tooltip = "Sets grid's offset from the canvas origin (top left corner of the image)" -mouse_filter = 0 +layout_mode = 2 size_flags_vertical = 1 +tooltip_text = "Sets grid's offset from the canvas origin (top left corner of the image)" +mouse_filter = 0 text = "Grid offset:" -[node name="GridOffsetValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource( 7 )] -margin_left = 164.0 -margin_top = 80.0 -margin_right = 323.0 -margin_bottom = 132.0 -hint_tooltip = "Sets grid's offset from the canvas origin (top left corner of the image)" +[node name="GridOffsetValue" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions" instance=ExtResource("7")] +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Sets grid's offset from the canvas origin (top left corner of the image)" allow_greater = true allow_lesser = true suffix_x = "px" suffix_y = "px" [node name="GridDrawOverTileModeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"] -margin_left = 327.0 -margin_top = 99.0 -margin_right = 486.0 -margin_bottom = 113.0 -rect_min_size = Vector2( 110, 0 ) -hint_tooltip = "If disabled, the grid will be drawn only over the original image" +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 +tooltip_text = "If disabled, the grid will be drawn only over the original image" mouse_filter = 0 text = "Draw over Tile Mode:" [node name="GridDrawOverTileMode" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"] -margin_top = 136.0 -margin_right = 160.0 -margin_bottom = 160.0 -hint_tooltip = "If disabled, the grid will be drawn only over the original image" +layout_mode = 2 +tooltip_text = "If disabled, the grid will be drawn only over the original image" mouse_default_cursor_shape = 2 text = "On" [node name="GridColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"] -margin_left = 164.0 -margin_top = 141.0 -margin_right = 323.0 -margin_bottom = 155.0 -hint_tooltip = "A color of the grid" +layout_mode = 2 +tooltip_text = "A color of the grid" mouse_filter = 0 text = "Grid color:" [node name="GridColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/GridOptions"] -margin_left = 327.0 -margin_top = 136.0 -margin_right = 486.0 -margin_bottom = 160.0 -rect_min_size = Vector2( 64, 20 ) -hint_tooltip = "A color of the grid" +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 +tooltip_text = "A color of the grid" mouse_default_cursor_shape = 2 [node name="PixelGridHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 334.0 -margin_right = 486.0 -margin_bottom = 348.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="PixelGridLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridHeader"] -margin_right = 62.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Pixel Grid" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridHeader"] -margin_left = 62.0 -margin_right = 486.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="PixelGridOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 352.0 -margin_right = 486.0 -margin_bottom = 390.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 3 [node name="ShowAtZoomLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridOptions"] -margin_right = 190.0 -margin_bottom = 14.0 -rect_min_size = Vector2( 110, 0 ) -hint_tooltip = "Sets the minimal zoom at which pixel grid will be shown" -mouse_filter = 0 +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Sets the minimal zoom at which pixel grid will be shown" +mouse_filter = 0 text = "Show at zoom:" -[node name="ShowAtZoom" type="TextureProgress" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridOptions"] -margin_left = 194.0 -margin_right = 383.0 -margin_bottom = 14.0 -hint_tooltip = "Sets the minimal zoom at which pixel grid will be shown" -mouse_default_cursor_shape = 2 +[node name="ShowAtZoom" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridOptions"] +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +tooltip_text = "Sets the minimal zoom at which pixel grid will be shown" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 50.0 max_value = 15000.0 step = 50.0 @@ -750,70 +601,57 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 8 ) +script = ExtResource("8") suffix = "%" snap_step = 100.0 [node name="GridColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridOptions"] -margin_left = 387.0 -margin_right = 486.0 -margin_bottom = 14.0 -hint_tooltip = "A color of the pixel grid" +layout_mode = 2 +tooltip_text = "A color of the pixel grid" mouse_filter = 0 text = "Pixel grid color:" [node name="GridColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/PixelGridOptions"] -margin_top = 18.0 -margin_right = 190.0 -margin_bottom = 38.0 -rect_min_size = Vector2( 64, 20 ) -hint_tooltip = "A color of the pixel grid" -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "A color of the pixel grid" +mouse_default_cursor_shape = 2 [node name="TransparencyHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 394.0 -margin_right = 486.0 -margin_bottom = 408.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="TransparencyLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/TransparencyHeader"] -margin_right = 84.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Transparency" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/TransparencyHeader"] -margin_left = 84.0 -margin_right = 486.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="CheckerOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 412.0 -margin_right = 486.0 -margin_bottom = 506.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 3 [node name="SizeLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_right = 162.0 -margin_bottom = 14.0 -rect_min_size = Vector2( 110, 0 ) -hint_tooltip = "Size of the transparent checker background" -mouse_filter = 0 +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Size of the transparent checker background" +mouse_filter = 0 text = "Checker size:" -[node name="CheckerSizeValue" type="TextureProgress" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_left = 166.0 -margin_right = 314.0 -margin_bottom = 14.0 -hint_tooltip = "Size of the transparent checker background" -mouse_default_cursor_shape = 2 +[node name="CheckerSizeValue" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +tooltip_text = "Size of the transparent checker background" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 max_value = 1000.0 value = 10.0 @@ -823,94 +661,69 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 8 ) +script = ExtResource("8") snap_step = 10.0 [node name="CheckerColor1Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_left = 318.0 -margin_right = 486.0 -margin_bottom = 14.0 -hint_tooltip = "First color of the transparent checker background" +layout_mode = 2 +tooltip_text = "First color of the transparent checker background" mouse_filter = 0 text = "Checker color 1:" [node name="CheckerColor1" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_top = 18.0 -margin_right = 162.0 -margin_bottom = 38.0 -rect_min_size = Vector2( 64, 20 ) -hint_tooltip = "First color of the transparent checker background" +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 +tooltip_text = "First color of the transparent checker background" mouse_default_cursor_shape = 2 -color = Color( 0.470588, 0.470588, 0.470588, 1 ) +color = Color(0.470588, 0.470588, 0.470588, 1) [node name="CheckerColor2Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_left = 166.0 -margin_top = 21.0 -margin_right = 314.0 -margin_bottom = 35.0 -hint_tooltip = "Second color of the transparent checker background" +layout_mode = 2 +tooltip_text = "Second color of the transparent checker background" mouse_filter = 0 text = "Checker color 2:" [node name="CheckerColor2" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_left = 318.0 -margin_top = 18.0 -margin_right = 486.0 -margin_bottom = 38.0 -rect_min_size = Vector2( 64, 20 ) -hint_tooltip = "Second color of the transparent checker background" +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 +tooltip_text = "Second color of the transparent checker background" mouse_default_cursor_shape = 2 -color = Color( 0.341176, 0.34902, 0.341176, 1 ) +color = Color(0.341176, 0.34902, 0.341176, 1) [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_top = 47.0 -margin_right = 162.0 -margin_bottom = 61.0 -rect_min_size = Vector2( 110, 0 ) +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 text = "Follow Canvas Movement" [node name="CheckerFollowMovement" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_left = 166.0 -margin_top = 42.0 -margin_right = 314.0 -margin_bottom = 66.0 -hint_tooltip = "The transparent checker follow the movement of canvas" +layout_mode = 2 +tooltip_text = "The transparent checker follow the movement of canvas" mouse_default_cursor_shape = 2 text = "On" [node name="Label2" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_left = 318.0 -margin_top = 47.0 -margin_right = 486.0 -margin_bottom = 61.0 -rect_min_size = Vector2( 110, 0 ) +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 text = "Follow Canvas Zoom Level" [node name="CheckerFollowScale" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_top = 70.0 -margin_right = 162.0 -margin_bottom = 94.0 -hint_tooltip = "The transparent checker follow the zoom level of canvas" +layout_mode = 2 +tooltip_text = "The transparent checker follow the zoom level of canvas" mouse_default_cursor_shape = 2 text = "On" [node name="Label3" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_left = 166.0 -margin_top = 75.0 -margin_right = 314.0 -margin_bottom = 89.0 -rect_min_size = Vector2( 110, 0 ) +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 mouse_filter = 0 text = "Tile mode opacity:" -[node name="TileModeOpacity" type="TextureProgress" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] -margin_left = 318.0 -margin_top = 70.0 -margin_right = 486.0 -margin_bottom = 94.0 -mouse_default_cursor_shape = 2 +[node name="TileModeOpacity" type="TextureProgressBar" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/CheckerOptions"] +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" max_value = 1.0 step = 0.01 value = 1.0 @@ -919,795 +732,581 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 8 ) +script = ExtResource("8") snap_step = 0.1 [node name="BackgroundHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 510.0 -margin_right = 486.0 -margin_bottom = 524.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundHeader"] -margin_right = 74.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Background" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundHeader"] -margin_left = 74.0 -margin_right = 486.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="BackgroundOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas"] -margin_top = 528.0 -margin_right = 486.0 -margin_bottom = 572.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 3 [node name="ColorFromLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundOptions"] -margin_top = 3.0 -margin_right = 182.0 -margin_bottom = 17.0 -rect_min_size = Vector2( 110, 0 ) -mouse_filter = 0 +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_horizontal = 3 +mouse_filter = 0 text = "Background color from:" [node name="ColorOptionButton" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundOptions"] -margin_left = 186.0 -margin_right = 368.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Theme" -items = [ "Theme", null, false, 0, null, "Custom", null, false, 1, null ] +mouse_default_cursor_shape = 2 +item_count = 2 selected = 0 +popup/item_0/text = "Theme" +popup/item_0/id = 0 +popup/item_1/text = "Custom" +popup/item_1/id = 1 [node name="ColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundOptions"] -margin_left = 372.0 -margin_top = 3.0 -margin_right = 486.0 -margin_bottom = 17.0 +layout_mode = 2 mouse_filter = 0 text = "Background color:" [node name="BackgroundColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Canvas/BackgroundOptions"] -margin_top = 24.0 -margin_right = 182.0 -margin_bottom = 44.0 -rect_min_size = Vector2( 64, 20 ) +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 mouse_default_cursor_shape = 2 -color = Color( 0.470588, 0.470588, 0.470588, 1 ) +color = Color(0.470588, 0.470588, 0.470588, 1) [node name="Timeline" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 28.0 -margin_right = 498.0 -margin_bottom = 94.0 +layout_mode = 2 [node name="TimelineHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline"] -margin_top = 108.0 -margin_right = 498.0 -margin_bottom = 122.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineHeader"] -margin_right = 51.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Timeline" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineHeader"] -margin_left = 51.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="TimelineOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline"] -margin_right = 498.0 -margin_bottom = 48.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 3 [node name="SelectLayerOnButtonLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"] -margin_top = 5.0 -margin_right = 176.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 110, 0 ) -mouse_filter = 0 +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_horizontal = 3 +mouse_filter = 0 text = "Select layer when clicking on one of its buttons:" [node name="SelectLayerOnButton" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"] -margin_left = 180.0 -margin_right = 275.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "On" [node name="OnionSkinningPastColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"] -margin_left = 279.0 -margin_top = 5.0 -margin_right = 374.0 -margin_bottom = 19.0 +layout_mode = 2 mouse_filter = 0 text = "Onion skinning past color:" [node name="OnionSkinningPastColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"] -margin_top = 28.0 -margin_right = 176.0 -margin_bottom = 48.0 -rect_min_size = Vector2( 64, 20 ) +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 mouse_default_cursor_shape = 2 -color = Color( 1, 0, 0, 1 ) +color = Color(1, 0, 0, 1) [node name="OnionSkinningFutureColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"] -margin_left = 180.0 -margin_top = 31.0 -margin_right = 275.0 -margin_bottom = 45.0 +layout_mode = 2 mouse_filter = 0 text = "Onion skinning future color:" [node name="OnionSkinningFutureColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Timeline/TimelineOptions"] -margin_left = 279.0 -margin_top = 28.0 -margin_right = 374.0 -margin_bottom = 48.0 -rect_min_size = Vector2( 64, 20 ) +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 mouse_default_cursor_shape = 2 -color = Color( 0, 0, 1, 1 ) +color = Color(0, 0, 1, 1) [node name="Selection" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 28.0 -margin_right = 498.0 -margin_bottom = 76.0 +layout_mode = 2 [node name="SelectionHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection"] -margin_top = 108.0 -margin_right = 498.0 -margin_bottom = 122.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionHeader"] -margin_right = 51.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Selection" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionHeader"] -margin_left = 51.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="SelectionOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection"] -margin_right = 498.0 -margin_bottom = 48.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 3 [node name="AnimateLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"] -margin_top = 5.0 -margin_right = 176.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 110, 0 ) -mouse_filter = 0 +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_horizontal = 3 +mouse_filter = 0 text = "Animated selection borders" [node name="Animate" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"] -margin_left = 180.0 -margin_right = 275.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -pressed = true +mouse_default_cursor_shape = 2 +button_pressed = true text = "On" [node name="BorderColor1Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"] -margin_left = 279.0 -margin_top = 5.0 -margin_right = 374.0 -margin_bottom = 19.0 +layout_mode = 2 mouse_filter = 0 text = "Border color 1:" [node name="BorderColor1" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"] -margin_top = 28.0 -margin_right = 176.0 -margin_bottom = 48.0 -rect_min_size = Vector2( 64, 20 ) +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 mouse_default_cursor_shape = 2 -color = Color( 1, 1, 1, 1 ) +color = Color(1, 1, 1, 1) [node name="BorderColor2Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"] -margin_left = 180.0 -margin_top = 31.0 -margin_right = 275.0 -margin_bottom = 45.0 +layout_mode = 2 mouse_filter = 0 text = "Border color 2:" [node name="BorderColor2" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Selection/SelectionOptions"] -margin_left = 279.0 -margin_top = 28.0 -margin_right = 374.0 -margin_bottom = 48.0 -rect_min_size = Vector2( 64, 20 ) +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 mouse_default_cursor_shape = 2 [node name="Shortcuts" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 74.0 -margin_right = 498.0 -margin_bottom = 406.0 +layout_mode = 2 size_flags_vertical = 3 [node name="ShortcutHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Shortcuts"] -margin_right = 498.0 -margin_bottom = 14.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Shortcuts/ShortcutHeader"] -margin_right = 60.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Shortcuts" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Shortcuts/ShortcutHeader"] -margin_left = 60.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 -[node name="ShortcutEdit" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Shortcuts" instance=ExtResource( 3 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_top = 18.0 -margin_right = 498.0 -margin_bottom = 332.0 +[node name="ShortcutEdit" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Shortcuts" instance=ExtResource("3")] +layout_mode = 2 [node name="Backup" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 184.0 -margin_right = 498.0 -margin_bottom = 254.0 +layout_mode = 2 [node name="BackupHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup"] -margin_top = 108.0 -margin_right = 498.0 -margin_bottom = 122.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/BackupHeader"] -margin_right = 51.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Backup" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/BackupHeader"] -margin_left = 51.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="AutosaveContainer" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup"] -margin_top = 18.0 -margin_right = 498.0 -margin_bottom = 70.0 +layout_mode = 2 columns = 3 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/AutosaveContainer"] -margin_top = 5.0 -margin_right = 115.0 -margin_bottom = 19.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Enable autosave" [node name="EnableAutosave" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/AutosaveContainer"] -margin_left = 119.0 -margin_right = 214.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -pressed = true +mouse_default_cursor_shape = 2 +button_pressed = true text = "On" -__meta__ = { -"_edit_use_anchors_": false -} [node name="AutosaveIntervalLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/AutosaveContainer"] -margin_top = 33.0 -margin_right = 115.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Autosave interval:" [node name="AutosaveInterval" type="SpinBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Backup/AutosaveContainer"] -margin_left = 119.0 -margin_top = 28.0 -margin_right = 214.0 -margin_bottom = 52.0 -rect_min_size = Vector2( 95, 0 ) -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(95, 0) +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 0.1 max_value = 30.0 step = 0.25 -value = 1.0 -align = 2 +value = 1.1 suffix = "minute(s)" -__meta__ = { -"_edit_use_anchors_": false -} [node name="Performance" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 28.0 -margin_right = 500.0 -margin_bottom = 80.0 +layout_mode = 2 [node name="PerformanceHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance"] -margin_top = 108.0 -margin_right = 498.0 -margin_bottom = 122.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceHeader"] -margin_right = 51.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Performance" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceHeader"] -margin_left = 51.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="PerformanceContainer" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance"] -margin_right = 500.0 -margin_bottom = 52.0 +layout_mode = 2 columns = 3 [node name="SetFPSLimitLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"] -margin_top = 5.0 -margin_right = 158.0 -margin_bottom = 19.0 -hint_tooltip = "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit." -mouse_filter = 0 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit." +mouse_filter = 0 text = "Set application FPS limit:" [node name="SetFPSLimit" type="SpinBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"] -margin_left = 162.0 -margin_right = 257.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 95, 0 ) -hint_tooltip = "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit." -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(95, 0) +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Sets the limit of the application's frames per second. The lower the number, the lower the CPU usage, but the application gets slower, choppier and unresponsive. 0 means that there is no limit." +mouse_default_cursor_shape = 2 max_value = 144.0 -align = 2 -__meta__ = { -"_edit_use_anchors_": false -} [node name="PauseAppFocusLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"] -margin_left = 261.0 -margin_top = 5.0 -margin_right = 500.0 -margin_bottom = 19.0 -hint_tooltip = "If this is toggled on, when the application's window loses focus, it gets paused. This helps lower CPU usage when idle. The application gets unpaused when the mouse enters the application's window." +layout_mode = 2 +tooltip_text = "If this is toggled on, when the application's window loses focus, it gets paused. This helps lower CPU usage when idle. The application gets unpaused when the mouse enters the application's window." mouse_filter = 0 text = "Pause application when it loses focus" [node name="PauseAppFocus" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Performance/PerformanceContainer"] -margin_top = 28.0 -margin_right = 158.0 -margin_bottom = 52.0 -hint_tooltip = "If this is toggled on, when the application's window loses focus, it gets paused. This helps lower CPU usage when idle. The application gets unpaused when the mouse enters the application's window." +layout_mode = 2 +tooltip_text = "If this is toggled on, when the application's window loses focus, it gets paused. This helps lower CPU usage when idle. The application gets unpaused when the mouse enters the application's window." mouse_default_cursor_shape = 2 -pressed = true +button_pressed = true text = "On" -__meta__ = { -"_edit_use_anchors_": false -} [node name="Drivers" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 74.0 -margin_right = 498.0 -margin_bottom = 112.0 +layout_mode = 2 [node name="DriversHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers"] -margin_right = 498.0 -margin_bottom = 14.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversHeader"] -margin_right = 46.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Drivers" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversHeader"] -margin_left = 46.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="DriversContainer" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers"] -margin_top = 18.0 -margin_right = 498.0 -margin_bottom = 38.0 +layout_mode = 2 columns = 3 [node name="RendererLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversContainer"] -margin_top = 3.0 -margin_right = 164.0 -margin_bottom = 17.0 -mouse_filter = 0 +layout_mode = 2 size_flags_horizontal = 3 +mouse_filter = 0 text = "Renderer:" [node name="Renderer" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversContainer"] -margin_left = 168.0 -margin_right = 331.0 -margin_bottom = 20.0 -hint_tooltip = "Specifies the renderer/video driver being used. GLES2 is better for older and low-end devices, but GLES3 may offer more features." -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "GLES2" -items = [ "GLES3", null, false, 0, null, "GLES2", null, false, 1, null ] -selected = 1 +tooltip_text = "Specifies the renderer/video driver being used. GLES2 is better for older and low-end devices, but GLES3 may offer more features." +mouse_default_cursor_shape = 2 +disabled = true +item_count = 2 +selected = 0 +popup/item_0/text = "OpenGL" +popup/item_0/id = 0 +popup/item_1/text = "Vulkan" +popup/item_1/id = 1 [node name="TabletDriverLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversContainer"] unique_name_in_owner = true visible = false -margin_left = 335.0 -margin_top = 3.0 -margin_right = 498.0 -margin_bottom = 17.0 -mouse_filter = 0 +layout_mode = 2 size_flags_horizontal = 3 +mouse_filter = 0 text = "Tablet driver:" [node name="TabletDriver" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Drivers/DriversContainer"] unique_name_in_owner = true visible = false -margin_left = 335.0 -margin_right = 498.0 -margin_bottom = 20.0 -hint_tooltip = "Specifies the tablet driver being used on Windows. If you have Windows Ink enabled, select winink." -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Specifies the tablet driver being used on Windows. If you have Windows Ink enabled, select winink." +mouse_default_cursor_shape = 2 [node name="Extensions" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 56.0 -margin_right = 498.0 -margin_bottom = 65.0 -script = ExtResource( 2 ) +layout_mode = 2 +script = ExtResource("2") [node name="ExtensionsHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions"] -margin_top = 108.0 -margin_right = 498.0 -margin_bottom = 122.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/ExtensionsHeader"] -margin_right = 51.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Extensions" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/ExtensionsHeader"] -margin_left = 51.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="InstalledExtensions" type="ItemList" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions"] -margin_right = 498.0 -margin_bottom = 9.0 +layout_mode = 2 auto_height = true [node name="HBoxContainer" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions"] -margin_right = 40.0 -margin_bottom = 40.0 +layout_mode = 2 [node name="AddExtensionButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer"] -margin_right = 91.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Add Extension" [node name="EnableButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer"] -margin_right = 91.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 disabled = true text = "Enable" [node name="UninstallButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer"] -margin_right = 91.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 disabled = true text = "Uninstall" [node name="OpenFolderButton" type="Button" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer"] -margin_right = 12.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Open Folder" [node name="Cursors" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 56.0 -margin_right = 525.0 -margin_bottom = 164.0 +layout_mode = 2 [node name="CursorsHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors"] -margin_top = 108.0 -margin_right = 498.0 -margin_bottom = 122.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsHeader"] -margin_right = 51.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Cursors" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsHeader"] -margin_left = 51.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="CursorsContainer" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors"] -margin_right = 525.0 -margin_bottom = 108.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 3 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_top = 5.0 -margin_right = 126.0 -margin_bottom = 19.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Left pixel indicator" [node name="LeftIndicatorCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_left = 130.0 -margin_right = 354.0 -margin_bottom = 24.0 -hint_tooltip = "Show left mouse pixel indicator or brush on the canvas when drawing" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -pressed = true +tooltip_text = "Show left mouse pixel indicator or brush on the canvas when drawing" +mouse_default_cursor_shape = 2 +button_pressed = true text = "On" [node name="Label2" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_left = 358.0 -margin_top = 5.0 -margin_right = 525.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Right pixel indicator" [node name="RightIndicatorCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_top = 28.0 -margin_right = 126.0 -margin_bottom = 52.0 -hint_tooltip = "Show right mouse pixel indicator or brush on the canvas when drawing" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Show right mouse pixel indicator or brush on the canvas when drawing" +mouse_default_cursor_shape = 2 +button_pressed = true text = "On" [node name="Label3" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_left = 130.0 -margin_top = 33.0 -margin_right = 354.0 -margin_bottom = 47.0 +layout_mode = 2 text = "Show left tool icon" [node name="LeftToolIconCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_left = 358.0 -margin_top = 28.0 -margin_right = 525.0 -margin_bottom = 52.0 -hint_tooltip = "Displays an icon of the selected left tool next to the cursor on the canvas" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -pressed = true +tooltip_text = "Displays an icon of the selected left tool next to the cursor on the canvas" +mouse_default_cursor_shape = 2 +button_pressed = true text = "On" [node name="Label4" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_top = 61.0 -margin_right = 126.0 -margin_bottom = 75.0 +layout_mode = 2 text = "Show right tool icon" [node name="RightToolIconCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_left = 130.0 -margin_top = 56.0 -margin_right = 354.0 -margin_bottom = 80.0 -hint_tooltip = "Displays an icon of the selected right tool next to the cursor on the canvas" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -pressed = true +tooltip_text = "Displays an icon of the selected right tool next to the cursor on the canvas" +mouse_default_cursor_shape = 2 +button_pressed = true text = "On" [node name="Label5" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_left = 358.0 -margin_top = 61.0 -margin_right = 525.0 -margin_bottom = 75.0 +layout_mode = 2 text = "Use native mouse cursors" [node name="NativeCursorsCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_top = 84.0 -margin_right = 126.0 -margin_bottom = 108.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "On" [node name="Label6" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_left = 130.0 -margin_top = 89.0 -margin_right = 354.0 -margin_bottom = 103.0 +layout_mode = 2 text = "Use cross cursor for the canvas" [node name="CrossCursorCheckbox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Cursors/CursorsContainer"] -margin_left = 358.0 -margin_top = 84.0 -margin_right = 525.0 -margin_bottom = 108.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -pressed = true +button_pressed = true text = "On" [node name="Image" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false -margin_top = 240.0 -margin_right = 506.0 -margin_bottom = 316.0 +layout_mode = 2 [node name="ImageHeader" type="HBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image"] -margin_top = 108.0 -margin_right = 498.0 -margin_bottom = 122.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageHeader"] -margin_right = 51.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Image" [node name="HSeparator" type="HSeparator" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageHeader"] -margin_left = 51.0 -margin_right = 498.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="ImageOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image"] -margin_right = 506.0 -margin_bottom = 76.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 3 [node name="DefaultWidthLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"] -margin_top = 5.0 -margin_right = 110.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 110, 0 ) -hint_tooltip = "A default width of a new image" -mouse_filter = 0 +custom_minimum_size = Vector2(110, 0) +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "A default width of a new image" +mouse_filter = 0 text = "Default width:" [node name="ImageDefaultWidth" type="SpinBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"] -margin_left = 114.0 -margin_right = 188.0 -margin_bottom = 24.0 -hint_tooltip = "A default width of a new image" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "A default width of a new image" +mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 16384.0 value = 64.0 rounded = true -align = 2 suffix = "px" [node name="DefaultHeightLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"] -margin_top = 33.0 -margin_right = 110.0 -margin_bottom = 47.0 -hint_tooltip = "A default height of a new image" +layout_mode = 2 +tooltip_text = "A default height of a new image" mouse_filter = 0 text = "Default height:" [node name="ImageDefaultHeight" type="SpinBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"] -margin_left = 114.0 -margin_top = 28.0 -margin_right = 188.0 -margin_bottom = 52.0 -hint_tooltip = "A default height of a new image" +layout_mode = 2 +tooltip_text = "A default height of a new image" mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 16384.0 value = 64.0 rounded = true -align = 2 suffix = "px" [node name="DefaultFillColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"] -margin_top = 59.0 -margin_right = 110.0 -margin_bottom = 73.0 -hint_tooltip = "A default background color of a new image" +layout_mode = 2 +tooltip_text = "A default background color of a new image" mouse_filter = 0 text = "Default fill color:" [node name="DefaultFillColor" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Image/ImageOptions"] -margin_left = 114.0 -margin_top = 56.0 -margin_right = 188.0 -margin_bottom = 76.0 -rect_min_size = Vector2( 64, 20 ) -hint_tooltip = "A default background color of a new image" +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 +tooltip_text = "A default background color of a new image" mouse_default_cursor_shape = 2 -color = Color( 0, 0, 0, 0 ) +color = Color(0, 0, 0, 0) [node name="MustRestart" type="HBoxContainer" parent="HSplitContainer/VBoxContainer"] unique_name_in_owner = true visible = false -margin_top = 392.0 -margin_right = 498.0 -margin_bottom = 406.0 +layout_mode = 2 [node name="Label" type="Label" parent="HSplitContainer/VBoxContainer/MustRestart"] -margin_right = 359.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Pixelorama must be restarted for changes to take effect." [node name="Popups" type="Node" parent="."] [node name="AddExtensionFileDialog" type="FileDialog" parent="Popups"] -margin_right = 429.0 -margin_bottom = 356.0 -rect_min_size = Vector2( 172, 60.2 ) -window_title = "Open File(s)" -resizable = true mode = 1 access = 2 -filters = PoolStringArray( "*.pck ; Godot Resource Pack File", "*.zip ;" ) +filters = PackedStringArray("*.pck ; Godot Resource Pack File", "*.zip ;") show_hidden_files = true -[connection signal="about_to_show" from="." to="." method="_on_PreferencesDialog_about_to_show"] -[connection signal="popup_hide" from="." to="." method="_on_PreferencesDialog_popup_hide"] +[connection signal="about_to_popup" from="." to="." method="_on_PreferencesDialog_about_to_show"] +[connection signal="visibility_changed" from="." to="." method="_on_PreferencesDialog_visibility_changed"] [connection signal="item_selected" from="HSplitContainer/List" to="." method="_on_List_item_selected"] -[connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language/System Language" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language" method="_on_Language_pressed" binds= [ 1 ]] +[connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language/System Language" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Language" method="_on_Language_pressed" binds= [1]] [connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions/ShrinkContainer/ShrinkApplyButton" to="." method="_on_ShrinkApplyButton_pressed"] +[connection signal="empty_clicked" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/InstalledExtensions" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_InstalledExtensions_empty_clicked"] [connection signal="item_selected" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/InstalledExtensions" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_InstalledExtensions_item_selected"] -[connection signal="nothing_selected" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/InstalledExtensions" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_InstalledExtensions_nothing_selected"] [connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer/AddExtensionButton" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_AddExtensionButton_pressed"] [connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer/EnableButton" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_EnableButton_pressed"] [connection signal="pressed" from="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions/HBoxContainer/UninstallButton" to="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Extensions" method="_on_UninstallButton_pressed"] diff --git a/src/Preferences/RestoreDefaultButton.gd b/src/Preferences/RestoreDefaultButton.gd index cb5b7c6b133..5bc8bd1b4a3 100644 --- a/src/Preferences/RestoreDefaultButton.gd +++ b/src/Preferences/RestoreDefaultButton.gd @@ -1,3 +1,4 @@ +class_name RestoreDefaultButton extends TextureButton var setting_name: String @@ -8,13 +9,19 @@ var node: Node func _ready() -> void: + disabled = true modulate = Global.modulate_icon_color + texture_normal = preload("res://assets/graphics/misc/icon_reload.png") + texture_disabled = ImageTexture.new() + size_flags_horizontal = Control.SIZE_SHRINK_END + size_flags_vertical = Control.SIZE_SHRINK_CENTER + pressed.connect(_on_RestoreDefaultButton_pressed) func _on_RestoreDefaultButton_pressed() -> void: Global.set(setting_name, default_value) if not require_restart: Global.config_cache.set_value("preferences", setting_name, default_value) - Global.preferences_dialog.preference_update(setting_name, require_restart) + Global.preferences_dialog.preference_update(require_restart) Global.preferences_dialog.disable_restore_default_button(self, true) node.set(value_type, default_value) diff --git a/src/Preferences/RestoreDefaultButton.tscn b/src/Preferences/RestoreDefaultButton.tscn deleted file mode 100644 index abebe2aec35..00000000000 --- a/src/Preferences/RestoreDefaultButton.tscn +++ /dev/null @@ -1,18 +0,0 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://assets/graphics/misc/icon_reload.png" type="Texture" id=1] -[ext_resource path="res://src/Preferences/RestoreDefaultButton.gd" type="Script" id=2] - -[sub_resource type="ImageTexture" id=1] - -[node name="RestoreDefaultButton" type="TextureButton" groups=["UIButtons"]] -margin_right = 16.0 -margin_bottom = 16.0 -size_flags_horizontal = 8 -size_flags_vertical = 4 -disabled = true -texture_normal = ExtResource( 1 ) -texture_disabled = SubResource( 1 ) -script = ExtResource( 2 ) - -[connection signal="pressed" from="." to="." method="_on_RestoreDefaultButton_pressed"] diff --git a/src/Preferences/ThemeColorPreview.tscn b/src/Preferences/ThemeColorPreview.tscn index e0dfb6c5451..4b3efb17114 100644 --- a/src/Preferences/ThemeColorPreview.tscn +++ b/src/Preferences/ThemeColorPreview.tscn @@ -1,23 +1,23 @@ [gd_scene format=2] [node name="ThemeColorPreview" type="ColorRect"] -margin_right = 50.0 -margin_bottom = 14.0 -rect_min_size = Vector2( 50, 16 ) +offset_right = 50.0 +offset_bottom = 14.0 +custom_minimum_size = Vector2( 50, 16 ) color = Color( 0.380392, 0.384314, 0.380392, 1 ) [node name="HBoxContainer" type="HBoxContainer" parent="."] anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 3.0 -margin_top = 3.0 -margin_right = -3.0 -margin_bottom = -3.0 +offset_left = 3.0 +offset_top = 3.0 +offset_right = -3.0 +offset_bottom = -3.0 [node name="ColorRect" type="ColorRect" parent="HBoxContainer"] -margin_right = 20.0 -margin_bottom = 10.0 -rect_min_size = Vector2( 20, 10 ) +offset_right = 20.0 +offset_bottom = 10.0 +custom_minimum_size = Vector2( 20, 10 ) size_flags_horizontal = 3 color = Color( 0.152941, 0.152941, 0.152941, 1 ) __meta__ = { @@ -25,10 +25,10 @@ __meta__ = { } [node name="ColorRect2" type="ColorRect" parent="HBoxContainer"] -margin_left = 24.0 -margin_right = 44.0 -margin_bottom = 10.0 -rect_min_size = Vector2( 20, 10 ) +offset_left = 24.0 +offset_right = 44.0 +offset_bottom = 10.0 +custom_minimum_size = Vector2( 20, 10 ) size_flags_horizontal = 3 color = Color( 0.411765, 0.411765, 0.411765, 1 ) __meta__ = { diff --git a/src/Shaders/AutoInvertColors.shader b/src/Shaders/AutoInvertColors.gdshader similarity index 71% rename from src/Shaders/AutoInvertColors.shader rename to src/Shaders/AutoInvertColors.gdshader index 8263d02051e..0f28ee86914 100644 --- a/src/Shaders/AutoInvertColors.shader +++ b/src/Shaders/AutoInvertColors.gdshader @@ -1,12 +1,13 @@ shader_type canvas_item; +uniform sampler2D screen_texture : hint_screen_texture; void fragment() { vec4 color = texture(TEXTURE, UV); COLOR = color; vec3 inverted = vec3(1.0) - color.rgb; - vec3 screen_color = textureLod(SCREEN_TEXTURE, SCREEN_UV, 0.0).rgb; + vec3 screen_color = textureLod(screen_texture, SCREEN_UV, 0.0).rgb; float screen_avg = (screen_color.r + screen_color.g + screen_color.b) / 3.0; - + COLOR.rgb = inverted * step(0.5, screen_avg) + color.rgb * step(screen_avg, 0.5); } diff --git a/src/Shaders/ColorReplace.shader b/src/Shaders/ColorReplace.gdshader similarity index 93% rename from src/Shaders/ColorReplace.shader rename to src/Shaders/ColorReplace.gdshader index 28d343b71e7..472bb2471f8 100644 --- a/src/Shaders/ColorReplace.shader +++ b/src/Shaders/ColorReplace.gdshader @@ -3,7 +3,7 @@ render_mode unshaded; uniform vec2 size; -uniform vec4 old_color; //Our description +uniform vec4 old_color; uniform vec4 new_color; uniform float similarity_percent : hint_range(0.0, 100.0); @@ -22,8 +22,8 @@ void fragment() { // applies on each pixel separately vec4 col = original_color; // Innocent till proven guilty - float max_diff = distance(original_color, old_color); // How much this pixel matches our description - + float max_diff = distance(original_color, old_color); // How much this pixel matches our description + float similarity = abs(2.0 - ((similarity_percent/100.0) * 2.0)); if (max_diff <= similarity) // We found our match and pixel is proven guilty (small is precise) diff --git a/src/Shaders/ColorSelect.gdshader b/src/Shaders/ColorSelect.gdshader index 52b777df41f..bcb6f84325b 100644 --- a/src/Shaders/ColorSelect.gdshader +++ b/src/Shaders/ColorSelect.gdshader @@ -1,13 +1,13 @@ shader_type canvas_item; render_mode unshaded; -uniform sampler2D selection : hint_black; +uniform sampler2D selection : hint_default_black; uniform vec4 color; uniform float similarity_percent : hint_range(0.0, 100.0); uniform int operation = 0; // 0 = add, 1 = subtract, 2 = intersect void fragment() { - vec4 original_color = texture(TEXTURE, UV); + vec4 original_color = texture(TEXTURE, UV); float diff = distance(original_color, color); float similarity = abs(2.0 - ((similarity_percent/100.0) * 2.0)); vec4 col = texture(selection, UV); diff --git a/src/Shaders/Desaturate.shader b/src/Shaders/Desaturate.gdshader similarity index 99% rename from src/Shaders/Desaturate.shader rename to src/Shaders/Desaturate.gdshader index d3306a8ca7f..c27ecbeed2e 100644 --- a/src/Shaders/Desaturate.shader +++ b/src/Shaders/Desaturate.gdshader @@ -8,7 +8,7 @@ uniform bool alpha; uniform sampler2D selection; float stolChannel(float x) { - return (x < 0.04045) ? (x / 12.92) : pow((x + 0.055) / 1.055, 2.4); + return (x < 0.04045) ? (x / 12.92) : pow((x + 0.055) / 1.055, 2.4); } vec3 standardToLinear(vec3 c) { @@ -39,7 +39,7 @@ void fragment() { // Get color from the sprite texture at the current pixel we are rendering vec4 original_color = texture(TEXTURE, UV); vec4 selection_color = texture(selection, UV); - + // Transform from standard RGB to linear RGB. vec3 std = original_color.rgb; vec3 lin = standardToLinear(std); diff --git a/src/Shaders/DropShadow.tres b/src/Shaders/DropShadow.gdshader similarity index 92% rename from src/Shaders/DropShadow.tres rename to src/Shaders/DropShadow.gdshader index 5e2be92e266..66c0a426b81 100644 --- a/src/Shaders/DropShadow.tres +++ b/src/Shaders/DropShadow.gdshader @@ -1,7 +1,4 @@ -[gd_resource type="Shader" format=2] - -[resource] -code = "shader_type canvas_item; +shader_type canvas_item; render_mode unshaded; uniform vec2 shadow_offset; // Offset, in pixel coordinate [0, 1, 2, and so on] @@ -16,19 +13,19 @@ void fragment() { shadow *= shadow_color.a; // Multiply this mask by shadow alpha shadow = mix(0.0, shadow, texture(selection, UV).a); // Clip shadow by selection mask shadow = mix(shadow, 0.0, original.a); // Erase shadow alpha on original area - + // Make a border to prevent stretching pixels on the edge vec2 border_uv = UV - offset; border_uv -= 0.5; border_uv *= 2.0; border_uv = abs(border_uv); - + float border = max(border_uv.x, border_uv.y); border = floor(border); border = 1.0 - clamp(border, 0.0, 1.0); - + shadow *= border; // Clip shadow by border so no more stretching - + COLOR.rgb = mix(original.rgb, shadow_color.rgb, shadow); // Set color on shadow area COLOR.a = mix(original.a, 1.0, shadow); // Combine alpha -}" +} diff --git a/src/Shaders/Gradients/Linear.gdshader b/src/Shaders/Gradients/Linear.gdshader index 6a72c2aeb6b..d1704945e71 100644 --- a/src/Shaders/Gradients/Linear.gdshader +++ b/src/Shaders/Gradients/Linear.gdshader @@ -4,8 +4,8 @@ render_mode unshaded; uniform sampler2D selection; uniform sampler2D gradient_texture; uniform float position : hint_range(-0.5, 0.5) = 0.0; -uniform float angle : hint_range(0.0, 360.0) = 0.0; uniform float size : hint_range(0.01, 2.0) = 1.0; +uniform float angle : hint_range(0.0, 360.0) = 0.0; uniform vec2 center = vec2(0.5); uniform vec2 radius = vec2(1.0); uniform int shape = 0; // 0 = linear, 1 = radial @@ -18,7 +18,7 @@ float modify_uv(vec2 uv) { vec2 uv_offsetted = uv - 0.5; float angle_cos = cos(radians(angle)); float angle_sin = sin(radians(angle)); - modified_uv = uv_offsetted.x * angle_cos - uv_offsetted.y * angle_sin; + modified_uv = uv_offsetted.x * angle_cos - uv_offsetted.y * angle_sin; modified_uv /= abs(angle_cos) + abs(angle_sin); modified_uv /= size; float pivot = position / size; @@ -35,12 +35,12 @@ float modify_uv(vec2 uv) { float mirror_fract(float uv) { - int sign_uv = (int(sign(uv)) - 1) / 2; + int sign_uv = (int(sign(uv)) - 1) / 2; // returns -1 for negative sign and 0 for positive if (int((uv)) % 2 == sign_uv) uv = fract(uv); else uv = fract(1.0 - uv); - + return uv; } diff --git a/src/Shaders/Gradients/LinearDithering.gdshader b/src/Shaders/Gradients/LinearDithering.gdshader index 02d4ed26332..4c802697092 100644 --- a/src/Shaders/Gradients/LinearDithering.gdshader +++ b/src/Shaders/Gradients/LinearDithering.gdshader @@ -1,11 +1,10 @@ shader_type canvas_item; render_mode unshaded; +uniform sampler2D selection; uniform sampler2D gradient_texture; -uniform sampler2D dither_texture; +uniform sampler2D dither_texture : repeat_enable; uniform sampler2D offset_texture; -uniform sampler2D selection; -uniform vec2 image_size = vec2(64.0); uniform float position : hint_range(-0.5, 0.5) = 0.0; uniform float size : hint_range(0.01, 2.0) = 1.0; uniform float angle : hint_range(0.0, 360.0) = 0.0; @@ -13,8 +12,6 @@ uniform vec2 center = vec2(0.5); uniform vec2 radius = vec2(1.0); uniform int shape = 0; // 0 = linear, 1 = radial uniform int repeat = 0; // 0 = none, 1 = repeat, 2 = mirrored, 3 = truncate -uniform int pixel_size : hint_range(2, 16) = 2; -uniform int n_of_colors = 2; float modify_uv(vec2 uv) { @@ -23,7 +20,7 @@ float modify_uv(vec2 uv) { vec2 uv_offsetted = uv - 0.5; float angle_cos = cos(radians(angle)); float angle_sin = sin(radians(angle)); - modified_uv = uv_offsetted.x * angle_cos - uv_offsetted.y * angle_sin; + modified_uv = uv_offsetted.x * angle_cos - uv_offsetted.y * angle_sin; modified_uv /= abs(angle_cos) + abs(angle_sin); modified_uv /= size; float pivot = position / size; @@ -45,15 +42,16 @@ float mirror_fract(float uv) { uv = fract(uv); else uv = fract(1.0 - uv); - + return uv; } // Logic taken from https://godotshaders.com/shader/dither-gradient-shader/ -float dither(vec2 uv, float modified_uv) { +float dither(vec2 uv, float modified_uv, ivec2 image_size) { float uv_lower = floor(modified_uv); float uv_upper = floor(modified_uv) + 1.0; - float threshold = texture(dither_texture, uv * (image_size / float(pixel_size))).r; + ivec2 pixel_size = textureSize(dither_texture, 0); + float threshold = texture(dither_texture, uv * vec2(image_size / pixel_size.x)).r; float ramp_val = modified_uv < threshold ? 0.0 : 1.0; // sample at the lower bound colour if ramp_val is 0.0, upper bound color if 1.0 float col_sample = mix(uv_lower, uv_upper, ramp_val); @@ -70,13 +68,9 @@ void fragment() { else if (repeat == 2) modified_uv = mirror_fract(modified_uv); + int n_of_colors = textureSize(offset_texture, 0).x; vec4 output; - // Note for the future, please remember to change 100 to n_of_colors when we - // use GLES3 for the Web version. A constant number is used to make it work in WebGL 1.0. - for (int i = 1; i <= 100; i++) { - if(i > n_of_colors) { - break; - } + for (int i = 1; i <= n_of_colors; i++) { float colors_minus = float(n_of_colors - 1); float off = texture(offset_texture, vec2(float(i) / colors_minus)).r; float off_prev = texture(offset_texture, vec2(float(i - 1) / colors_minus)).r; @@ -95,7 +89,7 @@ void fragment() { continue; } float uvt = (modified_uv - off_prev) / (off - off_prev); - float col_sample = dither(UV, uvt); + float col_sample = dither(UV, uvt, textureSize(TEXTURE, 0)); output = mix(first, second, col_sample); } if (repeat == 3) diff --git a/src/Shaders/Greyscale.gdshader b/src/Shaders/Greyscale.gdshader index 57b774d730e..76764d1d340 100644 --- a/src/Shaders/Greyscale.gdshader +++ b/src/Shaders/Greyscale.gdshader @@ -1,7 +1,9 @@ shader_type canvas_item; +uniform sampler2D screen_texture : hint_screen_texture; + void fragment() { - COLOR = texture(SCREEN_TEXTURE, SCREEN_UV); + COLOR = texture(screen_texture, SCREEN_UV); // formula from "https://stackoverflow.com/a/596241" float avg = ((0.2126 * COLOR.r) + (0.7152 * COLOR.g) + (0.0722 * COLOR.b)); COLOR.rgb = vec3(avg); diff --git a/src/Shaders/HSV.shader b/src/Shaders/HSV.gdshader similarity index 99% rename from src/Shaders/HSV.shader rename to src/Shaders/HSV.gdshader index 8c6615e6ef1..ccb1a8928cb 100644 --- a/src/Shaders/HSV.shader +++ b/src/Shaders/HSV.gdshader @@ -34,7 +34,7 @@ void fragment() { // Get color from the sprite texture at the current pixel we are rendering vec4 original_color = texture(TEXTURE, UV); vec4 selection_color = texture(selection, UV); - + vec3 col = original_color.rgb; vec3 hsb = rgb2hsb(col); // If not greyscale @@ -55,7 +55,7 @@ void fragment() { else if (val_shift < 0.0) { hsb.z = mix(0, hsb.z , 1.0 - abs(val_shift)); } - + col = hsb2rgb(hsb); vec3 output = mix(original_color.rgb, col, selection_color.a); COLOR = vec4(output.rgb, original_color.a); diff --git a/src/Shaders/Invert.shader b/src/Shaders/Invert.gdshader similarity index 100% rename from src/Shaders/Invert.shader rename to src/Shaders/Invert.gdshader diff --git a/src/Shaders/MarchingAntsOutline.shader b/src/Shaders/MarchingAntsOutline.gdshader similarity index 92% rename from src/Shaders/MarchingAntsOutline.shader rename to src/Shaders/MarchingAntsOutline.gdshader index d7231a281c0..c7c883b65db 100644 --- a/src/Shaders/MarchingAntsOutline.shader +++ b/src/Shaders/MarchingAntsOutline.gdshader @@ -2,8 +2,8 @@ // Also thanks to https://andreashackel.de/tech-art/stripes-shader-1/ for the stripe tutorial shader_type canvas_item; -uniform vec4 first_color : hint_color = vec4(1.0); -uniform vec4 second_color : hint_color = vec4(0.0, 0.0, 0.0, 1.0); +uniform vec4 first_color : source_color = vec4(1.0); +uniform vec4 second_color : source_color = vec4(0.0, 0.0, 0.0, 1.0); uniform bool animated = true; uniform float width : hint_range(0, 2) = 0.05; uniform float frequency = 50.0; @@ -17,21 +17,21 @@ bool has_contrary_neighbour(vec2 uv, vec2 texture_pixel_size, sampler2D tex) { float x2 = abs(j) > width ? width * sign(j) : j; float y1 = abs(i) > width ? width * sign(i) : i; float y2 = abs(j) > width ? width * sign(j) : j; - + vec2 xy1 = uv + texture_pixel_size * vec2(x1, y1); vec2 xy2 = uv + texture_pixel_size * vec2(x2, y2); - + if (xy1 != clamp(xy1, vec2(0.0), vec2(1.0)) || texture(tex, xy1).a == 0.0 || xy2 != clamp(xy2, vec2(0.0), vec2(1.0)) || texture(tex, xy2).a == 0.0) { return true; } - + return false; } void fragment() { COLOR = texture(TEXTURE, UV); vec2 ts = TEXTURE_PIXEL_SIZE; - + if (COLOR.a > 0.0 && has_contrary_neighbour(UV, ts, TEXTURE)) { vec2 ratio = (ts.x > ts.y) ? vec2(ts.y / ts.x, 1) : vec2(1, ts.x / ts.y); vec2 uv = UV * ratio; diff --git a/src/Shaders/OffsetPixels.gdshader b/src/Shaders/OffsetPixels.gdshader index 15bc00214e9..e0b3b2d35e0 100644 --- a/src/Shaders/OffsetPixels.gdshader +++ b/src/Shaders/OffsetPixels.gdshader @@ -12,7 +12,7 @@ void fragment() { if (wrap_around) { uv = fract(uv); } - + vec4 output = texture(TEXTURE, uv); // Cut original selected content original_color.a = 0.0 * step(0.5, selection_color.a) + original_color.a * step(selection_color.a, 0.5); diff --git a/src/Shaders/OutlineInline.gdshader b/src/Shaders/OutlineInline.gdshader index d475c46cd3d..3c200bced2e 100644 --- a/src/Shaders/OutlineInline.gdshader +++ b/src/Shaders/OutlineInline.gdshader @@ -2,7 +2,7 @@ shader_type canvas_item; render_mode unshaded; -uniform vec4 color : hint_color = vec4(1.0); +uniform vec4 color : source_color = vec4(1.0); uniform float width : hint_range(0, 10) = 1.0; uniform int pattern : hint_range(0, 2) = 0; // diamond, circle, square uniform bool inside = false; diff --git a/src/Shaders/PatternFill.gdshader b/src/Shaders/PatternFill.gdshader index 4712ebcdfc2..8195715677f 100644 --- a/src/Shaders/PatternFill.gdshader +++ b/src/Shaders/PatternFill.gdshader @@ -9,8 +9,8 @@ uniform vec2 pattern_uv_offset; void fragment() { vec4 original_color = texture(TEXTURE, UV); - vec4 selection_color = texture(selection, UV); - vec4 col = original_color; + vec4 selection_color = texture(selection, UV); + vec4 col = original_color; col = textureLod(pattern, UV * (size / pattern_size) + pattern_uv_offset, 0.0); COLOR = mix(original_color, col, selection_color.a); diff --git a/src/Shaders/Posterize.gdshader b/src/Shaders/Posterize.gdshader index 9226d4fbe89..016fc02f367 100644 --- a/src/Shaders/Posterize.gdshader +++ b/src/Shaders/Posterize.gdshader @@ -9,7 +9,7 @@ void fragment() { vec4 color = texture(TEXTURE, UV); vec4 selection_color = texture(selection, UV); - + float a = floor(mod(UV.x / TEXTURE_PIXEL_SIZE.x, 2.0)); float b = floor(mod(UV.y / TEXTURE_PIXEL_SIZE.y, 2.0)); float c = mod(a + b, 2.0); diff --git a/src/Shaders/Rotation/NearestNeighbour.shader b/src/Shaders/Rotation/NearestNeighbour.gdshader similarity index 92% rename from src/Shaders/Rotation/NearestNeighbour.shader rename to src/Shaders/Rotation/NearestNeighbour.gdshader index 319544b07b5..7dfbc470c10 100644 --- a/src/Shaders/Rotation/NearestNeighbour.shader +++ b/src/Shaders/Rotation/NearestNeighbour.gdshader @@ -3,8 +3,7 @@ render_mode unshaded; uniform float angle; uniform sampler2D selection_tex; -uniform vec2 selection_pivot; -uniform vec2 selection_size; +uniform vec2 pivot_pixel; vec2 rotate(vec2 uv, vec2 pivot, float ratio) { @@ -12,14 +11,14 @@ vec2 rotate(vec2 uv, vec2 pivot, float ratio) { uv.x -= pivot.x; uv.x *= ratio; uv.x += pivot.x; - + // Rotate image uv -= pivot; uv = vec2(cos(angle) * uv.x + sin(angle) * uv.y, -sin(angle) * uv.x + cos(angle) * uv.y); uv.x /= ratio; uv += pivot; - + return uv; } @@ -27,29 +26,29 @@ vec2 rotate(vec2 uv, vec2 pivot, float ratio) { void fragment() { vec4 original = texture(TEXTURE, UV); float selection = texture(selection_tex, UV).a; - + vec2 tex_size = 1.0 / TEXTURE_PIXEL_SIZE; // Texture size in real pixel coordinates vec2 pixelated_uv = floor(UV * tex_size) / (tex_size - 1.0); // Pixelate UV to fit resolution - vec2 pivot = selection_pivot / tex_size; // Normalize pivot position + vec2 pivot = pivot_pixel / tex_size; // Normalize pivot position float ratio = tex_size.x / tex_size.y; // Resolution ratio - + // Make a border to prevent stretching pixels on the edge vec2 border_uv = rotate(pixelated_uv, pivot, ratio); - + // Center the border border_uv -= 0.5; border_uv *= 2.0; border_uv = abs(border_uv); - + float border = max(border_uv.x, border_uv.y); // This is a rectangular gradient border = floor(border - TEXTURE_PIXEL_SIZE.x); // Turn the grad into a rectangle shape border = 1.0 - clamp(border, 0.0, 1.0); // Invert the rectangle - + // Mixing vec4 rotated = texture(TEXTURE, rotate(pixelated_uv, pivot, ratio)); // Rotated image rotated.a *= texture(selection_tex, rotate(pixelated_uv, pivot, ratio)).a; // Combine with selection mask float mask = mix(selection, 1.0, 1.0 - ceil(original.a)); // Combine selection mask with area outside original - + // Combine original and rotated image only when intersecting, otherwise just pure rotated image. COLOR.rgb = mix(mix(original.rgb, rotated.rgb, rotated.a * border), rotated.rgb, mask); COLOR.a = mix(original.a, 0.0, selection); // Remove alpha on the selected area diff --git a/src/Shaders/Rotation/OmniScale.gdshader b/src/Shaders/Rotation/OmniScale.gdshader index aeffc5c34a8..3510ef97ba4 100644 --- a/src/Shaders/Rotation/OmniScale.gdshader +++ b/src/Shaders/Rotation/OmniScale.gdshader @@ -31,7 +31,7 @@ shader_type canvas_item; // 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. -// +// uniform int ScaleMultiplier : hint_range(0, 100) = 4; @@ -42,9 +42,8 @@ uniform int ScaleMultiplier : hint_range(0, 100) = 4; // Pixelorama-specific uniforms uniform float angle; uniform sampler2D selection_tex; -uniform vec2 selection_pivot; -uniform vec2 selection_size; -uniform bool preview; +uniform vec2 pivot_pixel; +uniform bool preview = false; bool is_different(vec4 a, vec4 b) @@ -285,7 +284,7 @@ vec4 scale(sampler2D image, vec2 coord, vec2 pxSize) { } return mix(r, w4, (dist + pixel_size / 2.0 - 0.5) / pixel_size>0.5?1.0:0.0); } - + return w4; } @@ -312,7 +311,7 @@ void fragment() vec4 original = texture(TEXTURE, UV); float selection = texture(selection_tex, UV).a; vec2 size = 1.0 / TEXTURE_PIXEL_SIZE; - vec2 pivot = selection_pivot / size; // Normalize pivot position + vec2 pivot = pivot_pixel / size; // Normalize pivot position float ratio = size.x / size.y; // Resolution ratio vec2 pixelated_uv = floor(UV * size) / (size - 1.0); // Pixelate UV to fit resolution vec2 rotated_uv; @@ -324,7 +323,7 @@ void fragment() } vec4 c; c = scale(TEXTURE, rotated_uv, TEXTURE_PIXEL_SIZE); - + // Taken from NearestNeighbour shader c.a *= texture(selection_tex, rotated_uv).a; // Combine with selection mask // Make a border to prevent stretching pixels on the edge @@ -347,4 +346,4 @@ void fragment() COLOR.a = mix(COLOR.a, 1.0, c.a * border); // Combine alpha of original image and rotated //c.a = step(0.5,c.a); //COLOR = c; -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/Shaders/Rotation/SmearRotxel.shader b/src/Shaders/Rotation/SmearRotxel.gdshader similarity index 54% rename from src/Shaders/Rotation/SmearRotxel.shader rename to src/Shaders/Rotation/SmearRotxel.gdshader index a89d381cad4..69dae3d7886 100644 --- a/src/Shaders/Rotation/SmearRotxel.shader +++ b/src/Shaders/Rotation/SmearRotxel.gdshader @@ -25,11 +25,11 @@ vec4 rotate(sampler2D tex, vec2 uv, vec2 tex_pixel_size) { int ox, oy; float dir; float mag; - float init_angle = initial_angle < ending_angle ? initial_angle : ending_angle; + float init_angle = initial_angle < ending_angle ? initial_angle : ending_angle; for (float angle = ending_angle; angle >= init_angle && color.a == 0.0; angle -= 1.0) { float ang = angle*3.1416/180.0; - for (k = 0; k < 9; k++) { + for (int k = 0; k < 9; k++) { int i = -1 + int(k % 3); int j = -1 + k / 3; dir = atan(float(dy + j), float(dx + i)); @@ -44,7 +44,7 @@ vec4 rotate(sampler2D tex, vec2 uv, vec2 tex_pixel_size) { if (int(size.y) % 2 != 0) { oy += 1; } - + if (ox >= 0 && ox < 3 * int(size.x) && oy >= 0 && oy < 3 * int(size.y)) { break; } @@ -52,7 +52,7 @@ vec4 rotate(sampler2D tex, vec2 uv, vec2 tex_pixel_size) { if (k == 9){ continue; } - + int row = int(oy % 3); int col = int(ox % 3); int index = col + 3 * row; @@ -105,23 +105,121 @@ vec4 rotate(sampler2D tex, vec2 uv, vec2 tex_pixel_size) { color = similarColors(f,h) && !similarColors(f,b) && !similarColors(d,h)? f : e; } } - color.a *= step(ending_angle, initial_angle) + + color.a *= step(ending_angle, initial_angle) + step(initial_angle ,ending_angle) * (angle - initial_angle) / (ending_angle - initial_angle + 0.01); } - + return color; } +// The exact same as rotate, but had to be re-defined due to https://github.com/godotengine/godot/issues/75935 +vec4 rotate_uniform(sampler2D tex, vec2 uv, vec2 tex_pixel_size) { + vec4 color = vec4(0.0); + vec2 center = origin / tex_pixel_size; + vec2 size = 1.0 / tex_pixel_size; + vec2 coord = uv / tex_pixel_size + position; + int dx = 3 * (int(coord.x) - int(center.x)); + int dy = 3 * (int(coord.y) - int(center.y)); + int k = 0; + int ox, oy; + float dir; + float mag; + float init_angle = initial_angle < ending_angle ? initial_angle : ending_angle; + for (float angle = ending_angle; angle >= init_angle && color.a == 0.0; angle -= 1.0) { + float ang = angle*3.1416/180.0; + + for (int k = 0; k < 9; k++) { + int i = -1 + int(k % 3); + int j = -1 + k / 3; + dir = atan(float(dy + j), float(dx + i)); + mag = sqrt(pow(float(dx + i), 2.0) + pow(float(dy + j), 2.0)); + dir -= ang; + ox = int(round(3.0 * center.x + 1.0 + mag * cos(dir))); + oy = int(round(3.0 * center.y + 1.0 + mag * sin(dir))); + + if (int(size.x) % 2 != 0) { + ox += 1; + } + if (int(size.y) % 2 != 0) { + oy += 1; + } + + if (ox >= 0 && ox < 3 * int(size.x) && oy >= 0 && oy < 3 * int(size.y)) { + break; + } + } + if (k == 9){ + continue; + } + + int row = int(oy % 3); + int col = int(ox % 3); + int index = col + 3 * row; + ox = int(round(float(ox - 1) / 3.0)); + oy = int(round(float(oy - 1) / 3.0)); + + if (ox == 0 || ox == int(size.x) - 1 || oy == 0 || oy == int(size.y) - 1) { + color = texture(tex, vec2(float(ox), float(oy)) * tex_pixel_size); + } + else { + vec4 a = texture(tex, vec2(float(ox - 1), float(oy - 1)) * tex_pixel_size); + vec4 b = texture(tex, vec2(float(ox), float(oy - 1)) * tex_pixel_size); + vec4 c = texture(tex, vec2(float(ox + 1), float(oy - 1)) * tex_pixel_size); + vec4 d = texture(tex, vec2(float(ox - 1), float(oy)) * tex_pixel_size); + vec4 e = texture(tex, vec2(float(ox), float(oy)) * tex_pixel_size); + vec4 f = texture(tex, vec2(float(ox + 1), float(oy)) * tex_pixel_size); + vec4 g = texture(tex, vec2(float(ox - 1), float(oy + 1)) * tex_pixel_size); + vec4 h = texture(tex, vec2(float(ox), float(oy + 1)) * tex_pixel_size); + vec4 l = texture(tex, vec2(float(ox + 1), float(oy + 1)) * tex_pixel_size); + + if (index == 0) { + color = similarColors(d,b) && !similarColors(d,h) && !similarColors(b,f) ? d : e; + } + else if (index == 1) { + color = (similarColors(d,b) && !similarColors(d,h) && !similarColors(b,f) && !similarColors(e,c)) + || (similarColors(b,f) && !similarColors(d,b) && !similarColors(f,h) && !similarColors(e,a)) ? b : e; + } + else if (index == 2) { + color = similarColors(b,f) && !similarColors(d,b) && !similarColors(f,h) ? f : e; + } + else if (index == 3) { + color = (similarColors(d,h) && !similarColors(f,h) && !similarColors(d,b) && !similarColors(e,a)) + || (similarColors(d,b) && !similarColors(d,h) && !similarColors(b,f) && !similarColors(e,g)) ? d : e; + } + else if (index == 4) { + color = e; + } + else if (index == 5) { + color = (similarColors(b,f) && !similarColors(d,b) && !similarColors(f,h) && !similarColors(e,l)) + || (similarColors(f,h) && !similarColors(b,f) && !similarColors(d,h) && !similarColors(e,c)) ? f : e; + } + else if (index == 6) { + color = similarColors(d,h) && !similarColors(f,h) && !similarColors(d,b) ? d : e; + } + else if (index == 7) { + color = (similarColors(f,h) && !similarColors(f,b)&& !similarColors(d,h) && !similarColors(e,g)) + || (similarColors(d,h) && !similarColors(f,h) && !similarColors(d,b) && !similarColors(e,l)) ? h : e; + } + else if (index == 8) { + color = similarColors(f,h) && !similarColors(f,b) && !similarColors(d,h)? f : e; + } + } + color.a *= step(ending_angle, initial_angle) + + step(initial_angle ,ending_angle) * (angle - initial_angle) / (ending_angle - initial_angle + 0.01); + } + + return color; +} void fragment() { vec4 original = texture(TEXTURE, UV); vec4 selection = texture(selection_tex, UV); - vec4 rotated_selection = rotate(selection_tex, UV, TEXTURE_PIXEL_SIZE); + vec4 rotated_selection = rotate_uniform(selection_tex, UV, TEXTURE_PIXEL_SIZE); vec4 rotated = rotate(TEXTURE, UV, TEXTURE_PIXEL_SIZE); rotated = mix(vec4(0.0), rotated, rotated_selection.a); rotated.a *= rotated_selection.a; // Combine with selection mask float mask = mix(selection.a, 1.0, 1.0 - ceil(original.a)); // Combine selection mask with area outside original - + // Combine original and rotated image only when intersecting, otherwise just pure rotated image. COLOR.rgb = mix(mix(original.rgb, rotated.rgb, rotated.a), rotated.rgb, mask); COLOR.a = mix(original.a, 0.0, selection.a); // Remove alpha on the selected area diff --git a/src/Shaders/Rotation/cleanEdge.gdshader b/src/Shaders/Rotation/cleanEdge.gdshader index 5bf2012161a..9add3d6de5f 100644 --- a/src/Shaders/Rotation/cleanEdge.gdshader +++ b/src/Shaders/Rotation/cleanEdge.gdshader @@ -27,24 +27,10 @@ OTHER DEALINGS IN THE SOFTWARE. shader_type canvas_item; //enables 2:1 slopes. otherwise only uses 45 degree slopes -//#define SLOPE +#define SLOPE //cleans up small detail slope transitions (if SLOPE is enabled) //if only using for rotation, CLEANUP has negligible effect and should be disabled for speed -//#define CLEANUP -// The commented out defines exposed as uniforms -uniform bool slope; -uniform bool cleanup; - -// This shader has been modified to work for Pixelorama -// Godot 3.x does not support #defines, so we will uncomment them when we port to Godot 4.x -// NearestNeighbor rotation logic has also been added into the code -// The original file can be found at -// https://gist.github.com/torcado194/e2794f5a4b22049ac0a41f972d14c329#file-cleanedge-gdshader -uniform float angle; -uniform sampler2D selection_tex; -uniform vec2 selection_pivot; -uniform vec2 selection_size; -uniform bool preview; +#define CLEANUP //the color with the highest priority. // other colors will be tested based on distance to this @@ -55,14 +41,14 @@ uniform vec3 highestColor = vec3(1.,1.,1.); // can group shapes of visually similar colors, but creates // some artifacting and should be kept as low as possible. uniform float similarThreshold = 0.0; -uniform float lineWidth = 1.0; -const mat3 yuv_matrix = mat3(vec3(0.299, 0.587, 0.114), vec3(-0.169, -0.331, 0.5), vec3(0.5, -0.419, -0.081)); +uniform float lineWidth = 1.0; -vec3 yuv(vec3 col){ - mat3 yuv = transpose(yuv_matrix); - return yuv * col; -} +// Edited for Pixelorama +uniform float angle; +uniform sampler2D selection_tex; +uniform vec2 pivot_pixel; +uniform bool preview = false; bool similar(vec4 col1, vec4 col2){ return (col1.a == 0. && col2.a == 0.) || distance(col1, col2) <= similarThreshold; @@ -79,10 +65,6 @@ bool similar4(vec4 col1, vec4 col2, vec4 col3, vec4 col4){ return similar(col1, col2) && similar(col2, col3) && similar(col3, col4); } -bool similar5(vec4 col1, vec4 col2, vec4 col3, vec4 col4, vec4 col5){ - return similar(col1, col2) && similar(col2, col3) && similar(col3, col4) && similar(col4, col5); -} - bool higher(vec4 thisCol, vec4 otherCol){ if(similar(thisCol, otherCol)) return false; if(thisCol.a == otherCol.a){ @@ -94,10 +76,6 @@ bool higher(vec4 thisCol, vec4 otherCol){ } } -vec4 higherCol(vec4 thisCol, vec4 otherCol){ - return higher(thisCol, otherCol) ? thisCol : otherCol; -} - //color distance float cd(vec4 col1, vec4 col2){ return distance(col1.rgba, col2.rgba); @@ -112,17 +90,13 @@ float distToLine(vec2 testPt, vec2 pt1, vec2 pt2, vec2 dir){ //based on down-forward direction vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uff, vec4 b, vec4 c, vec4 f, vec4 ff, vec4 db, vec4 d, vec4 df, vec4 dff, vec4 ddb, vec4 dd, vec4 ddf){ - float minWidth; - float maxWidth; - if (slope) { - minWidth = 0.44; - maxWidth = 1.142; - } - else { - minWidth = 0.0; - maxWidth = 1.4; - } -// #endif + #ifdef SLOPE + float minWidth = 0.44; + float maxWidth = 1.142; + #else + float minWidth = 0.0; + float maxWidth = 1.4; + #endif float _lineWidth = max(minWidth, min(maxWidth, lineWidth)); point = mainDir * (point - 0.5) + 0.5; //flip point @@ -145,8 +119,8 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf bool flip = false; vec2 center = vec2(0.5,0.5); -// #ifdef SLOPE - if(slope && similar3(f, d, db) && !similar3(f, d, b) && !similar(uf, db)){ //lower shallow 2:1 slant + #ifdef SLOPE + if(similar3(f, d, db) && !similar3(f, d, b) && !similar(uf, db)){ //lower shallow 2:1 slant if(similar(c, df) && higher(c, f)){ //single pixel wide diagonal, dont flip } else { @@ -166,17 +140,16 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf } //cleanup slant transitions - if (cleanup) { - if(!flip && similar(c, uf) && !(similar3(c, uf, uff) && !similar3(c, uf, ff) && !similar(d, uff))){ //shallow - float dist2 = distToLine(point, center+vec2(2.0, -1.0)*pointDir, center+vec2(-0.0, 1.0)*pointDir, pointDir); - dist = min(dist, dist2); - } + #ifdef CLEANUP + if(!flip && similar(c, uf) && !(similar3(c, uf, uff) && !similar3(c, uf, ff) && !similar(d, uff))){ //shallow + float dist2 = distToLine(point, center+vec2(2.0, -1.0)*pointDir, center+vec2(-0.0, 1.0)*pointDir, pointDir); + dist = min(dist, dist2); } -// #endif + #endif dist -= (_lineWidth/2.0); return dist <= 0.0 ? ((cd(c,f) <= cd(c,d)) ? f : d) : vec4(-1.0); - } else if(slope && similar3(uf, f, d) && !similar3(u, f, d) && !similar(uf, db)){ //forward steep 2:1 slant + } else if(similar3(uf, f, d) && !similar3(u, f, d) && !similar(uf, db)){ //forward steep 2:1 slant if(similar(c, df) && higher(c, d)){ //single pixel wide diagonal, dont flip } else { @@ -196,18 +169,17 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf } //cleanup slant transitions - if (cleanup) { - if(!flip && similar(c, db) && !(similar3(c, db, ddb) && !similar3(c, db, dd) && !similar(f, ddb))){ //steep - float dist2 = distToLine(point, center+vec2(1.0, 0.0)*pointDir, center+vec2(-1.0, 2.0)*pointDir, pointDir); - dist = min(dist, dist2); - } + #ifdef CLEANUP + if(!flip && similar(c, db) && !(similar3(c, db, ddb) && !similar3(c, db, dd) && !similar(f, ddb))){ //steep + float dist2 = distToLine(point, center+vec2(1.0, 0.0)*pointDir, center+vec2(-1.0, 2.0)*pointDir, pointDir); + dist = min(dist, dist2); } -// #endif + #endif dist -= (_lineWidth/2.0); return dist <= 0.0 ? ((cd(c,f) <= cd(c,d)) ? f : d) : vec4(-1.0); } else -// #endif + #endif if(similar(f, d)) { //45 diagonal if(similar(c, df) && higher(c, f)){ //single pixel diagonal along neighbors, dont flip if(!similar(c, dd) && !similar(c, ff)){ //line against triple color stripe edge case @@ -227,32 +199,32 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf flip = true; } - if (flip) { + if(flip){ dist = _lineWidth-distToLine(point, center+vec2(1.0, -1.0)*pointDir, center+vec2(-1.0, 1.0)*pointDir, -pointDir); //midpoints of own diagonal pixels } else { dist = distToLine(point, center+vec2(1.0, 0.0)*pointDir, center+vec2(0.0, 1.0)*pointDir, pointDir); //midpoints of corner neighbor pixels } //cleanup slant transitions - if (slope && cleanup) { - if(!flip && similar3(c, uf, uff) && !similar3(c, uf, ff) && !similar(d, uff)){ //shallow - float dist2 = distToLine(point, center+vec2(1.5, 0.0)*pointDir, center+vec2(-0.5, 1.0)*pointDir, pointDir); - dist = max(dist, dist2); - } + #ifdef SLOPE + #ifdef CLEANUP + if(!flip && similar3(c, uf, uff) && !similar3(c, uf, ff) && !similar(d, uff)){ //shallow + float dist2 = distToLine(point, center+vec2(1.5, 0.0)*pointDir, center+vec2(-0.5, 1.0)*pointDir, pointDir); + dist = max(dist, dist2); + } - if(!flip && similar3(ddb, db, c) && !similar3(dd, db, c) && !similar(ddb, f)){ //steep - float dist2 = distToLine(point, center+vec2(1.0, -0.5)*pointDir, center+vec2(0.0, 1.5)*pointDir, pointDir); - dist = max(dist, dist2); - } + if(!flip && similar3(ddb, db, c) && !similar3(dd, db, c) && !similar(ddb, f)){ //steep + float dist2 = distToLine(point, center+vec2(1.0, -0.5)*pointDir, center+vec2(0.0, 1.5)*pointDir, pointDir); + dist = max(dist, dist2); } -// #endif -// #endif + #endif + #endif dist -= (_lineWidth/2.0); return dist <= 0.0 ? ((cd(c,f) <= cd(c,d)) ? f : d) : vec4(-1.0); } -// #ifdef SLOPE - else if(slope && similar3(ff, df, d) && !similar3(ff, df, c) && !similar(uff, d)){ //far corner of shallow slant + #ifdef SLOPE + else if(similar3(ff, df, d) && !similar3(ff, df, c) && !similar(uff, d)){ //far corner of shallow slant if(similar(f, dff) && higher(f, ff)){ //single pixel wide diagonal, dont flip @@ -273,7 +245,7 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf dist -= (_lineWidth/2.0); return dist <= 0.0 ? ((cd(f,ff) <= cd(f,df)) ? ff : df) : vec4(-1.0); - } else if(slope && similar3(f, df, dd) && !similar3(c, df, dd) && !similar(f, ddb)){ //far corner of steep slant + } else if(similar3(f, df, dd) && !similar3(c, df, dd) && !similar(f, ddb)){ //far corner of steep slant if(similar(d, ddf) && higher(d, dd)){ //single pixel wide diagonal, dont flip } else { @@ -298,11 +270,12 @@ vec4 sliceDist(vec2 point, vec2 mainDir, vec2 pointDir, vec4 u, vec4 uf, vec4 uf dist -= (_lineWidth/2.0); return dist <= 0.0 ? ((cd(d,df) <= cd(d,dd)) ? df : dd) : vec4(-1.0); } -// #endif + #endif return vec4(-1.0); } -vec2 rotate(vec2 uv, vec2 pivot, float ratio) { // Taken from NearestNeighbour shader +// Pixelorama edit, taken from NearestNeighbour shader +vec2 rotate(vec2 uv, vec2 pivot, float ratio) { // Scale and center image uv.x -= pivot.x; uv.x *= ratio; @@ -319,10 +292,11 @@ vec2 rotate(vec2 uv, vec2 pivot, float ratio) { // Taken from NearestNeighbour } void fragment() { + vec2 size = 1.0/TEXTURE_PIXEL_SIZE+0.0001; //fix for some sort of rounding error + // Pixelorama edit vec4 original = texture(TEXTURE, UV); float selection = texture(selection_tex, UV).a; - vec2 size = 1.0/TEXTURE_PIXEL_SIZE+0.0001; //fix for some sort of rounding error - vec2 pivot = selection_pivot / size; // Normalize pivot position + vec2 pivot = pivot_pixel / size; // Normalize pivot position float ratio = size.x / size.y; // Resolution ratio vec2 pixelated_uv = floor(UV * size) / (size - 1.0); // Pixelate UV to fit resolutio vec2 rotated_uv; @@ -386,7 +360,7 @@ void fragment() { col = u_col; } - // Taken from NearestNeighbour shader + // Pixelorama edit, taken from NearestNeighbour shader col.a *= texture(selection_tex, rotated_uv).a; // Combine with selection mask // Make a border to prevent stretching pixels on the edge vec2 border_uv = rotated_uv; diff --git a/src/Shaders/SilhouetteShader.gdshader b/src/Shaders/SilhouetteShader.gdshader index dc9d4d37da3..a661cefa75b 100644 --- a/src/Shaders/SilhouetteShader.gdshader +++ b/src/Shaders/SilhouetteShader.gdshader @@ -1,6 +1,6 @@ shader_type canvas_item; -uniform vec4 silhouette_color: hint_color; +uniform vec4 silhouette_color; uniform bool show_silhouette; void fragment() { @@ -9,6 +9,6 @@ void fragment() { color.rgb = silhouette_color.rgb; COLOR.rgb = color.rgb; } else { - COLOR = color + COLOR = color; } -} \ No newline at end of file +} diff --git a/src/Shaders/TransparentChecker.shader b/src/Shaders/TransparentChecker.gdshader similarity index 86% rename from src/Shaders/TransparentChecker.shader rename to src/Shaders/TransparentChecker.gdshader index cb5e480538f..715cedc572a 100644 --- a/src/Shaders/TransparentChecker.shader +++ b/src/Shaders/TransparentChecker.gdshader @@ -3,8 +3,8 @@ render_mode unshaded; uniform float size = 10.0; uniform float alpha = 1.0; -uniform vec4 color1 : hint_color = vec4(0.7, 0.7, 0.7, 1.0); -uniform vec4 color2 : hint_color = vec4(1.0); +uniform vec4 color1 : source_color = vec4(0.7, 0.7, 0.7, 1.0); +uniform vec4 color2 : source_color = vec4(1.0); uniform vec2 offset = vec2(0.0); uniform vec2 scale = vec2(0.0); uniform vec2 rect_size = vec2(0.0); @@ -21,7 +21,7 @@ void fragment() { } else if (follow_movement) ref_pos -= mod(offset, size * 2.0); - + vec2 pos = mod(ref_pos, size * 2.0); bool c1 = any(lessThan(pos, vec2(size))); bool c2 = any(greaterThanEqual(pos, vec2(size))); diff --git a/src/Shaders/UITransparency.gdshader b/src/Shaders/UITransparency.gdshader index baf42011694..447f274a5cc 100644 --- a/src/Shaders/UITransparency.gdshader +++ b/src/Shaders/UITransparency.gdshader @@ -8,13 +8,13 @@ uniform vec2 size = vec2(100.0, 100.0); void fragment(){ - + if ( - SCREEN_UV.x >= (position.x)/(screen_resolution.x) - && (1.0 - SCREEN_UV.y) >= (position.y)/(screen_resolution.y) + SCREEN_UV.x >= (position.x)/(screen_resolution.x) + && (SCREEN_UV.y) >= (position.y)/(screen_resolution.y) && SCREEN_UV.x <= (position.x + size.x)/(screen_resolution.x) - && (1.0 - SCREEN_UV.y) <= (position.y + size.y)/(screen_resolution.y) + && (SCREEN_UV.y) <= (position.y + size.y)/(screen_resolution.y) ){ COLOR.a = alpha; } diff --git a/src/Tools/3DShapeEdit.gd b/src/Tools/3DShapeEdit.gd index a4c67a6bcfc..46a4201f5e7 100644 --- a/src/Tools/3DShapeEdit.gd +++ b/src/Tools/3DShapeEdit.gd @@ -5,7 +5,7 @@ var _can_start_timer := true var _hovering: Cel3DObject = null var _dragging := false var _has_been_dragged := false -var _prev_mouse_pos := Vector2.ZERO +var _prev_mouse_pos := Vector2i.ZERO var _old_cel_image = null var _checker_update_qued := false var _object_names := { @@ -23,28 +23,28 @@ var _object_names := { Cel3DObject.Type.IMPORTED: "Custom model", } -onready var object_option_button := $"%ObjectOptionButton" as OptionButton -onready var new_object_menu_button := $"%NewObjectMenuButton" as MenuButton -onready var remove_object_button := $"%RemoveObject" as Button -onready var cel_options := $"%CelOptions" as Container -onready var object_options := $"%ObjectOptions" as Container -onready var mesh_options := $"%MeshOptions" as VBoxContainer -onready var light_options := $"%LightOptions" as VBoxContainer -onready var undo_redo_timer := $UndoRedoTimer as Timer -onready var load_model_dialog := $LoadModelDialog as FileDialog - -onready var cel_properties := { +@onready var object_option_button := $"%ObjectOptionButton" as OptionButton +@onready var new_object_menu_button := $"%NewObjectMenuButton" as MenuButton +@onready var remove_object_button := $"%RemoveObject" as Button +@onready var cel_options := $"%CelOptions" as Container +@onready var object_options := $"%ObjectOptions" as Container +@onready var mesh_options := $"%MeshOptions" as VBoxContainer +@onready var light_options := $"%LightOptions" as VBoxContainer +@onready var undo_redo_timer := $UndoRedoTimer as Timer +@onready var load_model_dialog := $LoadModelDialog as FileDialog + +@onready var cel_properties := { "camera:projection": $"%ProjectionOptionButton", "camera:rotation_degrees": $"%CameraRotation", "camera:fov": $"%CameraFOV", "camera:size": $"%CameraSize", - "viewport:world:environment:ambient_light_color": $"%AmbientColorPickerButton", - "viewport:world:environment:ambient_light_energy": $"%AmbientEnergy", + "viewport:world_3d:environment:ambient_light_color": $"%AmbientColorPickerButton", + "viewport:world_3d:environment:ambient_light_energy": $"%AmbientEnergy", } -onready var object_properties := { +@onready var object_properties := { "visible": $"%VisibleCheckBox", - "translation": $"%ObjectPosition", + "position": $"%ObjectPosition", "rotation_degrees": $"%ObjectRotation", "scale": $"%ObjectScale", "node3d_type:mesh:size": $"%MeshSize", @@ -55,7 +55,6 @@ onready var object_properties := { "node3d_type:mesh:radial_segments": $"%MeshRadialSegments", "node3d_type:mesh:rings": $"%MeshRings", "node3d_type:mesh:is_hemisphere": $"%MeshIsHemisphere", - "node3d_type:mesh:mid_height": $"%MeshMidHeight", "node3d_type:mesh:top_radius": $"%MeshTopRadius", "node3d_type:mesh:bottom_radius": $"%MeshBottomRadius", "node3d_type:mesh:text": $"%MeshText", @@ -66,7 +65,6 @@ onready var object_properties := { "node3d_type:light_energy": $"%LightEnergy", "node3d_type:light_negative": $"%LightNegative", "node3d_type:shadow_enabled": $"%ShadowEnabled", - "node3d_type:shadow_color": $"%ShadowColor", "node3d_type:omni_range": $"%OmniRange", "node3d_type:spot_range": $"%SpotRange", "node3d_type:spot_angle": $"%SpotAngle", @@ -86,47 +84,46 @@ func _input(_event: InputEvent) -> void: func _ready() -> void: - Global.connect("cel_changed", self, "_cel_changed") + super._ready() + Global.cel_changed.connect(_cel_changed) _cel_changed() var new_object_popup := new_object_menu_button.get_popup() for object in _object_names: - if object == Cel3DObject.Type.TORUS: # Remove when Godot 3.6 or 4.0 is used - continue new_object_popup.add_item(_object_names[object], object) - new_object_popup.connect("id_pressed", self, "_new_object_popup_id_pressed") + new_object_popup.id_pressed.connect(_new_object_popup_id_pressed) for prop in cel_properties: var node: Control = cel_properties[prop] if node is ValueSliderV3: - node.connect("value_changed", self, "_cel_property_vector3_changed", [prop]) + node.value_changed.connect(_cel_property_vector3_changed.bind(prop)) elif node is Range: - node.connect("value_changed", self, "_cel_property_value_changed", [prop]) + node.value_changed.connect(_cel_property_value_changed.bind(prop)) elif node is OptionButton: - node.connect("item_selected", self, "_cel_property_item_selected", [prop]) + node.item_selected.connect(_cel_property_item_selected.bind(prop)) elif node is ColorPickerButton: - node.connect("color_changed", self, "_cel_property_color_changed", [prop]) + node.color_changed.connect(_cel_property_color_changed.bind(prop)) for prop in object_properties: var node: Control = object_properties[prop] if node is ValueSliderV3: - node.connect("value_changed", self, "_object_property_vector3_changed", [prop]) + node.value_changed.connect(_object_property_vector3_changed.bind(prop)) elif node is ValueSliderV2: var property_path: String = prop if property_path.ends_with("v2"): property_path = property_path.replace("v2", "") - node.connect("value_changed", self, "_object_property_vector2_changed", [property_path]) + node.value_changed.connect(_object_property_vector2_changed.bind(property_path)) elif node is Range: - node.connect("value_changed", self, "_object_property_value_changed", [prop]) + node.value_changed.connect(_object_property_value_changed.bind(prop)) elif node is OptionButton: - node.connect("item_selected", self, "_object_property_item_selected", [prop]) + node.item_selected.connect(_object_property_item_selected.bind(prop)) elif node is ColorPickerButton: - node.connect("color_changed", self, "_object_property_color_changed", [prop]) + node.color_changed.connect(_object_property_color_changed.bind(prop)) elif node is CheckBox: - node.connect("toggled", self, "_object_property_toggled", [prop]) + node.toggled.connect(_object_property_toggled.bind(prop)) elif node is LineEdit: - node.connect("text_changed", self, "_object_property_text_changed", [prop]) + node.text_changed.connect(_object_property_text_changed.bind(prop)) -func draw_start(position: Vector2) -> void: - var project: Project = Global.current_project +func draw_start(pos: Vector2i) -> void: + var project := Global.current_project if not project.get_current_cel() is Cel3D: return if not project.layers[project.current_layer].can_layer_get_drawn(): @@ -146,7 +143,7 @@ func draw_start(position: Vector2) -> void: if is_instance_valid(_hovering): _cel.selected = _hovering _dragging = true - _prev_mouse_pos = position + _prev_mouse_pos = pos else: # We're not hovering if is_instance_valid(_cel.selected): # If we're not clicking on a gizmo, unselect @@ -154,23 +151,23 @@ func draw_start(position: Vector2) -> void: _cel.selected = null else: _dragging = true - _prev_mouse_pos = position + _prev_mouse_pos = pos -func draw_move(position: Vector2) -> void: +func draw_move(pos: Vector2i) -> void: if not Global.current_project.get_current_cel() is Cel3D: return - var camera: Camera = _cel.camera + var camera: Camera3D = _cel.camera if _dragging: _has_been_dragged = true - var proj_mouse_pos := camera.project_position(position, camera.translation.z) - var proj_prev_mouse_pos := camera.project_position(_prev_mouse_pos, camera.translation.z) + var proj_mouse_pos := camera.project_position(pos, camera.position.z) + var proj_prev_mouse_pos := camera.project_position(_prev_mouse_pos, camera.position.z) _cel.selected.change_transform(proj_mouse_pos, proj_prev_mouse_pos) - _prev_mouse_pos = position + _prev_mouse_pos = pos sprite_changed_this_frame() -func draw_end(_position: Vector2) -> void: +func draw_end(_position: Vector2i) -> void: if not Global.current_project.get_current_cel() is Cel3D: return _dragging = false @@ -181,17 +178,17 @@ func draw_end(_position: Vector2) -> void: sprite_changed_this_frame() -func cursor_move(position: Vector2) -> void: - .cursor_move(position) +func cursor_move(pos: Vector2i) -> void: + super.cursor_move(pos) if not Global.current_project.get_current_cel() is Cel3D: return # Hover logic - var camera: Camera = _cel.camera - var ray_from := camera.project_ray_origin(position) - var ray_to := ray_from + camera.project_ray_normal(position) * 20 - var space_state := camera.get_world().direct_space_state - var selection := space_state.intersect_ray(ray_from, ray_to) - if selection.empty(): + var camera: Camera3D = _cel.camera + var ray_from := camera.project_ray_origin(pos) + var ray_to := ray_from + camera.project_ray_normal(pos) * 20 + var space_state := camera.get_world_3d().direct_space_state + var selection := space_state.intersect_ray(PhysicsRayQueryParameters3D.create(ray_from, ray_to)) + if selection.is_empty(): if is_instance_valid(_hovering): _hovering.unhover() _hovering = null @@ -221,10 +218,10 @@ func _cel_changed() -> void: _cel = Global.current_project.get_current_cel() var selected = _cel.selected _cel.selected = null - if not _cel.is_connected("scene_property_changed", self, "_set_cel_node_values"): - _cel.connect("scene_property_changed", self, "_set_cel_node_values") - _cel.connect("objects_changed", self, "_fill_object_option_button") - _cel.connect("selected_object", self, "_selected_object") + if not _cel.scene_property_changed.is_connected(_set_cel_node_values): + _cel.scene_property_changed.connect(_set_cel_node_values) + _cel.objects_changed.connect(_fill_object_option_button) + _cel.selected_object.connect(_selected_object) cel_options.visible = true object_options.visible = false _set_cel_node_values() @@ -232,8 +229,8 @@ func _cel_changed() -> void: sprite_changed_this_frame() # two yields are required - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + await get_tree().process_frame + await get_tree().process_frame _cel.selected = selected @@ -253,10 +250,10 @@ func _add_object(type: int, file_path := "") -> void: undo_redo.create_action("Add 3D object") undo_redo.add_do_property(_cel, "object_properties", new_objects) undo_redo.add_undo_property(_cel, "object_properties", _cel.object_properties) - undo_redo.add_do_method(_cel, "_add_object_node", _cel.current_object_id) - undo_redo.add_undo_method(_cel, "_remove_object_node", _cel.current_object_id) - undo_redo.add_do_method(Global, "undo_or_redo", false) - undo_redo.add_undo_method(Global, "undo_or_redo", true) + undo_redo.add_do_method(_cel._add_object_node.bind(_cel.current_object_id)) + undo_redo.add_undo_method(_cel._remove_object_node.bind(_cel.current_object_id)) + undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) undo_redo.commit_action() sprite_changed_this_frame() _cel.current_object_id += 1 @@ -270,10 +267,10 @@ func _on_RemoveObject_pressed() -> void: undo_redo.create_action("Remove 3D object") undo_redo.add_do_property(_cel, "object_properties", new_objects) undo_redo.add_undo_property(_cel, "object_properties", _cel.object_properties) - undo_redo.add_do_method(_cel, "_remove_object_node", _cel.selected.id) - undo_redo.add_undo_method(_cel, "_add_object_node", _cel.selected.id) - undo_redo.add_do_method(Global, "undo_or_redo", false) - undo_redo.add_undo_method(Global, "undo_or_redo", true) + undo_redo.add_do_method(_cel._remove_object_node.bind(_cel.selected.id)) + undo_redo.add_undo_method(_cel._add_object_node.bind(_cel.selected.id)) + undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) undo_redo.commit_action() _cel.selected = null sprite_changed_this_frame() @@ -286,10 +283,10 @@ func _object_property_changed(object: Cel3DObject) -> void: undo_redo.create_action("Change object transform") undo_redo.add_do_property(_cel, "object_properties", new_properties) undo_redo.add_undo_property(_cel, "object_properties", _cel.object_properties) - undo_redo.add_do_method(_cel, "_update_objects_transform", object.id) - undo_redo.add_undo_method(_cel, "_update_objects_transform", object.id) - undo_redo.add_do_method(Global, "undo_or_redo", false) - undo_redo.add_undo_method(Global, "undo_or_redo", true) + undo_redo.add_do_method(_cel._update_objects_transform.bind(object.id)) + undo_redo.add_undo_method(_cel._update_objects_transform.bind(object.id)) + undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) undo_redo.commit_action() @@ -313,11 +310,11 @@ func _selected_object(object: Cel3DObject) -> void: if node.get_index() > 0: _get_previous_node(node).visible = property_exists node.visible = property_exists - mesh_options.visible = object.node3d_type is MeshInstance - light_options.visible = object.node3d_type is Light + mesh_options.visible = object.node3d_type is MeshInstance3D + light_options.visible = object.node3d_type is Light3D _set_object_node_values() - if not object.is_connected("property_changed", self, "_set_object_node_values"): - object.connect("property_changed", self, "_set_object_node_values") + if not object.property_changed.is_connected(_set_object_node_values): + object.property_changed.connect(_set_object_node_values) object_option_button.select(object_option_button.get_item_index(object.id + 1)) else: cel_options.visible = true @@ -327,7 +324,7 @@ func _selected_object(object: Cel3DObject) -> void: func _set_cel_node_values() -> void: - if _cel.camera.projection == Camera.PROJECTION_PERSPECTIVE: + if _cel.camera.projection == Camera3D.PROJECTION_PERSPECTIVE: _get_previous_node(cel_properties["camera:fov"]).visible = true _get_previous_node(cel_properties["camera:size"]).visible = false cel_properties["camera:fov"].visible = true @@ -371,7 +368,7 @@ func _set_node_values(to_edit: Object, properties: Dictionary) -> void: elif node is ColorPickerButton: node.color = value elif node is CheckBox: - node.pressed = value + node.button_pressed = value elif node is LineEdit: if node.text != value: node.text = value @@ -395,25 +392,25 @@ func _set_value_from_node(to_edit: Object, value, prop: String) -> void: func _cel_property_vector3_changed(value: Vector3, prop: String) -> void: _set_value_from_node(_cel, value, prop) _value_handle_change() - Global.canvas.gizmos_3d.update() + Global.canvas.gizmos_3d.queue_redraw() func _cel_property_value_changed(value: float, prop: String) -> void: _set_value_from_node(_cel, value, prop) _value_handle_change() - Global.canvas.gizmos_3d.update() + Global.canvas.gizmos_3d.queue_redraw() func _cel_property_item_selected(value: int, prop: String) -> void: _set_value_from_node(_cel, value, prop) _value_handle_change() - Global.canvas.gizmos_3d.update() + Global.canvas.gizmos_3d.queue_redraw() func _cel_property_color_changed(value: Color, prop: String) -> void: _set_value_from_node(_cel, value, prop) _value_handle_change() - Global.canvas.gizmos_3d.update() + Global.canvas.gizmos_3d.queue_redraw() func _object_property_vector3_changed(value: Vector3, prop: String) -> void: @@ -474,17 +471,17 @@ func _on_UndoRedoTimer_timeout() -> void: undo_redo.create_action("Change 3D layer properties") undo_redo.add_do_property(_cel, "scene_properties", _cel.serialize_scene_properties()) undo_redo.add_undo_property(_cel, "scene_properties", _cel.scene_properties) - undo_redo.add_do_method(_cel, "_scene_property_changed") - undo_redo.add_undo_method(_cel, "_scene_property_changed") - undo_redo.add_do_method(Global, "undo_or_redo", false) - undo_redo.add_undo_method(Global, "undo_or_redo", true) + undo_redo.add_do_method(_cel._scene_property_changed) + undo_redo.add_undo_method(_cel._scene_property_changed) + undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) undo_redo.commit_action() -func _on_LoadModelDialog_files_selected(paths: PoolStringArray) -> void: +func _on_LoadModelDialog_files_selected(paths: PackedStringArray) -> void: for path in paths: _add_object(Cel3DObject.Type.IMPORTED, path) -func _on_LoadModelDialog_popup_hide() -> void: +func _on_load_model_dialog_visibility_changed() -> void: Global.dialog_open(false) diff --git a/src/Tools/3DShapeEdit.tscn b/src/Tools/3DShapeEdit.tscn index 404293c2591..c6c98bd99ba 100644 --- a/src/Tools/3DShapeEdit.tscn +++ b/src/Tools/3DShapeEdit.tscn @@ -1,150 +1,116 @@ -[gd_scene load_steps=10 format=2] +[gd_scene load_steps=9 format=3 uid="uid://cg7d36746on67"] -[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/3DShapeEdit.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=3] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=4] -[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=5] -[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.gd" type="Script" id=6] -[ext_resource path="res://src/UI/Nodes/ValueSliderV3.tscn" type="PackedScene" id=7] +[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/3DShapeEdit.gd" id="2"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="3"] +[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="4"] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="5"] +[ext_resource type="Script" path="res://src/UI/Nodes/CollapsibleContainer.gd" id="6"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV3.tscn" id="7"] -[sub_resource type="InputEventAction" id=33] -action = "delete" +[sub_resource type="Shortcut" id="34"] -[sub_resource type="ShortCut" id=34] -shortcut = SubResource( 33 ) - -[node name="3DShapeEdit" instance=ExtResource( 1 )] -script = ExtResource( 2 ) - -[node name="ColorRect" parent="." index="0"] -margin_right = 223.0 - -[node name="Label" parent="." index="1"] -margin_right = 223.0 +[node name="3DShapeEdit" instance=ExtResource("1")] +script = ExtResource("2") [node name="HandleObjects" type="GridContainer" parent="." index="2"] -margin_top = 26.0 -margin_right = 223.0 -margin_bottom = 70.0 +layout_mode = 2 columns = 2 [node name="Label" type="Label" parent="HandleObjects" index="0"] -margin_top = 3.0 -margin_right = 111.0 -margin_bottom = 17.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Selected object:" [node name="ObjectOptionButton" type="OptionButton" parent="HandleObjects" index="1"] unique_name_in_owner = true -margin_left = 115.0 -margin_right = 223.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "None" -items = [ "None", null, false, 0, null ] +mouse_default_cursor_shape = 2 +item_count = 1 selected = 0 +popup/item_0/text = "None" +popup/item_0/id = 0 [node name="NewObjectMenuButton" type="MenuButton" parent="HandleObjects" index="2"] unique_name_in_owner = true -margin_top = 24.0 -margin_right = 111.0 -margin_bottom = 44.0 +layout_mode = 2 +size_flags_horizontal = 3 focus_mode = 2 mouse_default_cursor_shape = 2 -size_flags_horizontal = 3 text = "Add new object" -align = 0 [node name="RemoveObject" type="Button" parent="HandleObjects" index="3"] unique_name_in_owner = true -margin_left = 115.0 -margin_top = 24.0 -margin_right = 223.0 -margin_bottom = 44.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 disabled = true -shortcut = SubResource( 34 ) +shortcut = SubResource("34") text = "Remove object" [node name="CelOptions" type="VBoxContainer" parent="." index="3"] unique_name_in_owner = true -margin_top = 74.0 -margin_right = 223.0 -margin_bottom = 244.0 +layout_mode = 2 size_flags_vertical = 3 [node name="CameraOptions" type="VBoxContainer" parent="CelOptions" index="0"] -margin_right = 223.0 -margin_bottom = 146.0 -theme_type_variation = "CollapsibleContainer" -script = ExtResource( 6 ) +layout_mode = 2 +theme_type_variation = &"CollapsibleContainer" +script = ExtResource("6") text = "Camera" visible_content = true [node name="GridContainer" type="GridContainer" parent="CelOptions/CameraOptions" index="1"] -margin_top = 24.0 -margin_right = 223.0 -margin_bottom = 146.0 +layout_mode = 2 columns = 2 [node name="ProjectionLabel" type="Label" parent="CelOptions/CameraOptions/GridContainer" index="0"] -margin_top = 3.0 -margin_right = 110.0 -margin_bottom = 17.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Projection:" [node name="ProjectionOptionButton" type="OptionButton" parent="CelOptions/CameraOptions/GridContainer" index="1"] unique_name_in_owner = true -margin_left = 114.0 -margin_right = 223.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Perspective" -items = [ "Perspective", null, false, 0, null, "Orthogonal", null, false, 1, null, "Frustum", null, false, 2, null ] +mouse_default_cursor_shape = 2 +item_count = 3 selected = 0 +popup/item_0/text = "Perspective" +popup/item_0/id = 0 +popup/item_1/text = "Orthogonal" +popup/item_1/id = 1 +popup/item_2/text = "Frustum" +popup/item_2/id = 2 [node name="RotationLabel" type="Label" parent="CelOptions/CameraOptions/GridContainer" index="2"] -margin_top = 24.0 -margin_right = 110.0 -margin_bottom = 38.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 0 text = "Rotation:" -[node name="CameraRotation" parent="CelOptions/CameraOptions/GridContainer" index="3" instance=ExtResource( 7 )] +[node name="CameraRotation" parent="CelOptions/CameraOptions/GridContainer" index="3" instance=ExtResource("7")] unique_name_in_owner = true -margin_left = 114.0 -margin_top = 24.0 -margin_right = 223.0 -margin_bottom = 104.0 +layout_mode = 2 size_flags_horizontal = 3 -min_value = Vector3( -180, -180, -180 ) -max_value = Vector3( 180, 180, 180 ) +min_value = Vector3(-180, -180, -180) +max_value = Vector3(180, 180, 180) step = 0.1 suffix_x = "ยฐ" suffix_y = "ยฐ" suffix_z = "ยฐ" [node name="CameraFOVLabel" type="Label" parent="CelOptions/CameraOptions/GridContainer" index="4"] -margin_top = 108.0 -margin_right = 110.0 -margin_bottom = 122.0 +layout_mode = 2 text = "FOV:" -[node name="CameraFOV" type="TextureProgress" parent="CelOptions/CameraOptions/GridContainer" index="5"] +[node name="CameraFOV" type="TextureProgressBar" parent="CelOptions/CameraOptions/GridContainer" index="5"] unique_name_in_owner = true -margin_left = 114.0 -margin_top = 108.0 -margin_right = 223.0 -margin_bottom = 122.0 +layout_mode = 2 +focus_mode = 2 mouse_default_cursor_shape = 2 -theme_type_variation = "ValueSlider" +theme_type_variation = &"ValueSlider" min_value = 1.0 max_value = 179.0 value = 70.0 @@ -153,24 +119,21 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") suffix = "ยฐ" [node name="CameraSizeLabel" type="Label" parent="CelOptions/CameraOptions/GridContainer" index="6"] visible = false -margin_top = 126.0 -margin_right = 110.0 -margin_bottom = 140.0 +layout_mode = 2 text = "Size:" -[node name="CameraSize" type="TextureProgress" parent="CelOptions/CameraOptions/GridContainer" index="7"] +[node name="CameraSize" type="TextureProgressBar" parent="CelOptions/CameraOptions/GridContainer" index="7"] unique_name_in_owner = true visible = false -margin_top = 126.0 -margin_right = 110.0 -margin_bottom = 132.0 +layout_mode = 2 +focus_mode = 2 mouse_default_cursor_shape = 2 -theme_type_variation = "ValueSlider" +theme_type_variation = &"ValueSlider" min_value = 0.001 max_value = 32.0 step = 0.001 @@ -181,50 +144,38 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") [node name="EnvironmentOptions" type="VBoxContainer" parent="CelOptions" index="1"] -margin_top = 150.0 -margin_right = 223.0 -margin_bottom = 170.0 -theme_type_variation = "CollapsibleContainer" -script = ExtResource( 6 ) +layout_mode = 2 +theme_type_variation = &"CollapsibleContainer" +script = ExtResource("6") text = "Environment" [node name="GridContainer" type="GridContainer" parent="CelOptions/EnvironmentOptions" index="1"] visible = false -margin_right = 1266.0 -margin_bottom = 48.0 +layout_mode = 2 columns = 2 [node name="AmbientColorLabel" type="Label" parent="CelOptions/EnvironmentOptions/GridContainer" index="0"] -margin_top = 3.0 -margin_right = 631.0 -margin_bottom = 17.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Ambient color:" [node name="AmbientColorPickerButton" type="ColorPickerButton" parent="CelOptions/EnvironmentOptions/GridContainer" index="1"] unique_name_in_owner = true -margin_left = 635.0 -margin_right = 1266.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 3 edit_alpha = false [node name="AmbientEnergyLabel" type="Label" parent="CelOptions/EnvironmentOptions/GridContainer" index="2"] -margin_top = 29.0 -margin_right = 631.0 -margin_bottom = 43.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Ambient color energy:" -[node name="AmbientEnergy" parent="CelOptions/EnvironmentOptions/GridContainer" index="3" instance=ExtResource( 4 )] +[node name="AmbientEnergy" parent="CelOptions/EnvironmentOptions/GridContainer" index="3" instance=ExtResource("4")] unique_name_in_owner = true -margin_left = 635.0 -margin_top = 24.0 -margin_right = 1266.0 -margin_bottom = 48.0 +layout_mode = 2 max_value = 16.0 step = 0.01 value = 1.0 @@ -233,56 +184,48 @@ allow_greater = true [node name="ObjectOptions" type="VBoxContainer" parent="." index="4"] unique_name_in_owner = true visible = false -margin_top = 408.0 -margin_right = 1266.0 -margin_bottom = 800.0 +layout_mode = 2 size_flags_vertical = 3 [node name="GlobalOptions" type="GridContainer" parent="ObjectOptions" index="0"] -margin_right = 40.0 -margin_bottom = 40.0 +layout_mode = 2 columns = 2 [node name="VisibleLabel" type="Label" parent="ObjectOptions/GlobalOptions" index="0"] -margin_right = 40.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Visible:" [node name="VisibleCheckBox" type="CheckBox" parent="ObjectOptions/GlobalOptions" index="1"] unique_name_in_owner = true -margin_right = 71.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "On" [node name="TransformOptions" type="VBoxContainer" parent="ObjectOptions" index="1"] -margin_right = 1266.0 -margin_bottom = 272.0 -theme_type_variation = "CollapsibleContainer" -script = ExtResource( 6 ) +layout_mode = 2 +theme_type_variation = &"CollapsibleContainer" +script = ExtResource("6") text = "Transform" visible_content = true [node name="GridContainer" type="GridContainer" parent="ObjectOptions/TransformOptions" index="1"] -margin_top = 24.0 -margin_right = 1266.0 -margin_bottom = 272.0 +layout_mode = 2 columns = 2 [node name="PositionLabel" type="Label" parent="ObjectOptions/TransformOptions/GridContainer" index="0"] -margin_right = 631.0 -margin_bottom = 80.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 1 text = "Position:" -[node name="ObjectPosition" parent="ObjectOptions/TransformOptions/GridContainer" index="1" instance=ExtResource( 7 )] +[node name="ObjectPosition" parent="ObjectOptions/TransformOptions/GridContainer" index="1" instance=ExtResource("7")] unique_name_in_owner = true +layout_mode = 2 size_flags_horizontal = 3 -min_value = Vector3( -20, -20, -20 ) -max_value = Vector3( 20, 20, 20 ) +min_value = Vector3(-20, -20, -20) +max_value = Vector3(20, 20, 20) step = 0.01 allow_greater = true allow_lesser = true @@ -291,39 +234,33 @@ suffix_y = "m" suffix_z = "m" [node name="RotationLabel" type="Label" parent="ObjectOptions/TransformOptions/GridContainer" index="2"] -margin_top = 84.0 -margin_right = 631.0 -margin_bottom = 164.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 1 text = "Rotation:" -[node name="ObjectRotation" parent="ObjectOptions/TransformOptions/GridContainer" index="3" instance=ExtResource( 7 )] +[node name="ObjectRotation" parent="ObjectOptions/TransformOptions/GridContainer" index="3" instance=ExtResource("7")] unique_name_in_owner = true -margin_top = -226.0 -margin_right = 631.0 -margin_bottom = -146.0 +layout_mode = 2 size_flags_horizontal = 3 -min_value = Vector3( -180, -180, -180 ) -max_value = Vector3( 180, 180, 180 ) +min_value = Vector3(-180, -180, -180) +max_value = Vector3(180, 180, 180) step = 0.1 suffix_x = "ยฐ" suffix_y = "ยฐ" suffix_z = "ยฐ" [node name="ScaleLabel" type="Label" parent="ObjectOptions/TransformOptions/GridContainer" index="4"] -margin_top = 168.0 -margin_right = 631.0 -margin_bottom = 248.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 1 text = "Scale:" -[node name="ObjectScale" parent="ObjectOptions/TransformOptions/GridContainer" index="5" instance=ExtResource( 7 )] +[node name="ObjectScale" parent="ObjectOptions/TransformOptions/GridContainer" index="5" instance=ExtResource("7")] unique_name_in_owner = true -margin_bottom = 80.0 +layout_mode = 2 size_flags_horizontal = 3 -value = Vector3( 100, 100, 100 ) +value = Vector3(100, 100, 100) step = 0.01 allow_greater = true allow_lesser = true @@ -334,65 +271,56 @@ suffix_z = "%" [node name="MeshOptions" type="VBoxContainer" parent="ObjectOptions" index="2"] unique_name_in_owner = true -margin_top = 276.0 -margin_right = 1266.0 -margin_bottom = 296.0 -theme_type_variation = "CollapsibleContainer" -script = ExtResource( 6 ) +layout_mode = 2 +theme_type_variation = &"CollapsibleContainer" +script = ExtResource("6") text = "Mesh" [node name="GridContainer" type="GridContainer" parent="ObjectOptions/MeshOptions" index="1"] visible = false -margin_top = 24.0 -margin_right = 1266.0 -margin_bottom = 104.0 +layout_mode = 2 columns = 2 [node name="MeshSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="0"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Size:" -[node name="MeshSize" parent="ObjectOptions/MeshOptions/GridContainer" index="1" instance=ExtResource( 7 )] +[node name="MeshSize" parent="ObjectOptions/MeshOptions/GridContainer" index="1" instance=ExtResource("7")] unique_name_in_owner = true +layout_mode = 2 size_flags_horizontal = 3 -max_value = Vector3( 10, 10, 10 ) +max_value = Vector3(10, 10, 10) step = 0.01 allow_greater = true show_ratio = true [node name="MeshSizeLabel2" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="2"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Size:" -[node name="MeshSizeV2" parent="ObjectOptions/MeshOptions/GridContainer" index="3" instance=ExtResource( 3 )] +[node name="MeshSizeV2" parent="ObjectOptions/MeshOptions/GridContainer" index="3" instance=ExtResource("3")] unique_name_in_owner = true -margin_right = 52.0 +layout_mode = 2 size_flags_horizontal = 3 -max_value = Vector2( 10, 10 ) +max_value = Vector2(10, 10) allow_greater = true show_ratio = true snap_step = 0.01 [node name="MeshLeftToRightLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="4"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Left to right:" -[node name="MeshLeftToRight" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="5"] +[node name="MeshLeftToRight" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="5"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = -2.0 max_value = 2.0 step = 0.1 @@ -402,74 +330,68 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") [node name="MeshRadiusLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="6"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Radius:" -[node name="MeshRadius" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="7"] +[node name="MeshRadius" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="7"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 0.001 max_value = 10.0 step = 0.01 -value = 1.0 +value = 1.001 allow_greater = true nine_patch_stretch = true stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") [node name="MeshHeightLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="8"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Height:" -[node name="MeshHeight" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="9"] +[node name="MeshHeight" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="9"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 0.001 max_value = 10.0 step = 0.01 -value = 2.0 +value = 2.001 allow_greater = true nine_patch_stretch = true stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") [node name="MeshRadialSegmentsLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="10"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Radial segments:" -[node name="MeshRadialSegments" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="11"] +[node name="MeshRadialSegments" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="11"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 4.0 max_value = 640.0 value = 64.0 @@ -479,22 +401,20 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") [node name="MeshRingsLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="12"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Rings:" -[node name="MeshRings" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="13"] +[node name="MeshRings" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="13"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 max_value = 320.0 value = 32.0 @@ -504,63 +424,32 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") [node name="MeshIsHemisphereLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="14"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Is hemisphere:" [node name="MeshIsHemisphere" type="CheckBox" parent="ObjectOptions/MeshOptions/GridContainer" index="15"] unique_name_in_owner = true -margin_right = 24.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "On" - -[node name="MeshMidHeightLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="16"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 -size_flags_horizontal = 3 -text = "Height:" - -[node name="MeshMidHeight" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="17"] -unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 mouse_default_cursor_shape = 2 -size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" -min_value = 0.001 -max_value = 10.0 -step = 0.01 -value = 1.0 -allow_greater = true -nine_patch_stretch = true -stretch_margin_left = 3 -stretch_margin_top = 3 -stretch_margin_right = 3 -stretch_margin_bottom = 3 -script = ExtResource( 5 ) +text = "On" -[node name="MeshTopRadiusLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="18"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +[node name="MeshTopRadiusLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="16"] +layout_mode = 2 size_flags_horizontal = 3 text = "Top radius:" -[node name="MeshTopRadius" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="19"] +[node name="MeshTopRadius" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="17"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" max_value = 10.0 step = 0.01 value = 1.0 @@ -570,22 +459,20 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") -[node name="MeshBottomRadiusLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="20"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +[node name="MeshBottomRadiusLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="18"] +layout_mode = 2 size_flags_horizontal = 3 text = "Bottom radius:" -[node name="MeshBottomRadius" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="21"] +[node name="MeshBottomRadius" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="19"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" max_value = 10.0 step = 0.01 value = 1.0 @@ -595,35 +482,30 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") -[node name="MeshTextLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="22"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +[node name="MeshTextLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="20"] +layout_mode = 2 size_flags_horizontal = 3 text = "Text:" -[node name="MeshText" type="LineEdit" parent="ObjectOptions/MeshOptions/GridContainer" index="23"] +[node name="MeshText" type="LineEdit" parent="ObjectOptions/MeshOptions/GridContainer" index="21"] unique_name_in_owner = true -margin_right = 58.0 -margin_bottom = 24.0 +layout_mode = 2 size_flags_horizontal = 3 -[node name="MeshPixelSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="24"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +[node name="MeshPixelSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="22"] +layout_mode = 2 size_flags_horizontal = 3 text = "Pixel size:" -[node name="MeshPixelSize" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="25"] +[node name="MeshPixelSize" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="23"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 0.001 max_value = 10.0 step = 0.001 @@ -634,23 +516,21 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") snap_step = 0.01 -[node name="MeshCurveStepLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +[node name="MeshCurveStepLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="24"] +layout_mode = 2 size_flags_horizontal = 3 text = "Curve step:" -[node name="MeshCurveStep" type="TextureProgress" parent="ObjectOptions/MeshOptions/GridContainer" index="27"] +[node name="MeshCurveStep" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="25"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 0.1 max_value = 10.0 step = 0.1 @@ -661,138 +541,100 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") -[node name="MeshHorizontalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="28"] -margin_top = -583.0 -margin_right = 631.0 -margin_bottom = -569.0 +[node name="MeshHorizontalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"] +layout_mode = 2 size_flags_horizontal = 3 text = "Horizontal alignment:" -[node name="MeshHorizontalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="29"] +[node name="MeshHorizontalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="27"] unique_name_in_owner = true -margin_left = 635.0 -margin_top = -586.0 -margin_right = 1266.0 -margin_bottom = -566.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Center" -items = [ "Left", null, false, 0, null, "Center", null, false, 1, null, "Right", null, false, 2, null ] -selected = 1 +mouse_default_cursor_shape = 2 +item_count = 3 +selected = 0 +popup/item_0/text = "Left" +popup/item_0/id = 0 +popup/item_1/text = "Center" +popup/item_1/id = 1 +popup/item_2/text = "Right" +popup/item_2/id = 2 [node name="LightOptions" type="VBoxContainer" parent="ObjectOptions" index="3"] unique_name_in_owner = true -margin_top = 276.0 -margin_right = 1266.0 -margin_bottom = 296.0 -theme_type_variation = "CollapsibleContainer" -script = ExtResource( 6 ) +layout_mode = 2 +theme_type_variation = &"CollapsibleContainer" +script = ExtResource("6") text = "Light" [node name="GridContainer" type="GridContainer" parent="ObjectOptions/LightOptions" index="1"] visible = false -margin_top = 24.0 -margin_right = 1266.0 -margin_bottom = 104.0 +layout_mode = 2 columns = 2 [node name="LightColorLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="0"] -margin_top = -499.0 -margin_right = 631.0 -margin_bottom = -485.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Color:" [node name="LightColor" type="ColorPickerButton" parent="ObjectOptions/LightOptions/GridContainer" index="1"] unique_name_in_owner = true -margin_left = 635.0 -margin_top = -502.0 -margin_right = 1266.0 -margin_bottom = -482.0 +layout_mode = 2 size_flags_horizontal = 3 -color = Color( 1, 1, 1, 1 ) +color = Color(1, 1, 1, 1) edit_alpha = false [node name="LightEnergyLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="2"] -margin_top = -473.0 -margin_right = 631.0 -margin_bottom = -459.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Energy:" -[node name="LightEnergy" parent="ObjectOptions/LightOptions/GridContainer" index="3" instance=ExtResource( 4 )] +[node name="LightEnergy" parent="ObjectOptions/LightOptions/GridContainer" index="3" instance=ExtResource("4")] unique_name_in_owner = true -margin_left = 635.0 -margin_top = -478.0 -margin_right = 1266.0 -margin_bottom = -454.0 +layout_mode = 2 max_value = 16.0 step = 0.01 value = 1.0 allow_greater = true [node name="LightNegativeLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="4"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Negative:" [node name="LightNegative" type="CheckBox" parent="ObjectOptions/LightOptions/GridContainer" index="5"] unique_name_in_owner = true -margin_right = 47.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "On" [node name="ShadowEnabledLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="6"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Shadow:" [node name="ShadowEnabled" type="CheckBox" parent="ObjectOptions/LightOptions/GridContainer" index="7"] unique_name_in_owner = true -margin_right = 47.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "On" -[node name="ShadowColorLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="8"] -margin_top = -499.0 -margin_right = 631.0 -margin_bottom = -485.0 -size_flags_horizontal = 3 -text = "Shadow color:" - -[node name="ShadowColor" type="ColorPickerButton" parent="ObjectOptions/LightOptions/GridContainer" index="9"] -unique_name_in_owner = true -margin_left = 635.0 -margin_top = -502.0 -margin_right = 1266.0 -margin_bottom = -482.0 -size_flags_horizontal = 3 -edit_alpha = false - -[node name="OmniRangeLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="10"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +[node name="OmniRangeLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="8"] +layout_mode = 2 size_flags_horizontal = 3 text = "Range:" -[node name="OmniRange" type="TextureProgress" parent="ObjectOptions/LightOptions/GridContainer" index="11"] +[node name="OmniRange" type="TextureProgressBar" parent="ObjectOptions/LightOptions/GridContainer" index="9"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" max_value = 4096.0 step = 0.01 value = 5.0 @@ -801,22 +643,20 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") -[node name="SpotRangeLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="12"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +[node name="SpotRangeLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="10"] +layout_mode = 2 size_flags_horizontal = 3 text = "Range:" -[node name="SpotRange" type="TextureProgress" parent="ObjectOptions/LightOptions/GridContainer" index="13"] +[node name="SpotRange" type="TextureProgressBar" parent="ObjectOptions/LightOptions/GridContainer" index="11"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" max_value = 4096.0 step = 0.01 value = 5.0 @@ -825,22 +665,20 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") -[node name="SpotAngleLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="14"] -margin_top = 33.0 -margin_right = 631.0 -margin_bottom = 47.0 +[node name="SpotAngleLabel" type="Label" parent="ObjectOptions/LightOptions/GridContainer" index="12"] +layout_mode = 2 size_flags_horizontal = 3 text = "Angle:" -[node name="SpotAngle" type="TextureProgress" parent="ObjectOptions/LightOptions/GridContainer" index="15"] +[node name="SpotAngle" type="TextureProgressBar" parent="ObjectOptions/LightOptions/GridContainer" index="13"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" max_value = 180.0 step = 0.01 value = 45.0 @@ -849,26 +687,24 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") [node name="UndoRedoTimer" type="Timer" parent="." index="5"] wait_time = 0.2 one_shot = true [node name="LoadModelDialog" type="FileDialog" parent="." index="6"] -margin_top = 590.0 -margin_right = 515.0 -margin_bottom = 938.0 -rect_min_size = Vector2( 515, 348 ) -window_title = "Open File(s)" -resizable = true mode = 1 +title = "Open File(s)" +size = Vector2i(558, 300) +ok_button_text = "Open" +file_mode = 1 access = 2 -filters = PoolStringArray( "*.obj" ) +filters = PackedStringArray("*.obj") show_hidden_files = true [connection signal="item_selected" from="HandleObjects/ObjectOptionButton" to="." method="_on_ObjectOptionButton_item_selected"] [connection signal="pressed" from="HandleObjects/RemoveObject" to="." method="_on_RemoveObject_pressed"] [connection signal="timeout" from="UndoRedoTimer" to="." method="_on_UndoRedoTimer_timeout"] [connection signal="files_selected" from="LoadModelDialog" to="." method="_on_LoadModelDialog_files_selected"] -[connection signal="popup_hide" from="LoadModelDialog" to="." method="_on_LoadModelDialog_popup_hide"] +[connection signal="visibility_changed" from="LoadModelDialog" to="." method="_on_load_model_dialog_visibility_changed"] diff --git a/src/Tools/BaseTool.gd b/src/Tools/BaseTool.gd index f10fd205034..13b376de3d9 100644 --- a/src/Tools/BaseTool.gd +++ b/src/Tools/BaseTool.gd @@ -3,20 +3,20 @@ extends VBoxContainer var is_moving = false var kname: String -var tool_slot = null # Tools.Slot, can't have static typing due to cyclic errors +var tool_slot: Tools.Slot = null var cursor_text := "" -var _cursor := Vector2.INF +var _cursor := Vector2i(Vector2.INF) -var _draw_cache: PoolVector2Array = [] # for storing already drawn pixels -var _for_frame := 0 # cache for which frame? +var _draw_cache: Array[Vector2i] = [] ## For storing already drawn pixels +@warning_ignore("unused_private_class_variable") var _for_frame := 0 ## Cache for which frame -# Only use "_spacing_mode" and "_spacing" variables (the others are set automatically) +# Only use _spacing_mode and _spacing variables (the others are set automatically) # The _spacing_mode and _spacing values are to be CHANGED only in the tool scripts (e.g Pencil.gd) -var _spacing_mode := false # Enables spacing (continuous gaps between two strokes) -var _spacing := Vector2.ZERO # Spacing between two strokes -var _stroke_dimensions := Vector2.ONE # 2d vector containing _brush_size from Draw.gd -var _spacing_offset := Vector2.ZERO # The "INITIAL" error between position and position.snapped() -onready var color_rect: ColorRect = $ColorRect +var _spacing_mode := false ## Enables spacing (continuous gaps between two strokes) +var _spacing := Vector2i.ZERO ## Spacing between two strokes +var _stroke_dimensions := Vector2i.ONE ## 2D vector containing _brush_size from Draw.gd +var _spacing_offset := Vector2i.ZERO ## The initial error between position and position.snapped() +@onready var color_rect := $ColorRect as ColorRect func _ready() -> void: @@ -26,7 +26,6 @@ func _ready() -> void: else: color_rect.color = Global.right_tool_color $Label.text = Tools.tools[name].display_name - load_config() @@ -53,62 +52,62 @@ func update_config() -> void: pass -func draw_start(position: Vector2) -> void: +func draw_start(pos: Vector2i) -> void: _draw_cache = [] is_moving = true Global.current_project.can_undo = false - _spacing_offset = _get_spacing_offset(position) + _spacing_offset = _get_spacing_offset(pos) -func draw_move(position: Vector2) -> void: +func draw_move(pos: Vector2i) -> void: # This can happen if the user switches between tools with a shortcut # while using another tool if !is_moving: - draw_start(position) + draw_start(pos) -func draw_end(_position: Vector2) -> void: +func draw_end(_pos: Vector2i) -> void: is_moving = false _draw_cache = [] Global.current_project.can_undo = true -func cursor_move(position: Vector2) -> void: - _cursor = position +func cursor_move(pos: Vector2i) -> void: + _cursor = pos if _spacing_mode and is_moving: - _cursor = get_spacing_position(position) + _cursor = get_spacing_position(pos) -func get_spacing_position(position: Vector2) -> Vector2: +func get_spacing_position(pos: Vector2i) -> Vector2i: # spacing_factor is the distance the mouse needs to get snapped by in order # to keep a space "_spacing" between two strokes of dimensions "_stroke_dimensions" var spacing_factor := _stroke_dimensions + _spacing - var snap_position := position.snapped(spacing_factor) + _spacing_offset + var snap_pos := Vector2(pos.snapped(spacing_factor) + _spacing_offset) - # keeping snap_position as is would have been fine but this adds extra accuracy as to + # keeping snap_pos as is would have been fine but this adds extra accuracy as to # which snap point (from the list below) is closest to mouse and occupy THAT point - var t_l := snap_position + Vector2(-spacing_factor.x, -spacing_factor.y) - var t_c := snap_position + Vector2(0, -spacing_factor.y) # t_c is for "top centre" and so on... - var t_r := snap_position + Vector2(spacing_factor.x, -spacing_factor.y) - var m_l := snap_position + Vector2(-spacing_factor.x, 0) - var m_c := snap_position - var m_r := snap_position + Vector2(spacing_factor.x, 0) - var b_l := snap_position + Vector2(-spacing_factor.x, spacing_factor.y) - var b_c := snap_position + Vector2(0, spacing_factor.y) - var b_r := snap_position + Vector2(spacing_factor.x, spacing_factor.y) - var vec_arr := [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r] + var t_l := snap_pos + Vector2(-spacing_factor.x, -spacing_factor.y) + var t_c := snap_pos + Vector2(0, -spacing_factor.y) # t_c is for "top centre" and so on... + var t_r := snap_pos + Vector2(spacing_factor.x, -spacing_factor.y) + var m_l := snap_pos + Vector2(-spacing_factor.x, 0) + var m_c := snap_pos + var m_r := snap_pos + Vector2(spacing_factor.x, 0) + var b_l := snap_pos + Vector2(-spacing_factor.x, spacing_factor.y) + var b_c := snap_pos + Vector2(0, spacing_factor.y) + var b_r := snap_pos + Vector2(spacing_factor.x, spacing_factor.y) + var vec_arr: PackedVector2Array = [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r] for vec in vec_arr: - if vec.distance_to(position) < snap_position.distance_to(position): - snap_position = vec + if vec.distance_to(pos) < snap_pos.distance_to(pos): + snap_pos = vec - return snap_position + return Vector2i(snap_pos) -func _get_spacing_offset(position: Vector2) -> Vector2: - var spacing_factor = _stroke_dimensions + _spacing # spacing_factor is explained above +func _get_spacing_offset(pos: Vector2i) -> Vector2i: + var spacing_factor := _stroke_dimensions + _spacing # spacing_factor is explained above # since we just started drawing, the "position" is our intended location so the error # (_spacing_offset) is measured by subtracting both quantities - return position - position.snapped(spacing_factor) + return pos - pos.snapped(spacing_factor) func draw_indicator(left: bool) -> void: @@ -121,11 +120,11 @@ func draw_preview() -> void: pass -func snap_position(position: Vector2) -> Vector2: - var snapping_distance := Global.snapping_distance * Global.camera.zoom.x +func snap_position(pos: Vector2) -> Vector2: + var snapping_distance := Global.snapping_distance / Global.camera.zoom.x if Global.snap_to_rectangular_grid_boundary: - var grid_pos := position.snapped(Global.grid_size) - grid_pos += Global.grid_offset + var grid_pos := pos.snapped(Global.grid_size) + grid_pos += Vector2(Global.grid_offset) # keeping grid_pos as is would have been fine but this adds extra accuracy as to # which snap point (from the list below) is closest to mouse and occupy THAT point var t_l := grid_pos + Vector2(-Global.grid_size.x, -Global.grid_size.y) @@ -136,19 +135,19 @@ func snap_position(position: Vector2) -> Vector2: var m_r := grid_pos + Vector2(Global.grid_size.x, 0) var b_l := grid_pos + Vector2(-Global.grid_size.x, Global.grid_size.y) var b_c := grid_pos + Vector2(0, Global.grid_size.y) - var b_r := grid_pos + Global.grid_size - var vec_arr := [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r] + var b_r := grid_pos + Vector2(Global.grid_size) + var vec_arr: PackedVector2Array = [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r] for vec in vec_arr: - if vec.distance_to(position) < grid_pos.distance_to(position): + if vec.distance_to(pos) < grid_pos.distance_to(pos): grid_pos = vec - var grid_point := _get_closest_point_to_grid(position, snapping_distance, grid_pos) + var grid_point := _get_closest_point_to_grid(pos, snapping_distance, grid_pos) if grid_point != Vector2.INF: - position = grid_point.floor() + pos = grid_point.floor() if Global.snap_to_rectangular_grid_center: - var grid_center := position.snapped(Global.grid_size) + (Global.grid_size / 2) - grid_center += Global.grid_offset + var grid_center := pos.snapped(Global.grid_size) + Vector2(Global.grid_size / 2) + grid_center += Vector2(Global.grid_offset) # keeping grid_center as is would have been fine but this adds extra accuracy as to # which snap point (from the list below) is closest to mouse and occupy THAT point var t_l := grid_center + Vector2(-Global.grid_size.x, -Global.grid_size.y) @@ -159,13 +158,13 @@ func snap_position(position: Vector2) -> Vector2: var m_r := grid_center + Vector2(Global.grid_size.x, 0) var b_l := grid_center + Vector2(-Global.grid_size.x, Global.grid_size.y) var b_c := grid_center + Vector2(0, Global.grid_size.y) - var b_r := grid_center + Global.grid_size + var b_r := grid_center + Vector2(Global.grid_size) var vec_arr := [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r] for vec in vec_arr: - if vec.distance_to(position) < grid_center.distance_to(position): + if vec.distance_to(pos) < grid_center.distance_to(pos): grid_center = vec - if grid_center.distance_to(position) <= snapping_distance: - position = grid_center.floor() + if grid_center.distance_to(pos) <= snapping_distance: + pos = grid_center.floor() var snap_to := Vector2.INF if Global.snap_to_guides: @@ -174,7 +173,7 @@ func snap_position(position: Vector2) -> Vector2: continue var s1: Vector2 = guide.points[0] var s2: Vector2 = guide.points[1] - var snap := _snap_to_guide(snap_to, position, snapping_distance, s1, s2) + var snap := _snap_to_guide(snap_to, pos, snapping_distance, s1, s2) if snap == Vector2.INF: continue snap_to = snap @@ -185,28 +184,28 @@ func snap_position(position: Vector2) -> Vector2: continue for i in point.lines.size(): if point.lines[i].has("angle") and point.lines[i].has("length"): # Sanity check - var angle: float = deg2rad(point.lines[i].angle) + var angle := deg_to_rad(point.lines[i].angle) var length: float = point.lines[i].length - var start = Vector2(point.pos_x, point.pos_y) - var s1: Vector2 = start + var start := Vector2(point.pos_x, point.pos_y) + var s1 := start var s2 := s1 + Vector2(length * cos(angle), length * sin(angle)) - var snap := _snap_to_guide(snap_to, position, snapping_distance, s1, s2) + var snap := _snap_to_guide(snap_to, pos, snapping_distance, s1, s2) if snap == Vector2.INF: continue snap_to = snap if snap_to != Vector2.INF: - position = snap_to.floor() + pos = snap_to.floor() - return position + return pos -func _get_closest_point_to_grid(position: Vector2, distance: float, grid_pos: Vector2) -> Vector2: +func _get_closest_point_to_grid(pos: Vector2, distance: float, grid_pos: Vector2) -> Vector2: # If the cursor is close to the start/origin of a grid cell, snap to that var snap_distance := distance * Vector2.ONE var closest_point := Vector2.INF var rect := Rect2() - rect.position = position - (snap_distance / 4.0) - rect.end = position + (snap_distance / 4.0) + rect.position = pos - (snap_distance / 4.0) + rect.end = pos + (snap_distance / 4.0) if rect.has_point(grid_pos): closest_point = grid_pos return closest_point @@ -215,17 +214,17 @@ func _get_closest_point_to_grid(position: Vector2, distance: float, grid_pos: Ve var grid_start_hor := Vector2(0, grid_pos.y) var grid_end_hor := Vector2(Global.current_project.size.x, grid_pos.y) var closest_point_hor := _get_closest_point_to_segment( - position, distance, grid_start_hor, grid_end_hor + pos, distance, grid_start_hor, grid_end_hor ) # Look for a point close to a vertical grid line var grid_start_ver := Vector2(grid_pos.x, 0) var grid_end_ver := Vector2(grid_pos.x, Global.current_project.size.y) var closest_point_ver := _get_closest_point_to_segment( - position, distance, grid_start_ver, grid_end_ver + pos, distance, grid_start_ver, grid_end_ver ) # Snap to the closest point to the closest grid line - var horizontal_distance := (closest_point_hor - position).length() - var vertical_distance := (closest_point_ver - position).length() + var horizontal_distance := (closest_point_hor - pos).length() + var vertical_distance := (closest_point_ver - pos).length() if horizontal_distance < vertical_distance: closest_point = closest_point_hor elif horizontal_distance > vertical_distance: @@ -236,47 +235,44 @@ func _get_closest_point_to_grid(position: Vector2, distance: float, grid_pos: Ve func _get_closest_point_to_segment( - position: Vector2, distance: float, s1: Vector2, s2: Vector2 + pos: Vector2, distance: float, s1: Vector2, s2: Vector2 ) -> Vector2: - var test_line := (s2 - s1).rotated(deg2rad(90)).normalized() - var from_a := position - test_line * distance - var from_b := position + test_line * distance + var test_line := (s2 - s1).rotated(deg_to_rad(90)).normalized() + var from_a := pos - test_line * distance + var from_b := pos + test_line * distance var closest_point := Vector2.INF - if Geometry.segment_intersects_segment_2d(from_a, from_b, s1, s2): - closest_point = Geometry.get_closest_point_to_segment_2d(position, s1, s2) + if Geometry2D.segment_intersects_segment(from_a, from_b, s1, s2): + closest_point = Geometry2D.get_closest_point_to_segment(pos, s1, s2) return closest_point func _snap_to_guide( - snap_to: Vector2, position: Vector2, distance: float, s1: Vector2, s2: Vector2 + snap_to: Vector2, pos: Vector2, distance: float, s1: Vector2, s2: Vector2 ) -> Vector2: - var closest_point := _get_closest_point_to_segment(position, distance, s1, s2) + var closest_point := _get_closest_point_to_segment(pos, distance, s1, s2) if closest_point == Vector2.INF: # Is not close to a guide return Vector2.INF # Snap to the closest guide - if ( - snap_to == Vector2.INF - or (snap_to - position).length() > (closest_point - position).length() - ): + if snap_to == Vector2.INF or (snap_to - pos).length() > (closest_point - pos).length(): snap_to = closest_point return snap_to -func _get_draw_rect() -> Rect2: +func _get_draw_rect() -> Rect2i: if Global.current_project.has_selection: return Global.current_project.selection_map.get_used_rect() else: - return Rect2(Vector2.ZERO, Global.current_project.size) + return Rect2i(Vector2i.ZERO, Global.current_project.size) func _get_draw_image() -> Image: return Global.current_project.get_current_cel().get_image() -func _get_selected_draw_images() -> Array: # Array of Images - var images := [] - var project: Project = Global.current_project +func _get_selected_draw_images() -> Array[Image]: + var images: Array[Image] = [] + var project := Global.current_project for cel_index in project.selected_cels: var cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]] if not cel is PixelCel: @@ -286,49 +282,49 @@ func _get_selected_draw_images() -> Array: # Array of Images return images -func _flip_rect(rect: Rect2, size: Vector2, horizontal: bool, vertical: bool) -> Rect2: +func _flip_rect(rect: Rect2, rect_size: Vector2, horiz: bool, vert: bool) -> Rect2: var result := rect - if horizontal: - result.position.x = size.x - rect.end.x - result.end.x = size.x - rect.position.x - if vertical: - result.position.y = size.y - rect.end.y - result.end.y = size.y - rect.position.y + if horiz: + result.position.x = rect_size.x - rect.end.x + result.end.x = rect_size.x - rect.position.x + if vert: + result.position.y = rect_size.y - rect.end.y + result.end.y = rect_size.y - rect.position.y return result.abs() func _create_polylines(bitmap: BitMap) -> Array: var lines := [] - var size := bitmap.get_size() - for y in size.y: - for x in size.x: - var p := Vector2(x, y) - if not bitmap.get_bit(p): + var bitmap_size := bitmap.get_size() + for y in bitmap_size.y: + for x in bitmap_size.x: + var p := Vector2i(x, y) + if not bitmap.get_bitv(p): continue - if x <= 0 or not bitmap.get_bit(p - Vector2(1, 0)): - _add_polylines_segment(lines, p, p + Vector2(0, 1)) - if y <= 0 or not bitmap.get_bit(p - Vector2(0, 1)): - _add_polylines_segment(lines, p, p + Vector2(1, 0)) - if x + 1 >= size.x or not bitmap.get_bit(p + Vector2(1, 0)): - _add_polylines_segment(lines, p + Vector2(1, 0), p + Vector2(1, 1)) - if y + 1 >= size.y or not bitmap.get_bit(p + Vector2(0, 1)): - _add_polylines_segment(lines, p + Vector2(0, 1), p + Vector2(1, 1)) + if x <= 0 or not bitmap.get_bitv(p - Vector2i(1, 0)): + _add_polylines_segment(lines, p, p + Vector2i(0, 1)) + if y <= 0 or not bitmap.get_bitv(p - Vector2i(0, 1)): + _add_polylines_segment(lines, p, p + Vector2i(1, 0)) + if x + 1 >= bitmap_size.x or not bitmap.get_bitv(p + Vector2i(1, 0)): + _add_polylines_segment(lines, p + Vector2i(1, 0), p + Vector2i(1, 1)) + if y + 1 >= bitmap_size.y or not bitmap.get_bitv(p + Vector2i(0, 1)): + _add_polylines_segment(lines, p + Vector2i(0, 1), p + Vector2i(1, 1)) return lines -func _fill_bitmap_with_points(points: Array, size: Vector2) -> BitMap: +func _fill_bitmap_with_points(points: Array[Vector2i], bitmap_size: Vector2i) -> BitMap: var bitmap := BitMap.new() - bitmap.create(size) + bitmap.create(bitmap_size) for point in points: - if point.x < 0 or point.y < 0 or point.x >= size.x or point.y >= size.y: + if point.x < 0 or point.y < 0 or point.x >= bitmap_size.x or point.y >= bitmap_size.y: continue - bitmap.set_bit(point, 1) + bitmap.set_bitv(point, 1) return bitmap -func _add_polylines_segment(lines: Array, start: Vector2, end: Vector2) -> void: +func _add_polylines_segment(lines: Array, start: Vector2i, end: Vector2i) -> void: for line in lines: if line[0] == start: line.insert(0, end) diff --git a/src/Tools/BaseTool.tscn b/src/Tools/BaseTool.tscn index f275a2ac12c..4803a9711d7 100644 --- a/src/Tools/BaseTool.tscn +++ b/src/Tools/BaseTool.tscn @@ -1,25 +1,20 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://ctfgfelg0sho8"] -[ext_resource path="res://src/Tools/BaseTool.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/Tools/BaseTool.gd" id="1"] [node name="ToolOptions" type="VBoxContainer"] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 123.0 -margin_bottom = 65.0 +offset_left = 7.0 +offset_top = 7.0 +offset_right = 123.0 +offset_bottom = 65.0 size_flags_horizontal = 3 -script = ExtResource( 1 ) +script = ExtResource("1") [node name="ColorRect" type="ColorRect" parent="."] -margin_right = 116.0 -margin_bottom = 4.0 -rect_min_size = Vector2( 0, 4 ) +custom_minimum_size = Vector2(0, 4) +layout_mode = 2 [node name="Label" type="Label" parent="."] -margin_top = 8.0 -margin_right = 116.0 -margin_bottom = 22.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Tool Name" -align = 1 -autowrap = true diff --git a/src/Tools/Bucket.gd b/src/Tools/Bucket.gd index 71dd4b10b67..04183e19a30 100644 --- a/src/Tools/Bucket.gd +++ b/src/Tools/Bucket.gd @@ -3,7 +3,7 @@ extends BaseTool enum FillArea { AREA, COLORS, SELECTION } enum FillWith { COLOR, PATTERN } -const COLOR_REPLACE_SHADER := preload("res://src/Shaders/ColorReplace.shader") +const COLOR_REPLACE_SHADER := preload("res://src/Shaders/ColorReplace.gdshader") const PATTERN_FILL_SHADER := preload("res://src/Shaders/PatternFill.gdshader") var _prev_mode := 0 @@ -13,13 +13,27 @@ var _fill_area: int = FillArea.AREA var _fill_with: int = FillWith.COLOR var _offset_x := 0 var _offset_y := 0 -# working array used as buffer for segments while flooding -var _allegro_flood_segments: Array -# results array per image while flooding -var _allegro_image_segments: Array +## Working array used as buffer for segments while flooding +var _allegro_flood_segments: Array[Segment] +## Results array per image while flooding +var _allegro_image_segments: Array[Segment] + + +class Segment: + var flooding := false + var todo_above := false + var todo_below := false + var left_position := -5 + var right_position := -5 + var y := 0 + var next := 0 + + func _init(_y: int) -> void: + y = _y func _ready() -> void: + super._ready() update_pattern() @@ -62,9 +76,9 @@ func _on_SimilaritySlider_value_changed(value: float) -> void: func _on_PatternType_pressed() -> void: var popup: Popup = Global.patterns_popup - if !popup.is_connected("pattern_selected", self, "_on_Pattern_selected"): - popup.connect("pattern_selected", self, "_on_Pattern_selected", [], CONNECT_ONESHOT) - popup.popup(Rect2($FillPattern/Type.rect_global_position, Vector2(226, 72))) + if !popup.pattern_selected.is_connected(_on_Pattern_selected): + popup.pattern_selected.connect(_on_Pattern_selected.bind(), CONNECT_ONE_SHOT) + popup.popup(Rect2i($FillPattern/Type.global_position, Vector2i(226, 72))) func _on_Pattern_selected(pattern: Patterns.Pattern) -> void: @@ -125,56 +139,53 @@ func update_pattern() -> void: return else: _pattern = Global.patterns_popup.default_pattern - var tex := ImageTexture.new() + var tex: ImageTexture if !_pattern.image.is_empty(): - tex.create_from_image(_pattern.image, 0) - $FillPattern/Type/Texture.texture = tex - var size := _pattern.image.get_size() - $FillPattern/OffsetX.max_value = size.x - 1 - $FillPattern/OffsetY.max_value = size.y - 1 + tex = ImageTexture.create_from_image(_pattern.image) + $FillPattern/Type/Texture2D.texture = tex + var pattern_size := _pattern.image.get_size() + $FillPattern/OffsetX.max_value = pattern_size.x - 1 + $FillPattern/OffsetY.max_value = pattern_size.y - 1 -func draw_start(position: Vector2) -> void: - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + super.draw_start(pos) if Input.is_action_pressed("draw_color_picker"): - _pick_color(position) + _pick_color(pos) return Global.canvas.selection.transform_content_confirm() if ( !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn() - or !Rect2(Vector2.ZERO, Global.current_project.size).has_point(position) + or !Rect2i(Vector2i.ZERO, Global.current_project.size).has_point(pos) ): return - if ( - Global.current_project.has_selection - and not Global.current_project.can_pixel_get_drawn(position) - ): + if Global.current_project.has_selection and not Global.current_project.can_pixel_get_drawn(pos): return var undo_data := _get_undo_data() match _fill_area: FillArea.AREA: - fill_in_area(position) + fill_in_area(pos) FillArea.COLORS: - fill_in_color(position) + fill_in_color(pos) FillArea.SELECTION: fill_in_selection() commit_undo("Draw", undo_data) -func draw_move(position: Vector2) -> void: - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + super.draw_move(pos) -func draw_end(position: Vector2) -> void: - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + super.draw_end(pos) -func fill_in_color(position: Vector2) -> void: - var project: Project = Global.current_project +func fill_in_color(pos: Vector2i) -> void: + var project := Global.current_project var images := _get_selected_draw_images() for image in images: - var color: Color = image.get_pixelv(position) + var color: Color = image.get_pixelv(pos) var pattern_image: Image if _fill_with == FillWith.COLOR or _pattern == null: if tool_slot.color.is_equal_approx(color): @@ -187,19 +198,18 @@ func fill_in_color(position: Vector2) -> void: return var selection: Image - var selection_tex := ImageTexture.new() + var selection_tex: ImageTexture if project.has_selection: selection = project.selection_map else: - selection = Image.new() - selection.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) + selection = Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) selection.fill(Color(1, 1, 1, 1)) - selection_tex.create_from_image(selection) + selection_tex = ImageTexture.create_from_image(selection) - var pattern_tex := ImageTexture.new() + var pattern_tex: ImageTexture if _pattern and pattern_image: - pattern_tex.create_from_image(pattern_image) + pattern_tex = ImageTexture.create_from_image(pattern_image) var params := { "size": project.size, @@ -208,46 +218,45 @@ func fill_in_color(position: Vector2) -> void: "similarity_percent": _similarity, "selection": selection_tex, "pattern": pattern_tex, - "pattern_size": pattern_tex.get_size(), - # pixel offset converted to pattern uv offset - "pattern_uv_offset": - Vector2.ONE / pattern_tex.get_size() * Vector2(_offset_x, _offset_y), "has_pattern": true if _fill_with == FillWith.PATTERN else false } + if is_instance_valid(pattern_tex): + var pattern_size := Vector2i(pattern_tex.get_size()) + params["pattern_size"] = pattern_size + # pixel offset converted to pattern uv offset + params["pattern_uv_offset"] = ( + Vector2i.ONE / pattern_size * Vector2i(_offset_x, _offset_y) + ) var gen := ShaderImageEffect.new() gen.generate_image(image, COLOR_REPLACE_SHADER, params, project.size) -func fill_in_area(position: Vector2) -> void: - var project: Project = Global.current_project - _flood_fill(position) +func fill_in_area(pos: Vector2i) -> void: + var project := Global.current_project + _flood_fill(pos) # Handle Mirroring - var mirror_x = project.x_symmetry_point - position.x - var mirror_y = project.y_symmetry_point - position.y - var mirror_x_inside: bool - var mirror_y_inside: bool - - mirror_x_inside = project.can_pixel_get_drawn(Vector2(mirror_x, position.y)) - mirror_y_inside = project.can_pixel_get_drawn(Vector2(position.x, mirror_y)) + var mirror_x := project.x_symmetry_point - pos.x + var mirror_y := project.y_symmetry_point - pos.y + var mirror_x_inside := project.can_pixel_get_drawn(Vector2i(mirror_x, pos.y)) + var mirror_y_inside := project.can_pixel_get_drawn(Vector2i(pos.x, mirror_y)) if Tools.horizontal_mirror and mirror_x_inside: - _flood_fill(Vector2(mirror_x, position.y)) + _flood_fill(Vector2i(mirror_x, pos.y)) if Tools.vertical_mirror and mirror_y_inside: - _flood_fill(Vector2(mirror_x, mirror_y)) + _flood_fill(Vector2i(mirror_x, mirror_y)) if Tools.vertical_mirror and mirror_y_inside: - _flood_fill(Vector2(position.x, mirror_y)) + _flood_fill(Vector2i(pos.x, mirror_y)) func fill_in_selection() -> void: - var project: Project = Global.current_project + var project := Global.current_project var images := _get_selected_draw_images() if _fill_with == FillWith.COLOR or _pattern == null: if project.has_selection: - var filler := Image.new() - filler.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) + var filler := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) filler.fill(tool_slot.color) - var rect: Rect2 = Global.canvas.selection.big_bounding_rectangle + var rect: Rect2i = Global.canvas.selection.big_bounding_rectangle var selection_map_copy := SelectionMap.new() selection_map_copy.copy_from(project.selection_map) # In case the selection map is bigger than the canvas @@ -265,78 +274,69 @@ func fill_in_selection() -> void: return var selection: Image - var selection_tex := ImageTexture.new() + var selection_tex: ImageTexture if project.has_selection: selection = project.selection_map else: - selection = Image.new() - selection.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) + selection = Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) selection.fill(Color(1, 1, 1, 1)) - selection_tex.create_from_image(selection) + selection_tex = ImageTexture.create_from_image(selection) - var pattern_tex := ImageTexture.new() + var pattern_tex: ImageTexture if _pattern and pattern_image: - pattern_tex.create_from_image(pattern_image) + pattern_tex = ImageTexture.create_from_image(pattern_image) var params := { "selection": selection_tex, "size": project.size, "pattern": pattern_tex, - "pattern_size": pattern_tex.get_size(), - # pixel offset converted to pattern uv offset - "pattern_uv_offset": - Vector2.ONE / pattern_tex.get_size() * Vector2(_offset_x, _offset_y), } + if is_instance_valid(pattern_tex): + params["pattern_size"] = pattern_size + # pixel offset converted to pattern uv offset + params["pattern_uv_offset"] = ( + Vector2i.ONE / pattern_size * Vector2i(_offset_x, _offset_y) + ) for image in images: var gen := ShaderImageEffect.new() gen.generate_image(image, PATTERN_FILL_SHADER, params, project.size) -# Add a new segment to the array -func _add_new_segment(y: int = 0) -> void: - var segment := {} - segment.flooding = false - segment.todo_above = false - segment.todo_below = false - segment.left_position = -5 # anything less than -1 is ok - segment.right_position = -5 - segment.y = y - segment.next = 0 - _allegro_flood_segments.append(segment) +## Add a new segment to the array +func _add_new_segment(y := 0) -> void: + _allegro_flood_segments.append(Segment.new(y)) -# fill an horizontal segment around the specified position, and adds it to the -# list of segments filled. Returns the first x coordinate after the part of the -# line that has been filled. +## Fill an horizontal segment around the specified position, and adds it to the +## list of segments filled. Returns the first x coordinate after the part of the +## line that has been filled. func _flood_line_around_point( - position: Vector2, project: Project, image: Image, src_color: Color + pos: Vector2i, project: Project, image: Image, src_color: Color ) -> int: # this method is called by `_flood_fill` after the required data structures # have been initialized - if not image.get_pixelv(position).is_equal_approx(src_color): - return int(position.x) + 1 - var west: Vector2 = position - var east: Vector2 = position + if not image.get_pixelv(pos).is_equal_approx(src_color): + return pos.x + 1 + var west := pos + var east := pos if project.has_selection: while ( - project.can_pixel_get_drawn(west) - && image.get_pixelv(west).is_equal_approx(src_color) + project.can_pixel_get_drawn(west) && image.get_pixelv(west).is_equal_approx(src_color) ): - west += Vector2.LEFT + west += Vector2i.LEFT while ( - project.can_pixel_get_drawn(east) - && image.get_pixelv(east).is_equal_approx(src_color) + project.can_pixel_get_drawn(east) && image.get_pixelv(east).is_equal_approx(src_color) ): - east += Vector2.RIGHT + east += Vector2i.RIGHT else: while west.x >= 0 && image.get_pixelv(west).is_equal_approx(src_color): - west += Vector2.LEFT + west += Vector2i.LEFT while east.x < project.size.x && image.get_pixelv(east).is_equal_approx(src_color): - east += Vector2.RIGHT + east += Vector2i.RIGHT # Make a note of the stuff we processed - var c = int(position.y) - var segment = _allegro_flood_segments[c] + var c := pos.y + var segment := _allegro_flood_segments[c] # we may have already processed some segments on this y coordinate if segment.flooding: while segment.next > 0: @@ -345,13 +345,13 @@ func _flood_line_around_point( # found last current segment on this line c = _allegro_flood_segments.size() segment.next = c - _add_new_segment(position.y) + _add_new_segment(pos.y) segment = _allegro_flood_segments[c] # set the values for the current segment segment.flooding = true segment.left_position = west.x + 1 segment.right_position = east.x - 1 - segment.y = position.y + segment.y = pos.y segment.next = 0 # Should we process segments above or below this one? # when there is a selected area, the pixels above and below the one we started creating this @@ -360,44 +360,44 @@ func _flood_line_around_point( # test will be performed later anyway. # On the other hand, this test we described is the same `project.can_pixel_get_drawn` does if # there is no selection, so we don't need branching here. - segment.todo_above = position.y > 0 - segment.todo_below = position.y < project.size.y - 1 + segment.todo_above = pos.y > 0 + segment.todo_below = pos.y < project.size.y - 1 # this is an actual segment we should be coloring, so we add it to the results for the # current image if segment.right_position >= segment.left_position: _allegro_image_segments.append(segment) # we know the point just east of the segment is not part of a segment that should be # processed, else it would be part of this segment - return int(east.x) + 1 + return east.x + 1 func _check_flooded_segment( y: int, left: int, right: int, project: Project, image: Image, src_color: Color ) -> bool: - var ret = false + var ret := false var c: int = 0 while left <= right: c = y while true: - var segment = _allegro_flood_segments[c] + var segment := _allegro_flood_segments[c] if left >= segment.left_position and left <= segment.right_position: left = segment.right_position + 2 break c = segment.next if c == 0: # couldn't find a valid segment, so we draw a new one - left = _flood_line_around_point(Vector2(left, y), project, image, src_color) + left = _flood_line_around_point(Vector2i(left, y), project, image, src_color) ret = true break return ret -func _flood_fill(position: Vector2) -> void: +func _flood_fill(pos: Vector2i) -> void: # implements the floodfill routine by Shawn Hargreaves # from https://www1.udel.edu/CIS/software/dist/allegro-4.2.1/src/flood.c - var project: Project = Global.current_project + var project := Global.current_project var images := _get_selected_draw_images() for image in images: - var color: Color = image.get_pixelv(position) + var color: Color = image.get_pixelv(pos) if _fill_with == FillWith.COLOR or _pattern == null: # end early if we are filling with the same color if tool_slot.color.is_equal_approx(color): @@ -410,27 +410,27 @@ func _flood_fill(position: Vector2) -> void: # init flood data structures _allegro_flood_segments = [] _allegro_image_segments = [] - _compute_segments_for_image(position, project, image, color) + _compute_segments_for_image(pos, project, image, color) # now actually color the image: since we have already checked a few things for the points # we'll process here, we're going to skip a bunch of safety checks to speed things up. _color_segments(image) func _compute_segments_for_image( - position: Vector2, project: Project, image: Image, src_color: Color + pos: Vector2i, project: Project, image: Image, src_color: Color ) -> void: # initially allocate at least 1 segment per line of image for j in image.get_height(): _add_new_segment(j) # start flood algorithm - _flood_line_around_point(position, project, image, src_color) + _flood_line_around_point(pos, project, image, src_color) # test all segments while also discovering more - var done = false + var done := false while not done: done = true - var max_index = _allegro_flood_segments.size() + var max_index := _allegro_flood_segments.size() for c in max_index: - var p = _allegro_flood_segments[c] + var p := _allegro_flood_segments[c] if p.todo_below: # check below the segment? p.todo_below = false if _check_flooded_segment( @@ -447,36 +447,34 @@ func _compute_segments_for_image( func _color_segments(image: Image) -> void: if _fill_with == FillWith.COLOR or _pattern == null: - var color_str = tool_slot.color.to_html() + var color: Color = tool_slot.color # short circuit for flat colors for c in _allegro_image_segments.size(): - var p = _allegro_image_segments[c] + var p := _allegro_image_segments[c] for px in range(p.left_position, p.right_position + 1): # We don't have to check again whether the point being processed is within the bounds - image.set_pixel(px, p.y, Color(color_str)) + image.set_pixel(px, p.y, color) else: # shortcircuit tests for patternfills - var pattern_size = _pattern.image.get_size() + var pattern_size := _pattern.image.get_size() # we know the pattern had a valid size when we began flooding, so we can skip testing that # again for every point in the pattern. for c in _allegro_image_segments.size(): - var p = _allegro_image_segments[c] + var p := _allegro_image_segments[c] for px in range(p.left_position, p.right_position + 1): _set_pixel_pattern(image, px, p.y, pattern_size) -func _set_pixel_pattern(image: Image, x: int, y: int, pattern_size: Vector2) -> void: - _pattern.image.lock() - var px := int(x + _offset_x) % int(pattern_size.x) - var py := int(y + _offset_y) % int(pattern_size.y) +func _set_pixel_pattern(image: Image, x: int, y: int, pattern_size: Vector2i) -> void: + var px := (x + _offset_x) % pattern_size.x + var py := (y + _offset_y) % pattern_size.y var pc := _pattern.image.get_pixel(px, py) - _pattern.image.unlock() image.set_pixel(x, y, pc) func commit_undo(action: String, undo_data: Dictionary) -> void: var redo_data := _get_undo_data() - var project: Project = Global.current_project + var project := Global.current_project var frame := -1 var layer := -1 if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1: @@ -487,11 +485,10 @@ func commit_undo(action: String, undo_data: Dictionary) -> void: project.undo_redo.create_action(action) for image in redo_data: project.undo_redo.add_do_property(image, "data", redo_data[image]) - image.unlock() for image in undo_data: project.undo_redo.add_undo_property(image, "data", undo_data[image]) - project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, frame, layer)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, frame, layer)) project.undo_redo.commit_action() @@ -499,26 +496,26 @@ func _get_undo_data() -> Dictionary: var data := {} var images := _get_selected_draw_images() for image in images: - image.unlock() data[image] = image.data - image.lock() return data -func _pick_color(position: Vector2) -> void: - var project: Project = Global.current_project - position = project.tiles.get_canon_position(position) +func _pick_color(pos: Vector2i) -> void: + var project := Global.current_project + pos = project.tiles.get_canon_position(pos) - if position.x < 0 or position.y < 0: + if pos.x < 0 or pos.y < 0: return var image := Image.new() image.copy_from(_get_draw_image()) - if position.x > image.get_width() - 1 or position.y > image.get_height() - 1: + if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1: return - image.lock() - var color := image.get_pixelv(position) - image.unlock() - var button := BUTTON_LEFT if Tools._slots[BUTTON_LEFT].tool_node == self else BUTTON_RIGHT + var color := image.get_pixelv(pos) + var button := ( + MOUSE_BUTTON_LEFT + if Tools._slots[MOUSE_BUTTON_LEFT].tool_node == self + else MOUSE_BUTTON_RIGHT + ) Tools.assign_color(color, button, false) diff --git a/src/Tools/Bucket.tscn b/src/Tools/Bucket.tscn index e8ed2917e72..e59f7039cb1 100644 --- a/src/Tools/Bucket.tscn +++ b/src/Tools/Bucket.tscn @@ -1,117 +1,109 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=6 format=3 uid="uid://bbvvkrrjyxugo"] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/Tools/Bucket.gd" type="Script" id=3] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="1"] +[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="2"] +[ext_resource type="Script" path="res://src/Tools/Bucket.gd" id="3"] -[sub_resource type="StyleBoxFlat" id=1] -bg_color = Color( 1, 1, 1, 1 ) -border_color = Color( 1, 1, 1, 1 ) +[sub_resource type="StyleBoxFlat" id="1"] +bg_color = Color(1, 1, 1, 1) +border_color = Color(1, 1, 1, 1) corner_radius_top_left = 5 corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 anti_aliasing = false -[sub_resource type="StyleBoxFlat" id=2] -bg_color = Color( 1, 1, 1, 1 ) -border_color = Color( 1, 1, 1, 1 ) +[sub_resource type="StyleBoxFlat" id="2"] +bg_color = Color(1, 1, 1, 1) +border_color = Color(1, 1, 1, 1) corner_radius_top_left = 5 corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 anti_aliasing = false -[node name="ToolOptions" instance=ExtResource( 2 )] -margin_right = 138.0 -margin_bottom = 105.0 -script = ExtResource( 3 ) - -[node name="ColorRect" parent="." index="0"] -margin_right = 131.0 - -[node name="Label" parent="." index="1"] -margin_right = 131.0 +[node name="ToolOptions" instance=ExtResource("2")] +offset_right = 138.0 +offset_bottom = 105.0 +script = ExtResource("3") [node name="FillArea" type="Label" parent="." index="2"] -margin_top = 26.0 -margin_right = 131.0 -margin_bottom = 40.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "Fill area:" [node name="FillAreaOptions" type="OptionButton" parent="." index="3"] -margin_top = 44.0 -margin_right = 131.0 -margin_bottom = 64.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Similar area" -items = [ "Similar area", null, false, 0, null, "Similar colors", null, false, 1, null, "Whole selection", null, false, 2, null ] +mouse_default_cursor_shape = 2 +item_count = 3 selected = 0 - -[node name="SimilaritySlider" parent="." index="4" instance=ExtResource( 1 )] +popup/item_0/text = "Similar area" +popup/item_0/id = 0 +popup/item_1/text = "Similar colors" +popup/item_1/id = 1 +popup/item_2/text = "Whole selection" +popup/item_2/id = 2 + +[node name="SimilaritySlider" parent="." index="4" instance=ExtResource("1")] visible = false -margin_top = 68.0 -margin_right = 131.0 -margin_bottom = 92.0 +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" value = 100.0 prefix = "Similarity:" [node name="FillWith" type="Label" parent="." index="5"] -margin_top = 68.0 -margin_right = 131.0 -margin_bottom = 82.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Fill with:" [node name="FillWithOptions" type="OptionButton" parent="." index="6"] -margin_top = 86.0 -margin_right = 131.0 -margin_bottom = 106.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Selected color" -items = [ "Selected color", null, false, 0, null, "Pattern", null, false, 1, null ] +mouse_default_cursor_shape = 2 +item_count = 2 selected = 0 +popup/item_0/text = "Selected color" +popup/item_0/id = 0 +popup/item_1/text = "Pattern" +popup/item_1/id = 1 [node name="FillPattern" type="VBoxContainer" parent="." index="7"] visible = false -margin_top = 110.0 -margin_right = 131.0 -margin_bottom = 198.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Type" type="Button" parent="FillPattern" index="0"] -margin_right = 32.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -hint_tooltip = "Select a brush" -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 size_flags_horizontal = 0 -custom_styles/hover = SubResource( 1 ) -custom_styles/pressed = SubResource( 1 ) -custom_styles/focus = SubResource( 2 ) -custom_styles/disabled = SubResource( 2 ) -custom_styles/normal = SubResource( 1 ) - -[node name="Texture" type="TextureRect" parent="FillPattern/Type" index="0"] -margin_right = 32.0 -margin_bottom = 32.0 -expand = true +tooltip_text = "Select a brush" +mouse_default_cursor_shape = 2 +theme_override_styles/normal = SubResource("1") +theme_override_styles/hover = SubResource("1") +theme_override_styles/pressed = SubResource("1") +theme_override_styles/disabled = SubResource("2") +theme_override_styles/focus = SubResource("2") + +[node name="Texture2D" type="TextureRect" parent="FillPattern/Type" index="0"] +layout_mode = 0 +offset_right = 32.0 +offset_bottom = 32.0 +expand_mode = 1 stretch_mode = 6 -[node name="OffsetX" parent="FillPattern" index="1" instance=ExtResource( 1 )] -margin_top = 36.0 -margin_right = 131.0 -margin_bottom = 60.0 +[node name="OffsetX" parent="FillPattern" index="1" instance=ExtResource("1")] +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" prefix = "Offset X:" -[node name="OffsetY" parent="FillPattern" index="2" instance=ExtResource( 1 )] -margin_top = 64.0 -margin_right = 131.0 -margin_bottom = 88.0 +[node name="OffsetY" parent="FillPattern" index="2" instance=ExtResource("1")] +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" prefix = "Offset Y:" [connection signal="item_selected" from="FillAreaOptions" to="." method="_on_FillAreaOptions_item_selected"] diff --git a/src/Tools/ColorPicker.gd b/src/Tools/ColorPicker.gd index 7e20d11eea6..6ecf32caa86 100644 --- a/src/Tools/ColorPicker.gd +++ b/src/Tools/ColorPicker.gd @@ -46,47 +46,43 @@ func update_config() -> void: $ColorPicker/ExtractFrom.selected = _mode -func draw_start(position: Vector2) -> void: - .draw_start(position) - _pick_color(position) +func draw_start(pos: Vector2i) -> void: + super.draw_start(pos) + _pick_color(pos) -func draw_move(position: Vector2) -> void: - .draw_move(position) - _pick_color(position) +func draw_move(pos: Vector2i) -> void: + super.draw_move(pos) + _pick_color(pos) -func draw_end(position: Vector2) -> void: - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + super.draw_end(pos) -func _pick_color(position: Vector2) -> void: - var project: Project = Global.current_project - position = project.tiles.get_canon_position(position) +func _pick_color(pos: Vector2i) -> void: + var project := Global.current_project + pos = project.tiles.get_canon_position(pos) - if position.x < 0 or position.y < 0: + if pos.x < 0 or pos.y < 0: return var color := Color(0, 0, 0, 0) var image := Image.new() image.copy_from(_get_draw_image()) - if position.x > image.get_width() - 1 or position.y > image.get_height() - 1: + if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1: return match _mode: TOP_COLOR: - var curr_frame: Frame = project.frames[project.current_frame] + var curr_frame := project.frames[project.current_frame] for layer in project.layers.size(): - var idx = (project.layers.size() - 1) - layer + var idx := (project.layers.size() - 1) - layer if project.layers[idx].is_visible_in_hierarchy(): image = curr_frame.cels[idx].get_image() - image.lock() - color = image.get_pixelv(position) - image.unlock() - if color != Color(0, 0, 0, 0): + color = image.get_pixelv(pos) + if not color.is_equal_approx(Color(0, 0, 0, 0)): break CURRENT_LAYER: - image.lock() - color = image.get_pixelv(position) - image.unlock() - var button := BUTTON_LEFT if _color_slot == 0 else BUTTON_RIGHT + color = image.get_pixelv(pos) + var button := MOUSE_BUTTON_LEFT if _color_slot == 0 else MOUSE_BUTTON_RIGHT Tools.assign_color(color, button, false) diff --git a/src/Tools/ColorPicker.tscn b/src/Tools/ColorPicker.tscn index ef6f4185029..8551c878f96 100644 --- a/src/Tools/ColorPicker.tscn +++ b/src/Tools/ColorPicker.tscn @@ -1,48 +1,45 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://2onobu8eymt8"] -[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/ColorPicker.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/ColorPicker.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") [node name="ColorPicker" type="VBoxContainer" parent="." index="2"] -margin_top = 26.0 -margin_right = 116.0 -margin_bottom = 106.0 +layout_mode = 2 [node name="Label" type="Label" parent="ColorPicker" index="0"] -margin_right = 116.0 -margin_bottom = 14.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_vertical = 1 +mouse_default_cursor_shape = 2 text = "Pick for:" [node name="Options" type="OptionButton" parent="ColorPicker" index="1"] -margin_top = 18.0 -margin_right = 116.0 -margin_bottom = 38.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "Left Color" -items = [ "Left Color", null, false, 0, null, "Right Color", null, false, 1, null ] +item_count = 2 selected = 0 +popup/item_0/text = "Left Color" +popup/item_0/id = 0 +popup/item_1/text = "Right Color" +popup/item_1/id = 1 [node name="Label2" type="Label" parent="ColorPicker" index="2"] -margin_top = 42.0 -margin_right = 116.0 -margin_bottom = 56.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_vertical = 1 +mouse_default_cursor_shape = 2 text = "Pick mode:" [node name="ExtractFrom" type="OptionButton" parent="ColorPicker" index="3"] -margin_top = 60.0 -margin_right = 116.0 -margin_bottom = 80.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "Top Color" -items = [ "Top Color", null, false, 0, null, "Current Layer", null, false, 1, null ] +item_count = 2 selected = 0 +popup/item_0/text = "Top Color" +popup/item_0/id = 0 +popup/item_1/text = "Current Layer" +popup/item_1/id = 1 [connection signal="item_selected" from="ColorPicker/Options" to="." method="_on_Options_item_selected"] [connection signal="item_selected" from="ColorPicker/ExtractFrom" to="." method="_on_ExtractFrom_item_selected"] diff --git a/src/Tools/CropTool.gd b/src/Tools/CropTool.gd index ea245cb7e59..3463d8a6326 100644 --- a/src/Tools/CropTool.gd +++ b/src/Tools/CropTool.gd @@ -1,7 +1,7 @@ extends BaseTool -# Crop Tool, allows you to resize the canvas interactively +## Crop Tool, allows you to resize the canvas interactively -var _offset := Vector2.ZERO +var _offset := Vector2i.ZERO var _crop: CropRect var _start_pos: Vector2 var _syncing := false @@ -9,55 +9,57 @@ var _locked_ratio := false func _ready() -> void: + super._ready() _crop = Global.canvas.crop_rect - _crop.connect("updated", self, "_sync_ui") + _crop.updated.connect(_sync_ui) _crop.tool_count += 1 _sync_ui() func _exit_tree() -> void: + super._exit_tree() _crop.tool_count -= 1 -func draw_start(position: Vector2) -> void: - .draw_start(position) - _offset = position - _crop.rect.position - _start_pos = position +func draw_start(pos: Vector2i) -> void: + super.draw_start(pos) + _offset = pos - _crop.rect.position + _start_pos = pos -func draw_move(position: Vector2) -> void: - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + super.draw_move(pos) if _crop.locked_size: - _crop.rect.position = position - _offset + _crop.rect.position = pos - _offset else: if _crop.mode == CropRect.Mode.POSITION_SIZE and _locked_ratio: var ratio: Vector2 = $"%Size".ratio - var distance := abs(_start_pos.x - position.x) + abs(_start_pos.y - position.y) - _crop.rect.size.x = round(distance * ratio.x / (ratio.x + ratio.y)) - _crop.rect.size.y = round(distance * ratio.y / (ratio.x + ratio.y)) - if _start_pos.x < position.x: + var distance := absf(_start_pos.x - pos.x) + absf(_start_pos.y - pos.y) + _crop.rect.size.x = roundi(distance * ratio.x / (ratio.x + ratio.y)) + _crop.rect.size.y = roundi(distance * ratio.y / (ratio.x + ratio.y)) + if _start_pos.x < pos.x: _crop.rect.position.x = _start_pos.x else: _crop.rect.position.x = _start_pos.x - _crop.rect.size.x - if _start_pos.y < position.y: + if _start_pos.y < pos.y: _crop.rect.position.y = _start_pos.y else: _crop.rect.position.y = _start_pos.y - _crop.rect.size.y else: - _crop.rect.position.x = min(_start_pos.x, position.x) - _crop.rect.position.y = min(_start_pos.y, position.y) - _crop.rect.end.x = max(_start_pos.x, position.x) - _crop.rect.end.y = max(_start_pos.y, position.y) + _crop.rect.position.x = mini(_start_pos.x, pos.x) + _crop.rect.position.y = mini(_start_pos.y, pos.y) + _crop.rect.end.x = maxi(_start_pos.x, pos.x) + _crop.rect.end.y = maxi(_start_pos.y, pos.y) # Ensure that the size is at least 1: - _crop.rect.size.x = max(1, _crop.rect.size.x) - _crop.rect.size.y = max(1, _crop.rect.size.y) - _crop.emit_signal("updated") + _crop.rect.size.x = maxi(1, _crop.rect.size.x) + _crop.rect.size.y = maxi(1, _crop.rect.size.y) + _crop.updated.emit() func _sync_ui() -> void: _syncing = true $"%CropMode".selected = _crop.mode - $"%SizeLock".pressed = _crop.locked_size + $"%SizeLock".button_pressed = _crop.locked_size match _crop.mode: CropRect.Mode.MARGINS: $"%MarginsContainer".show() @@ -78,7 +80,7 @@ func _sync_ui() -> void: $"%Left".value = _crop.rect.position.x $"%Right".value = _crop.rect.end.x - $"%Position".max_value = Global.current_project.size - Vector2.ONE + $"%Position".max_value = Global.current_project.size - Vector2i.ONE $"%Size".max_value = Global.current_project.size $"%Position".value = _crop.rect.position $"%Size".value = _crop.rect.size @@ -90,11 +92,11 @@ func _sync_ui() -> void: # UI Signals: -func _on_CropMode_item_selected(index: int) -> void: +func _on_CropMode_item_selected(index: CropRect.Mode) -> void: if _syncing: return _crop.mode = index - _crop.emit_signal("updated") + _crop.updated.emit() func _on_SizeLock_toggled(button_pressed: bool) -> void: @@ -105,7 +107,7 @@ func _on_SizeLock_toggled(button_pressed: bool) -> void: if _syncing: return _crop.locked_size = button_pressed - _crop.emit_signal("updated") + _crop.updated.emit() func _on_Top_value_changed(value: float) -> void: @@ -114,32 +116,32 @@ func _on_Top_value_changed(value: float) -> void: var difference := value - _crop.rect.position.y _crop.rect.size.y = max(1, _crop.rect.size.y - difference) _crop.rect.position.y = value - _crop.emit_signal("updated") + _crop.updated.emit() func _on_Bottom_value_changed(value: float) -> void: if _syncing: return - _crop.rect.position.y = min(value - 1, _crop.rect.position.y) + _crop.rect.position.y = mini(value - 1, _crop.rect.position.y) _crop.rect.end.y = value - _crop.emit_signal("updated") + _crop.updated.emit() func _on_Left_value_changed(value: float) -> void: if _syncing: return var difference := value - _crop.rect.position.x - _crop.rect.size.x = max(1, _crop.rect.size.x - difference) + _crop.rect.size.x = maxi(1, _crop.rect.size.x - difference) _crop.rect.position.x = value - _crop.emit_signal("updated") + _crop.updated.emit() func _on_Right_value_changed(value: float) -> void: if _syncing: return - _crop.rect.position.x = min(value - 1, _crop.rect.position.x) + _crop.rect.position.x = mini(value - 1, _crop.rect.position.x) _crop.rect.end.x = value - _crop.emit_signal("updated") + _crop.updated.emit() func _on_RatioX_value_changed(value: float) -> void: @@ -147,8 +149,8 @@ func _on_RatioX_value_changed(value: float) -> void: return var prev_ratio: Vector2 = $"%Size".ratio $"%Size".ratio.x = value - _crop.rect.size.x = round(max(1, _crop.rect.size.y / prev_ratio.y * value)) - _crop.emit_signal("updated") + _crop.rect.size.x = roundi(maxf(1, _crop.rect.size.y / prev_ratio.y * value)) + _crop.updated.emit() func _on_RatioY_value_changed(value: float) -> void: @@ -156,22 +158,22 @@ func _on_RatioY_value_changed(value: float) -> void: return var prev_ratio: Vector2 = $"%Size".ratio $"%Size".ratio.y = value - _crop.rect.size.y = round(max(1, _crop.rect.size.x / prev_ratio.x * value)) - _crop.emit_signal("updated") + _crop.rect.size.y = roundi(maxf(1, _crop.rect.size.x / prev_ratio.x * value)) + _crop.updated.emit() -func _on_Position_value_changed(value: Vector2) -> void: +func _on_Position_value_changed(value: Vector2i) -> void: if _syncing: return _crop.rect.position = value - _crop.emit_signal("updated") + _crop.updated.emit() -func _on_Size_value_changed(value: Vector2) -> void: +func _on_Size_value_changed(value: Vector2i) -> void: if _syncing: return _crop.rect.size = value - _crop.emit_signal("updated") + _crop.updated.emit() func _on_Size_ratio_toggled(button_pressed: bool) -> void: diff --git a/src/Tools/CropTool.tscn b/src/Tools/CropTool.tscn index 06762bfa431..2e550bc61b8 100644 --- a/src/Tools/CropTool.tscn +++ b/src/Tools/CropTool.tscn @@ -1,42 +1,38 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=6 format=3 uid="uid://c35n21ii7onhe"] -[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/Tools/CropTool.gd" type="Script" id=3] -[ext_resource path="res://assets/graphics/misc/unlocked_size.png" type="Texture" id=4] -[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=5] +[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="2"] +[ext_resource type="Script" path="res://src/Tools/CropTool.gd" id="3"] +[ext_resource type="Texture2D" uid="uid://bgrq56ndc4ydj" path="res://assets/graphics/misc/unlocked_size.png" id="4"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="5"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 3 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("3") [node name="ModeLabel" type="Label" parent="." index="2"] -margin_top = 26.0 -margin_right = 116.0 -margin_bottom = 40.0 +layout_mode = 2 text = "Mode:" [node name="HBoxContainer" type="HBoxContainer" parent="." index="3"] -margin_top = 44.0 -margin_right = 116.0 -margin_bottom = 66.0 +layout_mode = 2 [node name="CropMode" type="OptionButton" parent="HBoxContainer" index="0"] unique_name_in_owner = true -margin_right = 84.0 -margin_bottom = 22.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Margins" +mouse_default_cursor_shape = 2 clip_text = true -items = [ "Margins", null, false, 0, null, "Position + Size", null, false, 1, null ] +item_count = 2 selected = 0 +popup/item_0/text = "Margins" +popup/item_0/id = 0 +popup/item_1/text = "Position + Size" +popup/item_1/id = 1 [node name="SizeLock" type="Button" parent="HBoxContainer" index="1"] unique_name_in_owner = true -margin_left = 88.0 -margin_right = 116.0 -margin_bottom = 22.0 -hint_tooltip = "Locked size +layout_mode = 2 +tooltip_text = "Locked size When enabled using the tool on the canvas will only move the cropping rectangle. @@ -44,54 +40,48 @@ When disabled using the tool on the canvas will draw the rectangle." focus_mode = 0 mouse_default_cursor_shape = 2 toggle_mode = true -icon = ExtResource( 4 ) -__meta__ = { -"_editor_description_": "" -} +icon = ExtResource("4") [node name="MarginsContainer" type="VBoxContainer" parent="." index="4"] unique_name_in_owner = true -margin_top = 70.0 -margin_right = 116.0 -margin_bottom = 196.0 +layout_mode = 2 [node name="MarginsLabel" type="Label" parent="MarginsContainer" index="0"] -margin_right = 116.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Margins:" -[node name="Top" parent="MarginsContainer" index="1" instance=ExtResource( 2 )] +[node name="Top" parent="MarginsContainer" index="1" instance=ExtResource("2")] unique_name_in_owner = true -margin_top = 18.0 -margin_right = 116.0 -margin_bottom = 42.0 +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" allow_greater = true allow_lesser = true prefix = "Top:" -[node name="Bottom" parent="MarginsContainer" index="2" instance=ExtResource( 2 )] +[node name="Bottom" parent="MarginsContainer" index="2" instance=ExtResource("2")] unique_name_in_owner = true -margin_top = 46.0 -margin_right = 116.0 -margin_bottom = 70.0 +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" allow_greater = true allow_lesser = true prefix = "Bottom:" -[node name="Left" parent="MarginsContainer" index="3" instance=ExtResource( 2 )] +[node name="Left" parent="MarginsContainer" index="3" instance=ExtResource("2")] unique_name_in_owner = true -margin_top = 74.0 -margin_right = 116.0 -margin_bottom = 98.0 +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" allow_greater = true allow_lesser = true prefix = "Left:" -[node name="Right" parent="MarginsContainer" index="4" instance=ExtResource( 2 )] +[node name="Right" parent="MarginsContainer" index="4" instance=ExtResource("2")] unique_name_in_owner = true -margin_top = 102.0 -margin_right = 116.0 -margin_bottom = 126.0 +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" allow_greater = true allow_lesser = true prefix = "Right:" @@ -99,92 +89,73 @@ prefix = "Right:" [node name="RatioContainer" type="VBoxContainer" parent="." index="5"] unique_name_in_owner = true visible = false -margin_top = 200.0 -margin_right = 116.0 -margin_bottom = 242.0 +layout_mode = 2 [node name="AspectRatioLabel" type="Label" parent="RatioContainer" index="0"] -margin_right = 116.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Aspect Ratio:" [node name="HBoxContainer" type="HBoxContainer" parent="RatioContainer" index="1"] -margin_top = 18.0 -margin_right = 116.0 -margin_bottom = 42.0 +layout_mode = 2 -[node name="RatioX" parent="RatioContainer/HBoxContainer" index="0" instance=ExtResource( 2 )] +[node name="RatioX" parent="RatioContainer/HBoxContainer" index="0" instance=ExtResource("2")] unique_name_in_owner = true -margin_right = 52.0 +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 value = 1.0 allow_greater = true [node name="Label" type="Label" parent="RatioContainer/HBoxContainer" index="1"] -margin_left = 56.0 -margin_top = 5.0 -margin_right = 60.0 -margin_bottom = 19.0 +layout_mode = 2 text = ":" -[node name="RatioY" parent="RatioContainer/HBoxContainer" index="2" instance=ExtResource( 2 )] +[node name="RatioY" parent="RatioContainer/HBoxContainer" index="2" instance=ExtResource("2")] unique_name_in_owner = true -margin_left = 64.0 -margin_right = 116.0 +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 value = 1.0 allow_greater = true [node name="PosSizeContainer" type="VBoxContainer" parent="." index="6"] unique_name_in_owner = true -margin_top = 200.0 -margin_right = 116.0 -margin_bottom = 344.0 +layout_mode = 2 [node name="PositionLabel" type="Label" parent="PosSizeContainer" index="0"] -margin_right = 116.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Position:" -[node name="Position" parent="PosSizeContainer" index="1" instance=ExtResource( 5 )] +[node name="Position" parent="PosSizeContainer" index="1" instance=ExtResource("5")] unique_name_in_owner = true -margin_top = 18.0 -margin_right = 116.0 -margin_bottom = 70.0 +layout_mode = 2 allow_greater = true allow_lesser = true [node name="SizeLabel" type="Label" parent="PosSizeContainer" index="2"] -margin_top = 74.0 -margin_right = 116.0 -margin_bottom = 88.0 +layout_mode = 2 text = "Size:" -[node name="Size" parent="PosSizeContainer" index="3" instance=ExtResource( 5 )] +[node name="Size" parent="PosSizeContainer" index="3" instance=ExtResource("5")] unique_name_in_owner = true -margin_top = 92.0 -margin_right = 116.0 -margin_bottom = 144.0 -value = Vector2( 1, 1 ) -min_value = Vector2( 1, 1 ) +layout_mode = 2 +value = Vector2(1, 1) +min_value = Vector2(1, 1) allow_greater = true show_ratio = true prefix_x = "Width:" prefix_y = "Height:" [node name="Apply" type="Button" parent="." index="7"] -margin_top = 348.0 -margin_right = 116.0 -margin_bottom = 368.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Apply" [node name="DimensionsLabel" type="Label" parent="." index="8"] unique_name_in_owner = true -margin_top = 372.0 -margin_right = 116.0 -margin_bottom = 386.0 -align = 1 +layout_mode = 2 [connection signal="item_selected" from="HBoxContainer/CropMode" to="." method="_on_CropMode_item_selected"] [connection signal="toggled" from="HBoxContainer/SizeLock" to="." method="_on_SizeLock_toggled"] diff --git a/src/Tools/Draw.gd b/src/Tools/Draw.gd index 6a9b0b12434..57b3cecfb8f 100644 --- a/src/Tools/Draw.gd +++ b/src/Tools/Draw.gd @@ -6,19 +6,19 @@ var _brush_size_dynamics := 1 var _cache_limit := 3 var _brush_interpolate := 0 var _brush_image := Image.new() -var _orignal_brush_image := Image.new() # contains the original _brush_image, without resizing +var _orignal_brush_image := Image.new() ## Contains the original _brush_image, without resizing var _brush_texture := ImageTexture.new() var _strength := 1.0 -var _picking_color := false +@warning_ignore("unused_private_class_variable") var _picking_color := false var _undo_data := {} var _drawer := Drawer.new() -var _mask := PoolRealArray() +var _mask := PackedFloat32Array() var _mirror_brushes := {} var _draw_line := false -var _line_start := Vector2.ZERO -var _line_end := Vector2.ZERO +var _line_start := Vector2i.ZERO +var _line_end := Vector2i.ZERO var _indicator := BitMap.new() var _polylines := [] @@ -26,29 +26,28 @@ var _line_polylines := [] # Memorize some stuff when doing brush strokes var _stroke_project: Project -var _stroke_images := [] # Array of Images +var _stroke_images: Array[Image] = [] var _is_mask_size_zero := true -var _circle_tool_shortcut: PoolVector2Array +var _circle_tool_shortcut: Array[Vector2i] func _ready() -> void: - Global.global_tool_options.connect("dynamics_changed", self, "_reset_dynamics") - Tools.connect("color_changed", self, "_on_Color_changed") - Global.brushes_popup.connect("brush_removed", self, "_on_Brush_removed") + super._ready() + Global.global_tool_options.dynamics_changed.connect(_reset_dynamics) + Tools.color_changed.connect(_on_Color_changed) + Global.brushes_popup.brush_removed.connect(_on_Brush_removed) func _on_BrushType_pressed() -> void: - if not Global.brushes_popup.is_connected("brush_selected", self, "_on_Brush_selected"): - Global.brushes_popup.connect( - "brush_selected", self, "_on_Brush_selected", [], CONNECT_ONESHOT - ) + if not Global.brushes_popup.brush_selected.is_connected(_on_Brush_selected): + Global.brushes_popup.brush_selected.connect(_on_Brush_selected, CONNECT_ONE_SHOT) # Now we set position and columns var tool_option_container = get_node("../../") var brush_button = $Brush/Type - var pop_position = brush_button.rect_global_position + Vector2(0, brush_button.rect_size.y) - var size_x = tool_option_container.rect_size.x - var size_y = tool_option_container.rect_size.y - $Brush.rect_position.y - $Brush.rect_size.y - var columns = int(size_x / 36) - 1 # 36 is the rect_size of BrushButton.tscn + var pop_position = brush_button.global_position + Vector2(0, brush_button.size.y) + var size_x = tool_option_container.size.x + var size_y = tool_option_container.size.y - $Brush.position.y - $Brush.size.y + var columns := int(size_x / 36) - 1 # 36 is the size of BrushButton.tscn var categories = Global.brushes_popup.get_node("Background/Brushes/Categories") for child in categories.get_children(): if child is GridContainer: @@ -129,13 +128,19 @@ func update_brush() -> void: $Brush/BrushSize.suffix = "px" # Assume we are using default brushes match _brush.type: Brushes.PIXEL: - _brush_texture.create_from_image(load("res://assets/graphics/pixel_image.png"), 0) + _brush_texture = ImageTexture.create_from_image( + load("res://assets/graphics/pixel_image.png") + ) _stroke_dimensions = Vector2.ONE * _brush_size Brushes.CIRCLE: - _brush_texture.create_from_image(load("res://assets/graphics/circle_9x9.png"), 0) + _brush_texture = ImageTexture.create_from_image( + load("res://assets/graphics/circle_9x9.png") + ) _stroke_dimensions = Vector2.ONE * _brush_size Brushes.FILLED_CIRCLE: - _brush_texture.create_from_image(load("res://assets/graphics/circle_filled_9x9.png"), 0) + _brush_texture = ImageTexture.create_from_image( + load("res://assets/graphics/circle_filled_9x9.png") + ) _stroke_dimensions = Vector2.ONE * _brush_size Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM: $Brush/BrushSize.suffix = "00 %" # Use a different size convention on images @@ -145,7 +150,7 @@ func update_brush() -> void: var random := randi() % _brush.random.size() _orignal_brush_image = _brush.random[random] _brush_image = _create_blended_brush_image(_orignal_brush_image) - _brush_texture.create_from_image(_brush_image, 0) + _brush_texture = ImageTexture.create_from_image(_brush_image) update_mirror_brush() _stroke_dimensions = _brush_image.get_size() _indicator = _create_brush_indicator() @@ -157,9 +162,9 @@ func update_brush() -> void: func update_random_image() -> void: if _brush.type != Brushes.RANDOM_FILE: return - var random = randi() % _brush.random.size() + var random := randi() % _brush.random.size() _brush_image = _create_blended_brush_image(_brush.random[random]) - _brush_texture.create_from_image(_brush_image, 0) + _brush_texture = ImageTexture.create_from_image(_brush_image) _indicator = _create_brush_indicator() update_mirror_brush() @@ -176,15 +181,14 @@ func update_mirror_brush() -> void: func update_mask(can_skip := true) -> void: if can_skip and Tools.dynamics_alpha == Tools.Dynamics.NONE: if _mask: - _mask = PoolRealArray() + _mask = PackedFloat32Array() return - var size: Vector2 = Global.current_project.size _is_mask_size_zero = false - # Faster than zeroing PoolByteArray directly. + # Faster than zeroing PackedFloat32Array directly. # See: https://github.com/Orama-Interactive/Pixelorama/pull/439 var nulled_array := [] - nulled_array.resize(size.x * size.y) - _mask = PoolRealArray(nulled_array) + nulled_array.resize(Global.current_project.size.x * Global.current_project.size.y) + _mask = PackedFloat32Array(nulled_array) func update_line_polylines(start: Vector2, end: Vector2) -> void: @@ -193,14 +197,14 @@ func update_line_polylines(start: Vector2, end: Vector2) -> void: func prepare_undo(action: String) -> void: - var project: Project = Global.current_project + var project := Global.current_project _undo_data = _get_undo_data() project.undo_redo.create_action(action) func commit_undo() -> void: var redo_data := _get_undo_data() - var project: Project = Global.current_project + var project := Global.current_project var frame := -1 var layer := -1 if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1: @@ -209,51 +213,58 @@ func commit_undo() -> void: project.undos += 1 for image in redo_data: - var compressed_data = redo_data[image] - var buffer_size = compressed_data["data"].size() + var compressed_data: Dictionary = redo_data[image] + var buffer_size: int = compressed_data["data"].size() compressed_data["data"] = compressed_data["data"].compress() project.undo_redo.add_do_method( - self, "undo_redo_draw_op", image, compressed_data, buffer_size + undo_redo_draw_op.bind(image, compressed_data["data"], buffer_size) ) - image.unlock() for image in _undo_data: - var compressed_data = _undo_data[image] - var buffer_size = compressed_data["data"].size() + var compressed_data: Dictionary = _undo_data[image] + var buffer_size: int = compressed_data["data"].size() compressed_data["data"] = compressed_data["data"].compress() project.undo_redo.add_undo_method( - self, "undo_redo_draw_op", image, compressed_data, buffer_size + undo_redo_draw_op.bind(image, compressed_data["data"], buffer_size) ) - project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, frame, layer)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, frame, layer)) project.undo_redo.commit_action() _undo_data.clear() -func undo_redo_draw_op(image: Object, compressed_image_data: Dictionary, buffer_size: int) -> void: - image["data"]["data"] = compressed_image_data["data"].decompress(buffer_size) +func undo_redo_draw_op( + image: Image, compressed_image_data: PackedByteArray, buffer_size: int +) -> void: + image.set_data( + image.get_width(), + image.get_height(), + image.has_mipmaps(), + image.get_format(), + compressed_image_data.decompress(buffer_size) + ) -func draw_tool(position: Vector2) -> void: +func draw_tool(pos: Vector2i) -> void: if Global.mirror_view: # Even brushes are not perfectly centred and are offsetted by 1 px so we add it if int(_stroke_dimensions.x) % 2 == 0: - position.x += 1 + pos.x += 1 _prepare_tool() - var coords_to_draw := _draw_tool(position) + var coords_to_draw := _draw_tool(pos) for coord in coords_to_draw: _set_pixel_no_cache(coord) -func draw_end(position: Vector2) -> void: - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + super.draw_end(pos) _brush_size_dynamics = _brush_size if Tools.dynamics_size != Tools.Dynamics.NONE: _brush_size_dynamics = Tools.brush_size_min match _brush.type: Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM: _brush_image = _create_blended_brush_image(_orignal_brush_image) - _brush_texture.create_from_image(_brush_image, 0) + _brush_texture = ImageTexture.create_from_image(_brush_image) update_mirror_brush() _stroke_dimensions = _brush_image.get_size() _indicator = _create_brush_indicator() @@ -264,14 +275,14 @@ func _prepare_tool() -> void: if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn(): return _brush_size_dynamics = _brush_size - var strength: float = Tools.get_alpha_dynamic(_strength) + var strength := Tools.get_alpha_dynamic(_strength) if Tools.dynamics_size == Tools.Dynamics.PRESSURE: - _brush_size_dynamics = round( - lerp(Tools.brush_size_min, Tools.brush_size_max, Tools.pen_pressure) + _brush_size_dynamics = roundi( + lerpf(Tools.brush_size_min, Tools.brush_size_max, Tools.pen_pressure) ) elif Tools.dynamics_size == Tools.Dynamics.VELOCITY: - _brush_size_dynamics = round( - lerp(Tools.brush_size_min, Tools.brush_size_max, Tools.mouse_velocity) + _brush_size_dynamics = roundi( + lerpf(Tools.brush_size_min, Tools.brush_size_max, Tools.mouse_velocity) ) _drawer.pixel_perfect = Tools.pixel_perfect if _brush_size == 1 else false _drawer.horizontal_mirror = Tools.horizontal_mirror @@ -293,7 +304,7 @@ func _prepare_tool() -> void: Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM: # save _brush_image for safe keeping _brush_image = _create_blended_brush_image(_orignal_brush_image) - _brush_texture.create_from_image(_brush_image, 0) + _brush_texture = ImageTexture.create_from_image(_brush_image) update_mirror_brush() _stroke_dimensions = _brush_image.get_size() @@ -305,27 +316,27 @@ func _prepare_circle_tool(fill: bool) -> void: var diameter := _brush_size_dynamics * 2 + 1 for n in range(0, diameter): for m in range(0, diameter): - if circle_tool_map.get_bit(Vector2(m, n)): + if circle_tool_map.get_bitv(Vector2i(m, n)): _circle_tool_shortcut.append( - Vector2(m - _brush_size_dynamics, n - _brush_size_dynamics) + Vector2i(m - _brush_size_dynamics, n - _brush_size_dynamics) ) # Make sure to always have invoked _prepare_tool() before this. This computes the coordinates to be # drawn if it can (except for the generic brush, when it's actually drawing them) -func _draw_tool(position: Vector2) -> PoolVector2Array: +func _draw_tool(pos: Vector2) -> PackedVector2Array: if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn(): - return PoolVector2Array() # empty fallback + return PackedVector2Array() # empty fallback match _brush.type: Brushes.PIXEL: - return _compute_draw_tool_pixel(position) + return _compute_draw_tool_pixel(pos) Brushes.CIRCLE: - return _compute_draw_tool_circle(position, false) + return _compute_draw_tool_circle(pos, false) Brushes.FILLED_CIRCLE: - return _compute_draw_tool_circle(position, true) + return _compute_draw_tool_circle(pos, true) _: - draw_tool_brush(position) - return PoolVector2Array() # empty fallback + draw_tool_brush(pos) + return PackedVector2Array() # empty fallback # Bresenham's Algorithm @@ -336,15 +347,15 @@ func draw_fill_gap(start: Vector2, end: Vector2) -> void: if int(_stroke_dimensions.x) % 2 == 0: start.x += 1 end.x += 1 - var dx := int(abs(end.x - start.x)) - var dy := int(-abs(end.y - start.y)) + _prepare_tool() + var dx := absi(end.x - start.x) + var dy := -absi(end.y - start.y) var err := dx + dy var e2 := err << 1 var sx := 1 if start.x < end.x else -1 var sy := 1 if start.y < end.y else -1 var x := start.x var y := start.y - _prepare_tool() # This needs to be a dictionary to ensure duplicate coordinates are not being added var coords_to_draw := {} while !(x == end.x && y == end.y): @@ -364,10 +375,10 @@ func draw_fill_gap(start: Vector2, end: Vector2) -> void: _set_pixel_no_cache(c) -# Compute the array of coordinates that should be drawn -func _compute_draw_tool_pixel(position: Vector2) -> PoolVector2Array: - var result := PoolVector2Array() - var start := position - Vector2.ONE * (_brush_size_dynamics >> 1) +## Compute the array of coordinates that should be drawn +func _compute_draw_tool_pixel(pos: Vector2) -> PackedVector2Array: + var result := PackedVector2Array() + var start := pos - Vector2.ONE * (_brush_size_dynamics >> 1) var end := start + Vector2.ONE * _brush_size_dynamics for y in range(start.y, end.y): for x in range(start.x, end.x): @@ -375,155 +386,155 @@ func _compute_draw_tool_pixel(position: Vector2) -> PoolVector2Array: return result -# Compute the array of coordinates that should be drawn -func _compute_draw_tool_circle(position: Vector2, fill := false) -> PoolVector2Array: - var size := Vector2(_brush_size_dynamics, _brush_size_dynamics) - var pos = position - (size / 2).floor() +## Compute the array of coordinates that should be drawn +func _compute_draw_tool_circle(pos: Vector2i, fill := false) -> Array[Vector2i]: + var brush_size := Vector2i(_brush_size_dynamics, _brush_size_dynamics) + var offset_pos := pos - (brush_size / 2) if _circle_tool_shortcut: - return _draw_tool_circle_from_map(position) + return _draw_tool_circle_from_map(pos) - var result := PoolVector2Array() + var result: Array[Vector2i] = [] if fill: - result = DrawingAlgos.get_ellipse_points_filled(pos, size) + result = DrawingAlgos.get_ellipse_points_filled(offset_pos, brush_size) else: - result = DrawingAlgos.get_ellipse_points(pos, size) + result = DrawingAlgos.get_ellipse_points(offset_pos, brush_size) return result -func _draw_tool_circle_from_map(position: Vector2) -> PoolVector2Array: - var result := PoolVector2Array() +func _draw_tool_circle_from_map(pos: Vector2i) -> Array[Vector2i]: + var result: Array[Vector2i] = [] for displacement in _circle_tool_shortcut: - result.append(position + displacement) + result.append(pos + displacement) return result -func draw_tool_brush(brush_position: Vector2) -> void: - var project: Project = Global.current_project +func draw_tool_brush(brush_position: Vector2i) -> void: + var project := Global.current_project # image brushes work differently, (we have to consider all 8 surrounding points) - var central_point = project.tiles.get_canon_position(brush_position) - var positions = project.tiles.get_point_in_tiles(central_point) + var central_point := project.tiles.get_canon_position(brush_position) + var positions := project.tiles.get_point_in_tiles(central_point) if Global.current_project.has_selection and project.tiles.mode == Tiles.MODE.NONE: positions = Global.current_project.selection_map.get_point_in_tile_mode(central_point) - var size := _brush_image.get_size() + var brush_size := _brush_image.get_size() for i in positions.size(): - var position: Vector2 = positions[i] - var dst: Vector2 = position - (size / 2).floor() - var dst_rect := Rect2(dst, size) - var draw_rect := _get_draw_rect() - dst_rect = dst_rect.clip(draw_rect) - if dst_rect.size == Vector2.ZERO: + var pos := positions[i] + var dst := pos - (brush_size / 2) + var dst_rect := Rect2i(dst, brush_size) + var draw_rectangle := _get_draw_rect() + dst_rect = dst_rect.intersection(draw_rectangle) + if dst_rect.size == Vector2i.ZERO: continue - var src_rect := Rect2(dst_rect.position - dst, dst_rect.size) + var src_rect := Rect2i(dst_rect.position - dst, dst_rect.size) var brush_image: Image = remove_unselected_parts_of_brush(_brush_image, dst) dst = dst_rect.position _draw_brush_image(brush_image, src_rect, dst) # Handle Mirroring - var mirror_x = (project.x_symmetry_point + 1) - dst.x - src_rect.size.x - var mirror_y = (project.y_symmetry_point + 1) - dst.y - src_rect.size.y + var mirror_x := (project.x_symmetry_point + 1) - dst.x - src_rect.size.x + var mirror_y := (project.y_symmetry_point + 1) - dst.y - src_rect.size.y if Tools.horizontal_mirror: - var x_dst := Vector2(mirror_x, dst.y) - var mirror_brush_x: Image = remove_unselected_parts_of_brush(_mirror_brushes.x, x_dst) - _draw_brush_image(mirror_brush_x, _flip_rect(src_rect, size, true, false), x_dst) + var x_dst := Vector2i(mirror_x, dst.y) + var mirror_brush_x := remove_unselected_parts_of_brush(_mirror_brushes.x, x_dst) + _draw_brush_image(mirror_brush_x, _flip_rect(src_rect, brush_size, true, false), x_dst) if Tools.vertical_mirror: - var xy_dst := Vector2(mirror_x, mirror_y) + var xy_dst := Vector2i(mirror_x, mirror_y) var mirror_brush_xy := remove_unselected_parts_of_brush(_mirror_brushes.xy, xy_dst) - _draw_brush_image(mirror_brush_xy, _flip_rect(src_rect, size, true, true), xy_dst) + _draw_brush_image( + mirror_brush_xy, _flip_rect(src_rect, brush_size, true, true), xy_dst + ) if Tools.vertical_mirror: - var y_dst := Vector2(dst.x, mirror_y) - var mirror_brush_y: Image = remove_unselected_parts_of_brush(_mirror_brushes.y, y_dst) - _draw_brush_image(mirror_brush_y, _flip_rect(src_rect, size, false, true), y_dst) + var y_dst := Vector2i(dst.x, mirror_y) + var mirror_brush_y := remove_unselected_parts_of_brush(_mirror_brushes.y, y_dst) + _draw_brush_image(mirror_brush_y, _flip_rect(src_rect, brush_size, false, true), y_dst) -func remove_unselected_parts_of_brush(brush: Image, dst: Vector2) -> Image: - var project: Project = Global.current_project +func remove_unselected_parts_of_brush(brush: Image, dst: Vector2i) -> Image: + var project := Global.current_project if !project.has_selection: return brush - var size := brush.get_size() + var brush_size := brush.get_size() var new_brush := Image.new() new_brush.copy_from(brush) - new_brush.lock() - for x in size.x: - for y in size.y: - var pos := Vector2(x, y) + dst + for x in brush_size.x: + for y in brush_size.y: + var pos := Vector2i(x, y) + dst if !project.selection_map.is_pixel_selected(pos): new_brush.set_pixel(x, y, Color(0)) - new_brush.unlock() return new_brush func draw_indicator(left: bool) -> void: var color := Global.left_tool_color if left else Global.right_tool_color - draw_indicator_at(snap_position(_cursor), Vector2.ZERO, color) + draw_indicator_at(snap_position(_cursor), Vector2i.ZERO, color) if ( Global.current_project.has_selection and Global.current_project.tiles.mode == Tiles.MODE.NONE ): - var position := _line_start if _draw_line else _cursor - var nearest_pos := Global.current_project.selection_map.get_nearest_position(position) - if nearest_pos != Vector2.ZERO: + var pos := _line_start if _draw_line else _cursor + var nearest_pos := Global.current_project.selection_map.get_nearest_position(pos) + if nearest_pos != Vector2i.ZERO: var offset := nearest_pos - draw_indicator_at(snap_position(_cursor), offset, Color.green) + draw_indicator_at(snap_position(_cursor), offset, Color.GREEN) return if Global.current_project.tiles.mode and Global.current_project.tiles.has_point(_cursor): - var position := _line_start if _draw_line else _cursor - var nearest_tile := Global.current_project.tiles.get_nearest_tile(position) - if nearest_tile.position != Vector2.ZERO: + var pos := _line_start if _draw_line else _cursor + var nearest_tile := Global.current_project.tiles.get_nearest_tile(pos) + if nearest_tile.position != Vector2i.ZERO: var offset := nearest_tile.position - draw_indicator_at(snap_position(_cursor), offset, Color.green) + draw_indicator_at(snap_position(_cursor), offset, Color.GREEN) -func draw_indicator_at(position: Vector2, offset: Vector2, color: Color) -> void: - var canvas = Global.canvas.indicators +func draw_indicator_at(pos: Vector2i, offset: Vector2i, color: Color) -> void: + var canvas: Node2D = Global.canvas.indicators if _brush.type in [Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM] and not _draw_line: - position -= (_brush_image.get_size() / 2).floor() - position -= offset - canvas.draw_texture(_brush_texture, position) + pos -= _brush_image.get_size() / 2 + pos -= offset + canvas.draw_texture(_brush_texture, pos) else: if _draw_line: - position.x = _line_end.x if _line_end.x < _line_start.x else _line_start.x - position.y = _line_end.y if _line_end.y < _line_start.y else _line_start.y - position -= (_indicator.get_size() / 2).floor() - position -= offset - canvas.draw_set_transform(position, canvas.rotation, canvas.scale) + pos.x = _line_end.x if _line_end.x < _line_start.x else _line_start.x + pos.y = _line_end.y if _line_end.y < _line_start.y else _line_start.y + pos -= _indicator.get_size() / 2 + pos -= offset + canvas.draw_set_transform(pos, canvas.rotation, canvas.scale) var polylines := _line_polylines if _draw_line else _polylines for line in polylines: - var pool := PoolVector2Array(line) + var pool := PackedVector2Array(line) canvas.draw_polyline(pool, color) canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) -func _set_pixel(position: Vector2, ignore_mirroring := false) -> void: - if position in _draw_cache and _for_frame == _stroke_project.current_frame: +func _set_pixel(pos: Vector2i, ignore_mirroring := false) -> void: + if pos in _draw_cache and _for_frame == _stroke_project.current_frame: return if _draw_cache.size() > _cache_limit or _for_frame != _stroke_project.current_frame: _draw_cache = [] _for_frame = _stroke_project.current_frame - _draw_cache.append(position) # Store the position of pixel + _draw_cache.append(pos) # Store the position of pixel # Invoke uncached version to actually draw the pixel - _set_pixel_no_cache(position, ignore_mirroring) + _set_pixel_no_cache(pos, ignore_mirroring) -func _set_pixel_no_cache(position: Vector2, ignore_mirroring := false) -> void: - position = _stroke_project.tiles.get_canon_position(position) +func _set_pixel_no_cache(pos: Vector2i, ignore_mirroring := false) -> void: + pos = _stroke_project.tiles.get_canon_position(pos) if Global.current_project.has_selection: - position = Global.current_project.selection_map.get_canon_position(position) - if !_stroke_project.can_pixel_get_drawn(position): + pos = Global.current_project.selection_map.get_canon_position(pos) + if !_stroke_project.can_pixel_get_drawn(pos): return var images := _stroke_images if _is_mask_size_zero: for image in images: - _drawer.set_pixel(image, position, tool_slot.color, ignore_mirroring) + _drawer.set_pixel(image, pos, tool_slot.color, ignore_mirroring) else: - var i := int(position.x + position.y * _stroke_project.size.x) + var i := pos.x + pos.y * _stroke_project.size.x if _mask.size() >= i + 1: var alpha_dynamic: float = Tools.get_alpha_dynamic() - var alpha: float = images[0].get_pixelv(position).a + var alpha: float = images[0].get_pixelv(pos).a if _mask[i] < alpha_dynamic: # Overwrite colors to avoid additive blending between strokes of # brushes that are larger than 1px @@ -534,38 +545,36 @@ func _set_pixel_no_cache(position: Vector2, ignore_mirroring := false) -> void: _drawer.color_op.overwrite = true _mask[i] = alpha_dynamic for image in images: - _drawer.set_pixel(image, position, tool_slot.color, ignore_mirroring) + _drawer.set_pixel(image, pos, tool_slot.color, ignore_mirroring) if overwrite != null: _drawer.color_op.overwrite = overwrite else: for image in images: - _drawer.set_pixel(image, position, tool_slot.color, ignore_mirroring) + _drawer.set_pixel(image, pos, tool_slot.color, ignore_mirroring) -func _draw_brush_image(_image: Image, _src_rect: Rect2, _dst: Vector2) -> void: +func _draw_brush_image(_image: Image, _src_rect: Rect2i, _dst: Vector2i) -> void: pass func _create_blended_brush_image(image: Image) -> Image: - var size := image.get_size() * _brush_size_dynamics + var brush_size := image.get_size() * _brush_size_dynamics var brush := Image.new() brush.copy_from(image) brush = _blend_image(brush, tool_slot.color, _brush_interpolate / 100.0) - brush.resize(size.x, size.y, Image.INTERPOLATE_NEAREST) + brush.resize(brush_size.x, brush_size.y, Image.INTERPOLATE_NEAREST) return brush func _blend_image(image: Image, color: Color, factor: float) -> Image: - var size := image.get_size() - image.lock() - for y in size.y: - for x in size.x: + var image_size := image.get_size() + for y in image_size.y: + for x in image_size.x: var color_old := image.get_pixel(x, y) if color_old.a > 0: - var color_new := color_old.linear_interpolate(color, factor) + var color_new := color_old.lerp(color, factor) color_new.a = color_old.a image.set_pixel(x, y, color_new) - image.unlock() return image @@ -587,35 +596,36 @@ func _create_image_indicator(image: Image) -> BitMap: return bitmap -func _create_pixel_indicator(size: int) -> BitMap: +func _create_pixel_indicator(brush_size: int) -> BitMap: var bitmap := BitMap.new() - bitmap.create(Vector2.ONE * size) - bitmap.set_bit_rect(Rect2(Vector2.ZERO, Vector2.ONE * size), true) + bitmap.create(Vector2i.ONE * brush_size) + bitmap.set_bit_rect(Rect2i(Vector2i.ZERO, Vector2i.ONE * brush_size), true) return bitmap -func _create_circle_indicator(size: int, fill := false) -> BitMap: - _circle_tool_shortcut = PoolVector2Array() - var diameter := Vector2(size, size) * 2 + Vector2.ONE - return _fill_bitmap_with_points(_compute_draw_tool_circle(Vector2(size, size), fill), diameter) +func _create_circle_indicator(brush_size: int, fill := false) -> BitMap: + _circle_tool_shortcut = [] + var brush_size_v2 := Vector2i(brush_size, brush_size) + var diameter := brush_size_v2 * 2 + Vector2i.ONE + return _fill_bitmap_with_points(_compute_draw_tool_circle(brush_size_v2, fill), diameter) -func _create_line_indicator(indicator: BitMap, start: Vector2, end: Vector2) -> BitMap: +func _create_line_indicator(indicator: BitMap, start: Vector2i, end: Vector2i) -> BitMap: var bitmap := BitMap.new() - var size := (end - start).abs() + indicator.get_size() - bitmap.create(size) + var brush_size := (end - start).abs() + indicator.get_size() + bitmap.create(brush_size) - var offset := (indicator.get_size() / 2).floor() + var offset := indicator.get_size() / 2 var diff := end - start - start.x = -diff.x if diff.x < 0 else 0.0 - end.x = 0.0 if diff.x < 0 else diff.x - start.y = -diff.y if diff.y < 0 else 0.0 - end.y = 0.0 if diff.y < 0 else diff.y + start.x = -diff.x if diff.x < 0 else 0 + end.x = 0 if diff.x < 0 else diff.x + start.y = -diff.y if diff.y < 0 else 0 + end.y = 0 if diff.y < 0 else diff.y start += offset end += offset - var dx := int(abs(end.x - start.x)) - var dy := int(-abs(end.y - start.y)) + var dx := absi(end.x - start.x) + var dy := -absi(end.y - start.y) var err := dx + dy var e2 := err << 1 var sx := 1 if start.x < end.x else -1 @@ -623,7 +633,7 @@ func _create_line_indicator(indicator: BitMap, start: Vector2, end: Vector2) -> var x := start.x var y := start.y while !(x == end.x && y == end.y): - _blit_indicator(bitmap, indicator, Vector2(x, y)) + _blit_indicator(bitmap, indicator, Vector2i(x, y)) e2 = err << 1 if e2 >= dy: err += dy @@ -631,53 +641,53 @@ func _create_line_indicator(indicator: BitMap, start: Vector2, end: Vector2) -> if e2 <= dx: err += dx y += sy - _blit_indicator(bitmap, indicator, Vector2(x, y)) + _blit_indicator(bitmap, indicator, Vector2i(x, y)) return bitmap -func _blit_indicator(dst: BitMap, indicator: BitMap, position: Vector2) -> void: - var rect := Rect2(Vector2.ZERO, dst.get_size()) - var size := indicator.get_size() - position -= (size / 2).floor() - for y in size.y: - for x in size.x: - var pos := Vector2(x, y) - var bit := indicator.get_bit(pos) - pos += position - if bit and rect.has_point(pos): - dst.set_bit(pos, bit) +func _blit_indicator(dst: BitMap, indicator: BitMap, pos: Vector2i) -> void: + var rect := Rect2i(Vector2.ZERO, dst.get_size()) + var brush_size := indicator.get_size() + pos -= brush_size / 2 + for y in brush_size.y: + for x in brush_size.x: + var brush_pos := Vector2i(x, y) + var bit := indicator.get_bitv(brush_pos) + brush_pos += pos + if bit and rect.has_point(brush_pos): + dst.set_bitv(brush_pos, bit) func _line_angle_constraint(start: Vector2, end: Vector2) -> Dictionary: var result := {} - var angle := rad2deg(end.angle_to_point(start)) + var angle := rad_to_deg(start.angle_to_point(end)) var distance := start.distance_to(end) if Input.is_action_pressed("draw_snap_angle"): if Tools.pixel_perfect: - angle = stepify(angle, 22.5) + angle = snappedf(angle, 22.5) if step_decimals(angle) != 0: var diff := end - start - var v := Vector2(2, 1) if abs(diff.x) > abs(diff.y) else Vector2(1, 2) + var v := Vector2(2, 1) if absf(diff.x) > absf(diff.y) else Vector2(1, 2) var p := diff.project(diff.sign() * v).abs().round() - var f := p.y if abs(diff.x) > abs(diff.y) else p.x + var f := p.y if absf(diff.x) > absf(diff.y) else p.x end = start + diff.sign() * v * f - diff.sign() - angle = rad2deg(atan2(sign(diff.y) * v.y, sign(diff.x) * v.x)) + angle = rad_to_deg(atan2(signi(diff.y) * v.y, signi(diff.x) * v.x)) else: - end = start + Vector2.RIGHT.rotated(deg2rad(angle)) * distance + end = start + Vector2.RIGHT.rotated(deg_to_rad(angle)) * distance else: - angle = stepify(angle, 15) - end = start + Vector2.RIGHT.rotated(deg2rad(angle)) * distance + angle = snappedf(angle, 15) + end = start + Vector2.RIGHT.rotated(deg_to_rad(angle)) * distance angle *= -1 angle += 360 if angle < 0 else 0 - result.text = str(stepify(angle, 0.01)) + "ยฐ" - result.position = end.round() + result.text = str(snappedf(angle, 0.01)) + "ยฐ" + result.position = Vector2i(end.round()) return result func _get_undo_data() -> Dictionary: var data := {} - var project: Project = Global.current_project - var cels := [] # Array of Cels + var project := Global.current_project + var cels: Array[BaseCel] = [] if Global.animation_timer.is_stopped(): for cel_index in project.selected_cels: cels.append(project.frames[cel_index[0]].cels[cel_index[1]]) @@ -690,23 +700,21 @@ func _get_undo_data() -> Dictionary: for cel in cels: if not cel is PixelCel: continue - var image: Image = cel.image - image.unlock() + var image := cel.get_image() data[image] = image.data - image.lock() return data -func _pick_color(position: Vector2) -> void: - var project: Project = Global.current_project - position = project.tiles.get_canon_position(position) +func _pick_color(pos: Vector2i) -> void: + var project := Global.current_project + pos = project.tiles.get_canon_position(pos) - if position.x < 0 or position.y < 0: + if pos.x < 0 or pos.y < 0: return var image := Image.new() image.copy_from(_get_draw_image()) - if position.x > image.get_width() - 1 or position.y > image.get_height() - 1: + if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1: return var color := Color(0, 0, 0, 0) @@ -715,10 +723,12 @@ func _pick_color(position: Vector2) -> void: var idx = (project.layers.size() - 1) - layer if project.layers[idx].is_visible_in_hierarchy(): image = curr_frame.cels[idx].get_image() - image.lock() - color = image.get_pixelv(position) - image.unlock() + color = image.get_pixelv(pos) if color != Color(0, 0, 0, 0): break - var button := BUTTON_LEFT if Tools._slots[BUTTON_LEFT].tool_node == self else BUTTON_RIGHT + var button := ( + MOUSE_BUTTON_LEFT + if Tools._slots[MOUSE_BUTTON_LEFT].tool_node == self + else MOUSE_BUTTON_RIGHT + ) Tools.assign_color(color, button, false) diff --git a/src/Tools/Draw.tscn b/src/Tools/Draw.tscn index 9918f1f4191..48053198eef 100644 --- a/src/Tools/Draw.tscn +++ b/src/Tools/Draw.tscn @@ -1,73 +1,68 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=6 format=3 uid="uid://ubyatap3sylf"] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/Tools/Draw.gd" type="Script" id=3] +[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="1"] +[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="2"] +[ext_resource type="Script" path="res://src/Tools/Draw.gd" id="3"] -[sub_resource type="StyleBoxFlat" id=1] -bg_color = Color( 1, 1, 1, 1 ) -border_color = Color( 1, 1, 1, 1 ) +[sub_resource type="StyleBoxFlat" id="1"] +bg_color = Color(1, 1, 1, 1) +border_color = Color(1, 1, 1, 1) corner_radius_top_left = 5 corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 anti_aliasing = false -[sub_resource type="StyleBoxFlat" id=2] -bg_color = Color( 1, 1, 1, 1 ) -border_color = Color( 1, 1, 1, 1 ) +[sub_resource type="StyleBoxFlat" id="2"] +bg_color = Color(1, 1, 1, 1) +border_color = Color(1, 1, 1, 1) corner_radius_top_left = 5 corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 anti_aliasing = false -[node name="ToolOptions" instance=ExtResource( 2 )] -script = ExtResource( 3 ) +[node name="ToolOptions" instance=ExtResource("2")] +script = ExtResource("3") [node name="Brush" type="HBoxContainer" parent="." index="2"] -margin_top = 26.0 -margin_right = 116.0 -margin_bottom = 58.0 +layout_mode = 2 alignment = 1 [node name="Type" type="Button" parent="Brush" index="0"] -margin_right = 32.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -hint_tooltip = "Select a brush" -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 size_flags_horizontal = 0 -custom_styles/hover = SubResource( 1 ) -custom_styles/pressed = SubResource( 1 ) -custom_styles/focus = SubResource( 2 ) -custom_styles/disabled = SubResource( 2 ) -custom_styles/normal = SubResource( 1 ) +tooltip_text = "Select a brush" +mouse_default_cursor_shape = 2 +theme_override_styles/normal = SubResource("1") +theme_override_styles/hover = SubResource("1") +theme_override_styles/pressed = SubResource("1") +theme_override_styles/disabled = SubResource("2") +theme_override_styles/focus = SubResource("2") [node name="Texture" type="TextureRect" parent="Brush/Type" index="0"] -margin_right = 32.0 -margin_bottom = 32.0 -expand = true +layout_mode = 0 +offset_right = 32.0 +offset_bottom = 32.0 +expand_mode = 1 stretch_mode = 6 -[node name="BrushSize" parent="Brush" index="1" instance=ExtResource( 1 )] -margin_left = 36.0 -margin_right = 116.0 -margin_bottom = 32.0 +[node name="BrushSize" parent="Brush" index="1" instance=ExtResource("1")] +layout_mode = 2 min_value = 1.0 max_value = 25.0 value = 1.0 allow_greater = true prefix = "Size:" suffix = "px" -is_global = true +global_increment_action = "brush_size_increment" +global_decrement_action = "brush_size_decrement" -[node name="ColorInterpolation" parent="." index="3" instance=ExtResource( 1 )] +[node name="ColorInterpolation" parent="." index="3" instance=ExtResource("1")] visible = false -margin_top = 62.0 -margin_right = 116.0 -margin_bottom = 86.0 -hint_tooltip = "0: Color from the brush itself, 100: the currently selected color" +layout_mode = 2 +tooltip_text = "0: Color from the brush itself, 100: the currently selected color" prefix = "Brush color from:" [connection signal="pressed" from="Brush/Type" to="." method="_on_BrushType_pressed"] diff --git a/src/Tools/EllipseTool.gd b/src/Tools/EllipseTool.gd index 4e1e12de424..28959dc9c3e 100644 --- a/src/Tools/EllipseTool.gd +++ b/src/Tools/EllipseTool.gd @@ -1,46 +1,46 @@ extends "res://src/Tools/ShapeDrawer.gd" -func _get_shape_points_filled(size: Vector2) -> PoolVector2Array: - return DrawingAlgos.get_ellipse_points_filled(Vector2.ZERO, size, _thickness) +func _get_shape_points_filled(shape_size: Vector2i) -> Array[Vector2i]: + return DrawingAlgos.get_ellipse_points_filled(Vector2i.ZERO, shape_size, _thickness) -func _get_shape_points(size: Vector2) -> PoolVector2Array: +func _get_shape_points(shape_size: Vector2i) -> Array[Vector2i]: # Return ellipse with thickness 1 if _thickness == 1: - return PoolVector2Array(DrawingAlgos.get_ellipse_points(Vector2.ZERO, size)) + return DrawingAlgos.get_ellipse_points(Vector2i.ZERO, shape_size) - var size_offset := Vector2.ONE * (_thickness - 1) - var new_size := size + size_offset + var size_offset := Vector2i.ONE * (_thickness - 1) + var new_size := shape_size + size_offset var inner_ellipse_size := new_size - size_offset # The inner ellipse is to small to create a gap in the middle of the ellipse, # just return a filled ellipse if inner_ellipse_size.x <= 2 and inner_ellipse_size.y <= 2: - return _get_shape_points_filled(size) + return _get_shape_points_filled(shape_size) # Adapted scanline algorithm to fill between 2 ellipses, to create a thicker ellipse - var res_array := [] + var res_array: Array[Vector2i] = [] var border_ellipses := ( - DrawingAlgos.get_ellipse_points(Vector2.ZERO, new_size) + DrawingAlgos.get_ellipse_points(Vector2i.ZERO, new_size) + DrawingAlgos.get_ellipse_points(size_offset, inner_ellipse_size) ) # Outer and inner ellipses var bitmap := _fill_bitmap_with_points(border_ellipses, new_size) - var smallest_side := min(new_size.x, new_size.y) - var largest_side := max(new_size.x, new_size.y) - var scan_dir := Vector2(0, 1) if smallest_side == new_size.x else Vector2(1, 0) - var iscan_dir := Vector2(1, 0) if smallest_side == new_size.x else Vector2(0, 1) - var ie_relevant_offset_side = size_offset.x if smallest_side == new_size.x else size_offset.y - var h_ls_c := ceil(largest_side / 2) + var smallest_side := mini(new_size.x, new_size.y) + var largest_side := maxi(new_size.x, new_size.y) + var scan_dir := Vector2i(0, 1) if smallest_side == new_size.x else Vector2i(1, 0) + var iscan_dir := Vector2i(1, 0) if smallest_side == new_size.x else Vector2i(0, 1) + var ie_relevant_offset_side := size_offset.x if smallest_side == new_size.x else size_offset.y + var h_ls_c := ceili(largest_side / 2) - for s in range(ceil(smallest_side / 2)): + for s in range(ceili(smallest_side / 2)): if s <= ie_relevant_offset_side: - var draw := false + var can_draw := false for l in range(h_ls_c): var pos := scan_dir * l + iscan_dir * s - if bitmap.get_bit(pos): - draw = true - if draw: + if bitmap.get_bitv(pos): + can_draw = true + if can_draw: var mirror_smallest_side := iscan_dir * (smallest_side - 1 - 2 * s) var mirror_largest_side := scan_dir * (largest_side - 1 - 2 * l) res_array.append(pos) @@ -52,14 +52,14 @@ func _get_shape_points(size: Vector2) -> PoolVector2Array: var l_o := 0 for l in range(h_ls_c): var pos := scan_dir * l + iscan_dir * s - if bitmap.get_bit(pos): + if bitmap.get_bitv(pos): l_o = l break # Find inner ellipse var li := 0 for l in range(h_ls_c, 0, -1): var pos := scan_dir * l + iscan_dir * s - if bitmap.get_bit(pos): + if bitmap.get_bitv(pos): li = l break # Fill between both @@ -72,4 +72,4 @@ func _get_shape_points(size: Vector2) -> PoolVector2Array: res_array.append(pos + mirror_smallest_side) res_array.append(pos + mirror_smallest_side + mirror_largest_side) - return PoolVector2Array(res_array) + return res_array diff --git a/src/Tools/EllipseTool.tscn b/src/Tools/EllipseTool.tscn index 054c10f9ec9..04674337cd6 100644 --- a/src/Tools/EllipseTool.tscn +++ b/src/Tools/EllipseTool.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://4hp76lf38bc7"] -[ext_resource path="res://src/Tools/ShapeDrawer.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/EllipseTool.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://n40lhf8hm7o1" path="res://src/Tools/ShapeDrawer.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/EllipseTool.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") diff --git a/src/Tools/Eraser.gd b/src/Tools/Eraser.gd index 543435cfb8a..2b297ae1ba8 100644 --- a/src/Tools/Eraser.gd +++ b/src/Tools/Eraser.gd @@ -1,7 +1,7 @@ extends "res://src/Tools/Draw.gd" var _last_position := Vector2.INF -var _clear_image := Image.new() +var _clear_image: Image var _changed := false @@ -19,27 +19,27 @@ class EraseOp: func _init() -> void: _drawer.color_op = EraseOp.new() - _clear_image.create(1, 1, false, Image.FORMAT_RGBA8) + _clear_image = Image.create(1, 1, false, Image.FORMAT_RGBA8) _clear_image.fill(Color(0, 0, 0, 0)) func get_config() -> Dictionary: - var config := .get_config() + var config := super.get_config() config["strength"] = _strength return config func set_config(config: Dictionary) -> void: - .set_config(config) + super.set_config(config) _strength = config.get("strength", _strength) -func draw_start(position: Vector2) -> void: - position = snap_position(position) - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_start(pos) if Input.is_action_pressed("draw_color_picker"): _picking_color = true - _pick_color(position) + _pick_color(pos) return _picking_color = false @@ -55,43 +55,43 @@ func draw_start(position: Vector2) -> void: if _draw_line: if Global.mirror_view: # mirroring position is ONLY required by "Preview" - position.x = (Global.current_project.size.x - 1) - position.x - _line_start = position - _line_end = position + pos.x = (Global.current_project.size.x - 1) - pos.x + _line_start = pos + _line_end = pos update_line_polylines(_line_start, _line_end) else: - draw_tool(position) - _last_position = position + draw_tool(pos) + _last_position = pos Global.canvas.sprite_changed_this_frame = true cursor_text = "" -func draw_move(position: Vector2) -> void: - position = snap_position(position) - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_move(pos) if _picking_color: # Still return even if we released Alt if Input.is_action_pressed("draw_color_picker"): - _pick_color(position) + _pick_color(pos) return if _draw_line: if Global.mirror_view: # mirroring position is ONLY required by "Preview" - position.x = (Global.current_project.size.x - 1) - position.x - var d := _line_angle_constraint(_line_start, position) + pos.x = (Global.current_project.size.x - 1) - pos.x + var d := _line_angle_constraint(_line_start, pos) _line_end = d.position cursor_text = d.text update_line_polylines(_line_start, _line_end) else: - draw_fill_gap(_last_position, position) - _last_position = position + draw_fill_gap(_last_position, pos) + _last_position = pos cursor_text = "" Global.canvas.sprite_changed_this_frame = true -func draw_end(position: Vector2) -> void: - position = snap_position(position) - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_end(pos) if _picking_color: return @@ -109,24 +109,22 @@ func draw_end(position: Vector2) -> void: update_random_image() -func _draw_brush_image(image: Image, src_rect: Rect2, dst: Vector2) -> void: +func _draw_brush_image(image: Image, src_rect: Rect2i, dst: Vector2i) -> void: _changed = true if _strength == 1: - var size := image.get_size() - if _clear_image.get_size() != size: - _clear_image.resize(size.x, size.y, Image.INTERPOLATE_NEAREST) + var brush_size := image.get_size() + if _clear_image.get_size() != brush_size: + _clear_image.resize(brush_size.x, brush_size.y, Image.INTERPOLATE_NEAREST) var images := _get_selected_draw_images() for draw_image in images: draw_image.blit_rect_mask(_clear_image, image, src_rect, dst) else: - image.lock() for xx in image.get_size().x: for yy in image.get_size().y: if image.get_pixel(xx, yy).a > 0: - var pos := Vector2(xx, yy) + dst - src_rect.position + var pos := Vector2i(xx, yy) + dst - src_rect.position _set_pixel(pos, true) - image.unlock() func _on_Opacity_value_changed(value: float) -> void: @@ -136,10 +134,10 @@ func _on_Opacity_value_changed(value: float) -> void: func update_config() -> void: - .update_config() + super.update_config() $OpacitySlider.value = _strength * 255 func update_brush() -> void: - .update_brush() + super.update_brush() $ColorInterpolation.visible = false diff --git a/src/Tools/Eraser.tscn b/src/Tools/Eraser.tscn index 337525fd025..fcb2e92044f 100644 --- a/src/Tools/Eraser.tscn +++ b/src/Tools/Eraser.tscn @@ -1,20 +1,16 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://btmbrqqig7wys"] -[ext_resource path="res://src/Tools/Draw.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/Eraser.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3] +[ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/Draw.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/Eraser.gd" id="2"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") -[node name="ColorInterpolation" parent="." index="3"] -margin_top = 134.0 -margin_bottom = 196.0 - -[node name="OpacitySlider" parent="." index="4" instance=ExtResource( 3 )] -margin_top = 62.0 -margin_right = 116.0 -margin_bottom = 86.0 +[node name="OpacitySlider" parent="." index="4" instance=ExtResource("3")] +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" max_value = 255.0 value = 255.0 prefix = "Opacity:" diff --git a/src/Tools/LineTool.gd b/src/Tools/LineTool.gd index ceaa5e6a51b..f11078f16b6 100644 --- a/src/Tools/LineTool.gd +++ b/src/Tools/LineTool.gd @@ -1,9 +1,9 @@ extends "res://src/Tools/Draw.gd" -var _original_pos := Vector2.ZERO -var _start := Vector2.ZERO -var _offset := Vector2.ZERO -var _dest := Vector2.ZERO +var _original_pos := Vector2i.ZERO +var _start := Vector2i.ZERO +var _offset := Vector2i.ZERO +var _dest := Vector2i.ZERO var _drawing := false var _displace_origin := false var _thickness := 1 @@ -28,34 +28,34 @@ func _on_Thickness_value_changed(value: int) -> void: func update_indicator() -> void: var bitmap := BitMap.new() - bitmap.create(Vector2.ONE * _thickness) - bitmap.set_bit_rect(Rect2(Vector2.ZERO, Vector2.ONE * _thickness), true) + bitmap.create(Vector2i.ONE * _thickness) + bitmap.set_bit_rect(Rect2i(Vector2i.ZERO, Vector2i.ONE * _thickness), true) _indicator = bitmap _polylines = _create_polylines(_indicator) func get_config() -> Dictionary: - var config := .get_config() + var config := super.get_config() config["thickness"] = _thickness return config func set_config(config: Dictionary) -> void: - .set_config(config) + super.set_config(config) _thickness = config.get("thickness", _thickness) func update_config() -> void: - .update_config() + super.update_config() $ThicknessSlider.value = _thickness -func _get_shape_points(_size: Vector2) -> PoolVector2Array: - return PoolVector2Array() +func _get_shape_points(_size: Vector2i) -> Array[Vector2i]: + return [] -func _get_shape_points_filled(_size: Vector2) -> PoolVector2Array: - return PoolVector2Array() +func _get_shape_points_filled(_size: Vector2i) -> Array[Vector2i]: + return [] func _input(event: InputEvent) -> void: @@ -66,12 +66,12 @@ func _input(event: InputEvent) -> void: _displace_origin = false -func draw_start(position: Vector2) -> void: - position = snap_position(position) - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_start(pos) if Input.is_action_pressed("shape_displace"): _picking_color = true - _pick_color(position) + _pick_color(pos) return _picking_color = false @@ -80,29 +80,29 @@ func draw_start(position: Vector2) -> void: if Global.mirror_view: # mirroring position is ONLY required by "Preview" - position.x = Global.current_project.size.x - position.x - 1 - _original_pos = position - _start = position - _offset = position - _dest = position + pos.x = Global.current_project.size.x - pos.x - 1 + _original_pos = pos + _start = pos + _offset = pos + _dest = pos _drawing = true -func draw_move(position: Vector2) -> void: - position = snap_position(position) - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_move(pos) if _picking_color: # Still return even if we released Alt if Input.is_action_pressed("shape_displace"): - _pick_color(position) + _pick_color(pos) return if _drawing: if Global.mirror_view: # mirroring position is ONLY required by "Preview" - position.x = Global.current_project.size.x - position.x - 1 + pos.x = Global.current_project.size.x - pos.x - 1 if _displace_origin: - _original_pos += position - _offset - var d := _line_angle_constraint(_original_pos, position) + _original_pos += pos - _offset + var d := _line_angle_constraint(_original_pos, pos) _dest = d.position if Input.is_action_pressed("shape_center"): @@ -110,12 +110,12 @@ func draw_move(position: Vector2) -> void: else: _start = _original_pos cursor_text = d.text - _offset = position + _offset = pos -func draw_end(position: Vector2) -> void: - position = snap_position(position) - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_end(pos) if _picking_color: return @@ -153,17 +153,17 @@ func draw_preview() -> void: var points := _get_points() var t_offset := _thickness - 1 - var t_offsetv := Vector2(t_offset, t_offset) - indicator.create((_dest - _start).abs() + t_offsetv * 2 + Vector2.ONE) + var t_offsetv := Vector2i(t_offset, t_offset) + indicator.create((_dest - _start).abs() + t_offsetv * 2 + Vector2i.ONE) for point in points: - var p: Vector2 = point - start + t_offsetv - indicator.set_bit(p, 1) + var p := point - start + t_offsetv + indicator.set_bitv(p, 1) canvas.draw_set_transform(start - t_offsetv, canvas.rotation, canvas.scale) for line in _create_polylines(indicator): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) @@ -181,22 +181,22 @@ func _draw_shape() -> void: commit_undo() -func _get_points() -> PoolVector2Array: - var array := [] - var dx := int(abs(_dest.x - _start.x)) - var dy := int(-abs(_dest.y - _start.y)) +func _get_points() -> Array[Vector2i]: + var array: Array[Vector2i] = [] + var dx := absi(_dest.x - _start.x) + var dy := -absi(_dest.y - _start.y) var err := dx + dy var e2 := err << 1 - var sx = 1 if _start.x < _dest.x else -1 - var sy = 1 if _start.y < _dest.y else -1 - var x = _start.x - var y = _start.y + var sx := 1 if _start.x < _dest.x else -1 + var sy := 1 if _start.y < _dest.y else -1 + var x := _start.x + var y := _start.y - var start := _start - Vector2.ONE * (_thickness >> 1) - var end := start + Vector2.ONE * _thickness + var start := _start - Vector2i.ONE * (_thickness >> 1) + var end := start + Vector2i.ONE * _thickness for yy in range(start.y, end.y): for xx in range(start.x, end.x): - array.append(Vector2(xx, yy)) + array.append(Vector2i(xx, yy)) while !(x == _dest.x && y == _dest.y): e2 = err << 1 @@ -207,33 +207,33 @@ func _get_points() -> PoolVector2Array: err += dx y += sy - var pos := Vector2(x, y) - start = pos - Vector2.ONE * (_thickness >> 1) - end = start + Vector2.ONE * _thickness + var pos := Vector2i(x, y) + start = pos - Vector2i.ONE * (_thickness >> 1) + end = start + Vector2i.ONE * _thickness for yy in range(start.y, end.y): for xx in range(start.x, end.x): - array.append(Vector2(xx, yy)) + array.append(Vector2i(xx, yy)) - return PoolVector2Array(array) + return array func _line_angle_constraint(start: Vector2, end: Vector2) -> Dictionary: var result := {} - var angle := rad2deg(end.angle_to_point(start)) + var angle := rad_to_deg(start.angle_to_point(end)) var distance := start.distance_to(end) if Input.is_action_pressed("shape_perfect"): - angle = stepify(angle, 22.5) + angle = snappedf(angle, 22.5) if step_decimals(angle) != 0: var diff := end - start - var v := Vector2(2, 1) if abs(diff.x) > abs(diff.y) else Vector2(1, 2) + var v := Vector2(2, 1) if absf(diff.x) > absf(diff.y) else Vector2(1, 2) var p := diff.project(diff.sign() * v).abs().round() - var f := p.y if abs(diff.x) > abs(diff.y) else p.x + var f := p.y if absf(diff.x) > absf(diff.y) else p.x end = start + diff.sign() * v * f - diff.sign() - angle = rad2deg(atan2(sign(diff.y) * v.y, sign(diff.x) * v.x)) + angle = rad_to_deg(atan2(signi(diff.y) * v.y, signi(diff.x) * v.x)) else: - end = start + Vector2.RIGHT.rotated(deg2rad(angle)) * distance + end = start + Vector2.RIGHT.rotated(deg_to_rad(angle)) * distance angle *= -1 angle += 360 if angle < 0 else 0 - result.text = str(stepify(angle, 0.01)) + "ยฐ" + result.text = str(snappedf(angle, 0.01)) + "ยฐ" result.position = end.round() return result diff --git a/src/Tools/LineTool.tscn b/src/Tools/LineTool.tscn index c62b6871046..94793fc3619 100644 --- a/src/Tools/LineTool.tscn +++ b/src/Tools/LineTool.tscn @@ -1,16 +1,16 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://ceahf2toaq47l"] -[ext_resource path="res://src/Tools/Draw.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/LineTool.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3] +[ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/Draw.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/LineTool.gd" id="2"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") -[node name="ThicknessSlider" parent="." index="2" instance=ExtResource( 3 )] -margin_top = 26.0 -margin_right = 116.0 -margin_bottom = 50.0 +[node name="ThicknessSlider" parent="." index="2" instance=ExtResource("3")] +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 value = 1.0 prefix = "Size:" @@ -20,8 +20,4 @@ is_global = true [node name="Brush" parent="." index="3"] visible = false -[node name="ColorInterpolation" parent="." index="4"] -margin_top = 66.0 -margin_bottom = 128.0 - [connection signal="value_changed" from="ThicknessSlider" to="." method="_on_Thickness_value_changed"] diff --git a/src/Tools/Move.gd b/src/Tools/Move.gd index 32b60d128aa..a3fe4d8b506 100644 --- a/src/Tools/Move.gd +++ b/src/Tools/Move.gd @@ -1,19 +1,19 @@ extends BaseTool var _undo_data := {} -var _start_pos: Vector2 -var _offset: Vector2 +var _start_pos: Vector2i +var _offset: Vector2i -# Used to check if the state of content transformation has been changed -# while draw_move() is being called. For example, pressing Enter while still moving content +## Used to check if the state of content transformation has been changed +## while draw_move() is being called. For example, pressing Enter while still moving content var _content_transformation_check := false -var _snap_to_grid := false # Mouse Click + Ctrl +var _snap_to_grid := false ## Mouse Click + Ctrl -onready var selection_node: Node2D = Global.canvas.selection +@onready var selection_node: Node2D = Global.canvas.selection func _input(event: InputEvent) -> void: - if _start_pos == Vector2.INF: + if _start_pos == Vector2i(Vector2.INF): return if event.is_action_pressed("transform_snap_grid"): _snap_to_grid = true @@ -29,64 +29,63 @@ func _input(event: InputEvent) -> void: ) selection_node.big_bounding_rectangle.position += grid_offset selection_node.marching_ants_outline.offset += ( - selection_node.big_bounding_rectangle.position - - prev_pos + selection_node.big_bounding_rectangle.position - prev_pos ) elif event.is_action_released("transform_snap_grid"): _snap_to_grid = false -func draw_start(position: Vector2) -> void: - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + super.draw_start(pos) if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn(): return - _start_pos = position - _offset = position + _start_pos = pos + _offset = pos _undo_data = _get_undo_data() if Global.current_project.has_selection: selection_node.transform_content_start() _content_transformation_check = selection_node.is_moving_content -func draw_move(position: Vector2) -> void: - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + super.draw_move(pos) if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn(): return # This is true if content transformation has been confirmed (pressed Enter for example) # while the content is being moved if _content_transformation_check != selection_node.is_moving_content: return - position = _snap_position(position) + pos = _snap_position(pos) if Global.current_project.has_selection: - selection_node.move_content(position - _offset) + selection_node.move_content(pos - _offset) else: - Global.canvas.move_preview_location = position - _start_pos - _offset = position + Global.canvas.move_preview_location = pos - _start_pos + _offset = pos -func draw_end(position: Vector2) -> void: - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + super.draw_end(pos) if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn(): return if ( - _start_pos != Vector2.INF + _start_pos != Vector2i(Vector2.INF) and _content_transformation_check == selection_node.is_moving_content ): - position = _snap_position(position) - var project: Project = Global.current_project + pos = _snap_position(pos) + var project := Global.current_project if project.has_selection: selection_node.move_borders_end() else: - var pixel_diff: Vector2 = position - _start_pos - Global.canvas.move_preview_location = Vector2.ZERO + var pixel_diff := pos - _start_pos + Global.canvas.move_preview_location = Vector2i.ZERO var images := _get_selected_draw_images() for image in images: var image_copy := Image.new() image_copy.copy_from(image) image.fill(Color(0, 0, 0, 0)) - image.blit_rect(image_copy, Rect2(Vector2.ZERO, project.size), pixel_diff) + image.blit_rect(image_copy, Rect2i(Vector2i.ZERO, project.size), pixel_diff) commit_undo("Draw") @@ -94,35 +93,33 @@ func draw_end(position: Vector2) -> void: _snap_to_grid = false -func _snap_position(position: Vector2) -> Vector2: +func _snap_position(pos: Vector2) -> Vector2: if Input.is_action_pressed("transform_snap_axis"): - var angle := position.angle_to_point(_start_pos) - if abs(angle) <= PI / 4 or abs(angle) >= 3 * PI / 4: - position.y = _start_pos.y + var angle := pos.angle_to_point(_start_pos) + if absf(angle) <= PI / 4 or absf(angle) >= 3 * PI / 4: + pos.y = _start_pos.y else: - position.x = _start_pos.x + pos.x = _start_pos.x if _snap_to_grid: # Snap to grid - position = position.snapped(Global.grid_size) + pos = pos.snapped(Global.grid_size) # The part below only corrects the offset for situations when there is no selection # Offsets when there is selection is controlled in _input() function if !Global.current_project.has_selection: var move_offset := Vector2.ZERO move_offset.x = ( - _start_pos.x - - int(_start_pos.x / Global.grid_size.x) * Global.grid_size.x + _start_pos.x - (_start_pos.x / Global.grid_size.x) * Global.grid_size.x ) move_offset.y = ( - _start_pos.y - - int(_start_pos.y / Global.grid_size.y) * Global.grid_size.y + _start_pos.y - (_start_pos.y / Global.grid_size.y) * Global.grid_size.y ) - position += move_offset + pos += move_offset - return position + return pos func commit_undo(action: String) -> void: var redo_data := _get_undo_data() - var project: Project = Global.current_project + var project := Global.current_project var frame := -1 var layer := -1 if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1: @@ -133,11 +130,10 @@ func commit_undo(action: String) -> void: project.undo_redo.create_action(action) for image in redo_data: project.undo_redo.add_do_property(image, "data", redo_data[image]) - image.unlock() for image in _undo_data: project.undo_redo.add_undo_property(image, "data", _undo_data[image]) - project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, frame, layer)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, frame, layer)) project.undo_redo.commit_action() _undo_data.clear() @@ -145,8 +141,8 @@ func commit_undo(action: String) -> void: func _get_undo_data() -> Dictionary: var data := {} - var project: Project = Global.current_project - var cels := [] # Array of Cels + var project := Global.current_project + var cels: Array[BaseCel] = [] if Global.animation_timer.is_stopped(): for cel_index in project.selected_cels: cels.append(project.frames[cel_index[0]].cels[cel_index[1]]) @@ -158,7 +154,5 @@ func _get_undo_data() -> Dictionary: if not cel is PixelCel: continue var image: Image = cel.image - image.unlock() data[image] = image.data - image.lock() return data diff --git a/src/Tools/Move.tscn b/src/Tools/Move.tscn index 4d94322241b..ef057e531b0 100644 --- a/src/Tools/Move.tscn +++ b/src/Tools/Move.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://64l4dmyfeev7"] -[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/Move.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/Move.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") diff --git a/src/Tools/Pan.gd b/src/Tools/Pan.gd index 81e68d7c632..b6b5c7d897b 100644 --- a/src/Tools/Pan.gd +++ b/src/Tools/Pan.gd @@ -1,17 +1,17 @@ extends BaseTool -func draw_start(position: Vector2) -> void: - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + super.draw_start(pos) Global.camera.drag = true Global.camera2.drag = true -func draw_move(position: Vector2) -> void: - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + super.draw_move(pos) -func draw_end(position: Vector2) -> void: - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + super.draw_end(pos) Global.camera.drag = false Global.camera2.drag = false diff --git a/src/Tools/Pan.tscn b/src/Tools/Pan.tscn index 80068710ec3..02f3d3dcf39 100644 --- a/src/Tools/Pan.tscn +++ b/src/Tools/Pan.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://pvno2bc0jepk"] -[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/Pan.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/Pan.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") diff --git a/src/Tools/Pencil.gd b/src/Tools/Pencil.gd index 71d2e6688a7..e6a49f8cb36 100644 --- a/src/Tools/Pencil.gd +++ b/src/Tools/Pencil.gd @@ -1,12 +1,12 @@ extends "res://src/Tools/Draw.gd" var _prev_mode := false -var _last_position := Vector2.INF +var _last_position := Vector2i(Vector2.INF) var _changed := false var _overwrite := false var _fill_inside := false -var _draw_points := Array() -var _old_spacing_mode := false # needed to reset spacing mode in case we change it +var _draw_points := PackedVector2Array() +var _old_spacing_mode := false ## Needed to reset spacing mode in case we change it class PencilOp: @@ -55,17 +55,17 @@ func _input(event: InputEvent) -> void: var overwrite_button: CheckBox = $Overwrite if event.is_action_pressed("change_tool_mode"): - _prev_mode = overwrite_button.pressed + _prev_mode = overwrite_button.button_pressed if event.is_action("change_tool_mode"): - overwrite_button.pressed = !_prev_mode - _overwrite = overwrite_button.pressed + overwrite_button.button_pressed = !_prev_mode + _overwrite = overwrite_button.button_pressed if event.is_action_released("change_tool_mode"): - overwrite_button.pressed = _prev_mode - _overwrite = overwrite_button.pressed + overwrite_button.button_pressed = _prev_mode + _overwrite = overwrite_button.button_pressed func get_config() -> Dictionary: - var config := .get_config() + var config := super.get_config() config["overwrite"] = _overwrite config["fill_inside"] = _fill_inside config["spacing_mode"] = _spacing_mode @@ -74,7 +74,7 @@ func get_config() -> Dictionary: func set_config(config: Dictionary) -> void: - .set_config(config) + super.set_config(config) _overwrite = config.get("overwrite", _overwrite) _fill_inside = config.get("fill_inside", _fill_inside) _spacing_mode = config.get("spacing_mode", _spacing_mode) @@ -82,21 +82,21 @@ func set_config(config: Dictionary) -> void: func update_config() -> void: - .update_config() - $Overwrite.pressed = _overwrite - $FillInside.pressed = _fill_inside - $SpacingMode.pressed = _spacing_mode + super.update_config() + $Overwrite.button_pressed = _overwrite + $FillInside.button_pressed = _fill_inside + $SpacingMode.button_pressed = _spacing_mode $Spacing.visible = _spacing_mode $Spacing.value = _spacing -func draw_start(position: Vector2) -> void: +func draw_start(pos: Vector2i) -> void: _old_spacing_mode = _spacing_mode - position = snap_position(position) - .draw_start(position) + pos = snap_position(pos) + super.draw_start(pos) if Input.is_action_pressed("draw_color_picker"): _picking_color = true - _pick_color(position) + _pick_color(pos) return _picking_color = false @@ -108,7 +108,7 @@ func draw_start(position: Vector2) -> void: _changed = false _drawer.color_op.changed = false _drawer.color_op.overwrite = _overwrite - _draw_points = Array() + _draw_points = [] prepare_undo("Draw") _drawer.reset() @@ -118,48 +118,48 @@ func draw_start(position: Vector2) -> void: _spacing_mode = false # spacing mode is disabled during line mode if Global.mirror_view: # mirroring position is ONLY required by "Preview" - position.x = (Global.current_project.size.x - 1) - position.x - _line_start = position - _line_end = position + pos.x = (Global.current_project.size.x - 1) - pos.x + _line_start = pos + _line_end = pos update_line_polylines(_line_start, _line_end) else: if _fill_inside: - _draw_points.append(position) - draw_tool(position) - _last_position = position + _draw_points.append(pos) + draw_tool(pos) + _last_position = pos Global.canvas.sprite_changed_this_frame = true cursor_text = "" -func draw_move(position: Vector2) -> void: - position = snap_position(position) - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_move(pos) if _picking_color: # Still return even if we released Alt if Input.is_action_pressed("draw_color_picker"): - _pick_color(position) + _pick_color(pos) return if _draw_line: _spacing_mode = false # spacing mode is disabled during line mode if Global.mirror_view: # mirroring position is ONLY required by "Preview" - position.x = (Global.current_project.size.x - 1) - position.x - var d := _line_angle_constraint(_line_start, position) + pos.x = (Global.current_project.size.x - 1) - pos.x + var d := _line_angle_constraint(_line_start, pos) _line_end = d.position cursor_text = d.text update_line_polylines(_line_start, _line_end) else: - draw_fill_gap(_last_position, position) - _last_position = position + draw_fill_gap(_last_position, pos) + _last_position = pos cursor_text = "" Global.canvas.sprite_changed_this_frame = true if _fill_inside: - _draw_points.append(position) + _draw_points.append(pos) -func draw_end(position: Vector2) -> void: - position = snap_position(position) - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_end(pos) if _picking_color: return @@ -174,15 +174,15 @@ func draw_end(position: Vector2) -> void: _draw_line = false else: if _fill_inside: - _draw_points.append(position) + _draw_points.append(pos) if _draw_points.size() > 3: - var v = Vector2() - var image_size = Global.current_project.size + var v := Vector2i() + var image_size := Global.current_project.size for x in image_size.x: v.x = x for y in image_size.y: v.y = y - if Geometry.is_point_in_polygon(v, _draw_points): + if Geometry2D.is_point_in_polygon(v, _draw_points): if _spacing_mode: # use of get_spacing_position() in Pencil.gd is a rare case # (you would ONLY need _spacing_mode and _spacing in most cases) @@ -195,7 +195,7 @@ func draw_end(position: Vector2) -> void: _spacing_mode = _old_spacing_mode -func _draw_brush_image(image: Image, src_rect: Rect2, dst: Vector2) -> void: +func _draw_brush_image(image: Image, src_rect: Rect2i, dst: Vector2i) -> void: _changed = true var images := _get_selected_draw_images() if _overwrite: diff --git a/src/Tools/Pencil.tscn b/src/Tools/Pencil.tscn index e1fb94409a5..c51efb6e9ac 100644 --- a/src/Tools/Pencil.tscn +++ b/src/Tools/Pencil.tscn @@ -1,62 +1,31 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://cul5mpy17ebfl"] -[ext_resource path="res://src/Tools/Draw.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/Tools/Pencil.gd" type="Script" id=3] +[ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/Draw.tscn" id="1"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="2"] +[ext_resource type="Script" path="res://src/Tools/Pencil.gd" id="3"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 3 ) - -[node name="ColorRect" parent="." index="0"] -margin_right = 127.0 - -[node name="Label" parent="." index="1"] -margin_right = 127.0 - -[node name="Brush" parent="." index="2"] -margin_right = 127.0 - -[node name="BrushSize" parent="Brush" index="1"] -margin_right = 127.0 - -[node name="ColorInterpolation" parent="." index="3"] -margin_right = 128.0 +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("3") [node name="Overwrite" type="CheckBox" parent="." index="4"] -margin_top = 62.0 -margin_right = 127.0 -margin_bottom = 86.0 -grow_horizontal = 2 -grow_vertical = 2 -hint_tooltip = "Overwrites color instead of blending it. This option is only relevant with colors that are not fully opaque" +layout_mode = 2 +tooltip_text = "Overwrites color instead of blending it. This option is only relevant with colors that are not fully opaque" mouse_default_cursor_shape = 2 text = "Overwrite color" -__meta__ = { -"_editor_description_": "" -} [node name="FillInside" type="CheckBox" parent="." index="5"] -margin_top = 90.0 -margin_right = 127.0 -margin_bottom = 114.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Fill inside" -__meta__ = { -"_editor_description_": "" -} [node name="SpacingMode" type="CheckBox" parent="." index="6"] -margin_top = 118.0 -margin_right = 127.0 -margin_bottom = 142.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Spacing" -[node name="Spacing" parent="." index="7" instance=ExtResource( 2 )] +[node name="Spacing" parent="." index="7" instance=ExtResource("2")] visible = false -margin_top = 146.0 -margin_right = 127.0 -margin_bottom = 198.0 +layout_mode = 2 allow_greater = true show_ratio = true prefix_x = "Gap X:" diff --git a/src/Tools/RectangleTool.gd b/src/Tools/RectangleTool.gd index a19c9764c6d..a5324e3ae04 100644 --- a/src/Tools/RectangleTool.gd +++ b/src/Tools/RectangleTool.gd @@ -1,44 +1,44 @@ extends "res://src/Tools/ShapeDrawer.gd" -func _get_shape_points_filled(size: Vector2) -> PoolVector2Array: - var array := [] +func _get_shape_points_filled(shape_size: Vector2i) -> Array[Vector2i]: + var array: Array[Vector2i] = [] var t_of := _thickness - 1 - for y in range(size.y + t_of): - for x in range(size.x + t_of): - array.append(Vector2(x, y)) + for y in range(shape_size.y + t_of): + for x in range(shape_size.x + t_of): + array.append(Vector2i(x, y)) - return PoolVector2Array(array) + return array -func _get_shape_points(size: Vector2) -> PoolVector2Array: +func _get_shape_points(shape_size: Vector2i) -> Array[Vector2i]: if _thickness == 1: - return PoolVector2Array(_get_rectangle_points(Vector2(0, 0), size)) + return _get_rectangle_points(Vector2(0, 0), shape_size) - var array := [] + var array: Array[Vector2i] = [] var t_of := _thickness - 1 for i in range(_thickness): - var point_size := size + Vector2(2, 2) * (t_of - i) - Vector2.ONE * t_of + var point_size := shape_size + Vector2i(2, 2) * (t_of - i) - Vector2i.ONE * t_of array += _get_rectangle_points(Vector2(i, i), point_size) - return PoolVector2Array(array) + return array -func _get_rectangle_points(pos: Vector2, size: Vector2) -> Array: - var array := [] +func _get_rectangle_points(pos: Vector2i, shape_size: Vector2i) -> Array[Vector2i]: + var array: Array[Vector2i] = [] - var y1 = size.y + pos.y - 1 - for x in range(pos.x, size.x + pos.x): - var t := Vector2(x, pos.y) - var b := Vector2(x, y1) + var y1 := shape_size.y + pos.y - 1 + for x in range(pos.x, shape_size.x + pos.x): + var t := Vector2i(x, pos.y) + var b := Vector2i(x, y1) array.append(t) array.append(b) - var x1 = size.x + pos.x - 1 - for y in range(pos.y + 1, size.y + pos.y): - var l := Vector2(pos.x, y) - var r := Vector2(x1, y) + var x1 := shape_size.x + pos.x - 1 + for y in range(pos.y + 1, shape_size.y + pos.y): + var l := Vector2i(pos.x, y) + var r := Vector2i(x1, y) array.append(l) array.append(r) diff --git a/src/Tools/RectangleTool.tscn b/src/Tools/RectangleTool.tscn index e7b1e0eb845..c04add273fc 100644 --- a/src/Tools/RectangleTool.tscn +++ b/src/Tools/RectangleTool.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://dhlab4q2dwu0a"] -[ext_resource path="res://src/Tools/ShapeDrawer.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/RectangleTool.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://n40lhf8hm7o1" path="res://src/Tools/ShapeDrawer.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/RectangleTool.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") diff --git a/src/Tools/SelectionTools/ColorSelect.gd b/src/Tools/SelectionTools/ColorSelect.gd index d829c867a90..f89c2cb34c2 100644 --- a/src/Tools/SelectionTools/ColorSelect.gd +++ b/src/Tools/SelectionTools/ColorSelect.gd @@ -1,11 +1,11 @@ extends SelectionTool -var shader: Shader = preload("res://src/Shaders/ColorSelect.gdshader") +var shader := preload("res://src/Shaders/ColorSelect.gdshader") var _similarity := 100 func get_config() -> Dictionary: - var config := .get_config() + var config := super.get_config() config["similarity"] = _similarity return config @@ -24,19 +24,17 @@ func _on_Similarity_value_changed(value: float) -> void: save_config() -func apply_selection(position: Vector2) -> void: - .apply_selection(position) - var project: Project = Global.current_project - if position.x < 0 or position.y < 0: +func apply_selection(pos: Vector2i) -> void: + super.apply_selection(pos) + var project := Global.current_project + if pos.x < 0 or pos.y < 0: return - if position.x > project.size.x - 1 or position.y > project.size.y - 1: + if pos.x > project.size.x - 1 or pos.y > project.size.y - 1: return var cel_image := Image.new() cel_image.copy_from(_get_draw_image()) - cel_image.lock() - var color := cel_image.get_pixelv(position) - cel_image.unlock() + var color := cel_image.get_pixelv(pos) var operation := 0 if _subtract: operation = 1 @@ -45,8 +43,7 @@ func apply_selection(position: Vector2) -> void: var params := {"color": color, "similarity_percent": _similarity, "operation": operation} if _add or _subtract or _intersect: - var selection_tex := ImageTexture.new() - selection_tex.create_from_image(project.selection_map, 0) + var selection_tex := ImageTexture.create_from_image(project.selection_map) params["selection"] = selection_tex var gen := ShaderImageEffect.new() gen.generate_image(cel_image, shader, params, project.size) diff --git a/src/Tools/SelectionTools/ColorSelect.tscn b/src/Tools/SelectionTools/ColorSelect.tscn index a44671cc838..e2800b90ecd 100644 --- a/src/Tools/SelectionTools/ColorSelect.tscn +++ b/src/Tools/SelectionTools/ColorSelect.tscn @@ -1,16 +1,16 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://bqr6hr0p3ew6a"] -[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/SelectionTools/ColorSelect.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3] +[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/SelectionTools/ColorSelect.gd" id="2"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") -[node name="SimilaritySlider" parent="." index="9" instance=ExtResource( 3 )] -margin_top = 174.0 -margin_right = 116.0 -margin_bottom = 198.0 +[node name="SimilaritySlider" parent="." index="9" instance=ExtResource("3")] +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" value = 100.0 prefix = "Similarity:" diff --git a/src/Tools/SelectionTools/EllipseSelect.gd b/src/Tools/SelectionTools/EllipseSelect.gd index 8ca87de4663..00a1d4e391a 100644 --- a/src/Tools/SelectionTools/EllipseSelect.gd +++ b/src/Tools/SelectionTools/EllipseSelect.gd @@ -1,14 +1,14 @@ extends SelectionTool -var _rect := Rect2(0, 0, 0, 0) +var _rect := Rect2i(0, 0, 0, 0) -var _square := false # Mouse Click + Shift -var _expand_from_center := false # Mouse Click + Ctrl -var _displace_origin = false # Mouse Click + Alt +var _square := false ## Mouse Click + Shift +var _expand_from_center := false ## Mouse Click + Ctrl +var _displace_origin = false ## Mouse Click + Alt func _input(event: InputEvent) -> void: - if !_move and !_rect.has_no_area(): + if !_move and _rect.has_area(): if event.is_action_pressed("shape_perfect"): _square = true elif event.is_action_released("shape_perfect"): @@ -23,60 +23,60 @@ func _input(event: InputEvent) -> void: _displace_origin = false -func draw_move(position: Vector2) -> void: +func draw_move(pos: Vector2i) -> void: if selection_node.arrow_key_move: return - position = snap_position(position) - .draw_move(position) + pos = snap_position(pos) + super.draw_move(pos) if !_move: if _displace_origin: - _start_pos += position - _offset - _rect = _get_result_rect(_start_pos, position) + _start_pos += pos - _offset + _rect = _get_result_rect(_start_pos, pos) _set_cursor_text(_rect) - _offset = position + _offset = pos -func draw_end(position: Vector2) -> void: +func draw_end(pos: Vector2i) -> void: if selection_node.arrow_key_move: return - position = snap_position(position) - .draw_end(position) - _rect = Rect2(0, 0, 0, 0) + pos = snap_position(pos) + super.draw_end(pos) + _rect = Rect2i(0, 0, 0, 0) _square = false _expand_from_center = false _displace_origin = false func draw_preview() -> void: - if !_move && !_rect.has_no_area(): + if !_move && _rect.has_area(): var canvas: Node2D = Global.canvas.previews - var position := canvas.position - var scale := canvas.scale - var temp_rect = _rect + var pos := canvas.position + var canvas_scale := canvas.scale + var temp_rect := _rect if Global.mirror_view: - position.x = position.x + Global.current_project.size.x + pos.x = pos.x + Global.current_project.size.x temp_rect.position.x = Global.current_project.size.x - temp_rect.position.x - scale.x = -1 + canvas_scale.x = -1 - var border := _get_shape_points_filled(temp_rect.size) + var border := DrawingAlgos.get_ellipse_points_filled(Vector2.ZERO, temp_rect.size) var indicator := _fill_bitmap_with_points(border, temp_rect.size) - canvas.draw_set_transform(temp_rect.position, canvas.rotation, scale) + canvas.draw_set_transform(temp_rect.position, canvas.rotation, canvas_scale) for line in _create_polylines(indicator): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) -func apply_selection(_position: Vector2) -> void: - .apply_selection(_position) - var project: Project = Global.current_project +func apply_selection(_position: Vector2i) -> void: + super.apply_selection(_position) + var project := Global.current_project if !_add and !_subtract and !_intersect: Global.canvas.selection.clear_selection() - if _rect.size == Vector2.ZERO and Global.current_project.has_selection: + if _rect.size == Vector2i.ZERO and Global.current_project.has_selection: Global.canvas.selection.commit_undo("Select", undo_data) - if _rect.size != Vector2.ZERO: + if _rect.size != Vector2i.ZERO: var selection_map_copy := SelectionMap.new() selection_map_copy.copy_from(project.selection_map) set_ellipse(selection_map_copy, _rect.position) @@ -85,27 +85,21 @@ func apply_selection(_position: Vector2) -> void: if Tools.horizontal_mirror: var mirror_x_rect := _rect mirror_x_rect.position.x = ( - Global.current_project.x_symmetry_point - - _rect.position.x - + 1 + Global.current_project.x_symmetry_point - _rect.position.x + 1 ) mirror_x_rect.end.x = Global.current_project.x_symmetry_point - _rect.end.x + 1 set_ellipse(selection_map_copy, mirror_x_rect.abs().position) if Tools.vertical_mirror: var mirror_xy_rect := mirror_x_rect mirror_xy_rect.position.y = ( - Global.current_project.y_symmetry_point - - _rect.position.y - + 1 + Global.current_project.y_symmetry_point - _rect.position.y + 1 ) mirror_xy_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1 set_ellipse(selection_map_copy, mirror_xy_rect.abs().position) if Tools.vertical_mirror: var mirror_y_rect := _rect mirror_y_rect.position.y = ( - Global.current_project.y_symmetry_point - - _rect.position.y - + 1 + Global.current_project.y_symmetry_point - _rect.position.y + 1 ) mirror_y_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1 set_ellipse(selection_map_copy, mirror_y_rect.abs().position) @@ -115,148 +109,50 @@ func apply_selection(_position: Vector2) -> void: Global.canvas.selection.commit_undo("Select", undo_data) -func set_ellipse(selection_map: SelectionMap, position: Vector2) -> void: - var project: Project = Global.current_project - var bitmap_size: Vector2 = selection_map.get_size() +func set_ellipse(selection_map: SelectionMap, pos: Vector2i) -> void: + var project := Global.current_project + var bitmap_size := selection_map.get_size() if _intersect: selection_map.clear() - var points := _get_shape_points_filled(_rect.size) + var points := DrawingAlgos.get_ellipse_points_filled(Vector2.ZERO, _rect.size) for p in points: - var pos: Vector2 = position + p - if pos.x < 0 or pos.y < 0 or pos.x >= bitmap_size.x or pos.y >= bitmap_size.y: + var fill_p := pos + Vector2i(p) + if fill_p.x < 0 or fill_p.y < 0 or fill_p.x >= bitmap_size.x or fill_p.y >= bitmap_size.y: continue if _intersect: - if project.selection_map.is_pixel_selected(pos): - selection_map.select_pixel(pos, true) + if project.selection_map.is_pixel_selected(fill_p): + selection_map.select_pixel(fill_p, true) else: - selection_map.select_pixel(pos, !_subtract) + selection_map.select_pixel(fill_p, !_subtract) # Given an origin point and destination point, returns a rect representing # where the shape will be drawn and what is its size -func _get_result_rect(origin: Vector2, dest: Vector2) -> Rect2: - var rect := Rect2(Vector2.ZERO, Vector2.ZERO) +func _get_result_rect(origin: Vector2i, dest: Vector2i) -> Rect2i: + var rect := Rect2i() # Center the rect on the mouse if _expand_from_center: - var new_size := (dest - origin).floor() + var new_size := dest - origin # Make rect 1:1 while centering it on the mouse if _square: - var square_size := max(abs(new_size.x), abs(new_size.y)) - new_size = Vector2(square_size, square_size) + var square_size := maxi(absi(new_size.x), absi(new_size.y)) + new_size = Vector2i(square_size, square_size) origin -= new_size dest = origin + 2 * new_size # Make rect 1:1 while not trying to center it if _square: - var square_size := min(abs(origin.x - dest.x), abs(origin.y - dest.y)) + var square_size := mini(absi(origin.x - dest.x), absi(origin.y - dest.y)) rect.position.x = origin.x if origin.x < dest.x else origin.x - square_size rect.position.y = origin.y if origin.y < dest.y else origin.y - square_size - rect.size = Vector2(square_size, square_size) + rect.size = Vector2i(square_size, square_size) # Get the rect without any modifications else: - rect.position = Vector2(min(origin.x, dest.x), min(origin.y, dest.y)) + rect.position = Vector2i(mini(origin.x, dest.x), mini(origin.y, dest.y)) rect.size = (origin - dest).abs() - rect.size += Vector2.ONE + rect.size += Vector2i.ONE return rect - - -func _get_shape_points_filled(size: Vector2) -> PoolVector2Array: - var border := _get_ellipse_points(Vector2.ZERO, size) - var filling := [] - var bitmap := _fill_bitmap_with_points(border, size) - - for x in range(1, ceil(size.x / 2)): - var fill := false - var prev_is_true := false - for y in range(0, ceil(size.y / 2)): - var top_l_p := Vector2(x, y) - var bit := bitmap.get_bit(top_l_p) - - if bit and not fill: - prev_is_true = true - continue - - if not bit and (fill or prev_is_true): - filling.append(top_l_p) - filling.append(Vector2(x, size.y - y - 1)) - filling.append(Vector2(size.x - x - 1, y)) - filling.append(Vector2(size.x - x - 1, size.y - y - 1)) - - if prev_is_true: - fill = true - prev_is_true = false - elif bit and fill: - break - - return PoolVector2Array(border + filling) - - -# Algorithm based on http://members.chello.at/easyfilter/bresenham.html -func _get_ellipse_points(pos: Vector2, size: Vector2) -> Array: - var array := [] - var x0 := int(pos.x) - var x1 := pos.x + int(size.x - 1) - var y0 := int(pos.y) - var y1 := int(pos.y) + int(size.y - 1) - var a := int(abs(x1 - x0)) - var b := int(abs(y1 - x0)) - var b1 := b & 1 - var dx := 4 * (1 - a) * b * b - var dy := 4 * (b1 + 1) * a * a - var err := dx + dy + b1 * a * a - var e2 := 0 - - if x0 > x1: - x0 = x1 - x1 += a - - if y0 > y1: - y0 = y1 - -# warning-ignore:integer_division - y0 += (b + 1) / 2 - y1 = y0 - b1 - a *= 8 * a - b1 = 8 * b * b - - while x0 <= x1: - var v1 := Vector2(x1, y0) - var v2 := Vector2(x0, y0) - var v3 := Vector2(x0, y1) - var v4 := Vector2(x1, y1) - array.append(v1) - array.append(v2) - array.append(v3) - array.append(v4) - - e2 = 2 * err - - if e2 <= dy: - y0 += 1 - y1 -= 1 - dy += a - err += dy - - if e2 >= dx || 2 * err > dy: - x0 += 1 - x1 -= 1 - dx += b1 - err += dx - - while y0 - y1 < b: - var v1 := Vector2(x0 - 1, y0) - var v2 := Vector2(x1 + 1, y0) - var v3 := Vector2(x0 - 1, y1) - var v4 := Vector2(x1 + 1, y1) - array.append(v1) - array.append(v2) - array.append(v3) - array.append(v4) - y0 += 1 - y1 -= 1 - - return array diff --git a/src/Tools/SelectionTools/EllipseSelect.tscn b/src/Tools/SelectionTools/EllipseSelect.tscn index e8935fd7b85..a189f8eb76d 100644 --- a/src/Tools/SelectionTools/EllipseSelect.tscn +++ b/src/Tools/SelectionTools/EllipseSelect.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://cf2gm1oypbm6m"] -[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/SelectionTools/EllipseSelect.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/SelectionTools/EllipseSelect.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") diff --git a/src/Tools/SelectionTools/Lasso.gd b/src/Tools/SelectionTools/Lasso.gd index e4146dc025d..38cd2f1a804 100644 --- a/src/Tools/SelectionTools/Lasso.gd +++ b/src/Tools/SelectionTools/Lasso.gd @@ -1,51 +1,51 @@ extends SelectionTool var _last_position := Vector2.INF -var _draw_points := [] +var _draw_points: Array[Vector2i] = [] -func draw_start(position: Vector2) -> void: - position = snap_position(position) - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_start(pos) if !_move: - _draw_points.append(position) - _last_position = position + _draw_points.append(pos) + _last_position = pos -func draw_move(position: Vector2) -> void: +func draw_move(pos: Vector2i) -> void: if selection_node.arrow_key_move: return - position = snap_position(position) - .draw_move(position) + pos = snap_position(pos) + super.draw_move(pos) if !_move: - append_gap(_last_position, position) - _last_position = position - _draw_points.append(position) - _offset = position + append_gap(_last_position, pos) + _last_position = pos + _draw_points.append(pos) + _offset = pos -func draw_end(position: Vector2) -> void: +func draw_end(pos: Vector2i) -> void: if selection_node.arrow_key_move: return - position = snap_position(position) + pos = snap_position(pos) if !_move: - _draw_points.append(position) - .draw_end(position) + _draw_points.append(pos) + super.draw_end(pos) func draw_preview() -> void: if _last_position != Vector2.INF and !_move: var canvas: Node2D = Global.canvas.previews - var position := canvas.position - var scale := canvas.scale + var pos := canvas.position + var canvas_scale := canvas.scale if Global.mirror_view: - position.x = position.x + Global.current_project.size.x - scale.x = -1 - canvas.draw_set_transform(position, canvas.rotation, scale) + pos.x = pos.x + Global.current_project.size.x + canvas_scale.x = -1 + canvas.draw_set_transform(pos, canvas.rotation, canvas_scale) var indicator := _fill_bitmap_with_points(_draw_points, Global.current_project.size) for line in _create_polylines(indicator): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) # Handle mirroring if Tools.horizontal_mirror: @@ -54,28 +54,28 @@ func draw_preview() -> void: mirror_array(_draw_points, true, false), Global.current_project.size ) ): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) if Tools.vertical_mirror: for line in _create_polylines( _fill_bitmap_with_points( mirror_array(_draw_points, true, true), Global.current_project.size ) ): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) if Tools.vertical_mirror: for line in _create_polylines( _fill_bitmap_with_points( mirror_array(_draw_points, false, true), Global.current_project.size ) ): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) func apply_selection(_position) -> void: - .apply_selection(_position) - var project: Project = Global.current_project + super.apply_selection(_position) + var project := Global.current_project var cleared := false if !_add and !_subtract and !_intersect: cleared = true @@ -106,11 +106,11 @@ func apply_selection(_position) -> void: _last_position = Vector2.INF -func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> void: - var project: Project = Global.current_project - var size := selection_map.get_size() +func lasso_selection(selection_map: SelectionMap, points: Array[Vector2i]) -> void: + var project := Global.current_project + var selection_size := selection_map.get_size() for point in points: - if point.x < 0 or point.y < 0 or point.x >= size.x or point.y >= size.y: + if point.x < 0 or point.y < 0 or point.x >= selection_size.x or point.y >= selection_size.y: continue if _intersect: if project.selection_map.is_pixel_selected(point): @@ -118,13 +118,13 @@ func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> v else: selection_map.select_pixel(point, !_subtract) - var v := Vector2() - var image_size: Vector2 = project.size + var v := Vector2i() + var image_size := project.size for x in image_size.x: v.x = x for y in image_size.y: v.y = y - if Geometry.is_point_in_polygon(v, points): + if Geometry2D.is_point_in_polygon(v, points): if _intersect: if project.selection_map.is_pixel_selected(v): selection_map.select_pixel(v, true) @@ -134,15 +134,15 @@ func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> v # Bresenham's Algorithm # Thanks to https://godotengine.org/qa/35276/tile-based-line-drawing-algorithm-efficiency -func append_gap(start: Vector2, end: Vector2) -> void: - var dx := int(abs(end.x - start.x)) - var dy := int(-abs(end.y - start.y)) +func append_gap(start: Vector2i, end: Vector2i) -> void: + var dx := absi(end.x - start.x) + var dy := -absi(end.y - start.y) var err := dx + dy var e2 := err << 1 - var sx = 1 if start.x < end.x else -1 - var sy = 1 if start.y < end.y else -1 - var x = start.x - var y = start.y + var sx := 1 if start.x < end.x else -1 + var sy := 1 if start.y < end.y else -1 + var x := start.x + var y := start.y while !(x == end.x && y == end.y): e2 = err << 1 if e2 >= dy: @@ -151,20 +151,20 @@ func append_gap(start: Vector2, end: Vector2) -> void: if e2 <= dx: err += dx y += sy - _draw_points.append(Vector2(x, y)) + _draw_points.append(Vector2i(x, y)) -func mirror_array(array: Array, h: bool, v: bool) -> Array: - var new_array := [] - var project: Project = Global.current_project +func mirror_array(array: Array[Vector2i], h: bool, v: bool) -> Array[Vector2i]: + var new_array: Array[Vector2i] = [] + var project := Global.current_project for point in array: if h and v: new_array.append( - Vector2(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y) + Vector2i(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y) ) elif h: - new_array.append(Vector2(project.x_symmetry_point - point.x, point.y)) + new_array.append(Vector2i(project.x_symmetry_point - point.x, point.y)) elif v: - new_array.append(Vector2(point.x, project.y_symmetry_point - point.y)) + new_array.append(Vector2i(point.x, project.y_symmetry_point - point.y)) return new_array diff --git a/src/Tools/SelectionTools/Lasso.tscn b/src/Tools/SelectionTools/Lasso.tscn index ec598ad365a..af18882ea2e 100644 --- a/src/Tools/SelectionTools/Lasso.tscn +++ b/src/Tools/SelectionTools/Lasso.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://cu37uo35mcfom"] -[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/SelectionTools/Lasso.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/SelectionTools/Lasso.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") diff --git a/src/Tools/SelectionTools/MagicWand.gd b/src/Tools/SelectionTools/MagicWand.gd index 2bfc9abaed6..2505b3613fe 100644 --- a/src/Tools/SelectionTools/MagicWand.gd +++ b/src/Tools/SelectionTools/MagicWand.gd @@ -1,16 +1,28 @@ extends SelectionTool -# working array used as buffer for segments while flooding -var _allegro_flood_segments: Array -# results array per image while flooding -var _allegro_image_segments: Array +## Working array used as buffer for segments while flooding +var _allegro_flood_segments: Array[Segment] +## Results array per image while flooding +var _allegro_image_segments: Array[Segment] -func apply_selection(position: Vector2) -> void: - .apply_selection(position) - var project: Project = Global.current_project - var size: Vector2 = project.size - if position.x < 0 or position.y < 0 or position.x >= size.x or position.y >= size.y: +class Segment: + var flooding := false + var todo_above := false + var todo_below := false + var left_position := -5 + var right_position := -5 + var y := 0 + var next := 0 + + func _init(_y: int) -> void: + y = _y + + +func apply_selection(pos: Vector2i) -> void: + super.apply_selection(pos) + var project := Global.current_project + if pos.x < 0 or pos.y < 0 or pos.x >= project.size.x or pos.y >= project.size.y: return if !_add and !_subtract and !_intersect: Global.canvas.selection.clear_selection() @@ -22,60 +34,50 @@ func apply_selection(position: Vector2) -> void: var cel_image := Image.new() cel_image.copy_from(_get_draw_image()) - cel_image.lock() - _flood_fill(position, cel_image, selection_map_copy) + _flood_fill(pos, cel_image, selection_map_copy) # Handle mirroring if Tools.horizontal_mirror: - var mirror_x := position - mirror_x.x = Global.current_project.x_symmetry_point - position.x + var mirror_x := pos + mirror_x.x = Global.current_project.x_symmetry_point - pos.x _flood_fill(mirror_x, cel_image, selection_map_copy) if Tools.vertical_mirror: var mirror_xy := mirror_x - mirror_xy.y = Global.current_project.y_symmetry_point - position.y + mirror_xy.y = Global.current_project.y_symmetry_point - pos.y _flood_fill(mirror_xy, cel_image, selection_map_copy) if Tools.vertical_mirror: - var mirror_y := position - mirror_y.y = Global.current_project.y_symmetry_point - position.y + var mirror_y := pos + mirror_y.y = Global.current_project.y_symmetry_point - pos.y _flood_fill(mirror_y, cel_image, selection_map_copy) - cel_image.unlock() project.selection_map = selection_map_copy Global.canvas.selection.big_bounding_rectangle = project.selection_map.get_used_rect() Global.canvas.selection.commit_undo("Select", undo_data) # Add a new segment to the array -func _add_new_segment(y: int = 0) -> void: - var segment = {} - segment.flooding = false - segment.todo_above = false - segment.todo_below = false - segment.left_position = -5 # anything less than -1 is ok - segment.right_position = -5 - segment.y = y - segment.next = 0 - _allegro_flood_segments.append(segment) +func _add_new_segment(y := 0) -> void: + _allegro_flood_segments.append(Segment.new(y)) # fill an horizontal segment around the specified position, and adds it to the # list of segments filled. Returns the first x coordinate after the part of the # line that has been filled. func _flood_line_around_point( - position: Vector2, project: Project, image: Image, src_color: Color + pos: Vector2i, project: Project, image: Image, src_color: Color ) -> int: # this method is called by `_flood_fill` after the required data structures # have been initialized - if not image.get_pixelv(position).is_equal_approx(src_color): - return int(position.x) + 1 - var west: Vector2 = position - var east: Vector2 = position + if not image.get_pixelv(pos).is_equal_approx(src_color): + return pos.x + 1 + var west := pos + var east := pos while west.x >= 0 && image.get_pixelv(west).is_equal_approx(src_color): - west += Vector2.LEFT + west += Vector2i.LEFT while east.x < project.size.x && image.get_pixelv(east).is_equal_approx(src_color): - east += Vector2.RIGHT + east += Vector2i.RIGHT # Make a note of the stuff we processed - var c = int(position.y) - var segment = _allegro_flood_segments[c] + var c := pos.y + var segment := _allegro_flood_segments[c] # we may have already processed some segments on this y coordinate if segment.flooding: while segment.next > 0: @@ -84,13 +86,13 @@ func _flood_line_around_point( # found last current segment on this line c = _allegro_flood_segments.size() segment.next = c - _add_new_segment(position.y) + _add_new_segment(pos.y) segment = _allegro_flood_segments[c] # set the values for the current segment segment.flooding = true segment.left_position = west.x + 1 segment.right_position = east.x - 1 - segment.y = position.y + segment.y = pos.y segment.next = 0 # Should we process segments above or below this one? # when there is a selected area, the pixels above and below the one we started creating this @@ -99,66 +101,66 @@ func _flood_line_around_point( # test will be performed later anyway. # On the other hand, this test we described is the same `project.can_pixel_get_drawn` does if # there is no selection, so we don't need branching here. - segment.todo_above = position.y > 0 - segment.todo_below = position.y < project.size.y - 1 + segment.todo_above = pos.y > 0 + segment.todo_below = pos.y < project.size.y - 1 # this is an actual segment we should be coloring, so we add it to the results for the # current image if segment.right_position >= segment.left_position: _allegro_image_segments.append(segment) # we know the point just east of the segment is not part of a segment that should be # processed, else it would be part of this segment - return int(east.x) + 1 + return east.x + 1 func _check_flooded_segment( y: int, left: int, right: int, project: Project, image: Image, src_color: Color ) -> bool: - var ret = false - var c: int = 0 + var ret := false + var c := 0 while left <= right: c = y while true: - var segment = _allegro_flood_segments[c] + var segment := _allegro_flood_segments[c] if left >= segment.left_position and left <= segment.right_position: left = segment.right_position + 2 break c = segment.next if c == 0: # couldn't find a valid segment, so we draw a new one - left = _flood_line_around_point(Vector2(left, y), project, image, src_color) + left = _flood_line_around_point(Vector2i(left, y), project, image, src_color) ret = true break return ret -func _flood_fill(position: Vector2, image: Image, selection_map: SelectionMap) -> void: +func _flood_fill(pos: Vector2i, image: Image, selection_map: SelectionMap) -> void: # implements the floodfill routine by Shawn Hargreaves # from https://www1.udel.edu/CIS/software/dist/allegro-4.2.1/src/flood.c - var project: Project = Global.current_project - var color: Color = image.get_pixelv(position) + var project := Global.current_project + var color := image.get_pixelv(pos) # init flood data structures _allegro_flood_segments = [] _allegro_image_segments = [] - _compute_segments_for_image(position, project, image, color) + _compute_segments_for_image(pos, project, image, color) # now actually color the image: since we have already checked a few things for the points # we'll process here, we're going to skip a bunch of safety checks to speed things up. _select_segments(selection_map) func _compute_segments_for_image( - position: Vector2, project: Project, image: Image, src_color: Color + pos: Vector2i, project: Project, image: Image, src_color: Color ) -> void: # initially allocate at least 1 segment per line of image for j in image.get_height(): _add_new_segment(j) # start flood algorithm - _flood_line_around_point(position, project, image, src_color) + _flood_line_around_point(pos, project, image, src_color) # test all segments while also discovering more var done := false while not done: done = true - var max_index = _allegro_flood_segments.size() + var max_index := _allegro_flood_segments.size() for c in max_index: - var p = _allegro_flood_segments[c] + var p := _allegro_flood_segments[c] if p.todo_below: # check below the segment? p.todo_below = false if _check_flooded_segment( @@ -176,14 +178,14 @@ func _compute_segments_for_image( func _select_segments(selection_map: SelectionMap) -> void: # short circuit for flat colors for c in _allegro_image_segments.size(): - var p = _allegro_image_segments[c] + var p := _allegro_image_segments[c] for px in range(p.left_position, p.right_position + 1): # We don't have to check again whether the point being processed is within the bounds - _set_bit(Vector2(px, p.y), selection_map) + _set_bit(Vector2i(px, p.y), selection_map) -func _set_bit(p: Vector2, selection_map: SelectionMap) -> void: - var project: Project = Global.current_project +func _set_bit(p: Vector2i, selection_map: SelectionMap) -> void: + var project := Global.current_project if _intersect: selection_map.select_pixel(p, project.selection_map.is_pixel_selected(p)) else: diff --git a/src/Tools/SelectionTools/MagicWand.tscn b/src/Tools/SelectionTools/MagicWand.tscn index 1b193ba7449..263e4a4f987 100644 --- a/src/Tools/SelectionTools/MagicWand.tscn +++ b/src/Tools/SelectionTools/MagicWand.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://blt8u6nvg1k3g"] -[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/SelectionTools/MagicWand.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/SelectionTools/MagicWand.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") diff --git a/src/Tools/SelectionTools/PaintSelect.gd b/src/Tools/SelectionTools/PaintSelect.gd index 52bb70a6547..3ffedd85f91 100644 --- a/src/Tools/SelectionTools/PaintSelect.gd +++ b/src/Tools/SelectionTools/PaintSelect.gd @@ -1,19 +1,19 @@ extends SelectionTool -var _brush_size: int = 2 +var _brush_size := 2 var _brush := Brushes.get_default_brush() var _indicator := BitMap.new() var _polylines := [] var _brush_image := Image.new() -var _brush_texture := ImageTexture.new() -var _circle_tool_shortcut: PoolVector2Array +var _brush_texture: ImageTexture +var _circle_tool_shortcut: Array[Vector2i] var _last_position := Vector2.INF -var _draw_points := [] +var _draw_points: Array[Vector2i] = [] func get_config() -> Dictionary: - var config := .get_config() + var config := super.get_config() config["brush_type"] = _brush.type config["brush_index"] = _brush.index config["brush_size"] = _brush_size @@ -32,48 +32,48 @@ func update_config() -> void: update_brush() -func draw_start(position: Vector2) -> void: - position = snap_position(position) - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_start(pos) if !_move: - _draw_points.append_array(draw_tool(position)) - _last_position = position + _draw_points.append_array(draw_tool(pos)) + _last_position = pos -func draw_move(position: Vector2) -> void: +func draw_move(pos: Vector2i) -> void: if selection_node.arrow_key_move: return - position = snap_position(position) - .draw_move(position) + pos = snap_position(pos) + super.draw_move(pos) if !_move: - append_gap(_last_position, position) - _last_position = position - _draw_points.append_array(draw_tool(position)) - _offset = position + append_gap(_last_position, pos) + _last_position = pos + _draw_points.append_array(draw_tool(pos)) + _offset = pos -func draw_end(position: Vector2) -> void: +func draw_end(pos: Vector2i) -> void: if selection_node.arrow_key_move: return - position = snap_position(position) + pos = snap_position(pos) if !_move: - _draw_points.append_array(draw_tool(position)) - .draw_end(position) + _draw_points.append_array(draw_tool(pos)) + super.draw_end(pos) func draw_preview() -> void: if _last_position != Vector2.INF and !_move: var canvas: Node2D = Global.canvas.previews - var position := canvas.position - var scale := canvas.scale + var pos := canvas.position + var canvas_scale := canvas.scale if Global.mirror_view: - position.x = position.x + Global.current_project.size.x - scale.x = -1 - canvas.draw_set_transform(position, canvas.rotation, scale) + pos.x = pos.x + Global.current_project.size.x + canvas_scale.x = -1 + canvas.draw_set_transform(pos, canvas.rotation, canvas_scale) var indicator := _fill_bitmap_with_points(_draw_points, Global.current_project.size) for line in _create_polylines(indicator): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) # Handle mirroring if Tools.horizontal_mirror: @@ -82,28 +82,28 @@ func draw_preview() -> void: mirror_array(_draw_points, true, false), Global.current_project.size ) ): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) if Tools.vertical_mirror: for line in _create_polylines( _fill_bitmap_with_points( mirror_array(_draw_points, true, true), Global.current_project.size ) ): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) if Tools.vertical_mirror: for line in _create_polylines( _fill_bitmap_with_points( mirror_array(_draw_points, false, true), Global.current_project.size ) ): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) -func apply_selection(_position) -> void: - .apply_selection(_position) - var project: Project = Global.current_project +func apply_selection(pos: Vector2i) -> void: + super.apply_selection(pos) + var project := Global.current_project var cleared := false if !_add and !_subtract and !_intersect: cleared = true @@ -135,11 +135,11 @@ func apply_selection(_position) -> void: _last_position = Vector2.INF -func paint_selection(selection_map: SelectionMap, points: PoolVector2Array) -> void: - var project: Project = Global.current_project - var size := selection_map.get_size() +func paint_selection(selection_map: SelectionMap, points: Array[Vector2i]) -> void: + var project := Global.current_project + var selection_size := selection_map.get_size() for point in points: - if point.x < 0 or point.y < 0 or point.x >= size.x or point.y >= size.y: + if point.x < 0 or point.y < 0 or point.x >= selection_size.x or point.y >= selection_size.y: continue if _intersect: if project.selection_map.is_pixel_selected(point): @@ -150,15 +150,15 @@ func paint_selection(selection_map: SelectionMap, points: PoolVector2Array) -> v # Bresenham's Algorithm # Thanks to https://godotengine.org/qa/35276/tile-based-line-drawing-algorithm-efficiency -func append_gap(start: Vector2, end: Vector2) -> void: - var dx := int(abs(end.x - start.x)) - var dy := int(-abs(end.y - start.y)) +func append_gap(start: Vector2i, end: Vector2i) -> void: + var dx := absi(end.x - start.x) + var dy := -absi(end.y - start.y) var err := dx + dy var e2 := err << 1 - var sx = 1 if start.x < end.x else -1 - var sy = 1 if start.y < end.y else -1 - var x = start.x - var y = start.y + var sx := 1 if start.x < end.x else -1 + var sy := 1 if start.y < end.y else -1 + var x := start.x + var y := start.y while !(x == end.x && y == end.y): e2 = err << 1 if e2 >= dy: @@ -167,28 +167,28 @@ func append_gap(start: Vector2, end: Vector2) -> void: if e2 <= dx: err += dx y += sy - _draw_points.append_array(draw_tool(Vector2(x, y))) + _draw_points.append_array(draw_tool(Vector2i(x, y))) -func mirror_array(array: Array, h: bool, v: bool) -> Array: - var new_array := [] - var project: Project = Global.current_project +func mirror_array(array: Array[Vector2i], h: bool, v: bool) -> Array[Vector2i]: + var new_array: Array[Vector2i] = [] + var project := Global.current_project for point in array: if h and v: new_array.append( - Vector2(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y) + Vector2i(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y) ) elif h: - new_array.append(Vector2(project.x_symmetry_point - point.x, point.y)) + new_array.append(Vector2i(project.x_symmetry_point - point.x, point.y)) elif v: - new_array.append(Vector2(point.x, project.y_symmetry_point - point.y)) + new_array.append(Vector2i(point.x, project.y_symmetry_point - point.y)) return new_array -func draw_tool(position: Vector2) -> PoolVector2Array: +func draw_tool(pos: Vector2i) -> Array[Vector2i]: _prepare_tool() - return _draw_tool(position) + return _draw_tool(pos) func _prepare_tool() -> void: @@ -206,83 +206,81 @@ func _prepare_circle_tool(fill: bool) -> void: var diameter := _brush_size * 2 + 1 for n in range(0, diameter): for m in range(0, diameter): - if circle_tool_map.get_bit(Vector2(m, n)): - _circle_tool_shortcut.append(Vector2(m - _brush_size, n - _brush_size)) + if circle_tool_map.get_bitv(Vector2i(m, n)): + _circle_tool_shortcut.append(Vector2i(m - _brush_size, n - _brush_size)) -# Make sure to always have invoked _prepare_tool() before this. This computes the coordinates to be -# drawn if it can (except for the generic brush, when it's actually drawing them) -func _draw_tool(position: Vector2) -> PoolVector2Array: +## Make sure to always have invoked _prepare_tool() before this. This computes the coordinates to be +## drawn if it can (except for the generic brush, when it's actually drawing them) +func _draw_tool(pos: Vector2i) -> Array[Vector2i]: match _brush.type: Brushes.PIXEL: - return _compute_draw_tool_pixel(position) + return _compute_draw_tool_pixel(pos) Brushes.CIRCLE: - return _compute_draw_tool_circle(position, false) + return _compute_draw_tool_circle(pos, false) Brushes.FILLED_CIRCLE: - return _compute_draw_tool_circle(position, true) + return _compute_draw_tool_circle(pos, true) _: - return _compute_draw_tool_brush(position) + return _compute_draw_tool_brush(pos) -func _compute_draw_tool_pixel(position: Vector2) -> PoolVector2Array: - var result := PoolVector2Array() - var start := position - Vector2.ONE * (_brush_size >> 1) - var end := start + Vector2.ONE * _brush_size +func _compute_draw_tool_pixel(pos: Vector2i) -> Array[Vector2i]: + var result: Array[Vector2i] = [] + var start := pos - Vector2i.ONE * (_brush_size >> 1) + var end := start + Vector2i.ONE * _brush_size for y in range(start.y, end.y): for x in range(start.x, end.x): - if !_draw_points.has(Vector2(x, y)): - result.append(Vector2(x, y)) + if !_draw_points.has(Vector2i(x, y)): + result.append(Vector2i(x, y)) return result # Compute the array of coordinates that should be drawn -func _compute_draw_tool_circle(position: Vector2, fill := false) -> PoolVector2Array: - var size := Vector2(_brush_size, _brush_size) - var pos = position - (size / 2).floor() +func _compute_draw_tool_circle(pos: Vector2i, fill := false) -> Array[Vector2i]: + var brush_size := Vector2i(_brush_size, _brush_size) + var offset_pos := pos - (brush_size / 2) if _circle_tool_shortcut: - return _draw_tool_circle_from_map(position) + return _draw_tool_circle_from_map(pos) - var result := PoolVector2Array() + var result: Array[Vector2i] = [] if fill: - result = DrawingAlgos.get_ellipse_points_filled(pos, size) + result = DrawingAlgos.get_ellipse_points_filled(offset_pos, brush_size) else: - result = DrawingAlgos.get_ellipse_points(pos, size) + result = DrawingAlgos.get_ellipse_points(offset_pos, brush_size) return result -func _draw_tool_circle_from_map(position: Vector2) -> PoolVector2Array: - var result := PoolVector2Array() +func _draw_tool_circle_from_map(pos: Vector2i) -> Array[Vector2i]: + var result: Array[Vector2i] = [] for displacement in _circle_tool_shortcut: - result.append(position + displacement) + result.append(pos + displacement) return result -func _compute_draw_tool_brush(position: Vector2) -> PoolVector2Array: - var result := PoolVector2Array() +func _compute_draw_tool_brush(pos: Vector2i) -> Array[Vector2i]: + var result: Array[Vector2i] = [] var brush_mask := BitMap.new() - var pos = position - (_indicator.get_size() / 2).floor() + pos = pos - (_indicator.get_size() / 2) brush_mask.create_from_image_alpha(_brush_image, 0.0) for x in brush_mask.get_size().x: for y in brush_mask.get_size().y: - if !_draw_points.has(Vector2(x, y)): - if brush_mask.get_bit(Vector2(x, y)): - result.append(pos + Vector2(x, y)) + if !_draw_points.has(Vector2i(x, y)): + if brush_mask.get_bitv(Vector2i(x, y)): + result.append(pos + Vector2i(x, y)) return result func _on_BrushType_pressed() -> void: - if not Global.brushes_popup.is_connected("brush_selected", self, "_on_Brush_selected"): - Global.brushes_popup.connect( - "brush_selected", self, "_on_Brush_selected", [], CONNECT_ONESHOT - ) + if not Global.brushes_popup.brush_selected.is_connected(_on_Brush_selected): + Global.brushes_popup.brush_selected.connect(_on_Brush_selected, CONNECT_ONE_SHOT) # Now we set position and columns - var tool_option_container = get_node("../../") - var brush_button = $Brush/Type - var pop_position = brush_button.rect_global_position + Vector2(0, brush_button.rect_size.y) - var size_x = tool_option_container.rect_size.x - var size_y = tool_option_container.rect_size.y - $Brush.rect_position.y - $Brush.rect_size.y - var columns = int(size_x / 36) - 1 # 36 is the rect_size of BrushButton.tscn + var tool_option_container := get_node("../../") as Control + var brush_button := $Brush/Type as Button + var pop_position := Vector2i(brush_button.global_position) + Vector2i(0, brush_button.size.y) + var size_x := tool_option_container.size.x + var size_y: float = tool_option_container.size.y - $Brush.position.y - $Brush.size.y + var columns = int(size_x / 36) - 1 # 36 is the size of BrushButton.tscn var categories = Global.brushes_popup.get_node("Background/Brushes/Categories") for child in categories.get_children(): if child is GridContainer: @@ -308,11 +306,17 @@ func update_brush() -> void: $Brush/BrushSize.suffix = "px" # Assume we are using default brushes match _brush.type: Brushes.PIXEL: - _brush_texture.create_from_image(load("res://assets/graphics/pixel_image.png"), 0) + _brush_texture = ImageTexture.create_from_image( + load("res://assets/graphics/pixel_image.png") + ) Brushes.CIRCLE: - _brush_texture.create_from_image(load("res://assets/graphics/circle_9x9.png"), 0) + _brush_texture = ImageTexture.create_from_image( + load("res://assets/graphics/circle_9x9.png") + ) Brushes.FILLED_CIRCLE: - _brush_texture.create_from_image(load("res://assets/graphics/circle_filled_9x9.png"), 0) + _brush_texture = ImageTexture.create_from_image( + load("res://assets/graphics/circle_filled_9x9.png") + ) Brushes.FILE, Brushes.RANDOM_FILE, Brushes.CUSTOM: $Brush/BrushSize.suffix = "00 %" # Use a different size convention on images if _brush.random.size() <= 1: @@ -320,18 +324,18 @@ func update_brush() -> void: else: var random := randi() % _brush.random.size() _brush_image = _create_blended_brush_image(_brush.random[random]) - _brush_texture.create_from_image(_brush_image, 0) + _brush_texture = ImageTexture.create_from_image(_brush_image) _indicator = _create_brush_indicator() _polylines = _create_polylines(_indicator) - $Brush/Type/Texture.texture = _brush_texture + $Brush/Type/Texture2D.texture = _brush_texture func _create_blended_brush_image(image: Image) -> Image: - var size := image.get_size() * _brush_size + var brush_size := image.get_size() * _brush_size var brush := Image.new() brush.copy_from(image) - brush.resize(size.x, size.y, Image.INTERPOLATE_NEAREST) + brush.resize(brush_size.x, brush_size.y, Image.INTERPOLATE_NEAREST) return brush @@ -347,17 +351,18 @@ func _create_brush_indicator() -> BitMap: return _create_image_indicator(_brush_image) -func _create_pixel_indicator(size: int) -> BitMap: +func _create_pixel_indicator(brush_size: int) -> BitMap: var bitmap := BitMap.new() - bitmap.create(Vector2.ONE * size) - bitmap.set_bit_rect(Rect2(Vector2.ZERO, Vector2.ONE * size), true) + bitmap.create(Vector2i.ONE * brush_size) + bitmap.set_bit_rect(Rect2i(Vector2i.ZERO, Vector2i.ONE * brush_size), true) return bitmap -func _create_circle_indicator(size: int, fill := false) -> BitMap: - _circle_tool_shortcut = PoolVector2Array() - var diameter := Vector2(size, size) * 2 + Vector2.ONE - return _fill_bitmap_with_points(_compute_draw_tool_circle(Vector2(size, size), fill), diameter) +func _create_circle_indicator(brush_size: int, fill := false) -> BitMap: + _circle_tool_shortcut = [] + var brush_size_v2 := Vector2i(brush_size, brush_size) + var diameter := brush_size_v2 * 2 + Vector2i.ONE + return _fill_bitmap_with_points(_compute_draw_tool_circle(brush_size_v2, fill), diameter) func _create_image_indicator(image: Image) -> BitMap: @@ -368,16 +373,16 @@ func _create_image_indicator(image: Image) -> BitMap: func draw_indicator(left: bool) -> void: var color := Global.left_tool_color if left else Global.right_tool_color - draw_indicator_at(_cursor, Vector2.ZERO, color) + draw_indicator_at(_cursor, Vector2i.ZERO, color) -func draw_indicator_at(position: Vector2, offset: Vector2, color: Color) -> void: +func draw_indicator_at(pos: Vector2i, offset: Vector2i, color: Color) -> void: var canvas = Global.canvas.indicators - position -= (_indicator.get_size() / 2).floor() - position -= offset - canvas.draw_set_transform(position, canvas.rotation, canvas.scale) + pos -= _indicator.get_size() / 2 + pos -= offset + canvas.draw_set_transform(pos, canvas.rotation, canvas.scale) var polylines := _polylines for line in polylines: - var pool := PoolVector2Array(line) + var pool := PackedVector2Array(line) canvas.draw_polyline(pool, color) canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) diff --git a/src/Tools/SelectionTools/PaintSelect.tscn b/src/Tools/SelectionTools/PaintSelect.tscn index 699f9ccd025..0fef4f9e3cf 100644 --- a/src/Tools/SelectionTools/PaintSelect.tscn +++ b/src/Tools/SelectionTools/PaintSelect.tscn @@ -1,59 +1,55 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=6 format=3 uid="uid://bry4ltxur56u7"] -[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/SelectionTools/PaintSelect.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3] +[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/SelectionTools/PaintSelect.gd" id="2"] +[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[sub_resource type="StyleBoxFlat" id=1] -bg_color = Color( 1, 1, 1, 1 ) -border_color = Color( 1, 1, 1, 1 ) +[sub_resource type="StyleBoxFlat" id="1"] +bg_color = Color(1, 1, 1, 1) +border_color = Color(1, 1, 1, 1) corner_radius_top_left = 5 corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 anti_aliasing = false -[sub_resource type="StyleBoxFlat" id=2] -bg_color = Color( 1, 1, 1, 1 ) -border_color = Color( 1, 1, 1, 1 ) +[sub_resource type="StyleBoxFlat" id="2"] +bg_color = Color(1, 1, 1, 1) +border_color = Color(1, 1, 1, 1) corner_radius_top_left = 5 corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 anti_aliasing = false -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") [node name="Brush" type="HBoxContainer" parent="." index="2"] -margin_top = 26.0 -margin_right = 116.0 -margin_bottom = 58.0 +layout_mode = 2 alignment = 1 [node name="Type" type="Button" parent="Brush" index="0"] -margin_right = 32.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -hint_tooltip = "Select a brush" -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 size_flags_horizontal = 0 -custom_styles/hover = SubResource( 1 ) -custom_styles/pressed = SubResource( 1 ) -custom_styles/focus = SubResource( 2 ) -custom_styles/disabled = SubResource( 2 ) -custom_styles/normal = SubResource( 1 ) - -[node name="Texture" type="TextureRect" parent="Brush/Type" index="0"] -margin_right = 32.0 -margin_bottom = 32.0 -expand = true +tooltip_text = "Select a brush" +mouse_default_cursor_shape = 2 +theme_override_styles/normal = SubResource("1") +theme_override_styles/hover = SubResource("1") +theme_override_styles/pressed = SubResource("1") +theme_override_styles/disabled = SubResource("2") +theme_override_styles/focus = SubResource("2") + +[node name="Texture2D" type="TextureRect" parent="Brush/Type" index="0"] +layout_mode = 0 +offset_right = 32.0 +offset_bottom = 32.0 +expand_mode = 1 stretch_mode = 6 -[node name="BrushSize" parent="Brush" index="1" instance=ExtResource( 3 )] -margin_left = 36.0 -margin_right = 116.0 -margin_bottom = 32.0 +[node name="BrushSize" parent="Brush" index="1" instance=ExtResource("3")] +layout_mode = 2 min_value = 1.0 max_value = 25.0 value = 1.0 @@ -62,29 +58,5 @@ prefix = "Size:" suffix = "px" is_global = true -[node name="PositionLabel" parent="." index="3"] -margin_top = 62.0 -margin_bottom = 76.0 - -[node name="XSpinBox" parent="." index="4"] -margin_top = 80.0 -margin_bottom = 104.0 - -[node name="YSpinBox" parent="." index="5"] -margin_top = 108.0 -margin_bottom = 132.0 - -[node name="SizeLabel" parent="." index="6"] -margin_top = 136.0 -margin_bottom = 150.0 - -[node name="WSpinBox" parent="." index="7"] -margin_top = 154.0 -margin_bottom = 178.0 - -[node name="HSpinBox" parent="." index="8"] -margin_top = 182.0 -margin_bottom = 206.0 - [connection signal="pressed" from="Brush/Type" to="." method="_on_BrushType_pressed"] [connection signal="value_changed" from="Brush/BrushSize" to="." method="_on_BrushSize_value_changed"] diff --git a/src/Tools/SelectionTools/PolygonSelect.gd b/src/Tools/SelectionTools/PolygonSelect.gd index 9603ba9a863..2ace63a4a39 100644 --- a/src/Tools/SelectionTools/PolygonSelect.gd +++ b/src/Tools/SelectionTools/PolygonSelect.gd @@ -1,7 +1,7 @@ extends SelectionTool -var _last_position := Vector2.INF -var _draw_points := [] +var _last_position := Vector2i(Vector2.INF) +var _draw_points: Array[Vector2i] = [] var _ready_to_apply := false @@ -13,74 +13,74 @@ func _input(event: InputEvent) -> void: if Global.mirror_view: _last_position.x = (Global.current_project.size.x - 1) - _last_position.x elif event is InputEventMouseButton: - if event.doubleclick and event.button_index == tool_slot.button and _draw_points: + if event.double_click and event.button_index == tool_slot.button and _draw_points: $DoubleClickTimer.start() append_gap(_draw_points[-1], _draw_points[0], _draw_points) _ready_to_apply = true - apply_selection(Vector2.ZERO) # Argument doesn't matter + apply_selection(Vector2i.ZERO) # Argument doesn't matter else: if event.is_action_pressed("transformation_cancel") and _ongoing_selection: _ongoing_selection = false _draw_points.clear() _ready_to_apply = false - Global.canvas.previews.update() + Global.canvas.previews.queue_redraw() -func draw_start(position: Vector2) -> void: +func draw_start(pos: Vector2i) -> void: if !$DoubleClickTimer.is_stopped(): return - position = snap_position(position) - .draw_start(position) + pos = snap_position(pos) + super.draw_start(pos) if !_move and !_draw_points: _ongoing_selection = true - _draw_points.append(position) - _last_position = position + _draw_points.append(pos) + _last_position = pos -func draw_move(position: Vector2) -> void: +func draw_move(pos: Vector2i) -> void: if selection_node.arrow_key_move: return - position = snap_position(position) - .draw_move(position) + pos = snap_position(pos) + super.draw_move(pos) -func draw_end(position: Vector2) -> void: +func draw_end(pos: Vector2i) -> void: if selection_node.arrow_key_move: return - position = snap_position(position) + pos = snap_position(pos) if !_move and _draw_points: - append_gap(_draw_points[-1], position, _draw_points) - if position == _draw_points[0] and _draw_points.size() > 1: + append_gap(_draw_points[-1], pos, _draw_points) + if pos == _draw_points[0] and _draw_points.size() > 1: _ready_to_apply = true - .draw_end(position) + super.draw_end(pos) func draw_preview() -> void: if _ongoing_selection and !_move: var canvas: Node2D = Global.canvas.previews - var position := canvas.position - var scale := canvas.scale + var pos := canvas.position + var canvas_scale := canvas.scale if Global.mirror_view: - position.x = position.x + Global.current_project.size.x - scale.x = -1 + pos.x = pos.x + Global.current_project.size.x + canvas_scale.x = -1 var preview_draw_points := _draw_points.duplicate() append_gap(_draw_points[-1], _last_position, preview_draw_points) - canvas.draw_set_transform(position, canvas.rotation, scale) + canvas.draw_set_transform(pos, canvas.rotation, canvas_scale) var indicator := _fill_bitmap_with_points(preview_draw_points, Global.current_project.size) for line in _create_polylines(indicator): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) - var circle_radius: Vector2 = Global.camera.zoom * 10 - circle_radius.x = clamp(circle_radius.x, 2, circle_radius.x) - circle_radius.y = clamp(circle_radius.y, 2, circle_radius.y) + var circle_radius := Global.camera.zoom * 10 + circle_radius.x = clampf(circle_radius.x, 2, circle_radius.x) + circle_radius.y = clampf(circle_radius.y, 2, circle_radius.y) if _last_position == _draw_points[0] and _draw_points.size() > 1: draw_empty_circle( - canvas, _draw_points[0] + Vector2.ONE * 0.5, circle_radius, Color.black + canvas, Vector2(_draw_points[0]) + Vector2.ONE * 0.5, circle_radius, Color.BLACK ) # Handle mirroring @@ -90,30 +90,30 @@ func draw_preview() -> void: mirror_array(preview_draw_points, true, false), Global.current_project.size ) ): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) if Tools.vertical_mirror: for line in _create_polylines( _fill_bitmap_with_points( mirror_array(preview_draw_points, true, true), Global.current_project.size ) ): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) if Tools.vertical_mirror: for line in _create_polylines( _fill_bitmap_with_points( mirror_array(preview_draw_points, false, true), Global.current_project.size ) ): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) -func apply_selection(_position) -> void: - .apply_selection(_position) +func apply_selection(pos: Vector2i) -> void: + super.apply_selection(pos) if !_ready_to_apply: return - var project: Project = Global.current_project + var project := Global.current_project var cleared := false if !_add and !_subtract and !_intersect: cleared = true @@ -143,14 +143,14 @@ func apply_selection(_position) -> void: _ongoing_selection = false _draw_points.clear() _ready_to_apply = false - Global.canvas.previews.update() + Global.canvas.previews.queue_redraw() -func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> void: - var project: Project = Global.current_project - var size := selection_map.get_size() +func lasso_selection(selection_map: SelectionMap, points: Array[Vector2i]) -> void: + var project := Global.current_project + var selection_size := selection_map.get_size() for point in points: - if point.x < 0 or point.y < 0 or point.x >= size.x or point.y >= size.y: + if point.x < 0 or point.y < 0 or point.x >= selection_size.x or point.y >= selection_size.y: continue if _intersect: if project.selection_map.is_pixel_selected(point): @@ -158,13 +158,13 @@ func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> v else: selection_map.select_pixel(point, !_subtract) - var v := Vector2() - var image_size: Vector2 = project.size + var v := Vector2i() + var image_size := project.size for x in image_size.x: v.x = x for y in image_size.y: v.y = y - if Geometry.is_point_in_polygon(v, points): + if Geometry2D.is_point_in_polygon(v, points): if _intersect: if project.selection_map.is_pixel_selected(v): selection_map.select_pixel(v, true) @@ -174,15 +174,15 @@ func lasso_selection(selection_map: SelectionMap, points: PoolVector2Array) -> v # Bresenham's Algorithm # Thanks to https://godotengine.org/qa/35276/tile-based-line-drawing-algorithm-efficiency -func append_gap(start: Vector2, end: Vector2, array: Array) -> void: - var dx := int(abs(end.x - start.x)) - var dy := int(-abs(end.y - start.y)) +func append_gap(start: Vector2i, end: Vector2i, array: Array[Vector2i]) -> void: + var dx := absi(end.x - start.x) + var dy := -absi(end.y - start.y) var err := dx + dy var e2 := err << 1 - var sx = 1 if start.x < end.x else -1 - var sy = 1 if start.y < end.y else -1 - var x = start.x - var y = start.y + var sx := 1 if start.x < end.x else -1 + var sy := 1 if start.y < end.y else -1 + var x := start.x + var y := start.y while !(x == end.x && y == end.y): e2 = err << 1 if e2 >= dy: @@ -191,21 +191,21 @@ func append_gap(start: Vector2, end: Vector2, array: Array) -> void: if e2 <= dx: err += dx y += sy - array.append(Vector2(x, y)) + array.append(Vector2i(x, y)) -func mirror_array(array: Array, h: bool, v: bool) -> Array: - var new_array := [] - var project: Project = Global.current_project +func mirror_array(array: Array[Vector2i], h: bool, v: bool) -> Array[Vector2i]: + var new_array: Array[Vector2i] = [] + var project := Global.current_project for point in array: if h and v: new_array.append( - Vector2(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y) + Vector2i(project.x_symmetry_point - point.x, project.y_symmetry_point - point.y) ) elif h: - new_array.append(Vector2(project.x_symmetry_point - point.x, point.y)) + new_array.append(Vector2i(project.x_symmetry_point - point.x, point.y)) elif v: - new_array.append(Vector2(point.x, project.y_symmetry_point - point.y)) + new_array.append(Vector2i(point.x, project.y_symmetry_point - point.y)) return new_array @@ -221,10 +221,10 @@ func draw_empty_circle( line_origin = circle_radius + circle_center while draw_counter <= 360: - line_end = circle_radius.rotated(deg2rad(draw_counter)) + circle_center + line_end = circle_radius.rotated(deg_to_rad(draw_counter)) + circle_center canvas.draw_line(line_origin, line_end, color) draw_counter += 1 line_origin = line_end - line_end = circle_radius.rotated(deg2rad(360)) + circle_center + line_end = circle_radius.rotated(deg_to_rad(360)) + circle_center canvas.draw_line(line_origin, line_end, color) diff --git a/src/Tools/SelectionTools/PolygonSelect.tscn b/src/Tools/SelectionTools/PolygonSelect.tscn index d18160d989d..d28ddefdb83 100644 --- a/src/Tools/SelectionTools/PolygonSelect.tscn +++ b/src/Tools/SelectionTools/PolygonSelect.tscn @@ -1,10 +1,10 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://dv8bn8gys3tax"] -[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/SelectionTools/PolygonSelect.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/SelectionTools/PolygonSelect.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") [node name="DoubleClickTimer" type="Timer" parent="." index="8"] wait_time = 0.1 diff --git a/src/Tools/SelectionTools/RectSelect.gd b/src/Tools/SelectionTools/RectSelect.gd index f6206dc4535..6912e5f0fca 100644 --- a/src/Tools/SelectionTools/RectSelect.gd +++ b/src/Tools/SelectionTools/RectSelect.gd @@ -1,14 +1,14 @@ extends SelectionTool -var _rect := Rect2(0, 0, 0, 0) +var _rect := Rect2i() -var _square := false # Mouse Click + Shift -var _expand_from_center := false # Mouse Click + Ctrl -var _displace_origin = false # Mouse Click + Alt +var _square := false ## Mouse Click + Shift +var _expand_from_center := false ## Mouse Click + Ctrl +var _displace_origin = false ## Mouse Click + Alt func _input(event: InputEvent) -> void: - if !_move and !_rect.has_no_area(): + if !_move and _rect.has_area(): if event.is_action_pressed("shape_perfect"): _square = true elif event.is_action_released("shape_perfect"): @@ -23,80 +23,71 @@ func _input(event: InputEvent) -> void: _displace_origin = false -func draw_move(position: Vector2) -> void: +func draw_move(pos: Vector2i) -> void: if selection_node.arrow_key_move: return - position = snap_position(position) - .draw_move(position) + pos = snap_position(pos) + super.draw_move(pos) if !_move: if _displace_origin: - _start_pos += position - _offset - _rect = _get_result_rect(_start_pos, position) + _start_pos += pos - _offset + _rect = _get_result_rect(_start_pos, pos) _set_cursor_text(_rect) - _offset = position + _offset = pos -func draw_end(position: Vector2) -> void: +func draw_end(pos: Vector2i) -> void: if selection_node.arrow_key_move: return - position = snap_position(position) - .draw_end(position) - _rect = Rect2(0, 0, 0, 0) + pos = snap_position(pos) + super.draw_end(pos) + _rect = Rect2i() _square = false _expand_from_center = false _displace_origin = false func draw_preview() -> void: - if !_move: - var canvas: Node2D = Global.canvas.previews - var position := canvas.position - var scale := canvas.scale - if Global.mirror_view: - position.x = position.x + Global.current_project.size.x - scale.x = -1 - canvas.draw_set_transform(position, canvas.rotation, scale) - canvas.draw_rect(_rect, Color.black, false) - - # Handle mirroring - if Tools.horizontal_mirror: - var mirror_x_rect := _rect - mirror_x_rect.position.x = ( - Global.current_project.x_symmetry_point - - _rect.position.x - + 1 - ) - mirror_x_rect.end.x = Global.current_project.x_symmetry_point - _rect.end.x + 1 - canvas.draw_rect(mirror_x_rect, Color.black, false) - if Tools.vertical_mirror: - var mirror_xy_rect := mirror_x_rect - mirror_xy_rect.position.y = ( - Global.current_project.y_symmetry_point - - _rect.position.y - + 1 - ) - mirror_xy_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1 - canvas.draw_rect(mirror_xy_rect, Color.black, false) + if _move: + return + var canvas: Node2D = Global.canvas.previews + var pos := canvas.position + var canvas_scale := canvas.scale + if Global.mirror_view: + pos.x = pos.x + Global.current_project.size.x + canvas_scale.x = -1 + canvas.draw_set_transform(pos, canvas.rotation, canvas_scale) + canvas.draw_rect(_rect, Color.BLACK, false) + + # Handle mirroring + if Tools.horizontal_mirror: + var mirror_x_rect := _rect + mirror_x_rect.position.x = Global.current_project.x_symmetry_point - _rect.position.x + 1 + mirror_x_rect.end.x = Global.current_project.x_symmetry_point - _rect.end.x + 1 + canvas.draw_rect(mirror_x_rect, Color.BLACK, false) if Tools.vertical_mirror: - var mirror_y_rect := _rect - mirror_y_rect.position.y = ( - Global.current_project.y_symmetry_point - - _rect.position.y - + 1 + var mirror_xy_rect := mirror_x_rect + mirror_xy_rect.position.y = ( + Global.current_project.y_symmetry_point - _rect.position.y + 1 ) - mirror_y_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1 - canvas.draw_rect(mirror_y_rect, Color.black, false) - canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) + mirror_xy_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1 + canvas.draw_rect(mirror_xy_rect, Color.BLACK, false) + if Tools.vertical_mirror: + var mirror_y_rect := _rect + mirror_y_rect.position.y = Global.current_project.y_symmetry_point - _rect.position.y + 1 + mirror_y_rect.end.y = Global.current_project.y_symmetry_point - _rect.end.y + 1 + canvas.draw_rect(mirror_y_rect, Color.BLACK, false) + canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) -func apply_selection(_position: Vector2) -> void: - .apply_selection(_position) - var project: Project = Global.current_project +func apply_selection(pos: Vector2i) -> void: + super.apply_selection(pos) + var project := Global.current_project if !_add and !_subtract and !_intersect: Global.canvas.selection.clear_selection() - if _rect.size == Vector2.ZERO and project.has_selection: + if _rect.size == Vector2i.ZERO and project.has_selection: Global.canvas.selection.commit_undo("Select", undo_data) - if _rect.size == Vector2.ZERO: + if _rect.size == Vector2i.ZERO: return var operation := 0 if _subtract: @@ -125,33 +116,33 @@ func apply_selection(_position: Vector2) -> void: Global.canvas.selection.commit_undo("Select", undo_data) -# Given an origin point and destination point, returns a rect representing -# where the shape will be drawn and what is its size -func _get_result_rect(origin: Vector2, dest: Vector2) -> Rect2: - var rect := Rect2(Vector2.ZERO, Vector2.ZERO) +## Given an origin point and destination point, returns a rect representing +## where the shape will be drawn and what is its size +func _get_result_rect(origin: Vector2i, dest: Vector2i) -> Rect2i: + var rect := Rect2i() # Center the rect on the mouse if _expand_from_center: - var new_size := (dest - origin).floor() + var new_size := dest - origin # Make rect 1:1 while centering it on the mouse if _square: - var square_size := max(abs(new_size.x), abs(new_size.y)) - new_size = Vector2(square_size, square_size) + var square_size := maxi(absi(new_size.x), absi(new_size.y)) + new_size = Vector2i(square_size, square_size) origin -= new_size dest = origin + 2 * new_size # Make rect 1:1 while not trying to center it if _square: - var square_size := min(abs(origin.x - dest.x), abs(origin.y - dest.y)) + var square_size := mini(absi(origin.x - dest.x), absi(origin.y - dest.y)) rect.position.x = origin.x if origin.x < dest.x else origin.x - square_size rect.position.y = origin.y if origin.y < dest.y else origin.y - square_size - rect.size = Vector2(square_size, square_size) + rect.size = Vector2i(square_size, square_size) # Get the rect without any modifications else: - rect.position = Vector2(min(origin.x, dest.x), min(origin.y, dest.y)) + rect.position = Vector2i(mini(origin.x, dest.x), mini(origin.y, dest.y)) rect.size = (origin - dest).abs() - rect.size += Vector2.ONE + rect.size += Vector2i.ONE return rect diff --git a/src/Tools/SelectionTools/RectSelect.tscn b/src/Tools/SelectionTools/RectSelect.tscn index 683b19e5d41..fa518992c80 100644 --- a/src/Tools/SelectionTools/RectSelect.tscn +++ b/src/Tools/SelectionTools/RectSelect.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://iph72k1ii717"] -[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/SelectionTools/RectSelect.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://bd62qfjn380wf" path="res://src/Tools/SelectionTools/SelectionTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/SelectionTools/RectSelect.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") diff --git a/src/Tools/SelectionTools/SelectionTool.gd b/src/Tools/SelectionTools/SelectionTool.gd index d3f125592c0..a82862e4124 100644 --- a/src/Tools/SelectionTools/SelectionTool.gd +++ b/src/Tools/SelectionTools/SelectionTool.gd @@ -6,36 +6,36 @@ enum Mode { DEFAULT, ADD, SUBTRACT, INTERSECT } var undo_data: Dictionary var _move := false var _move_content := true -var _start_pos := Vector2.ZERO -var _offset := Vector2.ZERO -# For tools such as the Polygon selection tool where you have to -# click multiple times to create a selection +var _start_pos := Vector2i.ZERO +var _offset := Vector2i.ZERO +## For tools such as the Polygon selection tool where you have to +## click multiple times to create a selection var _ongoing_selection := false var _mode_selected := 0 -var _add := false # Shift + Mouse Click -var _subtract := false # Ctrl + Mouse Click -var _intersect := false # Shift + Ctrl + Mouse Click +var _add := false ## Shift + Mouse Click +var _subtract := false ## Ctrl + Mouse Click +var _intersect := false ## Shift + Ctrl + Mouse Click -# Used to check if the state of content transformation has been changed -# while draw_move() is being called. For example, pressing Enter while still moving content +## Used to check if the state of content transformation has been changed +## while draw_move() is being called. For example, pressing Enter while still moving content var _content_transformation_check := false var _skip_slider_logic := false -onready var selection_node: Node2D = Global.canvas.selection -onready var position_sliders := $Position as ValueSliderV2 -onready var size_sliders := $Size as ValueSliderV2 -onready var timer := $Timer as Timer +@onready var selection_node: Node2D = Global.canvas.selection +@onready var position_sliders := $Position as ValueSliderV2 +@onready var size_sliders := $Size as ValueSliderV2 +@onready var timer := $Timer as Timer func _ready() -> void: + super._ready() set_spinbox_values() refresh_options() +## Ensure all items are added when we are selecting an option (bad things will happen otherwise) func refresh_options() -> void: - # The existence of this function is to ensure all items - # are added when we are selecting an option (bad things will happen otherwise) $Modes.clear() $Modes.add_item("Replace selection") $Modes.add_item("Add to selection") @@ -45,7 +45,7 @@ func refresh_options() -> void: func get_config() -> Dictionary: - var config := .get_config() + var config := super.get_config() config["mode_selected"] = _mode_selected return config @@ -60,8 +60,8 @@ func update_config() -> void: func set_spinbox_values() -> void: _skip_slider_logic = true - var select_rect: Rect2 = selection_node.big_bounding_rectangle - var has_selection := not select_rect.has_no_area() + var select_rect: Rect2i = selection_node.big_bounding_rectangle + var has_selection := select_rect.has_area() if not has_selection: size_sliders.press_ratio_button(false) position_sliders.editable = has_selection @@ -71,27 +71,27 @@ func set_spinbox_values() -> void: _skip_slider_logic = false -func draw_start(position: Vector2) -> void: - position = snap_position(position) - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_start(pos) if selection_node.arrow_key_move: return - var project: Project = Global.current_project + var project := Global.current_project undo_data = selection_node.get_undo_data(false) _intersect = Input.is_action_pressed("selection_intersect", true) _add = Input.is_action_pressed("selection_add", true) _subtract = Input.is_action_pressed("selection_subtract", true) - _start_pos = position - _offset = position + _start_pos = pos + _offset = pos - var selection_position: Vector2 = selection_node.big_bounding_rectangle.position - var offsetted_pos := position + var selection_position: Vector2i = selection_node.big_bounding_rectangle.position + var offsetted_pos := pos if selection_position.x < 0: offsetted_pos.x -= selection_position.x if selection_position.y < 0: offsetted_pos.y -= selection_position.y - var quick_copy: bool = Input.is_action_pressed("transform_copy_selection_content", true) + var quick_copy := Input.is_action_pressed("transform_copy_selection_content", true) if ( offsetted_pos.x >= 0 and offsetted_pos.y >= 0 @@ -99,7 +99,12 @@ func draw_start(position: Vector2) -> void: and (!_add and !_subtract and !_intersect or quick_copy) and !_ongoing_selection ): - if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn(): + if !( + Global + . current_project + . layers[Global.current_project.current_layer] + . can_layer_get_drawn() + ): return # Move current selection _move = true @@ -110,7 +115,7 @@ func draw_start(position: Vector2) -> void: image.blit_rect_mask( selection_node.preview_image, selection_node.preview_image, - Rect2(Vector2.ZERO, project.selection_map.get_size()), + Rect2i(Vector2i.ZERO, project.selection_map.get_size()), selection_node.big_bounding_rectangle.position ) @@ -127,7 +132,7 @@ func draw_start(position: Vector2) -> void: image.blit_rect_mask( selection_node.preview_image, selection_node.preview_image, - Rect2(Vector2.ZERO, project.selection_map.get_size()), + Rect2i(Vector2i.ZERO, project.selection_map.get_size()), selection_node.big_bounding_rectangle.position ) Global.canvas.update_selected_cels_textures() @@ -146,9 +151,9 @@ func draw_start(position: Vector2) -> void: _content_transformation_check = selection_node.is_moving_content -func draw_move(position: Vector2) -> void: - position = snap_position(position) - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_move(pos) if selection_node.arrow_key_move: return # This is true if content transformation has been confirmed (pressed Enter for example) @@ -159,51 +164,50 @@ func draw_move(position: Vector2) -> void: return if Input.is_action_pressed("transform_snap_axis"): # Snap to axis - var angle := position.angle_to_point(_start_pos) - if abs(angle) <= PI / 4 or abs(angle) >= 3 * PI / 4: - position.y = _start_pos.y + var angle := Vector2(pos).angle_to_point(_start_pos) + if absf(angle) <= PI / 4 or absf(angle) >= 3 * PI / 4: + pos.y = _start_pos.y else: - position.x = _start_pos.x + pos.x = _start_pos.x if Input.is_action_pressed("transform_snap_grid"): _offset = _offset.snapped(Global.grid_size) - var prev_pos: Vector2 = selection_node.big_bounding_rectangle.position + var prev_pos: Vector2i = selection_node.big_bounding_rectangle.position selection_node.big_bounding_rectangle.position = prev_pos.snapped(Global.grid_size) - selection_node.marching_ants_outline.offset += ( - selection_node.big_bounding_rectangle.position - - prev_pos + selection_node.marching_ants_outline.offset += Vector2( + selection_node.big_bounding_rectangle.position - prev_pos ) - position = position.snapped(Global.grid_size) + pos = pos.snapped(Global.grid_size) var grid_offset := Global.grid_offset - grid_offset = Vector2( + grid_offset = Vector2i( fmod(grid_offset.x, Global.grid_size.x), fmod(grid_offset.y, Global.grid_size.y) ) - position += grid_offset + pos += grid_offset if _move_content: - selection_node.move_content(position - _offset) + selection_node.move_content(pos - _offset) else: - selection_node.move_borders(position - _offset) + selection_node.move_borders(pos - _offset) - _offset = position + _offset = pos _set_cursor_text(selection_node.big_bounding_rectangle) -func draw_end(position: Vector2) -> void: - position = snap_position(position) - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_end(pos) if selection_node.arrow_key_move: return if _content_transformation_check == selection_node.is_moving_content: if _move: selection_node.move_borders_end() else: - apply_selection(position) + apply_selection(pos) _move = false cursor_text = "" -func apply_selection(_position: Vector2) -> void: +func apply_selection(_position: Vector2i) -> void: # if a shortcut is activated then that will be obeyed instead match _mode_selected: Mode.ADD: @@ -222,16 +226,16 @@ func _on_Modes_item_selected(index: int) -> void: save_config() -func _set_cursor_text(rect: Rect2) -> void: +func _set_cursor_text(rect: Rect2i) -> void: cursor_text = "%s, %s" % [rect.position.x, rect.position.y] cursor_text += " -> %s, %s" % [rect.end.x - 1, rect.end.y - 1] cursor_text += " (%s, %s)" % [rect.size.x, rect.size.y] -func _on_Position_value_changed(value: Vector2) -> void: +func _on_Position_value_changed(value: Vector2i) -> void: if _skip_slider_logic: return - var project: Project = Global.current_project + var project := Global.current_project if !project.has_selection: return @@ -247,7 +251,7 @@ func _on_Position_value_changed(value: Vector2) -> void: project.selection_map_changed() -func _on_Size_value_changed(value: Vector2) -> void: +func _on_Size_value_changed(value: Vector2i) -> void: if _skip_slider_logic: return if !Global.current_project.has_selection: diff --git a/src/Tools/SelectionTools/SelectionTool.tscn b/src/Tools/SelectionTools/SelectionTool.tscn index 8972b8bf3a1..23f95a726cd 100644 --- a/src/Tools/SelectionTools/SelectionTool.tscn +++ b/src/Tools/SelectionTools/SelectionTool.tscn @@ -1,50 +1,37 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://bd62qfjn380wf"] -[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/SelectionTools/SelectionTool.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=4] +[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/SelectionTools/SelectionTool.gd" id="2"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="4"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") [node name="ModeLabel" type="Label" parent="." index="2"] -margin_top = 26.0 -margin_right = 116.0 -margin_bottom = 40.0 +layout_mode = 2 text = "Mode:" [node name="Modes" type="OptionButton" parent="." index="3"] -margin_top = 44.0 -margin_right = 116.0 -margin_bottom = 64.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -align = 1 [node name="PositionLabel" type="Label" parent="." index="4"] -margin_top = 68.0 -margin_right = 116.0 -margin_bottom = 82.0 +layout_mode = 2 text = "Position:" -[node name="Position" parent="." index="5" instance=ExtResource( 4 )] -margin_top = 86.0 -margin_right = 116.0 -margin_bottom = 138.0 +[node name="Position" parent="." index="5" instance=ExtResource("4")] +layout_mode = 2 allow_greater = true allow_lesser = true [node name="SizeLabel" type="Label" parent="." index="6"] -margin_top = 142.0 -margin_right = 116.0 -margin_bottom = 156.0 +layout_mode = 2 text = "Size:" -[node name="Size" parent="." index="7" instance=ExtResource( 4 )] -margin_top = 160.0 -margin_right = 116.0 -margin_bottom = 212.0 -value = Vector2( 1, 1 ) -min_value = Vector2( 1, 1 ) +[node name="Size" parent="." index="7" instance=ExtResource("4")] +layout_mode = 2 +value = Vector2(1, 1) +min_value = Vector2(1, 1) allow_greater = true show_ratio = true prefix_x = "Width:" diff --git a/src/Tools/Shading.gd b/src/Tools/Shading.gd index 33f5a3cf739..10d2b845048 100644 --- a/src/Tools/Shading.gd +++ b/src/Tools/Shading.gd @@ -17,8 +17,8 @@ var _value_amount := 10 class LightenDarkenOp: extends Drawer.ColorOp var changed := false - var shading_mode: int = ShadingMode.SIMPLE - var lighten_or_darken: int = LightenDarken.LIGHTEN + var shading_mode := ShadingMode.SIMPLE + var lighten_or_darken := LightenDarken.LIGHTEN var hue_amount := 10.0 var sat_amount := 10.0 var value_amount := 10.0 @@ -52,7 +52,7 @@ class LightenDarkenOp: hue_shift = hue_limit_lighten(dst.h, hue_shift) dst.h = fposmod(dst.h + hue_shift, 1) if dst.s > sat_lighten_limit: - dst.s = max(dst.s - min(sat_shift, dst.s), sat_lighten_limit) + dst.s = maxf(dst.s - minf(sat_shift, dst.s), sat_lighten_limit) dst.v += value_shift else: @@ -60,7 +60,7 @@ class LightenDarkenOp: dst.h = fposmod(dst.h - hue_shift, 1) dst.s += sat_shift if dst.v > value_darken_limit: - dst.v = max(dst.v - min(value_shift, dst.v), value_darken_limit) + dst.v = maxf(dst.v - minf(value_shift, dst.v), value_darken_limit) return dst @@ -162,7 +162,7 @@ func _on_LightenDarken_value_value_changed(value: float) -> void: func get_config() -> Dictionary: - var config := .get_config() + var config := super.get_config() config["shading_mode"] = _shading_mode config["mode"] = _mode config["amount"] = _amount @@ -173,7 +173,7 @@ func get_config() -> Dictionary: func set_config(config: Dictionary) -> void: - .set_config(config) + super.set_config(config) _shading_mode = config.get("shading_mode", _shading_mode) _drawer.color_op.shading_mode = _shading_mode _mode = config.get("mode", _mode) @@ -185,7 +185,7 @@ func set_config(config: Dictionary) -> void: func update_config() -> void: - .update_config() + super.update_config() $ShadingMode.selected = _shading_mode $LightenDarken.selected = _mode $AmountSlider.value = _amount @@ -205,12 +205,12 @@ func update_strength() -> void: _drawer.color_op.value_amount = _value_amount -func draw_start(position: Vector2) -> void: - position = snap_position(position) - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_start(pos) if Input.is_action_pressed("draw_color_picker"): _picking_color = true - _pick_color(position) + _pick_color(pos) return _picking_color = false @@ -226,43 +226,43 @@ func draw_start(position: Vector2) -> void: if _draw_line: if Global.mirror_view: # mirroring position is ONLY required by "Preview" - position.x = (Global.current_project.size.x - 1) - position.x - _line_start = position - _line_end = position + pos.x = (Global.current_project.size.x - 1) - pos.x + _line_start = pos + _line_end = pos update_line_polylines(_line_start, _line_end) else: - draw_tool(position) - _last_position = position + draw_tool(pos) + _last_position = pos Global.canvas.sprite_changed_this_frame = true cursor_text = "" -func draw_move(position: Vector2) -> void: - position = snap_position(position) - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_move(pos) if _picking_color: # Still return even if we released Alt if Input.is_action_pressed("draw_color_picker"): - _pick_color(position) + _pick_color(pos) return if _draw_line: if Global.mirror_view: # mirroring position is ONLY required by "Preview" - position.x = (Global.current_project.size.x - 1) - position.x - var d := _line_angle_constraint(_line_start, position) + pos.x = (Global.current_project.size.x - 1) - pos.x + var d := _line_angle_constraint(_line_start, pos) _line_end = d.position cursor_text = d.text update_line_polylines(_line_start, _line_end) else: - draw_fill_gap(_last_position, position) - _last_position = position + draw_fill_gap(_last_position, pos) + _last_position = pos cursor_text = "" Global.canvas.sprite_changed_this_frame = true -func draw_end(position: Vector2) -> void: - position = snap_position(position) - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_end(pos) if _picking_color: return @@ -280,17 +280,15 @@ func draw_end(position: Vector2) -> void: update_random_image() -func _draw_brush_image(image: Image, src_rect: Rect2, dst: Vector2) -> void: +func _draw_brush_image(image: Image, src_rect: Rect2i, dst: Vector2i) -> void: _changed = true - image.lock() for xx in image.get_size().x: for yy in image.get_size().y: if image.get_pixel(xx, yy).a > 0: - var pos := Vector2(xx, yy) + dst - src_rect.position + var pos := Vector2i(xx, yy) + dst - src_rect.position _set_pixel(pos, true) - image.unlock() func update_brush() -> void: - .update_brush() + super.update_brush() $ColorInterpolation.visible = false diff --git a/src/Tools/Shading.tscn b/src/Tools/Shading.tscn index 5cc418a3247..bb070d5a31d 100644 --- a/src/Tools/Shading.tscn +++ b/src/Tools/Shading.tscn @@ -1,80 +1,64 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://rbyd7i6snxjc"] -[ext_resource path="res://src/Tools/Draw.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/Shading.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3] +[ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/Draw.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/Shading.gd" id="2"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) - -[node name="ColorRect" parent="." index="0"] -margin_right = 126.0 - -[node name="Label" parent="." index="1"] -margin_right = 126.0 - -[node name="Brush" parent="." index="2"] -margin_right = 126.0 - -[node name="BrushSize" parent="Brush" index="1"] -margin_right = 126.0 - -[node name="ColorInterpolation" parent="." index="3"] -margin_top = 216.0 -margin_right = 126.0 -margin_bottom = 278.0 +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") [node name="LightenDarken" type="OptionButton" parent="." index="4"] -margin_top = 62.0 -margin_right = 126.0 -margin_bottom = 82.0 -rect_min_size = Vector2( 92, 0 ) +custom_minimum_size = Vector2(92, 0) +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "Lighten" -items = [ "Lighten", null, false, 0, null, "Darken", null, false, 1, null ] +item_count = 2 selected = 0 +popup/item_0/text = "Lighten" +popup/item_0/id = 0 +popup/item_1/text = "Darken" +popup/item_1/id = 1 [node name="ShadingMode" type="OptionButton" parent="." index="5"] -margin_top = 86.0 -margin_right = 126.0 -margin_bottom = 106.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "Simple Shading" -items = [ "Simple Shading", null, false, 0, null, "Hue Shifting", null, false, 1, null ] +item_count = 2 selected = 0 +popup/item_0/text = "Simple Shading" +popup/item_0/id = 0 +popup/item_1/text = "Hue Shifting" +popup/item_1/id = 1 -[node name="AmountSlider" parent="." index="6" instance=ExtResource( 3 )] -margin_top = 110.0 -margin_right = 126.0 -margin_bottom = 134.0 -hint_tooltip = "Lighten/Darken amount" +[node name="AmountSlider" parent="." index="6" instance=ExtResource("3")] +layout_mode = 2 +tooltip_text = "Lighten/Darken amount" +focus_mode = 2 +theme_type_variation = &"ValueSlider" value = 10.0 prefix = "Amount:" [node name="HueShiftingOptions" type="VBoxContainer" parent="." index="7"] visible = false -margin_top = 138.0 -margin_right = 126.0 -margin_bottom = 218.0 +layout_mode = 2 -[node name="HueSlider" parent="HueShiftingOptions" index="0" instance=ExtResource( 3 )] -margin_right = 126.0 -margin_bottom = 24.0 +[node name="HueSlider" parent="HueShiftingOptions" index="0" instance=ExtResource("3")] +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" max_value = 180.0 value = 10.0 prefix = "Hue:" -[node name="SatSlider" parent="HueShiftingOptions" index="1" instance=ExtResource( 3 )] -margin_top = 28.0 -margin_right = 126.0 -margin_bottom = 52.0 +[node name="SatSlider" parent="HueShiftingOptions" index="1" instance=ExtResource("3")] +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" value = 10.0 prefix = "Saturation:" -[node name="ValueSlider" parent="HueShiftingOptions" index="2" instance=ExtResource( 3 )] -margin_top = 56.0 -margin_right = 126.0 -margin_bottom = 80.0 +[node name="ValueSlider" parent="HueShiftingOptions" index="2" instance=ExtResource("3")] +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" value = 10.0 prefix = "Value:" diff --git a/src/Tools/ShapeDrawer.gd b/src/Tools/ShapeDrawer.gd index 1bf44394fb3..c894675a1be 100644 --- a/src/Tools/ShapeDrawer.gd +++ b/src/Tools/ShapeDrawer.gd @@ -1,8 +1,8 @@ extends "res://src/Tools/Draw.gd" -var _start := Vector2.ZERO -var _offset := Vector2.ZERO -var _dest := Vector2.ZERO +var _start := Vector2i.ZERO +var _offset := Vector2i.ZERO +var _dest := Vector2i.ZERO var _fill := false var _drawing := false var _displace_origin := false @@ -31,10 +31,10 @@ func update_indicator() -> void: var rect := _get_result_rect(_start, _dest) var points := _get_points(rect.size) var t_offset := _thickness - 1 - var t_offsetv := Vector2(t_offset, t_offset) + var t_offsetv := Vector2i(t_offset, t_offset) indicator.create(rect.size + t_offsetv) for point in points: - indicator.set_bit(point, 1) + indicator.set_bitv(point, 1) _indicator = indicator _polylines = _create_polylines(_indicator) @@ -47,30 +47,30 @@ func _on_FillCheckbox_toggled(button_pressed: bool) -> void: func get_config() -> Dictionary: - var config := .get_config() + var config := super.get_config() config["fill"] = _fill config["thickness"] = _thickness return config func set_config(config: Dictionary) -> void: - .set_config(config) + super.set_config(config) _fill = config.get("fill", _fill) _thickness = config.get("thickness", _thickness) func update_config() -> void: - .update_config() - $FillCheckbox.pressed = _fill + super.update_config() + $FillCheckbox.button_pressed = _fill $ThicknessSlider.value = _thickness -func _get_shape_points(_size: Vector2) -> PoolVector2Array: - return PoolVector2Array() +func _get_shape_points(_size: Vector2i) -> Array[Vector2i]: + return [] -func _get_shape_points_filled(_size: Vector2) -> PoolVector2Array: - return PoolVector2Array() +func _get_shape_points_filled(_size: Vector2i) -> Array[Vector2i]: + return [] func _input(event: InputEvent) -> void: @@ -81,12 +81,12 @@ func _input(event: InputEvent) -> void: _displace_origin = false -func draw_start(position: Vector2) -> void: - position = snap_position(position) - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_start(pos) if Input.is_action_pressed("draw_color_picker"): _picking_color = true - _pick_color(position) + _pick_color(pos) return _picking_color = false @@ -95,35 +95,35 @@ func draw_start(position: Vector2) -> void: if Global.mirror_view: # mirroring position is ONLY required by "Preview" - position.x = Global.current_project.size.x - position.x - 1 - _start = position - _offset = position - _dest = position + pos.x = Global.current_project.size.x - pos.x - 1 + _start = pos + _offset = pos + _dest = pos _drawing = true -func draw_move(position: Vector2) -> void: - position = snap_position(position) - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_move(pos) if _picking_color: # Still return even if we released draw_color_picker (Alt) if Input.is_action_pressed("draw_color_picker"): - _pick_color(position) + _pick_color(pos) return if _drawing: if Global.mirror_view: # mirroring position is ONLY required by "Preview" - position.x = Global.current_project.size.x - position.x - 1 + pos.x = Global.current_project.size.x - pos.x - 1 if _displace_origin: - _start += position - _offset - _dest = position - _offset = position - _set_cursor_text(_get_result_rect(_start, position)) + _start += pos - _offset + _dest = pos + _offset = pos + _set_cursor_text(_get_result_rect(_start, pos)) -func draw_end(position: Vector2) -> void: - position = snap_position(position) - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + pos = snap_position(pos) + super.draw_end(pos) if _picking_color: return @@ -137,11 +137,11 @@ func draw_end(position: Vector2) -> void: _start.x += 1 _offset.x += 1 _dest.x += 1 - position.x += 1 - _draw_shape(_start, position) + pos.x += 1 + _draw_shape(_start, pos) - _start = Vector2.ZERO - _dest = Vector2.ZERO + _start = Vector2i.ZERO + _dest = Vector2i.ZERO _drawing = false _displace_origin = false cursor_text = "" @@ -154,21 +154,23 @@ func draw_preview() -> void: var rect := _get_result_rect(_start, _dest) var points := _get_points(rect.size) var t_offset := _thickness - 1 - var t_offsetv := Vector2(t_offset, t_offset) + var t_offsetv := Vector2i(t_offset, t_offset) indicator.create(rect.size + t_offsetv) for point in points: - indicator.set_bit(point, 1) + indicator.set_bitv(point, 1) - var transform_pos: Vector2 = rect.position - t_offsetv + Vector2(0.5, 0.5) * (t_offset - 1) - canvas.draw_set_transform(transform_pos.ceil(), canvas.rotation, canvas.scale) + var transform_pos := ( + rect.position - t_offsetv + Vector2i((Vector2(0.5, 0.5) * (t_offset - 1)).ceil()) + ) + canvas.draw_set_transform(transform_pos, canvas.rotation, canvas.scale) for line in _create_polylines(indicator): - canvas.draw_polyline(PoolVector2Array(line), Color.black) + canvas.draw_polyline(PackedVector2Array(line), Color.BLACK) canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) -func _draw_shape(origin: Vector2, dest: Vector2) -> void: +func _draw_shape(origin: Vector2i, dest: Vector2i) -> void: var rect := _get_result_rect(origin, dest) var points := _get_points(rect.size) prepare_undo("Draw Shape") @@ -176,48 +178,48 @@ func _draw_shape(origin: Vector2, dest: Vector2) -> void: # Reset drawer every time because pixel perfect sometimes breaks the tool _drawer.reset() # Draw each point offsetted based on the shape's thickness - draw_tool(rect.position + point - Vector2(0.5, 0.5) * (_thickness - 1)) + draw_tool(rect.position + point - Vector2i((Vector2(0.5, 0.5) * (_thickness - 1)).ceil())) commit_undo() -# Given an origin point and destination point, returns a rect representing -# where the shape will be drawn and what is its size -func _get_result_rect(origin: Vector2, dest: Vector2) -> Rect2: - var rect := Rect2() +## Given an origin point and destination point, returns a rect representing +## where the shape will be drawn and what is its size +func _get_result_rect(origin: Vector2i, dest: Vector2i) -> Rect2i: + var rect := Rect2i() # Center the rect on the mouse if Input.is_action_pressed("shape_center"): - var new_size := (dest - origin).floor() + var new_size := dest - origin # Make rect 1:1 while centering it on the mouse if Input.is_action_pressed("shape_perfect"): - var square_size := max(abs(new_size.x), abs(new_size.y)) - new_size = Vector2(square_size, square_size) + var square_size := maxi(absi(new_size.x), absi(new_size.y)) + new_size = Vector2i(square_size, square_size) origin -= new_size dest = origin + 2 * new_size # Make rect 1:1 while not trying to center it if Input.is_action_pressed("shape_perfect"): - var square_size := min(abs(origin.x - dest.x), abs(origin.y - dest.y)) + var square_size := mini(absi(origin.x - dest.x), absi(origin.y - dest.y)) rect.position.x = origin.x if origin.x < dest.x else origin.x - square_size rect.position.y = origin.y if origin.y < dest.y else origin.y - square_size - rect.size = Vector2(square_size, square_size) + rect.size = Vector2i(square_size, square_size) # Get the rect without any modifications else: - rect.position = Vector2(min(origin.x, dest.x), min(origin.y, dest.y)) + rect.position = Vector2i(mini(origin.x, dest.x), mini(origin.y, dest.y)) rect.size = (origin - dest).abs() - rect.size += Vector2.ONE + rect.size += Vector2i.ONE return rect -func _get_points(size: Vector2) -> PoolVector2Array: - return _get_shape_points_filled(size) if _fill else _get_shape_points(size) +func _get_points(shape_size: Vector2i) -> Array[Vector2i]: + return _get_shape_points_filled(shape_size) if _fill else _get_shape_points(shape_size) -func _set_cursor_text(rect: Rect2) -> void: +func _set_cursor_text(rect: Rect2i) -> void: cursor_text = "%s, %s" % [rect.position.x, rect.position.y] cursor_text += " -> %s, %s" % [rect.end.x - 1, rect.end.y - 1] cursor_text += " (%s, %s)" % [rect.size.x, rect.size.y] diff --git a/src/Tools/ShapeDrawer.tscn b/src/Tools/ShapeDrawer.tscn index f75a7e35e63..1b9720845b2 100644 --- a/src/Tools/ShapeDrawer.tscn +++ b/src/Tools/ShapeDrawer.tscn @@ -1,16 +1,16 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://n40lhf8hm7o1"] -[ext_resource path="res://src/Tools/ShapeDrawer.gd" type="Script" id=1] -[ext_resource path="res://src/Tools/Draw.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3] +[ext_resource type="Script" path="res://src/Tools/ShapeDrawer.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/Draw.tscn" id="2"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[node name="ToolOptions" instance=ExtResource( 2 )] -script = ExtResource( 1 ) +[node name="ToolOptions" instance=ExtResource("2")] +script = ExtResource("1") -[node name="ThicknessSlider" parent="." index="2" instance=ExtResource( 3 )] -margin_top = 26.0 -margin_right = 116.0 -margin_bottom = 50.0 +[node name="ThicknessSlider" parent="." index="2" instance=ExtResource("3")] +layout_mode = 2 +focus_mode = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 value = 1.0 prefix = "Size:" @@ -18,19 +18,13 @@ suffix = "px" is_global = true [node name="FillCheckbox" type="CheckBox" parent="." index="3"] -margin_top = 54.0 -margin_right = 116.0 -margin_bottom = 78.0 -hint_tooltip = "Fills the drawn shape with color, instead of drawing a hollow shape" +layout_mode = 2 +tooltip_text = "Fills the drawn shape with color, instead of drawing a hollow shape" mouse_default_cursor_shape = 2 -text = "Fill Shape" +text = "Fill Shape3D" [node name="Brush" parent="." index="4"] visible = false -[node name="ColorInterpolation" parent="." index="5"] -margin_top = 66.0 -margin_bottom = 128.0 - [connection signal="value_changed" from="ThicknessSlider" to="." method="_on_Thickness_value_changed"] [connection signal="toggled" from="FillCheckbox" to="." method="_on_FillCheckbox_toggled"] diff --git a/src/Tools/ToolButton.tscn b/src/Tools/ToolButton.tscn index 8aec76f1a83..7b7076bf6af 100644 --- a/src/Tools/ToolButton.tscn +++ b/src/Tools/ToolButton.tscn @@ -1,64 +1,54 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=4 format=3 uid="uid://ddrry0n03t66c"] -[ext_resource path="res://assets/graphics/tools/tool_background.png" type="Texture" id=1] -[ext_resource path="res://assets/graphics/tools/rectselect.png" type="Texture" id=2] +[ext_resource type="Texture2D" uid="uid://cnomk15kl7go0" path="res://assets/graphics/tools/tool_background.png" id="1"] +[ext_resource type="Texture2D" uid="uid://chg3ejelsgcwm" path="res://assets/graphics/tools/rectselect.png" id="2"] +[ext_resource type="Texture2D" uid="uid://4h6t2v7tf6r2" path="res://assets/graphics/tools/tool_background_right.png" id="2_sxm2f"] [node name="Tool" type="Button" groups=["UIButtons"]] -margin_right = 24.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 24, 24 ) -hint_tooltip = "Rectangular Selection +custom_minimum_size = Vector2(24, 24) +offset_right = 24.0 +offset_bottom = 24.0 +tooltip_text = "Rectangular Selection %s for left mouse button %s for right mouse button" mouse_default_cursor_shape = 2 button_mask = 3 -__meta__ = { -"_edit_use_anchors_": false -} [node name="BackgroundLeft" type="NinePatchRect" parent="."] -visible = false +layout_mode = 1 +anchors_preset = -1 +anchor_right = 0.5 anchor_bottom = 1.0 -margin_right = 12.0 -texture = ExtResource( 1 ) -region_rect = Rect2( 0, 0, 11, 24 ) +grow_vertical = 2 +texture = ExtResource("1") +region_rect = Rect2(0, 0, 11, 24) patch_margin_left = 2 patch_margin_top = 1 patch_margin_right = 10 patch_margin_bottom = 1 -__meta__ = { -"_edit_use_anchors_": false -} [node name="BackgroundRight" type="NinePatchRect" parent="."] -visible = false +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 24.0 -margin_top = 24.0 -margin_right = 36.0 -margin_bottom = 24.0 -rect_rotation = 180.0 -texture = ExtResource( 1 ) -region_rect = Rect2( 0, 0, 11, 24 ) -patch_margin_left = 2 +texture = ExtResource("2_sxm2f") +patch_margin_left = 11 patch_margin_top = 1 -patch_margin_right = 10 +patch_margin_right = 1 patch_margin_bottom = 1 -__meta__ = { -"_edit_use_anchors_": false -} [node name="ToolIcon" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 -texture = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 +texture = ExtResource("2") diff --git a/src/Tools/Zoom.gd b/src/Tools/Zoom.gd index e1db1cfed2a..fda2cb90c91 100644 --- a/src/Tools/Zoom.gd +++ b/src/Tools/Zoom.gd @@ -47,14 +47,12 @@ func update_config() -> void: $ModeOptions.selected = _zoom_mode -func draw_start(position: Vector2) -> void: - .draw_start(position) +func draw_start(pos: Vector2i) -> void: + super.draw_start(pos) var mouse_pos := get_global_mouse_position() - var viewport_rect := Rect2( - Global.main_viewport.rect_global_position, Global.main_viewport.rect_size - ) + var viewport_rect := Rect2(Global.main_viewport.global_position, Global.main_viewport.size) var viewport_rect_2 := Rect2( - Global.second_viewport.rect_global_position, Global.second_viewport.rect_size + Global.second_viewport.global_position, Global.second_viewport.size ) if viewport_rect.has_point(mouse_pos): @@ -63,10 +61,10 @@ func draw_start(position: Vector2) -> void: Global.camera2.zoom_camera(_zoom_mode * 2 - 1) -func draw_move(position: Vector2) -> void: - .draw_move(position) +func draw_move(pos: Vector2i) -> void: + super.draw_move(pos) Global.camera.zoom_camera(-_relative.x / 3) -func draw_end(position: Vector2) -> void: - .draw_end(position) +func draw_end(pos: Vector2i) -> void: + super.draw_end(pos) diff --git a/src/Tools/Zoom.tscn b/src/Tools/Zoom.tscn index 6ae37b4df9d..b0bdc9e5e3b 100644 --- a/src/Tools/Zoom.tscn +++ b/src/Tools/Zoom.tscn @@ -1,48 +1,40 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://qyxbkvju2fbb"] -[ext_resource path="res://src/Tools/BaseTool.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Tools/Zoom.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://ctfgfelg0sho8" path="res://src/Tools/BaseTool.tscn" id="1"] +[ext_resource type="Script" path="res://src/Tools/Zoom.gd" id="2"] -[node name="ToolOptions" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="ToolOptions" instance=ExtResource("1")] +script = ExtResource("2") [node name="Mode" type="Label" parent="." index="2"] -margin_top = 26.0 -margin_right = 116.0 -margin_bottom = 40.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Mode:" [node name="ModeOptions" type="OptionButton" parent="." index="3"] -margin_top = 44.0 -margin_right = 116.0 -margin_bottom = 64.0 -rect_min_size = Vector2( 92, 0 ) +custom_minimum_size = Vector2(92, 0) +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "Zoom in" -items = [ "Zoom in", null, false, 0, null, "Zoom out", null, false, 1, null ] -selected = 0 +item_count = 2 +popup/item_0/text = "Zoom in" +popup/item_0/id = 0 +popup/item_1/text = "Zoom out" +popup/item_1/id = 1 [node name="Options" type="Label" parent="." index="4"] -margin_top = 68.0 -margin_right = 116.0 -margin_bottom = 82.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Options:" [node name="FitToFrame" type="Button" parent="." index="5"] -margin_top = 86.0 -margin_right = 116.0 -margin_bottom = 106.0 -rect_min_size = Vector2( 92, 0 ) +custom_minimum_size = Vector2(92, 0) +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Fit to frame" [node name="100%" type="Button" parent="." index="6"] -margin_top = 110.0 -margin_right = 116.0 -margin_bottom = 130.0 -rect_min_size = Vector2( 92, 0 ) +custom_minimum_size = Vector2(92, 0) +layout_mode = 2 mouse_default_cursor_shape = 2 text = "100% Zoom" diff --git a/src/UI/Buttons/BrushButton.gd b/src/UI/Buttons/BrushButton.gd index 4462d722998..951e4d41abd 100644 --- a/src/UI/Buttons/BrushButton.gd +++ b/src/UI/Buttons/BrushButton.gd @@ -3,10 +3,6 @@ extends BaseButton var brush = Global.brushes_popup.Brush.new() -func _ready(): - $TransparentChecker.fit_rect($BrushTexture.get_rect()) - - func _on_BrushButton_pressed() -> void: # Delete the brush on middle mouse press if Input.is_action_just_released("middle_mouse"): diff --git a/src/UI/Buttons/BrushButton.tscn b/src/UI/Buttons/BrushButton.tscn index dd262292390..4df757891b1 100644 --- a/src/UI/Buttons/BrushButton.tscn +++ b/src/UI/Buttons/BrushButton.tscn @@ -1,47 +1,47 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://ckg78y8l0rmf3"] -[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Buttons/BrushButton.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="1"] +[ext_resource type="Script" path="res://src/UI/Buttons/BrushButton.gd" id="2"] [node name="BrushButton" type="Button"] -margin_right = 36.0 -margin_bottom = 36.0 -rect_min_size = Vector2( 36, 36 ) +custom_minimum_size = Vector2(36, 36) +offset_right = 36.0 +offset_bottom = 36.0 button_mask = 7 -script = ExtResource( 2 ) -__meta__ = { -"_editor_description_": "" -} +script = ExtResource("2") -[node name="TransparentChecker" parent="." instance=ExtResource( 1 )] +[node name="BrushTexture" type="TextureRect" parent="."] +custom_minimum_size = Vector2(32, 32) +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 2.0 -margin_top = 2.0 -margin_right = -2.0 -margin_bottom = -2.0 +offset_left = 2.0 +offset_top = 2.0 +offset_right = -2.0 +offset_bottom = -2.0 +expand_mode = 1 +stretch_mode = 6 -[node name="BrushTexture" type="TextureRect" parent="."] +[node name="TransparentChecker" parent="BrushTexture" instance=ExtResource("1")] +show_behind_parent = true +layout_mode = 1 +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 2.0 -margin_top = 2.0 -margin_right = -2.0 -margin_bottom = -2.0 -rect_min_size = Vector2( 32, 32 ) -expand = true -stretch_mode = 6 +grow_horizontal = 2 +grow_vertical = 2 [node name="DeleteButton" type="Button" parent="."] visible = false -modulate = Color( 1, 0.00392157, 0.00392157, 0.878431 ) +modulate = Color(1, 0.00392157, 0.00392157, 0.878431) +layout_mode = 0 anchor_left = 1.0 anchor_right = 1.0 -margin_left = -12.0 -margin_top = 2.0 -margin_right = 8.0 -margin_bottom = 22.0 -rect_scale = Vector2( 0.5, 0.5 ) +offset_left = -12.0 +offset_top = 2.0 +offset_right = 8.0 +offset_bottom = 22.0 +scale = Vector2(0.5, 0.5) text = "X" [connection signal="mouse_entered" from="." to="." method="_on_BrushButton_mouse_entered"] diff --git a/src/UI/Buttons/BrushesPopup.gd b/src/UI/Buttons/BrushesPopup.gd index ad1d844aee9..426f5710b1e 100644 --- a/src/UI/Buttons/BrushesPopup.gd +++ b/src/UI/Buttons/BrushesPopup.gd @@ -19,27 +19,27 @@ class Brush: func _ready() -> void: var container = get_node("Background/Brushes/Categories/DefaultBrushContainer") - var button := create_button(pixel_image) + var button := Brushes.create_button(pixel_image) button.brush.type = PIXEL - button.hint_tooltip = "Pixel brush" + button.tooltip_text = "Pixel brush" container.add_child(button) button.brush.index = button.get_index() - button = create_button(circle_image) + button = Brushes.create_button(circle_image) button.brush.type = CIRCLE - button.hint_tooltip = "Circle brush" + button.tooltip_text = "Circle brush" container.add_child(button) button.brush.index = button.get_index() - button = create_button(circle_filled_image) + button = Brushes.create_button(circle_filled_image) button.brush.type = FILLED_CIRCLE - button.hint_tooltip = "Filled circle brush" + button.tooltip_text = "Filled circle brush" container.add_child(button) button.brush.index = button.get_index() func select_brush(brush: Brush) -> void: - emit_signal("brush_selected", brush) + brush_selected.emit(brush) hide() @@ -51,9 +51,8 @@ static func get_default_brush() -> Brush: static func create_button(image: Image) -> Node: - var button: BaseButton = preload("res://src/UI/Buttons/BrushButton.tscn").instance() - var tex := ImageTexture.new() - tex.create_from_image(image, 0) + var button: BaseButton = preload("res://src/UI/Buttons/BrushButton.tscn").instantiate() + var tex := ImageTexture.create_from_image(image) button.get_node("BrushTexture").texture = tex button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND return button @@ -64,7 +63,7 @@ static func add_file_brush(images: Array, hint := "") -> void: button.brush.type = FILE if images.size() == 1 else RANDOM_FILE button.brush.image = images[0] button.brush.random = images - button.hint_tooltip = hint + button.tooltip_text = hint var container if button.brush.type == RANDOM_FILE: container = Global.brushes_popup.get_node( @@ -82,7 +81,7 @@ static func add_project_brush(image: Image, hint := "") -> void: var button := create_button(image) button.brush.type = CUSTOM button.brush.image = image - button.hint_tooltip = hint + button.tooltip_text = hint var container = Global.brushes_popup.get_node( "Background/Brushes/Categories/ProjectBrushContainer" ) @@ -98,7 +97,7 @@ static func clear_project_brush() -> void: ) for child in container.get_children(): child.queue_free() - Global.brushes_popup.emit_signal("brush_removed", child.brush) + Global.brushes_popup.brush_removed.emit(child.brush) func get_brush(type: int, index: int) -> Brush: @@ -111,16 +110,16 @@ func get_brush(type: int, index: int) -> Brush: RANDOM_FILE: container = get_node("Background/Brushes/Categories/RandomFileBrushContainer") - var brush := get_default_brush() + var brush := Brushes.get_default_brush() if index < container.get_child_count(): brush = container.get_child(index).brush return brush func remove_brush(brush_button: Node) -> void: - emit_signal("brush_removed", brush_button.brush) + brush_removed.emit(brush_button.brush) - var project = Global.current_project + var project := Global.current_project var undo_brushes: Array = project.brushes.duplicate() project.brushes.erase(brush_button.brush.image) @@ -135,15 +134,15 @@ func remove_brush(brush_button: Node) -> void: project.undo_redo.create_action("Delete Custom Brush") project.undo_redo.add_do_property(project, "brushes", project.brushes) project.undo_redo.add_undo_property(project, "brushes", undo_brushes) - project.undo_redo.add_do_method(self, "redo_custom_brush", brush_button) - project.undo_redo.add_undo_method(self, "undo_custom_brush", brush_button) + project.undo_redo.add_do_method(redo_custom_brush.bind(brush_button)) + project.undo_redo.add_undo_method(undo_custom_brush.bind(brush_button)) project.undo_redo.add_undo_reference(brush_button) project.undo_redo.commit_action() func undo_custom_brush(brush_button: BaseButton = null) -> void: Global.general_undo() - var action_name: String = Global.current_project.undo_redo.get_current_action_name() + var action_name := Global.current_project.undo_redo.get_current_action_name() if action_name == "Delete Custom Brush": $Background/Brushes/Categories/ProjectBrushContainer.add_child(brush_button) $Background/Brushes/Categories/ProjectBrushContainer.move_child( @@ -154,6 +153,6 @@ func undo_custom_brush(brush_button: BaseButton = null) -> void: func redo_custom_brush(brush_button: BaseButton = null) -> void: Global.general_redo() - var action_name: String = Global.current_project.undo_redo.get_current_action_name() + var action_name := Global.current_project.undo_redo.get_current_action_name() if action_name == "Delete Custom Brush": $Background/Brushes/Categories/ProjectBrushContainer.remove_child(brush_button) diff --git a/src/UI/Buttons/BrushesPopup.tscn b/src/UI/Buttons/BrushesPopup.tscn index 6dbc887dd01..878a2d174b5 100644 --- a/src/UI/Buttons/BrushesPopup.tscn +++ b/src/UI/Buttons/BrushesPopup.tscn @@ -1,100 +1,79 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://c5x85ysdouh4t"] -[ext_resource path="res://src/UI/Buttons/BrushesPopup.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/UI/Buttons/BrushesPopup.gd" id="1"] [node name="BrushesPopup" type="Popup"] -margin_right = 183.0 -margin_bottom = 271.0 -rect_min_size = Vector2( 0, 144 ) -script = ExtResource( 1 ) +canvas_item_default_texture_filter = 0 +script = ExtResource("1") [node name="Background" type="PanelContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 [node name="Brushes" type="ScrollContainer" parent="Background"] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 176.0 -margin_bottom = 264.0 -rect_min_size = Vector2( 0, 36 ) +custom_minimum_size = Vector2(0, 36) +layout_mode = 2 size_flags_horizontal = 3 -scroll_horizontal_enabled = false [node name="Categories" type="VBoxContainer" parent="Background/Brushes"] -margin_right = 169.0 -margin_bottom = 257.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="Label" type="Label" parent="Background/Brushes/Categories"] -margin_right = 169.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Default Brushes" -autowrap = true [node name="HSeparator" type="HSeparator" parent="Background/Brushes/Categories/Label"] +layout_mode = 0 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_top = -4.0 +offset_top = -4.0 [node name="DefaultBrushContainer" type="GridContainer" parent="Background/Brushes/Categories"] -margin_top = 18.0 -margin_right = 169.0 -margin_bottom = 18.0 +layout_mode = 2 [node name="ProjectLabel" type="Label" parent="Background/Brushes/Categories"] visible = false -margin_top = 56.0 -margin_right = 49.0 -margin_bottom = 104.0 +layout_mode = 2 text = "Project Brushes" -autowrap = true [node name="HSeparator" type="HSeparator" parent="Background/Brushes/Categories/ProjectLabel"] +layout_mode = 0 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_top = -4.0 +offset_top = -4.0 [node name="ProjectBrushContainer" type="GridContainer" parent="Background/Brushes/Categories"] -margin_top = 22.0 -margin_right = 169.0 -margin_bottom = 22.0 +layout_mode = 2 [node name="FileLabel" type="Label" parent="Background/Brushes/Categories"] -margin_top = 26.0 -margin_right = 169.0 -margin_bottom = 40.0 +layout_mode = 2 text = "File Brushes" -autowrap = true [node name="HSeparator" type="HSeparator" parent="Background/Brushes/Categories/FileLabel"] +layout_mode = 0 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_top = -4.0 +offset_top = -4.0 [node name="FileBrushContainer" type="GridContainer" parent="Background/Brushes/Categories"] -margin_top = 44.0 -margin_right = 169.0 -margin_bottom = 44.0 +layout_mode = 2 [node name="RandomFileLabel" type="Label" parent="Background/Brushes/Categories"] -margin_top = 48.0 -margin_right = 169.0 -margin_bottom = 62.0 +layout_mode = 2 text = "Random File Brushes" -autowrap = true [node name="HSeparator" type="HSeparator" parent="Background/Brushes/Categories/RandomFileLabel"] +layout_mode = 0 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_top = -4.0 +offset_top = -4.0 [node name="RandomFileBrushContainer" type="GridContainer" parent="Background/Brushes/Categories"] -margin_top = 66.0 -margin_right = 169.0 -margin_bottom = 66.0 +layout_mode = 2 diff --git a/src/UI/Buttons/PatternButton.tscn b/src/UI/Buttons/PatternButton.tscn index 6825b656bd0..5b3550209fd 100644 --- a/src/UI/Buttons/PatternButton.tscn +++ b/src/UI/Buttons/PatternButton.tscn @@ -21,21 +21,21 @@ corner_radius_bottom_left = 5 anti_aliasing = false [node name="PatternButton" type="Button"] -margin_right = 32.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -custom_styles/hover = SubResource( 2 ) -custom_styles/pressed = SubResource( 2 ) -custom_styles/focus = SubResource( 1 ) -custom_styles/disabled = SubResource( 1 ) -custom_styles/normal = SubResource( 2 ) +offset_right = 32.0 +offset_bottom = 32.0 +custom_minimum_size = Vector2( 32, 32 ) +theme_override_styles/hover = SubResource( 2 ) +theme_override_styles/pressed = SubResource( 2 ) +theme_override_styles/focus = SubResource( 1 ) +theme_override_styles/disabled = SubResource( 1 ) +theme_override_styles/normal = SubResource( 2 ) button_mask = 7 script = ExtResource( 2 ) [node name="PatternTexture" type="TextureRect" parent="."] -margin_right = 32.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) +offset_right = 32.0 +offset_bottom = 32.0 +custom_minimum_size = Vector2( 32, 32 ) expand = true stretch_mode = 6 __meta__ = { diff --git a/src/UI/Buttons/PatternsPopup.gd b/src/UI/Buttons/PatternsPopup.gd index 6b5f366be9d..51f59612d43 100644 --- a/src/UI/Buttons/PatternsPopup.gd +++ b/src/UI/Buttons/PatternsPopup.gd @@ -16,15 +16,15 @@ func _ready() -> void: func select_pattern(pattern: Pattern) -> void: - emit_signal("pattern_selected", pattern) + pattern_selected.emit(pattern) hide() func create_button(image: Image) -> Node: - var button: BaseButton = preload("res://src/UI/Buttons/PatternButton.tscn").instance() - var tex := ImageTexture.new() + var button: BaseButton = preload("res://src/UI/Buttons/PatternButton.tscn").instantiate() + var tex: ImageTexture if !image.is_empty(): - tex.create_from_image(image, 0) + tex = ImageTexture.create_from_image(image) button.get_child(0).texture = tex button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND return button @@ -33,7 +33,7 @@ func create_button(image: Image) -> Node: func add(image: Image, hint := "") -> void: var button = create_button(image) button.pattern.image = image - button.hint_tooltip = hint + button.tooltip_text = hint var container = get_node("ScrollContainer/PatternContainer") container.add_child(button) button.pattern.index = button.get_index() diff --git a/src/UI/Buttons/PatternsPopup.tscn b/src/UI/Buttons/PatternsPopup.tscn index 7bde3f996e8..b229a3a061c 100644 --- a/src/UI/Buttons/PatternsPopup.tscn +++ b/src/UI/Buttons/PatternsPopup.tscn @@ -1,25 +1,22 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://d1jyt8wleg8ft"] -[ext_resource path="res://src/UI/Buttons/PatternsPopup.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/UI/Buttons/PatternsPopup.gd" id="1"] [node name="PatternsPopup" type="PopupPanel"] -margin_right = 226.0 -margin_bottom = 104.0 -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +canvas_item_default_texture_filter = 0 +script = ExtResource("1") [node name="ScrollContainer" type="ScrollContainer" parent="."] +custom_minimum_size = Vector2(0, 36) +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 4.0 -margin_top = 4.0 -margin_right = -4.0 -margin_bottom = -4.0 -rect_min_size = Vector2( 0, 36 ) +offset_left = 4.0 +offset_top = 4.0 +offset_right = -4.0 +offset_bottom = -4.0 size_flags_horizontal = 3 -scroll_horizontal_enabled = false [node name="PatternContainer" type="GridContainer" parent="ScrollContainer"] +layout_mode = 2 columns = 6 diff --git a/src/UI/Canvas/CameraMovement.gd b/src/UI/Canvas/CameraMovement.gd index eb4f4224d95..04794ca2d47 100644 --- a/src/UI/Canvas/CameraMovement.gd +++ b/src/UI/Canvas/CameraMovement.gd @@ -7,11 +7,11 @@ enum Cameras { MAIN, SECOND, SMALL } const CAMERA_SPEED_RATE := 15.0 -export(Cameras) var index := 0 +@export var index := 0 -var zoom_min := Vector2(0.005, 0.005) -var zoom_max := Vector2.ONE -var viewport_container: ViewportContainer +var zoom_in_max := Vector2(500, 500) +var zoom_out_max := Vector2(0.01, 0.01) +var viewport_container: SubViewportContainer var transparent_checker: ColorRect var mouse_pos := Vector2.ZERO var drag := false @@ -24,46 +24,40 @@ func _ready() -> void: set_process_input(false) if index == Cameras.MAIN: rotation_slider = Global.top_menu_container.get_node("%RotationSlider") - rotation_slider.connect("value_changed", self, "_rotation_value_changed") + rotation_slider.value_changed.connect(_rotation_value_changed) zoom_slider = Global.top_menu_container.get_node("%ZoomSlider") - zoom_slider.connect("value_changed", self, "_zoom_value_changed") - set_zoom_max_value() - connect("zoom_changed", self, "_zoom_changed") - connect("rotation_changed", self, "_rotation_changed") - rotating = true + zoom_slider.value_changed.connect(_zoom_value_changed) + zoom_changed.connect(_zoom_changed) + rotation_changed.connect(_rotation_changed) + ignore_rotation = false viewport_container = get_parent().get_parent() transparent_checker = get_parent().get_node("TransparentChecker") update_transparent_checker_offset() -func set_zoom_max_value() -> void: - zoom_slider.max_value = 100.0 / zoom_min.x - - func _rotation_value_changed(value: float) -> void: # Negative makes going up rotate clockwise var degrees := -value var difference := degrees - rotation_degrees var canvas_center: Vector2 = Global.current_project.size / 2 - offset = (offset - canvas_center).rotated(deg2rad(difference)) + canvas_center + offset = (offset - canvas_center).rotated(deg_to_rad(difference)) + canvas_center rotation_degrees = wrapf(degrees, -180, 180) - emit_signal("rotation_changed") + rotation_changed.emit() func _zoom_value_changed(value: float) -> void: if value <= 0: value = 1 - var percent := 100.0 / value - var new_zoom := Vector2(percent, percent) + var new_zoom := Vector2(value, value) / 100.0 if zoom == new_zoom: return if Global.smooth_zoom and should_tween: var tween := create_tween().set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_IN) - tween.connect("step_finished", self, "_on_tween_step") + tween.step_finished.connect(_on_tween_step) tween.tween_property(self, "zoom", new_zoom, 0.05) else: zoom = new_zoom - emit_signal("zoom_changed") + zoom_changed.emit() func update_transparent_checker_offset() -> void: @@ -83,9 +77,9 @@ func _input(event: InputEvent) -> void: elif event.is_action_released("pan"): drag = false elif event.is_action_pressed("zoom_in", false, true): # Wheel Up Event - zoom_camera(-1) - elif event.is_action_pressed("zoom_out", false, true): # Wheel Down Event zoom_camera(1) + elif event.is_action_pressed("zoom_out", false, true): # Wheel Down Event + zoom_camera(-1) elif event is InputEventMagnifyGesture: # Zoom Gesture on a laptop touchpad if event.factor < 1: @@ -94,16 +88,16 @@ func _input(event: InputEvent) -> void: zoom_camera(-1) elif event is InputEventPanGesture and OS.get_name() != "Android": # Pan Gesture on a laptop touchpad - offset = offset + event.delta.rotated(rotation) * zoom * 7 + offset = offset + event.delta.rotated(rotation) * 7.0 / zoom elif event is InputEventMouseMotion: if drag: - offset = offset - event.relative.rotated(rotation) * zoom + offset = offset - event.relative.rotated(rotation) / zoom update_transparent_checker_offset() _update_rulers() else: var velocity := Input.get_vector("camera_left", "camera_right", "camera_up", "camera_down") if velocity != Vector2.ZERO and !_has_selection_tool(): - offset += velocity.rotated(rotation) * zoom * CAMERA_SPEED_RATE + offset += (velocity.rotated(rotation) / zoom) * CAMERA_SPEED_RATE _update_rulers() save_values_to_project() @@ -118,9 +112,9 @@ func _has_selection_tool() -> bool: # Rotate Camera func _rotate_camera_around_point(degrees: float, point: Vector2) -> void: - offset = (offset - point).rotated(deg2rad(degrees)) + point + offset = (offset - point).rotated(deg_to_rad(degrees)) + point rotation_degrees = wrapf(rotation_degrees + degrees, -180, 180) - emit_signal("rotation_changed") + rotation_changed.emit() func _rotation_changed() -> void: @@ -131,68 +125,69 @@ func _rotation_changed() -> void: _update_rulers() -# Zoom Camera func zoom_camera(dir: int) -> void: - var viewport_size := viewport_container.rect_size + var viewport_size := viewport_container.size if Global.smooth_zoom: var zoom_margin := zoom * dir / 5 var new_zoom := zoom + zoom_margin if Global.integer_zoom: - new_zoom = zoom / (Vector2.ONE - dir * zoom) - if new_zoom == Vector2.INF: - return - if new_zoom > zoom_min && new_zoom <= zoom_max: + new_zoom = (zoom + Vector2.ONE * dir).floor() + if new_zoom < zoom_in_max && new_zoom > zoom_out_max: var new_offset := ( offset - + (-0.5 * viewport_size + mouse_pos).rotated(rotation) * (zoom - new_zoom) + + ( + (-0.5 * viewport_size + mouse_pos).rotated(rotation) + * (Vector2.ONE / zoom - Vector2.ONE / new_zoom) + ) ) var tween := create_tween().set_parallel() tween.set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_IN) - tween.connect("step_finished", self, "_on_tween_step") + tween.step_finished.connect(_on_tween_step) tween.tween_property(self, "zoom", new_zoom, 0.05) tween.tween_property(self, "offset", new_offset, 0.05) else: var prev_zoom := zoom var zoom_margin := zoom * dir / 10 if Global.integer_zoom: - zoom_margin = (zoom / (Vector2.ONE - dir * zoom)) - zoom - if zoom_margin == Vector2.INF: - return - if zoom + zoom_margin > zoom_min: + zoom_margin = (Vector2.ONE * dir).floor() + if zoom + zoom_margin < zoom_in_max: zoom += zoom_margin - if zoom > zoom_max: - zoom = zoom_max - offset = offset + (-0.5 * viewport_size + mouse_pos).rotated(rotation) * (prev_zoom - zoom) - emit_signal("zoom_changed") + if zoom < zoom_out_max: + zoom = zoom_out_max + offset = ( + offset + + ( + (-0.5 * viewport_size + mouse_pos).rotated(rotation) + * (Vector2.ONE / prev_zoom - Vector2.ONE / zoom) + ) + ) + zoom_changed.emit() func _zoom_changed() -> void: update_transparent_checker_offset() if index == Cameras.MAIN: - zoom_slider.value = round(100 / zoom.x) + zoom_slider.value = zoom.x * 100.0 _update_rulers() for guide in Global.current_project.guides: - guide.width = zoom.x * 2 - - elif index == Cameras.SMALL: - Global.preview_zoom_slider.value = -zoom.x + guide.width = 1.0 / zoom.x * 2 func _update_rulers() -> void: - Global.horizontal_ruler.update() - Global.vertical_ruler.update() + Global.horizontal_ruler.queue_redraw() + Global.vertical_ruler.queue_redraw() func _on_tween_step(_idx: int) -> void: should_tween = false - emit_signal("zoom_changed") + zoom_changed.emit() should_tween = true func zoom_100() -> void: zoom = Vector2.ONE offset = Global.current_project.size / 2 - emit_signal("zoom_changed") + zoom_changed.emit() func fit_to_frame(size: Vector2) -> void: @@ -211,29 +206,29 @@ func fit_to_frame(size: Vector2) -> void: var d := Vector2(size.x, size.y).rotated(rotation) # Bottom right # Find how far apart each opposite point is on each axis, and take the longer one - size.x = max(abs(a.x - d.x), abs(b.x - c.x)) - size.y = max(abs(a.y - d.y), abs(b.y - c.y)) + size.x = maxf(absf(a.x - d.x), absf(b.x - c.x)) + size.y = maxf(absf(a.y - d.y), absf(b.y - c.y)) viewport_container = get_parent().get_parent() - var h_ratio := viewport_container.rect_size.x / size.x - var v_ratio := viewport_container.rect_size.y / size.y - var ratio := min(h_ratio, v_ratio) + var h_ratio := viewport_container.size.x / size.x + var v_ratio := viewport_container.size.y / size.y + var ratio := minf(h_ratio, v_ratio) if ratio == 0 or !viewport_container.visible: ratio = 0.1 # Set it to a non-zero value just in case # If the ratio is 0, it means that the viewport container is hidden # in that case, use the other viewport to get the ratio if index == Cameras.MAIN: - h_ratio = Global.second_viewport.rect_size.x / size.x - v_ratio = Global.second_viewport.rect_size.y / size.y - ratio = min(h_ratio, v_ratio) + h_ratio = Global.second_viewport.size.x / size.x + v_ratio = Global.second_viewport.size.y / size.y + ratio = minf(h_ratio, v_ratio) elif index == Cameras.SECOND: - h_ratio = Global.main_viewport.rect_size.x / size.x - v_ratio = Global.main_viewport.rect_size.y / size.y - ratio = min(h_ratio, v_ratio) + h_ratio = Global.main_viewport.size.x / size.x + v_ratio = Global.main_viewport.size.y / size.y + ratio = minf(h_ratio, v_ratio) - ratio = clamp(ratio, 0.1, ratio) - zoom = Vector2(1 / ratio, 1 / ratio) - emit_signal("zoom_changed") + ratio = clampf(ratio, 0.1, ratio) + zoom = Vector2(ratio, ratio) + zoom_changed.emit() if reset_integer_zoom: Global.integer_zoom = !Global.integer_zoom @@ -242,4 +237,3 @@ func save_values_to_project() -> void: Global.current_project.cameras_rotation[index] = rotation Global.current_project.cameras_zoom[index] = zoom Global.current_project.cameras_offset[index] = offset - Global.current_project.cameras_zoom_max[index] = zoom_max diff --git a/src/UI/Canvas/Canvas.gd b/src/UI/Canvas/Canvas.gd index 3abc210f5cf..207fd3cd0cd 100644 --- a/src/UI/Canvas/Canvas.gd +++ b/src/UI/Canvas/Canvas.gd @@ -5,35 +5,38 @@ const MOVE_ACTIONS := ["move_mouse_left", "move_mouse_right", "move_mouse_up", " const CURSOR_SPEED_RATE := 6.0 var current_pixel := Vector2.ZERO -var sprite_changed_this_frame := false # For optimization purposes +var sprite_changed_this_frame := false ## For optimization purposes var move_preview_location := Vector2.ZERO -onready var currently_visible_frame: Viewport = $CurrentlyVisibleFrame -onready var current_frame_drawer = $CurrentlyVisibleFrame/CurrentFrameDrawer -onready var tile_mode = $TileMode -onready var pixel_grid = $PixelGrid -onready var grid = $Grid -onready var selection = $Selection -onready var onion_past := $OnionPast as Node2D -onready var onion_future := $OnionFuture as Node2D -onready var crop_rect := $CropRect as CropRect -onready var indicators = $Indicators -onready var previews = $Previews -onready var mouse_guide_container = $MouseGuideContainer -onready var gizmos_3d: Node2D = $Gizmos3D +@onready var currently_visible_frame := $CurrentlyVisibleFrame as SubViewport +@onready var current_frame_drawer := $CurrentlyVisibleFrame/CurrentFrameDrawer as Node2D +@onready var tile_mode := $TileMode as Node2D +@onready var pixel_grid := $PixelGrid as Node2D +@onready var grid := $Grid as Node2D +@onready var selection := $Selection as Node2D +@onready var onion_past := $OnionPast as Node2D +@onready var onion_future := $OnionFuture as Node2D +@onready var crop_rect := $CropRect as CropRect +@onready var indicators := $Indicators as Node2D +@onready var previews := $Previews as Node2D +@onready var mouse_guide_container := $MouseGuideContainer as Node2D +@onready var gizmos_3d := $Gizmos3D as Node2D func _ready() -> void: + Global.project_changed.connect(queue_redraw) onion_past.type = onion_past.PAST onion_past.blue_red_color = Global.onion_skinning_past_color onion_future.type = onion_future.FUTURE onion_future.blue_red_color = Global.onion_skinning_future_color - yield(get_tree(), "idle_frame") + await get_tree().process_frame camera_zoom() func _draw() -> void: - var current_cels: Array = Global.current_project.frames[Global.current_project.current_frame].cels + var current_cels: Array = ( + Global.current_project.frames[Global.current_project.current_frame].cels + ) var position_tmp := position var scale_tmp := scale if Global.mirror_view: @@ -60,9 +63,9 @@ func _draw() -> void: if Global.onion_skinning: refresh_onion() currently_visible_frame.size = Global.current_project.size - current_frame_drawer.update() + current_frame_drawer.queue_redraw() if Global.current_project.tiles.mode != Tiles.MODE.NONE: - tile_mode.update() + tile_mode.queue_redraw() draw_set_transform(position, rotation, scale) @@ -94,38 +97,25 @@ func _input(event: InputEvent) -> void: current_pixel = tmp_transform.basis_xform(tmp_position) + tmp_transform.origin if Global.has_focus: - update() + queue_redraw() sprite_changed_this_frame = false - Tools.handle_draw(current_pixel.floor(), event) + Tools.handle_draw(Vector2i(current_pixel.floor()), event) if sprite_changed_this_frame: update_selected_cels_textures() func camera_zoom() -> void: - # Set camera zoom based on the sprite size - var bigger_canvas_axis = max(Global.current_project.size.x, Global.current_project.size.y) - var zoom_max := Vector2(bigger_canvas_axis, bigger_canvas_axis) * 0.01 - for camera in Global.cameras: - if zoom_max > Vector2.ONE: - camera.zoom_max = zoom_max - else: - camera.zoom_max = Vector2.ONE - - if camera == Global.camera_preview: - Global.preview_zoom_slider.max_value = -camera.zoom_min.x - Global.preview_zoom_slider.min_value = -camera.zoom_max.x - camera.fit_to_frame(Global.current_project.size) camera.save_values_to_project() Global.transparent_checker.update_rect() -func update_texture(layer_i: int, frame_i := -1, project: Project = Global.current_project) -> void: +func update_texture(layer_i: int, frame_i := -1, project := Global.current_project) -> void: if frame_i == -1: frame_i = project.current_frame @@ -134,7 +124,7 @@ func update_texture(layer_i: int, frame_i := -1, project: Project = Global.curre current_cel.update_texture() -func update_selected_cels_textures(project: Project = Global.current_project) -> void: +func update_selected_cels_textures(project := Global.current_project) -> void: for cel_index in project.selected_cels: var frame_index: int = cel_index[0] var layer_index: int = cel_index[1] @@ -144,5 +134,5 @@ func update_selected_cels_textures(project: Project = Global.current_project) -> func refresh_onion() -> void: - onion_past.update() - onion_future.update() + onion_past.queue_redraw() + onion_future.queue_redraw() diff --git a/src/UI/Canvas/Canvas.tscn b/src/UI/Canvas/Canvas.tscn index 1fff4a42489..b3b08229c74 100644 --- a/src/UI/Canvas/Canvas.tscn +++ b/src/UI/Canvas/Canvas.tscn @@ -1,86 +1,83 @@ -[gd_scene load_steps=18 format=2] - -[ext_resource path="res://src/UI/Canvas/Canvas.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Canvas/Grid.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Canvas/Indicators.gd" type="Script" id=3] -[ext_resource path="res://src/UI/Canvas/TileMode.gd" type="Script" id=4] -[ext_resource path="res://src/UI/Canvas/CurrentFrameDrawer.gd" type="Script" id=5] -[ext_resource path="res://src/UI/Canvas/PixelGrid.gd" type="Script" id=6] -[ext_resource path="res://src/UI/Canvas/Previews.gd" type="Script" id=7] -[ext_resource path="res://src/UI/Canvas/Selection.gd" type="Script" id=8] -[ext_resource path="res://src/Shaders/MarchingAntsOutline.shader" type="Shader" id=9] -[ext_resource path="res://src/Shaders/AutoInvertColors.shader" type="Shader" id=10] -[ext_resource path="res://src/UI/Canvas/MouseGuideContainer.tscn" type="PackedScene" id=11] -[ext_resource path="res://src/UI/Canvas/OnionSkinning.gd" type="Script" id=12] -[ext_resource path="res://src/UI/Canvas/CropRect.gd" type="Script" id=13] -[ext_resource path="res://src/UI/Canvas/Gizmos3D.gd" type="Script" id=14] - -[sub_resource type="CanvasItemMaterial" id=1] +[gd_scene load_steps=18 format=3 uid="uid://ba24iuv55m4l3"] + +[ext_resource type="Script" path="res://src/UI/Canvas/Canvas.gd" id="1"] +[ext_resource type="Script" path="res://src/UI/Canvas/Grid.gd" id="2"] +[ext_resource type="Script" path="res://src/UI/Canvas/Indicators.gd" id="3"] +[ext_resource type="Script" path="res://src/UI/Canvas/TileMode.gd" id="4"] +[ext_resource type="Script" path="res://src/UI/Canvas/CurrentFrameDrawer.gd" id="5"] +[ext_resource type="Script" path="res://src/UI/Canvas/PixelGrid.gd" id="6"] +[ext_resource type="Script" path="res://src/UI/Canvas/Previews.gd" id="7"] +[ext_resource type="Script" path="res://src/UI/Canvas/Selection.gd" id="8"] +[ext_resource type="Shader" path="res://src/Shaders/MarchingAntsOutline.gdshader" id="9"] +[ext_resource type="Shader" path="res://src/Shaders/AutoInvertColors.gdshader" id="10"] +[ext_resource type="PackedScene" uid="uid://no3w7e2264u4" path="res://src/UI/Canvas/MouseGuideContainer.tscn" id="11"] +[ext_resource type="Script" path="res://src/UI/Canvas/OnionSkinning.gd" id="12"] +[ext_resource type="Script" path="res://src/UI/Canvas/CropRect.gd" id="13"] +[ext_resource type="Script" path="res://src/UI/Canvas/Gizmos3D.gd" id="14"] + +[sub_resource type="CanvasItemMaterial" id="1"] blend_mode = 4 -[sub_resource type="ShaderMaterial" id=2] -shader = ExtResource( 9 ) -shader_param/first_color = Color( 1, 1, 1, 1 ) -shader_param/second_color = Color( 0, 0, 0, 1 ) -shader_param/animated = true -shader_param/width = 0.05 -shader_param/frequency = 200.0 -shader_param/stripe_direction = 0.5 +[sub_resource type="ShaderMaterial" id="2"] +shader = ExtResource("9") +shader_parameter/first_color = Color(1, 1, 1, 1) +shader_parameter/second_color = Color(0, 0, 0, 1) +shader_parameter/animated = true +shader_parameter/width = 0.05 +shader_parameter/frequency = 200.0 +shader_parameter/stripe_direction = 0.5 -[sub_resource type="ShaderMaterial" id=3] -shader = ExtResource( 10 ) +[sub_resource type="ShaderMaterial" id="3"] +shader = ExtResource("10") [node name="Canvas" type="Node2D"] -script = ExtResource( 1 ) +script = ExtResource("1") -[node name="CurrentlyVisibleFrame" type="Viewport" parent="."] +[node name="CurrentlyVisibleFrame" type="SubViewport" parent="."] +disable_3d = true transparent_bg = true handle_input_locally = false -hdr = false -disable_3d = true -usage = 0 -render_target_v_flip = true render_target_update_mode = 3 [node name="CurrentFrameDrawer" type="Node2D" parent="CurrentlyVisibleFrame"] -script = ExtResource( 5 ) +script = ExtResource("5") [node name="TileMode" type="Node2D" parent="."] show_behind_parent = true -material = SubResource( 1 ) -script = ExtResource( 4 ) +material = SubResource("1") +script = ExtResource("4") [node name="PixelGrid" type="Node2D" parent="."] -script = ExtResource( 6 ) +script = ExtResource("6") [node name="Grid" type="Node2D" parent="."] -script = ExtResource( 2 ) +script = ExtResource("2") [node name="Selection" type="Node2D" parent="."] -script = ExtResource( 8 ) +script = ExtResource("8") -[node name="MarchingAntsOutline" type="Sprite" parent="Selection"] -material = SubResource( 2 ) +[node name="MarchingAntsOutline" type="Sprite2D" parent="Selection"] +material = SubResource("2") centered = false [node name="CropRect" type="Node2D" parent="."] visible = false -script = ExtResource( 13 ) +script = ExtResource("13") [node name="Indicators" type="Node2D" parent="."] -script = ExtResource( 3 ) +script = ExtResource("3") [node name="Previews" type="Node2D" parent="."] -material = SubResource( 3 ) -script = ExtResource( 7 ) +material = SubResource("3") +script = ExtResource("7") [node name="OnionPast" type="Node2D" parent="."] -script = ExtResource( 12 ) +script = ExtResource("12") [node name="OnionFuture" type="Node2D" parent="."] -script = ExtResource( 12 ) +script = ExtResource("12") -[node name="MouseGuideContainer" parent="." instance=ExtResource( 11 )] +[node name="MouseGuideContainer" parent="." instance=ExtResource("11")] [node name="Gizmos3D" type="Node2D" parent="."] -script = ExtResource( 14 ) +script = ExtResource("14") diff --git a/src/UI/Canvas/CanvasPreview.gd b/src/UI/Canvas/CanvasPreview.gd index dae97fc07a1..784d7d3e2d2 100644 --- a/src/UI/Canvas/CanvasPreview.gd +++ b/src/UI/Canvas/CanvasPreview.gd @@ -10,30 +10,30 @@ var end_sprite_sheet_frame := 1 var sprite_frames := [] var frame_index := 0 -onready var animation_timer := $AnimationTimer as Timer -onready var transparent_checker = get_parent().get_node("TransparentChecker") as ColorRect +@onready var animation_timer := $AnimationTimer as Timer +@onready var transparent_checker = get_parent().get_node("TransparentChecker") as ColorRect func _ready() -> void: - Global.connect("cel_changed", self, "_cel_changed") + Global.cel_changed.connect(_cel_changed) func _draw() -> void: - var current_project: Project = Global.current_project + var current_project := Global.current_project match mode: Mode.TIMELINE: - var modulate_color := Color.white + var modulate_color := Color.WHITE if frame_index >= current_project.frames.size(): frame_index = current_project.current_frame if animation_timer.is_stopped(): frame_index = current_project.current_frame - var frame: Frame = current_project.frames[frame_index] + var frame := current_project.frames[frame_index] animation_timer.wait_time = frame.duration * (1.0 / current_project.fps) - var current_cels: Array = frame.cels + var current_cels := frame.cels # Draw current frame layers for i in range(current_cels.size()): - var cel: BaseCel = current_cels[i] + var cel := current_cels[i] if cel is GroupCel: continue modulate_color = Color(1, 1, 1, cel.opacity) @@ -45,8 +45,7 @@ func _draw() -> void: Mode.SPRITESHEET: var texture_to_draw: ImageTexture var target_frame: Frame = current_project.frames[current_project.current_frame] - var frame_image := Image.new() - frame_image.create( + var frame_image := Image.create( current_project.size.x, current_project.size.y, false, Image.FORMAT_RGBA8 ) Export.blend_all_layers(frame_image, target_frame) @@ -63,16 +62,16 @@ func _draw() -> void: texture_to_draw = sprite_frames[frame_index] draw_texture(texture_to_draw, Vector2.ZERO) - var rect := Rect2(Vector2.ZERO, texture_to_draw.get_data().get_size()) + var rect := Rect2(Vector2.ZERO, texture_to_draw.get_image().get_size()) transparent_checker.fit_rect(rect) func _on_AnimationTimer_timeout() -> void: match mode: Mode.TIMELINE: - var current_project: Project = Global.current_project + var current_project := Global.current_project var first_frame := 0 - var last_frame: int = current_project.frames.size() - 1 + var last_frame := current_project.frames.size() - 1 if Global.play_only_tags: for tag in current_project.animation_tags: @@ -89,8 +88,7 @@ func _on_AnimationTimer_timeout() -> void: frame_index = first_frame animation_timer.wait_time = ( - current_project.frames[frame_index].duration - * (1.0 / current_project.fps) + current_project.frames[frame_index].duration * (1.0 / current_project.fps) ) Mode.SPRITESHEET: @@ -98,26 +96,25 @@ func _on_AnimationTimer_timeout() -> void: animation_timer.wait_time = (1.0 / Global.current_project.fps) animation_timer.set_one_shot(true) animation_timer.start() - update() + queue_redraw() func _cel_changed() -> void: - update() + queue_redraw() func _split_spritesheet(image: Image, horiz: int, vert: int) -> Array: var result := [] - horiz = min(horiz, image.get_size().x) - vert = min(vert, image.get_size().y) + horiz = mini(horiz, image.get_size().x) + vert = mini(vert, image.get_size().y) var frame_width := image.get_size().x / horiz var frame_height := image.get_size().y / vert for yy in range(vert): for xx in range(horiz): - var tex := ImageTexture.new() var cropped_image := Image.new() var rect := Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height) - cropped_image = image.get_rect(rect) + cropped_image = image.get_region(rect) cropped_image.convert(Image.FORMAT_RGBA8) - tex.create_from_image(cropped_image, 0) + var tex := ImageTexture.create_from_image(cropped_image) result.append(tex) return result diff --git a/src/UI/Canvas/CanvasPreview.tscn b/src/UI/Canvas/CanvasPreview.tscn index 04a302e2c77..f9be17c5a89 100644 --- a/src/UI/Canvas/CanvasPreview.tscn +++ b/src/UI/Canvas/CanvasPreview.tscn @@ -1,9 +1,9 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://c546tskdu53j1"] -[ext_resource path="res://src/UI/Canvas/CanvasPreview.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/UI/Canvas/CanvasPreview.gd" id="1"] [node name="CanvasPreview" type="Node2D"] -script = ExtResource( 1 ) +script = ExtResource("1") [node name="AnimationTimer" type="Timer" parent="."] diff --git a/src/UI/Canvas/CropRect.gd b/src/UI/Canvas/CropRect.gd index ef8954b2255..bc104100d81 100644 --- a/src/UI/Canvas/CropRect.gd +++ b/src/UI/Canvas/CropRect.gd @@ -1,27 +1,34 @@ class_name CropRect extends Node2D -# Draws the rectangle overlay for the crop tool -# Stores the shared settings between left and right crop tools +## Draws the rectangle overlay for the crop tool +## Stores the shared settings between left and right crop tools signal updated enum Mode { MARGINS, POSITION_SIZE } -const BIG = 100000 # Size of big rectangles used to darken background. -const DARKEN_COLOR = Color(0, 0, 0, 0.5) -const LINE_COLOR = Color.white +const BIG := 100000 ## Size of big rectangles used to darken background. +const DARKEN_COLOR := Color(0, 0, 0, 0.5) +const LINE_COLOR := Color.WHITE -var mode: int = Mode.MARGINS setget _set_mode +var mode := Mode.MARGINS: + set(value): + mode = value var locked_size := false -var rect := Rect2(0, 0, 1, 1) +var rect := Rect2i(0, 0, 1, 1) -# How many crop tools are active (0-2), setter makes this visible if not 0 -var tool_count := 0 setget _set_tool_count +## How many crop tools are active (0-2), setter makes this visible if not 0 +var tool_count := 0: + set(value): + if tool_count == 0 and value > 0: + reset() # Reset once 1 tool becomes the crop tool + tool_count = value + visible = tool_count func _ready() -> void: - connect("updated", self, "update") - Global.connect("project_changed", self, "reset") + updated.connect(queue_redraw) + Global.project_changed.connect(reset) mode = Global.config_cache.get_value("preferences", "crop_mode", 0) locked_size = Global.config_cache.get_value("preferences", "crop_locked_size", false) reset() @@ -65,18 +72,4 @@ func apply() -> void: func reset() -> void: rect.position = Vector2.ZERO rect.size = Global.current_project.size - emit_signal("updated") - - -# Setters - - -func _set_mode(value: int) -> void: - mode = value - - -func _set_tool_count(value: int) -> void: - if tool_count == 0 and value > 0: - reset() # Reset once 1 tool becomes the crop tool - tool_count = value - visible = tool_count + updated.emit() diff --git a/src/UI/Canvas/CurrentFrameDrawer.gd b/src/UI/Canvas/CurrentFrameDrawer.gd index 5714f99640d..abb3d839f5d 100644 --- a/src/UI/Canvas/CurrentFrameDrawer.gd +++ b/src/UI/Canvas/CurrentFrameDrawer.gd @@ -2,7 +2,9 @@ extends Node2D func _draw() -> void: - var current_cels: Array = Global.current_project.frames[Global.current_project.current_frame].cels + var current_cels: Array = ( + Global.current_project.frames[Global.current_project.current_frame].cels + ) for i in range(Global.current_project.layers.size()): if current_cels[i] is GroupCel: continue diff --git a/src/UI/Canvas/Gizmos3D.gd b/src/UI/Canvas/Gizmos3D.gd index 0d312ec3078..c04b8daa3ba 100644 --- a/src/UI/Canvas/Gizmos3D.gd +++ b/src/UI/Canvas/Gizmos3D.gd @@ -9,10 +9,10 @@ const SCALE_CIRCLE_LENGTH := 8 const SCALE_CIRCLE_RADIUS := 1 const CHAR_SCALE := 0.16 -var always_visible := {} # Key = Cel3DObject, Value = Texture -var points_per_object := {} # Key = Cel3DObject, Value = PoolVector2Array -var selected_color := Color.white -var hovered_color := Color.gray +var always_visible := {} ## Key = Cel3DObject, Value = Texture2D +var points_per_object := {} ## Key = Cel3DObject, Value = PackedVector2Array +var selected_color := Color.WHITE +var hovered_color := Color.GRAY var gizmos_origin: Vector2 var proj_right_local: Vector2 @@ -22,53 +22,53 @@ var proj_back_local: Vector2 var proj_right_local_scale: Vector2 var proj_up_local_scale: Vector2 var proj_back_local_scale: Vector2 -var gizmo_pos_x := PoolVector2Array() -var gizmo_pos_y := PoolVector2Array() -var gizmo_pos_z := PoolVector2Array() -var gizmo_rot_x := PoolVector2Array() -var gizmo_rot_y := PoolVector2Array() -var gizmo_rot_z := PoolVector2Array() +var gizmo_pos_x := PackedVector2Array() +var gizmo_pos_y := PackedVector2Array() +var gizmo_pos_z := PackedVector2Array() +var gizmo_rot_x := PackedVector2Array() +var gizmo_rot_y := PackedVector2Array() +var gizmo_rot_z := PackedVector2Array() func _ready() -> void: set_process_input(false) - Global.connect("cel_changed", self, "_cel_changed") - Global.camera.connect("zoom_changed", self, "update") + Global.cel_changed.connect(_cel_changed) + Global.camera.zoom_changed.connect(queue_redraw) func get_hovering_gizmo(pos: Vector2) -> int: - var draw_scale := Global.camera.zoom * 10 + var draw_scale := Vector2(10.0, 10.0) / Global.camera.zoom pos -= gizmos_origin # Scale the position based on the zoom, has the same effect as enlarging the shapes pos /= draw_scale # Inflate the rotation polylines by one to make them easier to click - var rot_x_offset: PoolVector2Array = Geometry.offset_polyline_2d(gizmo_rot_x, 1)[0] - var rot_y_offset: PoolVector2Array = Geometry.offset_polyline_2d(gizmo_rot_y, 1)[0] - var rot_z_offset: PoolVector2Array = Geometry.offset_polyline_2d(gizmo_rot_z, 1)[0] + var rot_x_offset := Geometry2D.offset_polyline(gizmo_rot_x, 1)[0] + var rot_y_offset := Geometry2D.offset_polyline(gizmo_rot_y, 1)[0] + var rot_z_offset := Geometry2D.offset_polyline(gizmo_rot_z, 1)[0] - if Geometry.point_is_inside_triangle(pos, gizmo_pos_x[0], gizmo_pos_x[1], gizmo_pos_x[2]): + if Geometry2D.point_is_inside_triangle(pos, gizmo_pos_x[0], gizmo_pos_x[1], gizmo_pos_x[2]): return Cel3DObject.Gizmos.X_POS - elif Geometry.point_is_inside_triangle(pos, gizmo_pos_y[0], gizmo_pos_y[1], gizmo_pos_y[2]): + elif Geometry2D.point_is_inside_triangle(pos, gizmo_pos_y[0], gizmo_pos_y[1], gizmo_pos_y[2]): return Cel3DObject.Gizmos.Y_POS - elif Geometry.point_is_inside_triangle(pos, gizmo_pos_z[0], gizmo_pos_z[1], gizmo_pos_z[2]): + elif Geometry2D.point_is_inside_triangle(pos, gizmo_pos_z[0], gizmo_pos_z[1], gizmo_pos_z[2]): return Cel3DObject.Gizmos.Z_POS - elif Geometry.is_point_in_circle(pos, proj_right_local_scale, SCALE_CIRCLE_RADIUS): + elif Geometry2D.is_point_in_circle(pos, proj_right_local_scale, SCALE_CIRCLE_RADIUS): return Cel3DObject.Gizmos.X_SCALE - elif Geometry.is_point_in_circle(pos, proj_up_local_scale, SCALE_CIRCLE_RADIUS): + elif Geometry2D.is_point_in_circle(pos, proj_up_local_scale, SCALE_CIRCLE_RADIUS): return Cel3DObject.Gizmos.Y_SCALE - elif Geometry.is_point_in_circle(pos, proj_back_local_scale, SCALE_CIRCLE_RADIUS): + elif Geometry2D.is_point_in_circle(pos, proj_back_local_scale, SCALE_CIRCLE_RADIUS): return Cel3DObject.Gizmos.Z_SCALE - elif Geometry.is_point_in_polygon(pos, rot_x_offset): + elif Geometry2D.is_point_in_polygon(pos, rot_x_offset): return Cel3DObject.Gizmos.X_ROT - elif Geometry.is_point_in_polygon(pos, rot_y_offset): + elif Geometry2D.is_point_in_polygon(pos, rot_y_offset): return Cel3DObject.Gizmos.Y_ROT - elif Geometry.is_point_in_polygon(pos, rot_z_offset): + elif Geometry2D.is_point_in_polygon(pos, rot_z_offset): return Cel3DObject.Gizmos.Z_ROT return Cel3DObject.Gizmos.NONE func _cel_changed() -> void: - update() + queue_redraw() set_process_input(Global.current_project.get_current_cel() is Cel3D) @@ -79,39 +79,38 @@ func _find_selected_object() -> Cel3DObject: return null -func add_always_visible(object3d: Cel3DObject, texture: Texture) -> void: +func add_always_visible(object3d: Cel3DObject, texture: Texture2D) -> void: always_visible[object3d] = texture - update() + queue_redraw() func remove_always_visible(object3d: Cel3DObject) -> void: always_visible.erase(object3d) - update() + queue_redraw() -func get_points(camera: Camera, object3d: Cel3DObject) -> void: +func get_points(camera: Camera3D, object3d: Cel3DObject) -> void: var debug_mesh := object3d.box_shape.get_debug_mesh() var arrays := debug_mesh.surface_get_arrays(0) - var points := PoolVector2Array() + var points := PackedVector2Array() for vertex in arrays[ArrayMesh.ARRAY_VERTEX]: - var x_vertex: Vector3 = object3d.transform.xform(vertex) + var x_vertex: Vector3 = object3d.transform * (vertex) var point := camera.unproject_position(x_vertex) if not camera.is_position_behind(x_vertex): points.append(point) points_per_object[object3d] = points if object3d.selected: - gizmos_origin = camera.unproject_position(object3d.translation) - - var right: Vector3 = object3d.translation + object3d.transform.basis.x - var left: Vector3 = object3d.translation - object3d.transform.basis.x - var up: Vector3 = object3d.translation + object3d.transform.basis.y - var down: Vector3 = object3d.translation - object3d.transform.basis.y - var back: Vector3 = object3d.translation + object3d.transform.basis.z - var front: Vector3 = object3d.translation - object3d.transform.basis.z - - var proj_right: Vector2 = object3d.camera.unproject_position(right) - var proj_up: Vector2 = object3d.camera.unproject_position(up) - var proj_back: Vector2 = object3d.camera.unproject_position(back) + gizmos_origin = camera.unproject_position(object3d.position) + var right := object3d.position + object3d.transform.basis.x + var left := object3d.position - object3d.transform.basis.x + var up := object3d.position + object3d.transform.basis.y + var down := object3d.position - object3d.transform.basis.y + var back := object3d.position + object3d.transform.basis.z + var front := object3d.position - object3d.transform.basis.z + + var proj_right := object3d.camera.unproject_position(right) + var proj_up := object3d.camera.unproject_position(up) + var proj_back := object3d.camera.unproject_position(back) proj_right_local = proj_right - gizmos_origin proj_up_local = proj_up - gizmos_origin @@ -120,11 +119,11 @@ func get_points(camera: Camera, object3d: Cel3DObject) -> void: var curve_right_local := proj_right_local var curve_up_local := proj_up_local var curve_back_local := proj_back_local - if right.distance_to(camera.translation) > left.distance_to(camera.translation): + if right.distance_to(camera.position) > left.distance_to(camera.position): curve_right_local = object3d.camera.unproject_position(left) - gizmos_origin - if up.distance_to(camera.translation) > down.distance_to(camera.translation): + if up.distance_to(camera.position) > down.distance_to(camera.position): curve_up_local = object3d.camera.unproject_position(down) - gizmos_origin - if back.distance_to(camera.translation) > front.distance_to(camera.translation): + if back.distance_to(camera.position) > front.distance_to(camera.position): curve_back_local = object3d.camera.unproject_position(front) - gizmos_origin proj_right_local = _resize_vector(proj_right_local, ARROW_LENGTH) @@ -144,98 +143,98 @@ func get_points(camera: Camera, object3d: Cel3DObject) -> void: gizmo_rot_y = _find_curve(curve_right_local, curve_back_local) gizmo_rot_z = _find_curve(curve_right_local, curve_up_local) - update() + queue_redraw() func clear_points(object3d: Cel3DObject) -> void: points_per_object.erase(object3d) - update() + queue_redraw() func _draw() -> void: - var draw_scale := Global.camera.zoom * 10 + var draw_scale := Vector2(10.0, 10.0) / Global.camera.zoom for object in always_visible: if not always_visible[object]: continue if not object.find_cel(): continue - var texture: Texture = always_visible[object] + var texture: Texture2D = always_visible[object] var center := Vector2(8, 8) - var pos: Vector2 = object.camera.unproject_position(object.translation) - var back: Vector3 = object.translation - object.transform.basis.z + var pos: Vector2 = object.camera.unproject_position(object.position) + var back: Vector3 = object.position - object.transform.basis.z var back_proj: Vector2 = object.camera.unproject_position(back) - pos back_proj = _resize_vector(back_proj, LIGHT_ARROW_LENGTH) draw_set_transform(pos, 0, draw_scale / 4) draw_texture(texture, -center) draw_set_transform(pos, 0, draw_scale / 2) if object.type == Cel3DObject.Type.DIR_LIGHT: - draw_line(Vector2.ZERO, back_proj, Color.white) + draw_line(Vector2.ZERO, back_proj, Color.WHITE) var arrow := _find_arrow(back_proj) - _draw_arrow(arrow, Color.white) + _draw_arrow(arrow, Color.WHITE) draw_set_transform_matrix(Transform2D()) - if points_per_object.empty(): + if points_per_object.is_empty(): return for object in points_per_object: if not object.find_cel(): if object.selected: - object.unselect() + object.deselect() continue - var points: PoolVector2Array = points_per_object[object] - if points.empty(): + var points: PackedVector2Array = points_per_object[object] + if points.is_empty(): continue if object.selected: # Draw bounding box outline - draw_multiline(points, selected_color, 1.0, true) + draw_multiline(points, selected_color, 1.0) if object.applying_gizmos == Cel3DObject.Gizmos.X_ROT: - draw_line(gizmos_origin, Global.canvas.current_pixel, Color.red) + draw_line(gizmos_origin, Global.canvas.current_pixel, Color.RED) continue elif object.applying_gizmos == Cel3DObject.Gizmos.Y_ROT: - draw_line(gizmos_origin, Global.canvas.current_pixel, Color.green) + draw_line(gizmos_origin, Global.canvas.current_pixel, Color.GREEN) continue elif object.applying_gizmos == Cel3DObject.Gizmos.Z_ROT: - draw_line(gizmos_origin, Global.canvas.current_pixel, Color.blue) + draw_line(gizmos_origin, Global.canvas.current_pixel, Color.BLUE) continue draw_set_transform(gizmos_origin, 0, draw_scale) # Draw position arrows - draw_line(Vector2.ZERO, proj_right_local, Color.red) - draw_line(Vector2.ZERO, proj_up_local, Color.green) - draw_line(Vector2.ZERO, proj_back_local, Color.blue) - _draw_arrow(gizmo_pos_x, Color.red) - _draw_arrow(gizmo_pos_y, Color.green) - _draw_arrow(gizmo_pos_z, Color.blue) + draw_line(Vector2.ZERO, proj_right_local, Color.RED) + draw_line(Vector2.ZERO, proj_up_local, Color.GREEN) + draw_line(Vector2.ZERO, proj_back_local, Color.BLUE) + _draw_arrow(gizmo_pos_x, Color.RED) + _draw_arrow(gizmo_pos_y, Color.GREEN) + _draw_arrow(gizmo_pos_z, Color.BLUE) # Draw rotation curves - draw_polyline(gizmo_rot_x, Color.red, GIZMO_WIDTH) - draw_polyline(gizmo_rot_y, Color.green, GIZMO_WIDTH) - draw_polyline(gizmo_rot_z, Color.blue, GIZMO_WIDTH) + draw_polyline(gizmo_rot_x, Color.RED, GIZMO_WIDTH) + draw_polyline(gizmo_rot_y, Color.GREEN, GIZMO_WIDTH) + draw_polyline(gizmo_rot_z, Color.BLUE, GIZMO_WIDTH) # Draw scale circles - draw_circle(proj_right_local_scale, SCALE_CIRCLE_RADIUS, Color.red) - draw_circle(proj_up_local_scale, SCALE_CIRCLE_RADIUS, Color.green) - draw_circle(proj_back_local_scale, SCALE_CIRCLE_RADIUS, Color.blue) + draw_circle(proj_right_local_scale, SCALE_CIRCLE_RADIUS, Color.RED) + draw_circle(proj_up_local_scale, SCALE_CIRCLE_RADIUS, Color.GREEN) + draw_circle(proj_back_local_scale, SCALE_CIRCLE_RADIUS, Color.BLUE) # Draw X, Y, Z characters on top of the scale circles var font: Font = Global.control.theme.default_font var font_height := font.get_height() var char_position := Vector2(-font_height, font_height) * CHAR_SCALE / 4 * draw_scale draw_set_transform(gizmos_origin + char_position, 0, draw_scale * CHAR_SCALE) - draw_char(font, proj_right_local_scale / CHAR_SCALE, "X", "") - draw_char(font, proj_up_local_scale / CHAR_SCALE, "Y", "") - draw_char(font, proj_back_local_scale / CHAR_SCALE, "Z", "") + draw_char(font, proj_right_local_scale / CHAR_SCALE, "X") + draw_char(font, proj_up_local_scale / CHAR_SCALE, "Y") + draw_char(font, proj_back_local_scale / CHAR_SCALE, "Z") draw_set_transform_matrix(Transform2D()) elif object.hovered: - draw_multiline(points, hovered_color, 1.0, true) + draw_multiline(points, hovered_color, 1.0) func _resize_vector(v: Vector2, l: float) -> Vector2: return (v.normalized() * l).limit_length(v.length()) -func _find_curve(a: Vector2, b: Vector2) -> PoolVector2Array: +func _find_curve(a: Vector2, b: Vector2) -> PackedVector2Array: var curve2d := Curve2D.new() curve2d.bake_interval = 1 - var control := b.linear_interpolate(a, 0.5) + var control := b.lerp(a, 0.5) a = _resize_vector(a, SCALE_CIRCLE_LENGTH) b = _resize_vector(b, SCALE_CIRCLE_LENGTH) control = control.normalized() * sqrt(pow(a.length() / 4, 2) * 2) # Thank you Pythagoras @@ -244,11 +243,11 @@ func _find_curve(a: Vector2, b: Vector2) -> PoolVector2Array: return curve2d.get_baked_points() -func _find_arrow(a: Vector2, tilt := 0.5) -> PoolVector2Array: +func _find_arrow(a: Vector2, tilt := 0.5) -> PackedVector2Array: var b := a + Vector2(-tilt, 1).rotated(a.angle() + PI / 2) * 2 var c := a + Vector2(tilt, 1).rotated(a.angle() + PI / 2) * 2 - return PoolVector2Array([a, b, c]) + return PackedVector2Array([a, b, c]) -func _draw_arrow(triangle: PoolVector2Array, color: Color) -> void: +func _draw_arrow(triangle: PackedVector2Array, color: Color) -> void: draw_primitive(triangle, [color, color, color], []) diff --git a/src/UI/Canvas/Grid.gd b/src/UI/Canvas/Grid.gd index e1c518a6708..edd4e81e9d8 100644 --- a/src/UI/Canvas/Grid.gd +++ b/src/UI/Canvas/Grid.gd @@ -1,19 +1,23 @@ extends Node2D +func _ready() -> void: + Global.project_changed.connect(queue_redraw) + + func _draw() -> void: if not Global.draw_grid: return - var target_rect: Rect2 + var target_rect: Rect2i if Global.grid_draw_over_tile_mode: target_rect = Global.current_project.tiles.get_bounding_rect() else: - target_rect = Rect2(Vector2.ZERO, Global.current_project.size) - if target_rect.has_no_area(): + target_rect = Rect2i(Vector2.ZERO, Global.current_project.size) + if not target_rect.has_area(): return - var grid_type: int = Global.grid_type + var grid_type := Global.grid_type if grid_type == Global.GridTypes.CARTESIAN || grid_type == Global.GridTypes.ALL: _draw_cartesian_grid(target_rect) @@ -21,12 +25,8 @@ func _draw() -> void: _draw_isometric_grid(target_rect) -func _draw_cartesian_grid(target_rect: Rect2) -> void: - # Using Array instead of PoolVector2Array to avoid kinda - # random "resize: Can't resize PoolVector if locked" errors. - # See: https://github.com/Orama-Interactive/Pixelorama/issues/331 - # It will be converted to PoolVector2Array before being sent to be rendered. - var grid_multiline_points := [] +func _draw_cartesian_grid(target_rect: Rect2i) -> void: + var grid_multiline_points := PackedVector2Array() var x: float = ( target_rect.position.x @@ -46,32 +46,28 @@ func _draw_cartesian_grid(target_rect: Rect2) -> void: grid_multiline_points.push_back(Vector2(target_rect.end.x, y)) y += Global.grid_size.y - if not grid_multiline_points.empty(): + if not grid_multiline_points.is_empty(): draw_multiline(grid_multiline_points, Global.grid_color) -func _draw_isometric_grid(target_rect: Rect2) -> void: - # Using Array instead of PoolVector2Array to avoid kinda - # random "resize: Can't resize PoolVector if locked" errors. - # See: https://github.com/Orama-Interactive/Pixelorama/issues/331 - # It will be converted to PoolVector2Array before being sent to be rendered. - var grid_multiline_points := [] +func _draw_isometric_grid(target_rect: Rect2i) -> void: + var grid_multiline_points := PackedVector2Array() var cell_size := Global.isometric_grid_size - var max_cell_count: Vector2 = target_rect.size / cell_size - var origin_offset: Vector2 = (Global.grid_offset - target_rect.position).posmodv(cell_size) + var max_cell_count := target_rect.size / cell_size + var origin_offset := Vector2(Global.grid_offset - target_rect.position).posmodv(cell_size) # lines โ†—โ†—โ†— (from bottom-left to top-right) - var per_cell_offset := cell_size * Vector2(1, -1) + var per_cell_offset := cell_size * Vector2i(1, -1) # lines โ†—โ†—โ†— starting from the rect's left side (top to bottom): var y: float = fposmod( origin_offset.y + cell_size.y * (0.5 + origin_offset.x / cell_size.x), cell_size.y ) while y < target_rect.size.y: - var start: Vector2 = target_rect.position + Vector2(0, y) - var cells_to_rect_bounds: float = min(max_cell_count.x, y / cell_size.y) - var end: Vector2 = start + cells_to_rect_bounds * per_cell_offset + var start: Vector2 = target_rect.position + Vector2i(0, y) + var cells_to_rect_bounds := minf(max_cell_count.x, y / cell_size.y) + var end := start + cells_to_rect_bounds * per_cell_offset grid_multiline_points.push_back(start) grid_multiline_points.push_back(end) y += cell_size.y @@ -79,8 +75,8 @@ func _draw_isometric_grid(target_rect: Rect2) -> void: # lines โ†—โ†—โ†— starting from the rect's bottom side (left to right): var x: float = (y - target_rect.size.y) / cell_size.y * cell_size.x while x < target_rect.size.x: - var start: Vector2 = target_rect.position + Vector2(x, target_rect.size.y) - var cells_to_rect_bounds: float = min(max_cell_count.y, max_cell_count.x - x / cell_size.x) + var start: Vector2 = target_rect.position + Vector2i(x, target_rect.size.y) + var cells_to_rect_bounds := minf(max_cell_count.y, max_cell_count.x - x / cell_size.x) var end: Vector2 = start + cells_to_rect_bounds * per_cell_offset grid_multiline_points.push_back(start) grid_multiline_points.push_back(end) @@ -92,8 +88,8 @@ func _draw_isometric_grid(target_rect: Rect2) -> void: # lines โ†˜โ†˜โ†˜ starting from the rect's left side (top to bottom): y = fposmod(origin_offset.y - cell_size.y * (0.5 + origin_offset.x / cell_size.x), cell_size.y) while y < target_rect.size.y: - var start: Vector2 = target_rect.position + Vector2(0, y) - var cells_to_rect_bounds: float = min(max_cell_count.x, max_cell_count.y - y / cell_size.y) + var start: Vector2 = target_rect.position + Vector2i(0, y) + var cells_to_rect_bounds := minf(max_cell_count.x, max_cell_count.y - y / cell_size.y) var end: Vector2 = start + cells_to_rect_bounds * per_cell_offset grid_multiline_points.push_back(start) grid_multiline_points.push_back(end) @@ -102,12 +98,12 @@ func _draw_isometric_grid(target_rect: Rect2) -> void: # lines โ†˜โ†˜โ†˜ starting from the rect's top side (left to right): x = fposmod(origin_offset.x - cell_size.x * (0.5 + origin_offset.y / cell_size.y), cell_size.x) while x < target_rect.size.x: - var start: Vector2 = target_rect.position + Vector2(x, 0) - var cells_to_rect_bounds: float = min(max_cell_count.y, max_cell_count.x - x / cell_size.x) + var start: Vector2 = target_rect.position + Vector2i(x, 0) + var cells_to_rect_bounds := minf(max_cell_count.y, max_cell_count.x - x / cell_size.x) var end: Vector2 = start + cells_to_rect_bounds * per_cell_offset grid_multiline_points.push_back(start) grid_multiline_points.push_back(end) x += cell_size.x - if not grid_multiline_points.empty(): + if not grid_multiline_points.is_empty(): draw_multiline(grid_multiline_points, Global.grid_color) diff --git a/src/UI/Canvas/Indicators.gd b/src/UI/Canvas/Indicators.gd index 0e83841a216..08ceb727a9e 100644 --- a/src/UI/Canvas/Indicators.gd +++ b/src/UI/Canvas/Indicators.gd @@ -4,7 +4,7 @@ extends Node2D func _input(event: InputEvent) -> void: if Global.has_focus: if event is InputEventMouse or event is InputEventKey: - update() + queue_redraw() func _draw() -> void: diff --git a/src/UI/Canvas/MouseGuide.gd b/src/UI/Canvas/MouseGuide.gd index 8e288cf25c5..d7841c5191c 100644 --- a/src/UI/Canvas/MouseGuide.gd +++ b/src/UI/Canvas/MouseGuide.gd @@ -2,13 +2,13 @@ extends Line2D enum Types { VERTICAL, HORIZONTAL } const INPUT_WIDTH := 4 -export var type := 0 +@export var type := 0 var track_mouse := true func _ready() -> void: # Add a subtle difference to the normal guide color by mixing in some green - default_color = Global.guide_color.linear_interpolate(Color(0.2, 0.92, 0.2), .6) + default_color = Global.guide_color.lerp(Color(0.2, 0.92, 0.2), .6) width = Global.camera.zoom.x * 2 draw_guide_line() @@ -46,12 +46,12 @@ func _input(event: InputEvent) -> void: else: points[0].x = mouse_point.x points[1].x = mouse_point.x - update() + queue_redraw() func _draw() -> void: width = Global.camera.zoom.x * 2 - var viewport_size: Vector2 = Global.main_viewport.rect_size + var viewport_size: Vector2 = Global.main_viewport.size var zoom: Vector2 = Global.camera.zoom # viewport_poly is an array of the points that make up the corners of the viewport diff --git a/src/UI/Canvas/MouseGuideContainer.tscn b/src/UI/Canvas/MouseGuideContainer.tscn index f1f467d8519..67a5ccaf384 100644 --- a/src/UI/Canvas/MouseGuideContainer.tscn +++ b/src/UI/Canvas/MouseGuideContainer.tscn @@ -1,31 +1,25 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://no3w7e2264u4"] -[ext_resource path="res://assets/graphics/dotted_line.png" type="Texture" id=1] -[ext_resource path="res://src/UI/Canvas/MouseGuide.gd" type="Script" id=2] +[ext_resource type="Texture2D" uid="uid://xnqvppcpt7jb" path="res://assets/graphics/dotted_line.png" id="1"] +[ext_resource type="Script" path="res://src/UI/Canvas/MouseGuide.gd" id="2"] -[sub_resource type="AtlasTexture" id=1] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 0, 0, 8, 1 ) +[sub_resource type="AtlasTexture" id="1"] +atlas = ExtResource("1") +region = Rect2(0, 0, 8, 1) [node name="MouseGuideContainer" type="Node2D"] [node name="Vertical" type="Line2D" parent="."] visible = false -points = PoolVector2Array( 0, 19999, 0, -19999 ) -default_color = Color( 1, 1, 1, 1 ) -texture = SubResource( 1 ) +points = PackedVector2Array(0, 19999, 0, -19999) +texture = SubResource("1") texture_mode = 1 -script = ExtResource( 2 ) +script = ExtResource("2") [node name="Horizontal" type="Line2D" parent="."] visible = false -points = PoolVector2Array( -19999, 0, 19999, 0 ) -default_color = Color( 1, 1, 1, 1 ) -texture = SubResource( 1 ) +points = PackedVector2Array(-19999, 0, 19999, 0) +texture = SubResource("1") texture_mode = 1 -script = ExtResource( 2 ) -__meta__ = { -"_editor_description_": "" -} +script = ExtResource("2") type = 1 diff --git a/src/UI/Canvas/OnionSkinning.gd b/src/UI/Canvas/OnionSkinning.gd index ccd531641d1..ebec39c0649 100644 --- a/src/UI/Canvas/OnionSkinning.gd +++ b/src/UI/Canvas/OnionSkinning.gd @@ -3,19 +3,19 @@ extends Node2D enum { PAST, FUTURE } var type := PAST -var blue_red_color := Color.blue +var blue_red_color := Color.BLUE var rate := Global.onion_skinning_past_rate func _draw() -> void: - var project = Global.current_project + var project := Global.current_project if !Global.onion_skinning: return rate = Global.onion_skinning_past_rate if type == PAST else Global.onion_skinning_future_rate if rate <= 0: return - var color := blue_red_color if Global.onion_skinning_blue_red else Color.white + var color := blue_red_color if Global.onion_skinning_blue_red else Color.WHITE var position_tmp := position var scale_tmp := scale if Global.mirror_view: diff --git a/src/UI/Canvas/PixelGrid.gd b/src/UI/Canvas/PixelGrid.gd index 2147a01da2a..57406910418 100644 --- a/src/UI/Canvas/PixelGrid.gd +++ b/src/UI/Canvas/PixelGrid.gd @@ -2,34 +2,29 @@ extends Node2D func _ready() -> void: - Global.camera.connect("zoom_changed", self, "update") + Global.camera.zoom_changed.connect(queue_redraw) func _draw() -> void: if not Global.draw_pixel_grid: return - var zoom_percentage := 100.0 / Global.camera.zoom.x + var zoom_percentage := 100.0 * Global.camera.zoom.x if zoom_percentage < Global.pixel_grid_show_at_zoom: return - var target_rect: Rect2 = Global.current_project.tiles.get_bounding_rect() - if target_rect.has_no_area(): + var target_rect := Global.current_project.tiles.get_bounding_rect() + if not target_rect.has_area(): return - # Using Array instead of PoolVector2Array to avoid kinda - # random "resize: Can't resize PoolVector if locked" errors. - # See: https://github.com/Orama-Interactive/Pixelorama/issues/331 - # It will be converted to PoolVector2Array before being sent to be rendered. - var grid_multiline_points := [] - - for x in range(ceil(target_rect.position.x), floor(target_rect.end.x) + 1): + var grid_multiline_points := PackedVector2Array() + for x in range(ceili(target_rect.position.x), floori(target_rect.end.x) + 1): grid_multiline_points.push_back(Vector2(x, target_rect.position.y)) grid_multiline_points.push_back(Vector2(x, target_rect.end.y)) - for y in range(ceil(target_rect.position.y), floor(target_rect.end.y) + 1): + for y in range(ceili(target_rect.position.y), floori(target_rect.end.y) + 1): grid_multiline_points.push_back(Vector2(target_rect.position.x, y)) grid_multiline_points.push_back(Vector2(target_rect.end.x, y)) - if not grid_multiline_points.empty(): + if not grid_multiline_points.is_empty(): draw_multiline(grid_multiline_points, Global.pixel_grid_color) diff --git a/src/UI/Canvas/Previews.gd b/src/UI/Canvas/Previews.gd index e2fbcc8d6c9..2f90d6cefa2 100644 --- a/src/UI/Canvas/Previews.gd +++ b/src/UI/Canvas/Previews.gd @@ -4,7 +4,7 @@ extends Node2D func _input(event: InputEvent) -> void: if Global.has_focus: if event is InputEventMouse or event is InputEventKey: - update() + queue_redraw() func _draw() -> void: diff --git a/src/UI/Canvas/Rulers/Guide.gd b/src/UI/Canvas/Rulers/Guide.gd index b6eaf446102..9dcc602b2bc 100644 --- a/src/UI/Canvas/Rulers/Guide.gd +++ b/src/UI/Canvas/Rulers/Guide.gd @@ -5,15 +5,15 @@ enum Types { HORIZONTAL, VERTICAL } const INPUT_WIDTH := 4 -var font := preload("res://assets/fonts/Roboto-Regular.tres") +var font: Font = Global.control.theme.default_font var has_focus := true var mouse_pos := Vector2.ZERO -var type: int = Types.HORIZONTAL -var project = Global.current_project +var type := Types.HORIZONTAL +var project := Global.current_project func _ready() -> void: - width = Global.camera.zoom.x * 2 + width = 2.0 / Global.camera.zoom.x default_color = Global.guide_color project.guides.append(self) if _outside_canvas(): @@ -49,33 +49,33 @@ func _input(_event: InputEvent) -> void: or Global.move_guides_on_canvas ): has_focus = true - Global.has_focus = false - update() + Global.can_draw = false + queue_redraw() if has_focus: if Input.is_action_pressed("left_mouse"): if type == Types.HORIZONTAL: - var yy := stepify(mouse_pos.y, 0.5) + var yy := snappedf(mouse_pos.y, 0.5) points[0].y = yy points[1].y = yy else: - var xx := stepify(mouse_pos.x, 0.5) + var xx := snappedf(mouse_pos.x, 0.5) points[0].x = xx points[1].x = xx modulate.a = 0.5 if _outside_canvas() else 1.0 elif Input.is_action_just_released("left_mouse"): - Global.has_focus = true + Global.can_draw = true has_focus = false if _outside_canvas(): project.guides.erase(self) queue_free() else: - update() + queue_redraw() func _draw() -> void: if !has_focus: return - var viewport_size: Vector2 = Global.main_viewport.rect_size + var viewport_size: Vector2 = Global.main_viewport.size var zoom: Vector2 = Global.camera.zoom # viewport_poly is an array of the points that make up the corners of the viewport @@ -89,18 +89,17 @@ func _draw() -> void: + Vector2( ( Global.camera.offset.x - - (viewport_size.rotated(Global.camera.rotation).x / 2) * zoom.x + - (viewport_size.rotated(Global.camera.rotation).x / 2) / zoom.x ), ( Global.camera.offset.y - - (viewport_size.rotated(Global.camera.rotation).y / 2) * zoom.y + - (viewport_size.rotated(Global.camera.rotation).y / 2) / zoom.y ) ) ) var string := ( - "%spx" - % str(stepify(mouse_pos.y if type == Types.HORIZONTAL else mouse_pos.x, 0.5)) + "%spx" % str(snappedf(mouse_pos.y if type == Types.HORIZONTAL else mouse_pos.x, 0.5)) ) var color: Color = Global.control.theme.get_color("font_color", "Label") # X and Y offsets for nicer looking spacing @@ -111,53 +110,105 @@ func _draw() -> void: var font_height := font.get_height() # Draw the string where the guide intersects with the viewport poly # Priority is top edge, then left, then right - var intersection = Geometry.segment_intersects_segment_2d( + var intersection = Geometry2D.segment_intersects_segment( points[0], points[1], viewport_poly[0], viewport_poly[1] ) if intersection: - draw_set_transform(intersection, Global.camera.rotation, zoom * 2) + draw_set_transform(intersection, Global.camera.rotation, Vector2(2.0, 2.0) / zoom) if ( intersection.distance_squared_to(viewport_poly[0]) < intersection.distance_squared_to(viewport_poly[1]) ): - draw_string(font, Vector2(x_offset, font_height), string, color) + draw_string( + font, + Vector2(x_offset, font_height), + string, + HORIZONTAL_ALIGNMENT_LEFT, + -1, + 16, + color + ) else: - draw_string(font, Vector2(-font_string_size.x - x_offset, font_height), string, color) + draw_string( + font, + Vector2(-font_string_size.x - x_offset, font_height), + string, + HORIZONTAL_ALIGNMENT_LEFT, + -1, + 16, + color + ) return - intersection = Geometry.segment_intersects_segment_2d( + intersection = Geometry2D.segment_intersects_segment( points[0], points[1], viewport_poly[3], viewport_poly[0] ) if intersection: - draw_set_transform(intersection, Global.camera.rotation, zoom * 2) + draw_set_transform(intersection, Global.camera.rotation, Vector2(2.0, 2.0) / zoom) if ( intersection.distance_squared_to(viewport_poly[3]) < intersection.distance_squared_to(viewport_poly[0]) ): - draw_string(font, Vector2(x_offset, y_offset), string, color) + draw_string( + font, Vector2(x_offset, y_offset), string, HORIZONTAL_ALIGNMENT_LEFT, -1, 16, color + ) else: - draw_string(font, Vector2(x_offset, font_height), string, color) + draw_string( + font, + Vector2(x_offset, font_height), + string, + HORIZONTAL_ALIGNMENT_LEFT, + -1, + 16, + color + ) return - intersection = Geometry.segment_intersects_segment_2d( + intersection = Geometry2D.segment_intersects_segment( points[0], points[1], viewport_poly[1], viewport_poly[2] ) if intersection: - draw_set_transform(intersection, Global.camera.rotation, zoom * 2) + draw_set_transform(intersection, Global.camera.rotation, Vector2(2.0, 2.0) / zoom) if ( intersection.distance_squared_to(viewport_poly[1]) < intersection.distance_squared_to(viewport_poly[2]) ): - draw_string(font, Vector2(-font_string_size.x - x_offset, font_height), string, color) + draw_string( + font, + Vector2(-font_string_size.x - x_offset, font_height), + string, + HORIZONTAL_ALIGNMENT_LEFT, + -1, + 16, + color + ) else: - draw_string(font, Vector2(-font_string_size.x - x_offset, y_offset), string, color) + draw_string( + font, + Vector2(-font_string_size.x - x_offset, y_offset), + string, + HORIZONTAL_ALIGNMENT_LEFT, + -1, + 16, + color + ) return # If there's no intersection with a viewport edge, show string in top left corner - draw_set_transform(viewport_poly[0], Global.camera.rotation, zoom * 2) - draw_string(font, Vector2(x_offset, font_height), string, color) + draw_set_transform(viewport_poly[0], Global.camera.rotation, Vector2(2.0, 2.0) / zoom) + draw_string( + font, Vector2(x_offset, font_height), string, HORIZONTAL_ALIGNMENT_LEFT, -1, 16, color + ) + + +func force_input(event: InputEvent) -> void: + _input(event) + + +func set_color(color: Color) -> void: + default_color = color func _outside_canvas() -> bool: diff --git a/src/UI/Canvas/Rulers/HorizontalRuler.gd b/src/UI/Canvas/Rulers/HorizontalRuler.gd index 7c6e6297e1a..aa499f45f48 100644 --- a/src/UI/Canvas/Rulers/HorizontalRuler.gd +++ b/src/UI/Canvas/Rulers/HorizontalRuler.gd @@ -2,7 +2,6 @@ extends Button const RULER_WIDTH := 16 -var font := preload("res://assets/fonts/Roboto-Small.tres") var major_subdivision := 2 var minor_subdivision := 4 @@ -11,21 +10,28 @@ var last: Vector2 func _ready() -> void: - Global.main_viewport.connect("item_rect_changed", self, "update") + Global.project_changed.connect(queue_redraw) + Global.main_viewport.item_rect_changed.connect(queue_redraw) + + +func _gui_input(event: InputEvent) -> void: + for guide in Global.current_project.guides: + guide.force_input(event) # Code taken and modified from Godot's source code func _draw() -> void: + var font: Font = Global.control.theme.default_font var transform := Transform2D() var ruler_transform := Transform2D() var major_subdivide := Transform2D() var minor_subdivide := Transform2D() - var zoom: float = 1 / Global.camera.zoom.x + var zoom := Global.camera.zoom.x transform.x = Vector2(zoom, zoom) # This tracks the "true" top left corner of the drawing: transform.origin = ( - Global.main_viewport.rect_size / 2 + Global.main_viewport.size / 2 + Global.camera.offset.rotated(-Global.camera.rotation) * -zoom ) @@ -36,7 +42,7 @@ func _draw() -> void: var b := Vector2(proj_size.x, 0).rotated(-Global.camera.rotation) # Top right var c := Vector2(0, proj_size.y).rotated(-Global.camera.rotation) # Bottom left var d := Vector2(proj_size.x, proj_size.y).rotated(-Global.camera.rotation) # Bottom right - transform.origin.x += min(min(a.x, b.x), min(c.x, d.x)) * zoom + transform.origin.x += minf(minf(a.x, b.x), minf(c.x, d.x)) * zoom var basic_rule := 100.0 var i := 0 @@ -57,41 +63,43 @@ func _draw() -> void: Vector2(1.0 / minor_subdivision, 1.0 / minor_subdivision) ) - first = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform( - Vector2.ZERO + first = ( + (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse() + * (Vector2.ZERO) ) - last = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform( - Global.main_viewport.rect_size + last = ( + (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse() + * (Global.main_viewport.size) ) - for j in range(ceil(first.x), ceil(last.x)): - var position: Vector2 = (transform * ruler_transform * major_subdivide * minor_subdivide).xform( - Vector2(j, 0) + for j in range(ceili(first.x), ceili(last.x)): + var pos: Vector2 = ( + (transform * ruler_transform * major_subdivide * minor_subdivide) * (Vector2(j, 0)) ) if j % (major_subdivision * minor_subdivision) == 0: draw_line( - Vector2(position.x + RULER_WIDTH, 0), - Vector2(position.x + RULER_WIDTH, RULER_WIDTH), - Color.white + Vector2(pos.x + RULER_WIDTH, 0), + Vector2(pos.x + RULER_WIDTH, RULER_WIDTH), + Color.WHITE ) - var val = (ruler_transform * major_subdivide * minor_subdivide).xform(Vector2(j, 0)).x + var val := ((ruler_transform * major_subdivide * minor_subdivide) * Vector2(j, 0)).x draw_string( font, - Vector2(position.x + RULER_WIDTH + 2, font.get_height() - 4), - str(stepify(val, 0.1)) + Vector2(pos.x + RULER_WIDTH + 2, font.get_height() - 4), + str(snappedf(val, 0.1)) ) else: if j % minor_subdivision == 0: draw_line( - Vector2(position.x + RULER_WIDTH, RULER_WIDTH * 0.33), - Vector2(position.x + RULER_WIDTH, RULER_WIDTH), - Color.white + Vector2(pos.x + RULER_WIDTH, RULER_WIDTH * 0.33), + Vector2(pos.x + RULER_WIDTH, RULER_WIDTH), + Color.WHITE ) else: draw_line( - Vector2(position.x + RULER_WIDTH, RULER_WIDTH * 0.66), - Vector2(position.x + RULER_WIDTH, RULER_WIDTH), - Color.white + Vector2(pos.x + RULER_WIDTH, RULER_WIDTH * 0.66), + Vector2(pos.x + RULER_WIDTH, RULER_WIDTH), + Color.WHITE ) @@ -106,7 +114,7 @@ func create_guide() -> void: if mouse_pos.x < RULER_WIDTH: # For double guides Global.vertical_ruler.create_guide() var guide := Guide.new() - if abs(Global.camera.rotation_degrees) < 45 or abs(Global.camera.rotation_degrees) > 135: + if absf(Global.camera.rotation_degrees) < 45 or absf(Global.camera.rotation_degrees) > 135: guide.type = guide.Types.HORIZONTAL guide.add_point(Vector2(-19999, Global.canvas.current_pixel.y)) guide.add_point(Vector2(19999, Global.canvas.current_pixel.y)) @@ -115,8 +123,7 @@ func create_guide() -> void: guide.add_point(Vector2(Global.canvas.current_pixel.x, -19999)) guide.add_point(Vector2(Global.canvas.current_pixel.x, 19999)) Global.canvas.add_child(guide) - Global.has_focus = false - update() + queue_redraw() func _on_HorizontalRuler_mouse_entered() -> void: diff --git a/src/UI/Canvas/Rulers/SymmetryGuide.gd b/src/UI/Canvas/Rulers/SymmetryGuide.gd index 72bcac6565f..f4edb515550 100644 --- a/src/UI/Canvas/Rulers/SymmetryGuide.gd +++ b/src/UI/Canvas/Rulers/SymmetryGuide.gd @@ -1,32 +1,38 @@ class_name SymmetryGuide extends Guide -var _texture: Texture = preload("res://assets/graphics/dotted_line.png") +var _texture := preload("res://assets/graphics/dotted_line.png") func _ready() -> void: + super._ready() has_focus = false visible = false texture = _texture + texture_repeat = CanvasItem.TEXTURE_REPEAT_ENABLED texture_mode = Line2D.LINE_TEXTURE_TILE - width = Global.camera.zoom.x * 4 - # Add a subtle difference to the normal guide color by mixing in some blue - default_color = Global.guide_color.linear_interpolate(Color(0.2, 0.2, .65), .6) + width = 4.0 / Global.camera.zoom.x + set_color(Global.guide_color) func _input(_event: InputEvent) -> void: if !visible: return - ._input(_event) + super._input(_event) if type == Types.HORIZONTAL: project.y_symmetry_point = points[0].y * 2 - 1 - points[0].y = clamp(points[0].y, 0, Global.current_project.size.y) - points[1].y = clamp(points[1].y, 0, Global.current_project.size.y) + points[0].y = clampf(points[0].y, 0, Global.current_project.size.y) + points[1].y = clampf(points[1].y, 0, Global.current_project.size.y) elif type == Types.VERTICAL: - points[0].x = clamp(points[0].x, 0, Global.current_project.size.x) - points[1].x = clamp(points[1].x, 0, Global.current_project.size.x) + points[0].x = clampf(points[0].x, 0, Global.current_project.size.x) + points[1].x = clampf(points[1].x, 0, Global.current_project.size.x) project.x_symmetry_point = points[0].x * 2 - 1 +## Add a subtle difference to the normal guide color by mixing in some blue +func set_color(color: Color) -> void: + default_color = color.lerp(Color(.2, .2, .65), .6) + + func _outside_canvas() -> bool: return false diff --git a/src/UI/Canvas/Rulers/VerticalRuler.gd b/src/UI/Canvas/Rulers/VerticalRuler.gd index 8cd12064cb8..89b851e5bfa 100644 --- a/src/UI/Canvas/Rulers/VerticalRuler.gd +++ b/src/UI/Canvas/Rulers/VerticalRuler.gd @@ -2,7 +2,6 @@ extends Button const RULER_WIDTH := 16 -var font := preload("res://assets/fonts/Roboto-Small.tres") var major_subdivision := 2 var minor_subdivision := 4 @@ -11,21 +10,28 @@ var last: Vector2 func _ready() -> void: - Global.main_viewport.connect("item_rect_changed", self, "update") + Global.project_changed.connect(queue_redraw) + Global.main_viewport.item_rect_changed.connect(queue_redraw) + + +func _gui_input(event: InputEvent) -> void: + for guide in Global.current_project.guides: + guide.force_input(event) # Code taken and modified from Godot's source code func _draw() -> void: + var font: Font = Global.control.theme.default_font var transform := Transform2D() var ruler_transform := Transform2D() var major_subdivide := Transform2D() var minor_subdivide := Transform2D() - var zoom: float = 1 / Global.camera.zoom.x + var zoom := Global.camera.zoom.x transform.y = Vector2(zoom, zoom) # This tracks the "true" top left corner of the drawing: transform.origin = ( - Global.main_viewport.rect_size / 2 + Global.main_viewport.size / 2 + Global.camera.offset.rotated(-Global.camera.rotation) * -zoom ) @@ -36,7 +42,7 @@ func _draw() -> void: var b := Vector2(proj_size.x, 0).rotated(-Global.camera.rotation) # Top right var c := Vector2(0, proj_size.y).rotated(-Global.camera.rotation) # Bottom left var d := Vector2(proj_size.x, proj_size.y).rotated(-Global.camera.rotation) # Bottom right - transform.origin.y += min(min(a.y, b.y), min(c.y, d.y)) * zoom + transform.origin.y += minf(minf(a.y, b.y), minf(c.y, d.y)) * zoom var basic_rule := 100.0 var i := 0 @@ -57,36 +63,34 @@ func _draw() -> void: Vector2(1.0 / minor_subdivision, 1.0 / minor_subdivision) ) - first = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform( - Vector2.ZERO + first = ( + (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse() + * (Vector2.ZERO) ) - last = (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse().xform( - Global.main_viewport.rect_size + last = ( + (transform * ruler_transform * major_subdivide * minor_subdivide).affine_inverse() + * (Global.main_viewport.size) ) - for j in range(ceil(first.y), ceil(last.y)): - var position: Vector2 = (transform * ruler_transform * major_subdivide * minor_subdivide).xform( - Vector2(0, j) + for j in range(ceili(first.y), ceili(last.y)): + var pos: Vector2 = ( + (transform * ruler_transform * major_subdivide * minor_subdivide) * (Vector2(0, j)) ) if j % (major_subdivision * minor_subdivision) == 0: - draw_line(Vector2(0, position.y), Vector2(RULER_WIDTH, position.y), Color.white) - var text_xform = Transform2D(-PI / 2, Vector2(font.get_height() - 4, position.y - 2)) + draw_line(Vector2(0, pos.y), Vector2(RULER_WIDTH, pos.y), Color.WHITE) + var text_xform := Transform2D(-PI / 2, Vector2(font.get_height() - 4, pos.y - 2)) draw_set_transform_matrix(get_transform() * text_xform) - var val = (ruler_transform * major_subdivide * minor_subdivide).xform(Vector2(0, j)).y - draw_string(font, Vector2(), str(stepify(val, 0.1))) + var val := ((ruler_transform * major_subdivide * minor_subdivide) * Vector2(0, j)).y + draw_string(font, Vector2(), str(snappedf(val, 0.1))) draw_set_transform_matrix(get_transform()) else: if j % minor_subdivision == 0: draw_line( - Vector2(RULER_WIDTH * 0.33, position.y), - Vector2(RULER_WIDTH, position.y), - Color.white + Vector2(RULER_WIDTH * 0.33, pos.y), Vector2(RULER_WIDTH, pos.y), Color.WHITE ) else: draw_line( - Vector2(RULER_WIDTH * 0.66, position.y), - Vector2(RULER_WIDTH, position.y), - Color.white + Vector2(RULER_WIDTH * 0.66, pos.y), Vector2(RULER_WIDTH, pos.y), Color.WHITE ) @@ -98,7 +102,7 @@ func create_guide() -> void: if !Global.show_guides: return var guide := Guide.new() - if abs(Global.camera.rotation_degrees) < 45 or abs(Global.camera.rotation_degrees) > 135: + if absf(Global.camera.rotation_degrees) < 45 or absf(Global.camera.rotation_degrees) > 135: guide.type = guide.Types.VERTICAL guide.add_point(Vector2(Global.canvas.current_pixel.x, -19999)) guide.add_point(Vector2(Global.canvas.current_pixel.x, 19999)) @@ -107,5 +111,4 @@ func create_guide() -> void: guide.add_point(Vector2(-19999, Global.canvas.current_pixel.y)) guide.add_point(Vector2(19999, Global.canvas.current_pixel.y)) Global.canvas.add_child(guide) - Global.has_focus = false - update() + queue_redraw() diff --git a/src/UI/Canvas/Selection.gd b/src/UI/Canvas/Selection.gd index 0d66602303d..749342921cd 100644 --- a/src/UI/Canvas/Selection.gd +++ b/src/UI/Canvas/Selection.gd @@ -1,24 +1,30 @@ extends Node2D enum SelectionOperation { ADD, SUBTRACT, INTERSECT } -const KEY_MOVE_ACTION_NAMES := ["ui_up", "ui_down", "ui_left", "ui_right"] +const KEY_MOVE_ACTION_NAMES: PackedStringArray = ["ui_up", "ui_down", "ui_left", "ui_right"] const CLIPBOARD_FILE_PATH := "user://clipboard.txt" # flags (additional properties of selection that can be toggled) -var flag_tilemode = false +var flag_tilemode := false var is_moving_content := false var arrow_key_move := false var is_pasting := false -var big_bounding_rectangle := Rect2() setget _big_bounding_rectangle_changed -var image_current_pixel := Vector2.ZERO # The ACTUAL pixel coordinate of image +var big_bounding_rectangle := Rect2i(): + set(value): + big_bounding_rectangle = value + for slot in Tools._slots.values(): + if slot.tool_node is SelectionTool: + slot.tool_node.set_spinbox_values() + _update_gizmos() +var image_current_pixel := Vector2.ZERO ## The ACTUAL pixel coordinate of image var temp_rect := Rect2() var rect_aspect_ratio := 0.0 var temp_rect_size := Vector2.ZERO var temp_rect_pivot := Vector2.ZERO -var original_big_bounding_rectangle := Rect2() +var original_big_bounding_rectangle := Rect2i() var original_preview_image := Image.new() var original_bitmap := SelectionMap.new() var original_offset := Vector2.ZERO @@ -26,58 +32,58 @@ var original_offset := Vector2.ZERO var preview_image := Image.new() var preview_image_texture := ImageTexture.new() var undo_data: Dictionary -var gizmos := [] # Array of Gizmos +var gizmos: Array[Gizmo] = [] var dragged_gizmo: Gizmo = null var prev_angle := 0 var mouse_pos_on_gizmo_drag := Vector2.ZERO var resize_keep_ratio := false -onready var canvas: Canvas = get_parent() -onready var marching_ants_outline: Sprite = $MarchingAntsOutline +@onready var canvas: Canvas = get_parent() +@onready var marching_ants_outline: Sprite2D = $MarchingAntsOutline class Gizmo: enum Type { SCALE, ROTATE } var rect: Rect2 - var direction := Vector2.ZERO + var direction := Vector2i.ZERO var type: int - func _init(_type: int = Type.SCALE, _direction := Vector2.ZERO) -> void: + func _init(_type: int = Type.SCALE, _direction := Vector2i.ZERO) -> void: type = _type direction = _direction - func get_cursor() -> int: - var cursor := Input.CURSOR_MOVE - if direction == Vector2.ZERO: - return Input.CURSOR_POINTING_HAND - elif direction == Vector2(-1, -1) or direction == Vector2(1, 1): # Top left or bottom right + func get_cursor() -> Control.CursorShape: + var cursor := Control.CURSOR_MOVE + if direction == Vector2i.ZERO: + return Control.CURSOR_POINTING_HAND + elif direction == Vector2i(-1, -1) or direction == Vector2i(1, 1): # Top left or bottom right if Global.mirror_view: - cursor = Input.CURSOR_BDIAGSIZE + cursor = Control.CURSOR_BDIAGSIZE else: - cursor = Input.CURSOR_FDIAGSIZE - elif direction == Vector2(1, -1) or direction == Vector2(-1, 1): # Top right or bottom left + cursor = Control.CURSOR_FDIAGSIZE + elif direction == Vector2i(1, -1) or direction == Vector2i(-1, 1): # Top right or bottom left if Global.mirror_view: - cursor = Input.CURSOR_FDIAGSIZE + cursor = Control.CURSOR_FDIAGSIZE else: - cursor = Input.CURSOR_BDIAGSIZE - elif direction == Vector2(0, -1) or direction == Vector2(0, 1): # Center top or center bottom - cursor = Input.CURSOR_VSIZE - elif direction == Vector2(-1, 0) or direction == Vector2(1, 0): # Center left or center right - cursor = Input.CURSOR_HSIZE + cursor = Control.CURSOR_BDIAGSIZE + elif direction == Vector2i(0, -1) or direction == Vector2i(0, 1): # Center top or center bottom + cursor = Control.CURSOR_VSIZE + elif direction == Vector2i(-1, 0) or direction == Vector2i(1, 0): # Center left or center right + cursor = Control.CURSOR_HSIZE return cursor func _ready() -> void: - Global.camera.connect("zoom_changed", self, "_update_on_zoom") - gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(-1, -1))) # Top left - gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(0, -1))) # Center top - gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(1, -1))) # Top right - gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(1, 0))) # Center right - gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(1, 1))) # Bottom right - gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(0, 1))) # Center bottom - gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(-1, 1))) # Bottom left - gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2(-1, 0))) # Center left + Global.camera.zoom_changed.connect(_update_on_zoom) + gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(-1, -1))) # Top left + gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(0, -1))) # Center top + gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(1, -1))) # Top right + gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(1, 0))) # Center right + gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(1, 1))) # Bottom right + gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(0, 1))) # Center bottom + gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(-1, 1))) # Bottom left + gizmos.append(Gizmo.new(Gizmo.Type.SCALE, Vector2i(-1, 0))) # Center left # gizmos.append(Gizmo.new(Gizmo.Type.ROTATE)) # Rotation gizmo (temp) @@ -87,15 +93,13 @@ func _input(event: InputEvent) -> void: image_current_pixel = canvas.current_pixel if Global.mirror_view: image_current_pixel.x = Global.current_project.size.x - image_current_pixel.x - if not Global.can_draw: - return if is_moving_content: if Input.is_action_just_pressed("transformation_confirm"): transform_content_confirm() elif Input.is_action_just_pressed("transformation_cancel"): transform_content_cancel() - var project: Project = Global.current_project + var project := Global.current_project if not project.layers[project.current_layer].can_layer_get_drawn(): return if event is InputEventKey: @@ -104,16 +108,16 @@ func _input(event: InputEvent) -> void: if not event is InputEventMouse: return var gizmo_hover: Gizmo - if big_bounding_rectangle.size != Vector2.ZERO: + if big_bounding_rectangle.size != Vector2i.ZERO: for g in gizmos: if g.rect.has_point(image_current_pixel): gizmo_hover = Gizmo.new(g.type, g.direction) break - if event is InputEventMouseButton and event.button_index == BUTTON_LEFT: + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: if event.pressed: if gizmo_hover and not dragged_gizmo: # Select a gizmo - Global.has_focus = false + Global.can_draw = false mouse_pos_on_gizmo_drag = image_current_pixel dragged_gizmo = gizmo_hover if Input.is_action_pressed("transform_move_selection_only"): @@ -126,14 +130,14 @@ func _input(event: InputEvent) -> void: transform_content_start() project.selection_offset = Vector2.ZERO if dragged_gizmo.type == Gizmo.Type.ROTATE: - var img_size := max( + var img_size := maxi( original_preview_image.get_width(), original_preview_image.get_height() ) original_preview_image.crop(img_size, img_size) else: var prev_temp_rect := temp_rect - dragged_gizmo.direction.x *= sign(temp_rect.size.x) - dragged_gizmo.direction.y *= sign(temp_rect.size.y) + dragged_gizmo.direction.x *= signi(temp_rect.size.x) + dragged_gizmo.direction.y *= signi(temp_rect.size.y) temp_rect = big_bounding_rectangle # If prev_temp_rect, which used to be the previous temp_rect, has negative size, # switch the position and end point in temp_rect @@ -145,15 +149,12 @@ func _input(event: InputEvent) -> void: var pos := temp_rect.position.y temp_rect.position.y = temp_rect.end.y temp_rect.end.y = pos - rect_aspect_ratio = abs(temp_rect.size.y / temp_rect.size.x) + rect_aspect_ratio = absf(temp_rect.size.y / temp_rect.size.x) temp_rect_size = temp_rect.size - temp_rect_pivot = ( - temp_rect.position - + ((temp_rect.end - temp_rect.position) / 2).floor() - ) + temp_rect_pivot = (temp_rect.position + ((temp_rect.end - temp_rect.position) / 2)) - elif dragged_gizmo: # Mouse released, unselect gizmo - Global.has_focus = true + elif dragged_gizmo: # Mouse released, deselect gizmo + Global.can_draw = true dragged_gizmo = null if not is_moving_content: commit_undo("Select", undo_data) @@ -203,15 +204,15 @@ func _move_with_arrow_keys(event: InputEvent) -> void: if _is_action_direction(event) and arrow_key_move: var step := Vector2.ONE - if Input.is_key_pressed(KEY_CONTROL): + if Input.is_key_pressed(KEY_CTRL): step = Global.grid_size var input := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") - var move := input.rotated(stepify(Global.camera.rotation, PI / 2)) + var move := input.rotated(snappedf(Global.camera.rotation, PI / 2)) # These checks are needed to fix a bug where the selection got stuck # to the canvas boundaries when they were 1px away from them - if is_equal_approx(abs(move.x), 0): + if is_equal_approx(absf(move.x), 0.0): move.x = 0 - if is_equal_approx(abs(move.y), 0): + if is_equal_approx(absf(move.y), 0.0): move.y = 0 move_content(move * step) @@ -241,7 +242,7 @@ func _is_action_direction_released(event: InputEvent) -> bool: func _draw() -> void: - if big_bounding_rectangle.size == Vector2.ZERO: + if big_bounding_rectangle.size == Vector2i.ZERO: return var position_tmp := position var scale_tmp := scale @@ -262,18 +263,10 @@ func _draw() -> void: draw_set_transform(position, rotation, scale) -func _big_bounding_rectangle_changed(value: Rect2) -> void: - big_bounding_rectangle = value - for slot in Tools._slots.values(): - if slot.tool_node is SelectionTool: - slot.tool_node.set_spinbox_values() - _update_gizmos() - - func _update_gizmos() -> void: var rect_pos: Vector2 = big_bounding_rectangle.position var rect_end: Vector2 = big_bounding_rectangle.end - var size: Vector2 = Vector2.ONE * Global.camera.zoom * 10 + var size: Vector2 = Vector2.ONE / Global.camera.zoom * 10 # Clockwise, starting from top-left corner gizmos[0].rect = Rect2(rect_pos - size, size) gizmos[1].rect = Rect2( @@ -292,17 +285,17 @@ func _update_gizmos() -> void: # gizmos[8].rect = Rect2( # Vector2((rect_end.x + rect_pos.x - size.x) / 2, rect_pos.y - size.y - (size.y * 2)), size # ) - update() + queue_redraw() func _update_on_zoom() -> void: var zoom := Global.camera.zoom.x - var size := max( + var size := maxi( Global.current_project.selection_map.get_size().x, Global.current_project.selection_map.get_size().y ) - marching_ants_outline.material.set_shader_param("width", zoom) - marching_ants_outline.material.set_shader_param("frequency", (1.0 / zoom) * 10 * size / 64) + marching_ants_outline.material.set_shader_parameter("width", 1.0 / zoom) + marching_ants_outline.material.set_shader_parameter("frequency", zoom * 10 * size / 64) for gizmo in gizmos: if gizmo.rect.size == Vector2.ZERO: return @@ -314,7 +307,7 @@ func _gizmo_resize() -> void: if Input.is_action_pressed("shape_center"): # Code inspired from https://github.com/GDQuest/godot-open-rpg if dir.x != 0 and dir.y != 0: # Border gizmos - temp_rect.size = ((image_current_pixel - temp_rect_pivot) * 2.0 * dir) + temp_rect.size = ((image_current_pixel - temp_rect_pivot) * 2.0 * Vector2(dir)) elif dir.y == 0: # Center left and right gizmos temp_rect.size.x = (image_current_pixel.x - temp_rect_pivot.x) * 2.0 * dir.x elif dir.x == 0: # Center top and bottom gizmos @@ -325,33 +318,33 @@ func _gizmo_resize() -> void: if Input.is_action_pressed("shape_perfect") or resize_keep_ratio: # Maintain aspect ratio var end_y := temp_rect.end.y - if dir == Vector2(1, -1) or dir.x == 0: # Top right corner, center top and center bottom + if dir == Vector2i(1, -1) or dir.x == 0: # Top right corner, center top and center bottom var size := temp_rect.size.y # Needed in order for resizing to work properly in negative sizes - if sign(size) != sign(temp_rect.size.x): - size = abs(size) if temp_rect.size.x > 0 else -abs(size) + if signf(size) != signf(temp_rect.size.x): + size = absf(size) if temp_rect.size.x > 0 else -absf(size) temp_rect.size.x = size / rect_aspect_ratio else: # The rest of the corners var size := temp_rect.size.x # Needed in order for resizing to work properly in negative sizes - if sign(size) != sign(temp_rect.size.y): - size = abs(size) if temp_rect.size.y > 0 else -abs(size) + if signf(size) != signf(temp_rect.size.y): + size = absf(size) if temp_rect.size.y > 0 else -absf(size) temp_rect.size.y = size * rect_aspect_ratio # Inspired by the solution answered in https://stackoverflow.com/a/50271547 - if dir == Vector2(-1, -1): # Top left corner + if dir == Vector2i(-1, -1): # Top left corner temp_rect.position.y = end_y - temp_rect.size.y big_bounding_rectangle = temp_rect.abs() - big_bounding_rectangle.position = big_bounding_rectangle.position.ceil() - big_bounding_rectangle.size = big_bounding_rectangle.size.floor() +# big_bounding_rectangle.position = Vector2(big_bounding_rectangle.position).ceil() +# big_bounding_rectangle.size = big_bounding_rectangle.size.floor() if big_bounding_rectangle.size.x == 0: big_bounding_rectangle.size.x = 1 if big_bounding_rectangle.size.y == 0: big_bounding_rectangle.size.y = 1 - self.big_bounding_rectangle = big_bounding_rectangle # Call the setter method + big_bounding_rectangle = big_bounding_rectangle # Call the setter method resize_selection() @@ -386,7 +379,7 @@ func resize_selection() -> void: preview_image.flip_x() if temp_rect.size.y < 0: preview_image.flip_y() - preview_image_texture.create_from_image(preview_image, 0) + preview_image_texture = ImageTexture.create_from_image(preview_image) var selection_map_copy := SelectionMap.new() selection_map_copy.copy_from(selection_map) @@ -395,30 +388,30 @@ func resize_selection() -> void: ) Global.current_project.selection_map = selection_map_copy Global.current_project.selection_map_changed() - update() + queue_redraw() func _gizmo_rotate() -> void: # Does not work properly yet var angle := image_current_pixel.angle_to_point(mouse_pos_on_gizmo_drag) - angle = deg2rad(floor(rad2deg(angle))) + angle = deg_to_rad(floorf(rad_to_deg(angle))) if angle == prev_angle: return prev_angle = angle # var img_size := max(original_preview_image.get_width(), original_preview_image.get_height()) -# warning-ignore:integer_division -# warning-ignore:integer_division # var pivot = Vector2(original_preview_image.get_width()/2, original_preview_image.get_height()/2) - var pivot := Vector2(big_bounding_rectangle.size.x / 2, big_bounding_rectangle.size.y / 2) + var pivot := Vector2(big_bounding_rectangle.size.x / 2.0, big_bounding_rectangle.size.y / 2.0) preview_image.copy_from(original_preview_image) if original_big_bounding_rectangle.position != big_bounding_rectangle.position: preview_image.fill(Color(0, 0, 0, 0)) - var pos_diff := (original_big_bounding_rectangle.position - big_bounding_rectangle.position).abs() + var pos_diff := ( + (original_big_bounding_rectangle.position - big_bounding_rectangle.position).abs() + ) # pos_diff.y = 0 preview_image.blit_rect( original_preview_image, Rect2(Vector2.ZERO, preview_image.get_size()), pos_diff ) DrawingAlgos.nn_rotate(preview_image, angle, pivot) - preview_image_texture.create_from_image(preview_image, 0) + preview_image_texture = ImageTexture.create_from_image(preview_image) var bitmap_image := original_bitmap var bitmap_pivot := ( @@ -428,17 +421,17 @@ func _gizmo_rotate() -> void: # Does not work properly yet DrawingAlgos.nn_rotate(bitmap_image, angle, bitmap_pivot) Global.current_project.selection_map = bitmap_image Global.current_project.selection_map_changed() - self.big_bounding_rectangle = bitmap_image.get_used_rect() - update() + big_bounding_rectangle = bitmap_image.get_used_rect() + queue_redraw() -func select_rect(rect: Rect2, operation: int = SelectionOperation.ADD) -> void: - var project: Project = Global.current_project +func select_rect(rect: Rect2i, operation: int = SelectionOperation.ADD) -> void: + var project := Global.current_project var selection_map_copy := SelectionMap.new() selection_map_copy.copy_from(project.selection_map) # Used only if the selection is outside of the canvas boundaries, # on the left and/or above (negative coords) - var offset_position := Vector2.ZERO + var offset_position := Vector2i.ZERO if big_bounding_rectangle.position.x < 0: rect.position.x -= big_bounding_rectangle.position.x offset_position.x = big_bounding_rectangle.position.x @@ -446,7 +439,7 @@ func select_rect(rect: Rect2, operation: int = SelectionOperation.ADD) -> void: rect.position.y -= big_bounding_rectangle.position.y offset_position.y = big_bounding_rectangle.position.y - if offset_position != Vector2.ZERO: + if offset_position != Vector2i.ZERO: big_bounding_rectangle.position -= offset_position selection_map_copy.move_bitmap_values(project) @@ -458,30 +451,30 @@ func select_rect(rect: Rect2, operation: int = SelectionOperation.ADD) -> void: selection_map_copy.clear() for x in range(rect.position.x, rect.end.x): for y in range(rect.position.y, rect.end.y): - var pos := Vector2(x, y) - if !Rect2(Vector2.ZERO, selection_map_copy.get_size()).has_point(pos): + var pos := Vector2i(x, y) + if !Rect2i(Vector2i.ZERO, selection_map_copy.get_size()).has_point(pos): continue selection_map_copy.select_pixel(pos, project.selection_map.is_pixel_selected(pos)) big_bounding_rectangle = selection_map_copy.get_used_rect() - if offset_position != Vector2.ZERO: + if offset_position != Vector2i.ZERO: big_bounding_rectangle.position += offset_position selection_map_copy.move_bitmap_values(project) project.selection_map = selection_map_copy - self.big_bounding_rectangle = big_bounding_rectangle # call getter method + big_bounding_rectangle = big_bounding_rectangle # call getter method func move_borders_start() -> void: undo_data = get_undo_data(false) -func move_borders(move: Vector2) -> void: - if move == Vector2.ZERO: +func move_borders(move: Vector2i) -> void: + if move == Vector2i.ZERO: return - marching_ants_outline.offset += move - self.big_bounding_rectangle.position += move - update() + marching_ants_outline.offset += Vector2(move) + big_bounding_rectangle.position += move + queue_redraw() func move_borders_end() -> void: @@ -493,7 +486,7 @@ func move_borders_end() -> void: commit_undo("Select", undo_data) else: Global.current_project.selection_map_changed() - update() + queue_redraw() func transform_content_start() -> void: @@ -509,7 +502,7 @@ func transform_content_start() -> void: original_bitmap.copy_from(Global.current_project.selection_map) original_big_bounding_rectangle = big_bounding_rectangle original_offset = Global.current_project.selection_offset - update() + queue_redraw() func move_content(move: Vector2) -> void: @@ -519,7 +512,7 @@ func move_content(move: Vector2) -> void: func transform_content_confirm() -> void: if not is_moving_content: return - var project: Project = Global.current_project + var project := Global.current_project for cel in _get_selected_draw_cels(): var cel_image: Image = cel.get_image() var src: Image = preview_image @@ -553,17 +546,17 @@ func transform_content_confirm() -> void: original_bitmap = SelectionMap.new() is_moving_content = false is_pasting = false - update() + queue_redraw() func transform_content_cancel() -> void: if preview_image.is_empty(): return - var project: Project = Global.current_project + var project := Global.current_project project.selection_offset = original_offset is_moving_content = false - self.big_bounding_rectangle = original_big_bounding_rectangle + big_bounding_rectangle = original_big_bounding_rectangle project.selection_map = original_bitmap project.selection_map_changed() preview_image = original_preview_image @@ -583,7 +576,7 @@ func transform_content_cancel() -> void: preview_image = Image.new() original_bitmap = SelectionMap.new() is_pasting = false - update() + queue_redraw() func commit_undo(action: String, undo_data_tmp: Dictionary) -> void: @@ -591,7 +584,7 @@ func commit_undo(action: String, undo_data_tmp: Dictionary) -> void: print("No undo data found!") return var redo_data := get_undo_data(undo_data_tmp["undo_image"]) - var project: Project = Global.current_project + var project := Global.current_project project.undos += 1 project.undo_redo.create_action(action) @@ -614,15 +607,14 @@ func commit_undo(action: String, undo_data_tmp: Dictionary) -> void: if not image is Image: continue project.undo_redo.add_do_property(image, "data", redo_data[image]) - image.unlock() for image in undo_data_tmp: if not image is Image: continue project.undo_redo.add_undo_property(image, "data", undo_data_tmp[image]) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_do_method(project, "selection_map_changed") - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_undo_method(project, "selection_map_changed") + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_do_method(project.selection_map_changed) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_undo_method(project.selection_map_changed) project.undo_redo.commit_action() undo_data.clear() @@ -630,7 +622,7 @@ func commit_undo(action: String, undo_data_tmp: Dictionary) -> void: func get_undo_data(undo_image: bool) -> Dictionary: var data := {} - var project: Project = Global.current_project + var project := Global.current_project data["selection_map"] = project.selection_map data["big_bounding_rectangle"] = big_bounding_rectangle data["outline_offset"] = Global.current_project.selection_offset @@ -639,16 +631,14 @@ func get_undo_data(undo_image: bool) -> Dictionary: if undo_image: var images := _get_selected_draw_images() for image in images: - image.unlock() data[image] = image.data - image.lock() return data -func _get_selected_draw_cels() -> Array: # Array of BaseCel(s) - var cels := [] - var project: Project = Global.current_project +func _get_selected_draw_cels() -> Array[BaseCel]: + var cels: Array[BaseCel] = [] + var project := Global.current_project for cel_index in project.selected_cels: var cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]] if not cel is PixelCel: @@ -658,9 +648,9 @@ func _get_selected_draw_cels() -> Array: # Array of BaseCel(s) return cels -func _get_selected_draw_images() -> Array: # Array of Image(s) - var images := [] - var project: Project = Global.current_project +func _get_selected_draw_images() -> Array[Image]: + var images: Array[Image] = [] + var project := Global.current_project for cel_index in project.selected_cels: var cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]] if not cel is PixelCel: @@ -671,7 +661,7 @@ func _get_selected_draw_images() -> Array: # Array of Image(s) func cut() -> void: - var project: Project = Global.current_project + var project := Global.current_project if !project.layers[project.current_layer].can_layer_get_drawn(): return copy() @@ -679,7 +669,7 @@ func cut() -> void: func copy() -> void: - var project: Project = Global.current_project + var project := Global.current_project var cl_image := Image.new() var cl_selection_map := SelectionMap.new() var cl_big_bounding_rectangle := Rect2() @@ -700,20 +690,18 @@ func copy() -> void: selection_map_copy.move_bitmap_values(project, false) cl_selection_map = selection_map_copy else: - to_copy = image.get_rect(big_bounding_rectangle) - to_copy.lock() + to_copy = image.get_region(big_bounding_rectangle) # Remove unincluded pixels if the selection is not a single rectangle var offset_pos := big_bounding_rectangle.position for x in to_copy.get_size().x: for y in to_copy.get_size().y: - var pos := Vector2(x, y) + var pos := Vector2i(x, y) if offset_pos.x < 0: offset_pos.x = 0 if offset_pos.y < 0: offset_pos.y = 0 if not project.selection_map.is_pixel_selected(pos + offset_pos): to_copy.set_pixelv(pos, Color(0)) - to_copy.unlock() cl_selection_map.copy_from(project.selection_map) cl_big_bounding_rectangle = big_bounding_rectangle @@ -726,25 +714,22 @@ func copy() -> void: "selection_offset": cl_selection_offset, } - var clipboard_file := File.new() - clipboard_file.open(CLIPBOARD_FILE_PATH, File.WRITE) + var clipboard_file := FileAccess.open(CLIPBOARD_FILE_PATH, FileAccess.WRITE) clipboard_file.store_var(transfer_clipboard, true) clipboard_file.close() if !to_copy.is_empty(): var pattern: Patterns.Pattern = Global.patterns_popup.get_pattern(0) pattern.image = to_copy - var tex := ImageTexture.new() - tex.create_from_image(to_copy, 0) + var tex := ImageTexture.create_from_image(to_copy) var container = Global.patterns_popup.get_node("ScrollContainer/PatternContainer") container.get_child(0).get_child(0).texture = tex func paste(in_place := false) -> void: - var clipboard_file := File.new() - if !clipboard_file.file_exists(CLIPBOARD_FILE_PATH): + if !FileAccess.file_exists(CLIPBOARD_FILE_PATH): return - clipboard_file.open(CLIPBOARD_FILE_PATH, File.READ) + var clipboard_file := FileAccess.open(CLIPBOARD_FILE_PATH, FileAccess.READ) var clipboard = clipboard_file.get_var(true) clipboard_file.close() @@ -760,7 +745,7 @@ func paste(in_place := false) -> void: transform_content_confirm() undo_data = get_undo_data(true) clear_selection() - var project: Project = Global.current_project + var project := Global.current_project var clip_map := SelectionMap.new() clip_map.data = clipboard.selection_map @@ -774,21 +759,21 @@ func paste(in_place := false) -> void: project.selection_offset = clipboard.selection_offset big_bounding_rectangle = clipboard.big_bounding_rectangle if not in_place: # If "Paste" is selected, and not "Paste in Place" - var camera_center := Global.camera.get_camera_screen_center() - camera_center -= big_bounding_rectangle.size / 2 + var camera_center := Global.camera.get_screen_center_position() + camera_center -= Vector2(big_bounding_rectangle.size) / 2.0 var max_pos := project.size - big_bounding_rectangle.size if max_pos.x >= 0: - camera_center.x = clamp(camera_center.x, 0, max_pos.x) + camera_center.x = clampf(camera_center.x, 0, max_pos.x) else: camera_center.x = 0 if max_pos.y >= 0: - camera_center.y = clamp(camera_center.y, 0, max_pos.y) + camera_center.y = clampf(camera_center.y, 0, max_pos.y) else: camera_center.y = 0 big_bounding_rectangle.position = camera_center.floor() project.selection_map.move_bitmap_values(Global.current_project, false) - self.big_bounding_rectangle = big_bounding_rectangle + big_bounding_rectangle = big_bounding_rectangle temp_rect = big_bounding_rectangle is_moving_content = true is_pasting = true @@ -797,12 +782,12 @@ func paste(in_place := false) -> void: original_offset = project.selection_offset original_bitmap.copy_from(project.selection_map) preview_image.copy_from(original_preview_image) - preview_image_texture.create_from_image(preview_image, 0) + preview_image_texture = ImageTexture.create_from_image(preview_image) project.selection_map_changed() func delete(selected_cels := true) -> void: - var project: Project = Global.current_project + var project := Global.current_project if !project.layers[project.current_layer].can_layer_get_drawn(): return if is_moving_content: @@ -811,20 +796,19 @@ func delete(selected_cels := true) -> void: preview_image = Image.new() original_bitmap = SelectionMap.new() is_pasting = false - update() + queue_redraw() commit_undo("Draw", undo_data) return var undo_data_tmp := get_undo_data(true) - var images: Array + var images: Array[Image] if selected_cels: images = _get_selected_draw_images() else: images = [project.get_current_cel().get_image()] if project.has_selection: - var blank := Image.new() - blank.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) + var blank := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) var selection_map_copy := SelectionMap.new() selection_map_copy.copy_from(project.selection_map) # In case the selection map is bigger than the canvas @@ -840,7 +824,7 @@ func delete(selected_cels := true) -> void: func new_brush() -> void: - var project: Project = Global.current_project + var project := Global.current_project if !project.has_selection: return @@ -851,7 +835,7 @@ func new_brush() -> void: var selection_map_copy := SelectionMap.new() selection_map_copy.copy_from(project.selection_map) selection_map_copy.move_bitmap_values(project, false) - var clipboard = str2var(OS.get_clipboard()) + var clipboard = str_to_var(DisplayServer.clipboard_get()) if typeof(clipboard) == TYPE_DICTIONARY: # A sanity check if not clipboard.has_all( ["image", "selection_map", "big_bounding_rectangle", "selection_offset"] @@ -859,12 +843,11 @@ func new_brush() -> void: return clipboard.selection_map = selection_map_copy else: - brush = image.get_rect(big_bounding_rectangle) - brush.lock() + brush = image.get_region(big_bounding_rectangle) # Remove unincluded pixels if the selection is not a single rectangle for x in brush.get_size().x: for y in brush.get_size().y: - var pos := Vector2(x, y) + var pos := Vector2i(x, y) var offset_pos := big_bounding_rectangle.position if offset_pos.x < 0: offset_pos.x = 0 @@ -872,10 +855,9 @@ func new_brush() -> void: offset_pos.y = 0 if not project.selection_map.is_pixel_selected(pos + offset_pos): brush.set_pixelv(pos, Color(0)) - brush.unlock() if !brush.is_invisible(): - var brush_used: Image = brush.get_rect(brush.get_used_rect()) + var brush_used: Image = brush.get_region(brush.get_used_rect()) project.brushes.append(brush_used) Brushes.add_project_brush(brush_used) @@ -883,14 +865,14 @@ func new_brush() -> void: func select_all() -> void: var undo_data_tmp := get_undo_data(false) clear_selection() - var full_rect := Rect2(Vector2.ZERO, Global.current_project.size) + var full_rect := Rect2i(Vector2.ZERO, Global.current_project.size) select_rect(full_rect) commit_undo("Select", undo_data_tmp) func invert() -> void: transform_content_confirm() - var project: Project = Global.current_project + var project := Global.current_project var undo_data_tmp := get_undo_data(false) var selection_map_copy := SelectionMap.new() selection_map_copy.copy_from(project.selection_map) @@ -898,13 +880,13 @@ func invert() -> void: selection_map_copy.invert() project.selection_map = selection_map_copy project.selection_map_changed() - self.big_bounding_rectangle = selection_map_copy.get_used_rect() + big_bounding_rectangle = selection_map_copy.get_used_rect() project.selection_offset = Vector2.ZERO commit_undo("Select", undo_data_tmp) func clear_selection(use_undo := false) -> void: - var project: Project = Global.current_project + var project := Global.current_project if !project.has_selection: return transform_content_confirm() @@ -915,37 +897,33 @@ func clear_selection(use_undo := false) -> void: selection_map_copy.clear() project.selection_map = selection_map_copy - self.big_bounding_rectangle = Rect2() + big_bounding_rectangle = Rect2() project.selection_offset = Vector2.ZERO - update() + queue_redraw() if use_undo: commit_undo("Clear Selection", undo_data_tmp) func _get_preview_image() -> void: - var project: Project = Global.current_project - var blended_image := Image.new() - blended_image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) + var project := Global.current_project + var blended_image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) Export.blend_selected_cels(blended_image, project.frames[project.current_frame]) if original_preview_image.is_empty(): - original_preview_image = blended_image.get_rect(big_bounding_rectangle) - original_preview_image.lock() + original_preview_image = blended_image.get_region(big_bounding_rectangle) # For non-rectangular selections for x in range(0, big_bounding_rectangle.size.x): for y in range(0, big_bounding_rectangle.size.y): - var pos := Vector2(x, y) + var pos := Vector2i(x, y) if !project.can_pixel_get_drawn(pos + big_bounding_rectangle.position): original_preview_image.set_pixelv(pos, Color(0, 0, 0, 0)) - original_preview_image.unlock() if original_preview_image.is_invisible(): original_preview_image = Image.new() return preview_image.copy_from(original_preview_image) - preview_image_texture.create_from_image(preview_image, 0) + preview_image_texture = ImageTexture.create_from_image(preview_image) - var clear_image := Image.new() - clear_image.create( + var clear_image := Image.create( original_preview_image.get_width(), original_preview_image.get_height(), false, @@ -965,16 +943,13 @@ func _get_preview_image() -> void: func _get_selected_image(cel_image: Image) -> Image: - var project: Project = Global.current_project + var project := Global.current_project var image := Image.new() - image = cel_image.get_rect(big_bounding_rectangle) - image.lock() + image = cel_image.get_region(big_bounding_rectangle) # For non-rectangular selections for x in range(0, big_bounding_rectangle.size.x): for y in range(0, big_bounding_rectangle.size.y): - var pos := Vector2(x, y) + var pos := Vector2i(x, y) if !project.can_pixel_get_drawn(pos + big_bounding_rectangle.position): image.set_pixelv(pos, Color(0, 0, 0, 0)) - - image.unlock() return image diff --git a/src/UI/Canvas/TileMode.gd b/src/UI/Canvas/TileMode.gd index b949ec9ed85..316f2eeca16 100644 --- a/src/UI/Canvas/TileMode.gd +++ b/src/UI/Canvas/TileMode.gd @@ -16,37 +16,33 @@ func _draw() -> void: var modulate_color := Color( tilemode_opacity, tilemode_opacity, tilemode_opacity, tilemode_opacity ) # premultiply alpha blending is applied - var current_frame_texture: Texture = Global.canvas.currently_visible_frame.get_texture() + var current_frame_texture: Texture2D = Global.canvas.currently_visible_frame.get_texture() for pos in positions: draw_texture(current_frame_texture, pos, modulate_color) draw_set_transform(Vector2.ZERO, 0, Vector2.ONE) -func get_tile_positions() -> Array: +func get_tile_positions() -> Array[Vector2i]: var defaulted_tiles := tiles if defaulted_tiles == null: defaulted_tiles = Global.current_project.tiles - var x_basis: Vector2 = defaulted_tiles.x_basis - var y_basis: Vector2 = defaulted_tiles.y_basis - var tile_mode: int = defaulted_tiles.mode + var x_basis := defaulted_tiles.x_basis + var y_basis := defaulted_tiles.y_basis + var tile_mode := defaulted_tiles.mode var x_range := ( - range(-1, 2) - if tile_mode in [Tiles.MODE.X_AXIS, Tiles.MODE.BOTH] - else range(0, 1) + range(-1, 2) if tile_mode in [Tiles.MODE.X_AXIS, Tiles.MODE.BOTH] else range(0, 1) ) var y_range := ( - range(-1, 2) - if tile_mode in [Tiles.MODE.Y_AXIS, Tiles.MODE.BOTH] - else range(0, 1) + range(-1, 2) if tile_mode in [Tiles.MODE.Y_AXIS, Tiles.MODE.BOTH] else range(0, 1) ) - var positions := [] + var positions: Array[Vector2i] = [] for r in y_range: for c in x_range: if not draw_center and r == 0 and c == 0: continue - var position: Vector2 = r * y_basis + c * x_basis - positions.append(position) + var pos: Vector2i = r * y_basis + c * x_basis + positions.append(pos) return positions diff --git a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd index 164fdfebab9..26c355a49e9 100644 --- a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd +++ b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd @@ -1,14 +1,23 @@ extends PanelContainer -onready var canvas_preview := $"%CanvasPreview" as Node2D -onready var camera := $"%CameraPreview" as Camera2D -onready var play_button := $"%PlayButton" as Button -onready var start_frame := $"%StartFrame" as ValueSlider -onready var end_frame := $"%EndFrame" as ValueSlider +@onready var preview_zoom_slider := $VBox/HBox/VBoxContainer/PreviewZoomSlider as VSlider +@onready var canvas_preview := $"%CanvasPreview" as Node2D +@onready var camera := $"%CameraPreview" as Camera2D +@onready var play_button := $"%PlayButton" as Button +@onready var start_frame := $"%StartFrame" as ValueSlider +@onready var end_frame := $"%EndFrame" as ValueSlider + + +func _ready() -> void: + camera.zoom_changed.connect(_zoom_changed) + + +func _zoom_changed() -> void: + preview_zoom_slider.value = camera.zoom.x func _on_PreviewZoomSlider_value_changed(value: float) -> void: - camera.zoom = -Vector2(value, value) + camera.zoom = Vector2(value, value) camera.save_values_to_project() camera.update_transparent_checker_offset() @@ -17,11 +26,11 @@ func _on_PlayButton_toggled(button_pressed: bool) -> void: if button_pressed: if canvas_preview.mode == canvas_preview.Mode.TIMELINE: if Global.current_project.frames.size() <= 1: - play_button.pressed = false + play_button.button_pressed = false return else: if start_frame.value == end_frame.value: - play_button.pressed = false + play_button.button_pressed = false return canvas_preview.animation_timer.start() Global.change_button_texturerect(play_button.get_child(0), "pause.png") @@ -31,7 +40,7 @@ func _on_PlayButton_toggled(button_pressed: bool) -> void: func _on_OptionButton_item_selected(index: int) -> void: - play_button.pressed = false + play_button.button_pressed = false canvas_preview.mode = index if index == 0: $VBox/Animation/VBoxContainer/Options.visible = false @@ -40,7 +49,7 @@ func _on_OptionButton_item_selected(index: int) -> void: ) else: $VBox/Animation/VBoxContainer/Options.visible = true - canvas_preview.update() + canvas_preview.queue_redraw() func _on_HFrames_value_changed(value: float) -> void: @@ -48,7 +57,7 @@ func _on_HFrames_value_changed(value: float) -> void: var frames: int = canvas_preview.h_frames * canvas_preview.v_frames start_frame.max_value = frames end_frame.max_value = frames - canvas_preview.update() + canvas_preview.queue_redraw() func _on_VFrames_value_changed(value: float) -> void: @@ -56,7 +65,7 @@ func _on_VFrames_value_changed(value: float) -> void: var frames: int = canvas_preview.h_frames * canvas_preview.v_frames start_frame.max_value = frames end_frame.max_value = frames - canvas_preview.update() + canvas_preview.queue_redraw() func _on_StartFrame_value_changed(value: float) -> void: @@ -64,7 +73,7 @@ func _on_StartFrame_value_changed(value: float) -> void: canvas_preview.start_sprite_sheet_frame = value if end_frame.value < value: end_frame.value = value - canvas_preview.update() + canvas_preview.queue_redraw() func _on_EndFrame_value_changed(value: float) -> void: @@ -72,7 +81,7 @@ func _on_EndFrame_value_changed(value: float) -> void: if start_frame.value > value: start_frame.value = value canvas_preview.frame_index = value - 1 - canvas_preview.update() + canvas_preview.queue_redraw() func _on_PreviewViewportContainer_mouse_entered() -> void: diff --git a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn index 295a9f40e3f..5f3aebff2ad 100644 --- a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn +++ b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn @@ -1,175 +1,153 @@ -[gd_scene load_steps=10 format=2] - -[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/Shaders/TransparentChecker.shader" type="Shader" id=2] -[ext_resource path="res://src/UI/Canvas/CameraMovement.gd" type="Script" id=3] -[ext_resource path="res://src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd" type="Script" id=4] -[ext_resource path="res://src/UI/Canvas/CanvasPreview.tscn" type="PackedScene" id=5] -[ext_resource path="res://assets/graphics/timeline/play.png" type="Texture" id=6] -[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.tscn" type="PackedScene" id=7] -[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=8] - -[sub_resource type="ShaderMaterial" id=1] -shader = ExtResource( 2 ) -shader_param/size = 10.0 -shader_param/alpha = 1.0 -shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 ) -shader_param/color2 = Color( 1, 1, 1, 1 ) -shader_param/offset = Vector2( 0, 0 ) -shader_param/scale = Vector2( 0, 0 ) -shader_param/rect_size = Vector2( 0, 0 ) -shader_param/follow_movement = false -shader_param/follow_scale = false +[gd_scene load_steps=10 format=3 uid="uid://ccsihk3yxwei5"] + +[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="1"] +[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="2"] +[ext_resource type="Script" path="res://src/UI/Canvas/CameraMovement.gd" id="3"] +[ext_resource type="Script" path="res://src/UI/CanvasPreviewContainer/CanvasPreviewContainer.gd" id="4"] +[ext_resource type="PackedScene" uid="uid://c546tskdu53j1" path="res://src/UI/Canvas/CanvasPreview.tscn" id="5"] +[ext_resource type="Texture2D" uid="uid://c7smxwfa8826j" path="res://assets/graphics/timeline/play.png" id="6"] +[ext_resource type="PackedScene" uid="uid://cii2hpylme60s" path="res://src/UI/Nodes/CollapsibleContainer.tscn" id="7"] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="8"] + +[sub_resource type="ShaderMaterial" id="1"] +shader = ExtResource("2") +shader_parameter/size = 10.0 +shader_parameter/alpha = 1.0 +shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1) +shader_parameter/color2 = Color(1, 1, 1, 1) +shader_parameter/offset = Vector2(0, 0) +shader_parameter/scale = Vector2(0, 0) +shader_parameter/rect_size = Vector2(0, 0) +shader_parameter/follow_movement = false +shader_parameter/follow_scale = false [node name="CanvasPreviewContainer" type="PanelContainer"] -margin_right = 328.0 -margin_bottom = 174.0 -rect_min_size = Vector2( 0, 110 ) -script = ExtResource( 4 ) +custom_minimum_size = Vector2(0, 110) +offset_right = 328.0 +offset_bottom = 174.0 +script = ExtResource("4") [node name="VBox" type="VBoxContainer" parent="."] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 321.0 -margin_bottom = 167.0 +layout_mode = 2 [node name="HBox" type="HBoxContainer" parent="VBox"] -margin_right = 314.0 -margin_bottom = 136.0 +layout_mode = 2 size_flags_vertical = 3 [node name="VBoxContainer" type="VBoxContainer" parent="VBox/HBox"] -margin_right = 16.0 -margin_bottom = 136.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBox/HBox/VBoxContainer"] -margin_left = 4.0 -margin_right = 12.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 4 text = "+" -align = 1 [node name="PreviewZoomSlider" type="VSlider" parent="VBox/HBox/VBoxContainer"] -margin_top = 18.0 -margin_right = 16.0 -margin_bottom = 118.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 3 +mouse_default_cursor_shape = 2 +min_value = 1.0 +max_value = 5.0 step = 0.01 +value = 1.0 [node name="Label2" type="Label" parent="VBox/HBox/VBoxContainer"] -margin_left = 5.0 -margin_top = 122.0 -margin_right = 10.0 -margin_bottom = 136.0 +layout_mode = 2 size_flags_horizontal = 4 text = "-" -align = 1 -[node name="PreviewViewportContainer" type="ViewportContainer" parent="VBox/HBox"] -margin_left = 20.0 -margin_right = 314.0 -margin_bottom = 136.0 +[node name="PreviewViewportContainer" type="SubViewportContainer" parent="VBox/HBox"] +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 stretch = true -[node name="Viewport" type="Viewport" parent="VBox/HBox/PreviewViewportContainer"] -size = Vector2( 294, 136 ) +[node name="SubViewport" type="SubViewport" parent="VBox/HBox/PreviewViewportContainer"] transparent_bg = true handle_input_locally = false -render_target_update_mode = 3 +canvas_item_default_texture_filter = 0 +size = Vector2i(308, 139) +render_target_update_mode = 4 -[node name="TransparentChecker" parent="VBox/HBox/PreviewViewportContainer/Viewport" instance=ExtResource( 1 )] -material = SubResource( 1 ) +[node name="TransparentChecker" parent="VBox/HBox/PreviewViewportContainer/SubViewport" instance=ExtResource("1")] +material = SubResource("1") +anchors_preset = 0 -[node name="CanvasPreview" parent="VBox/HBox/PreviewViewportContainer/Viewport" instance=ExtResource( 5 )] +[node name="CanvasPreview" parent="VBox/HBox/PreviewViewportContainer/SubViewport" instance=ExtResource("5")] unique_name_in_owner = true -[node name="CameraPreview" type="Camera2D" parent="VBox/HBox/PreviewViewportContainer/Viewport"] +[node name="CameraPreview" type="Camera2D" parent="VBox/HBox/PreviewViewportContainer/SubViewport"] unique_name_in_owner = true -offset = Vector2( 32, 32 ) -current = true -zoom = Vector2( 0.15, 0.15 ) -script = ExtResource( 3 ) +offset = Vector2(32, 32) +zoom = Vector2(0.15, 0.15) +script = ExtResource("3") index = 2 [node name="Animation" type="HBoxContainer" parent="VBox"] -margin_top = 140.0 -margin_right = 314.0 -margin_bottom = 160.0 +layout_mode = 2 [node name="PlayButton" type="Button" parent="VBox/Animation" groups=["UIButtons"]] unique_name_in_owner = true -margin_right = 20.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 20, 0 ) -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 size_flags_vertical = 0 +mouse_default_cursor_shape = 2 toggle_mode = true [node name="TextureRect" type="TextureRect" parent="VBox/Animation/PlayButton"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -3.5 -margin_top = -6.0 -margin_right = 3.5 -margin_bottom = 6.0 +offset_left = -3.5 +offset_top = -6.0 +offset_right = 3.5 +offset_bottom = 6.0 mouse_default_cursor_shape = 2 -texture = ExtResource( 6 ) +texture = ExtResource("6") [node name="VBoxContainer" type="VBoxContainer" parent="VBox/Animation"] -margin_left = 24.0 -margin_right = 314.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Mode" type="HBoxContainer" parent="VBox/Animation/VBoxContainer"] -margin_right = 290.0 -margin_bottom = 20.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBox/Animation/VBoxContainer/Mode"] -margin_top = 3.0 -margin_right = 111.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Animation mode:" [node name="OptionButton" type="OptionButton" parent="VBox/Animation/VBoxContainer/Mode"] -margin_left = 115.0 -margin_right = 290.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "All frames" +mouse_default_cursor_shape = 2 clip_text = true -align = 1 -items = [ "All frames", null, false, 0, null, "Current frame as spritesheet", null, false, 1, null ] +item_count = 2 selected = 0 +popup/item_0/text = "All frames" +popup/item_0/id = 0 +popup/item_1/text = "Current frame as spritesheet" +popup/item_1/id = 1 -[node name="Options" parent="VBox/Animation/VBoxContainer" instance=ExtResource( 7 )] +[node name="Options" parent="VBox/Animation/VBoxContainer" instance=ExtResource("7")] visible = false -margin_top = 24.0 -margin_right = 290.0 -margin_bottom = 44.0 +layout_mode = 2 text = "Spritesheet options" [node name="GridContainer" type="GridContainer" parent="VBox/Animation/VBoxContainer/Options"] visible = false -margin_right = 290.0 -margin_bottom = 52.0 +layout_mode = 2 columns = 2 -[node name="HFrames" type="TextureProgress" parent="VBox/Animation/VBoxContainer/Options/GridContainer"] -margin_right = 6.0 -margin_bottom = 6.0 -rect_min_size = Vector2( 0, 24 ) -mouse_default_cursor_shape = 2 +[node name="HFrames" type="TextureProgressBar" parent="VBox/Animation/VBoxContainer/Options/GridContainer"] +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 value = 1.0 allow_greater = true @@ -178,16 +156,16 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 8 ) +script = ExtResource("8") prefix = "Horizontal frames:" -[node name="VFrames" type="TextureProgress" parent="VBox/Animation/VBoxContainer/Options/GridContainer"] -margin_right = 6.0 -margin_bottom = 6.0 -rect_min_size = Vector2( 0, 24 ) -mouse_default_cursor_shape = 2 +[node name="VFrames" type="TextureProgressBar" parent="VBox/Animation/VBoxContainer/Options/GridContainer"] +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 value = 1.0 allow_greater = true @@ -196,17 +174,17 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 8 ) +script = ExtResource("8") prefix = "Vertical frames:" -[node name="StartFrame" type="TextureProgress" parent="VBox/Animation/VBoxContainer/Options/GridContainer"] +[node name="StartFrame" type="TextureProgressBar" parent="VBox/Animation/VBoxContainer/Options/GridContainer"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -rect_min_size = Vector2( 0, 24 ) -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 max_value = 1.0 value = 1.0 @@ -215,17 +193,17 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 8 ) +script = ExtResource("8") prefix = "Start frame:" -[node name="EndFrame" type="TextureProgress" parent="VBox/Animation/VBoxContainer/Options/GridContainer"] +[node name="EndFrame" type="TextureProgressBar" parent="VBox/Animation/VBoxContainer/Options/GridContainer"] unique_name_in_owner = true -margin_right = 6.0 -margin_bottom = 6.0 -rect_min_size = Vector2( 0, 24 ) -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = 1.0 max_value = 1.0 value = 1.0 @@ -234,7 +212,7 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 8 ) +script = ExtResource("8") prefix = "End frame:" [connection signal="value_changed" from="VBox/HBox/VBoxContainer/PreviewZoomSlider" to="." method="_on_PreviewZoomSlider_value_changed"] diff --git a/src/UI/ColorPickers/ColorPickers.gd b/src/UI/ColorPickers/ColorPickers.gd index b667bb4b0d7..9620e4bef44 100644 --- a/src/UI/ColorPickers/ColorPickers.gd +++ b/src/UI/ColorPickers/ColorPickers.gd @@ -1,18 +1,15 @@ extends Container -onready var left_picker := $ColorPickersHorizontal/LeftColorPickerButton -onready var right_picker := $ColorPickersHorizontal/RightColorPickerButton -onready var average_color = $"%AverageColor" -onready var transparent_checker = $"%TransparentChecker" +@onready var left_picker := $ColorPickersHorizontal/LeftColorPickerButton as ColorPickerButton +@onready var right_picker := $ColorPickersHorizontal/RightColorPickerButton as ColorPickerButton +@onready var average_color := $"%AverageColor" as ColorRect func _ready() -> void: - Tools.connect("color_changed", self, "update_color") + Tools.color_changed.connect(update_color) left_picker.get_picker().presets_visible = false right_picker.get_picker().presets_visible = false _average(left_picker.color, right_picker.color) - transparent_checker.rect_position = average_color.rect_position - transparent_checker.rect_size = average_color.rect_size func _on_ColorSwitch_pressed() -> void: @@ -20,27 +17,27 @@ func _on_ColorSwitch_pressed() -> void: func _on_ColorPickerButton_color_changed(color: Color, right: bool): - var button := BUTTON_RIGHT if right else BUTTON_LEFT + var button := MOUSE_BUTTON_RIGHT if right else MOUSE_BUTTON_LEFT Tools.assign_color(color, button) _average(left_picker.color, right_picker.color) func _on_ToLeft_pressed(): - Tools.assign_color(average_color.color, BUTTON_LEFT) + Tools.assign_color(average_color.color, MOUSE_BUTTON_LEFT) func _on_ToRight_pressed(): - Tools.assign_color(average_color.color, BUTTON_RIGHT) + Tools.assign_color(average_color.color, MOUSE_BUTTON_RIGHT) func _on_ColorPickerButton_pressed() -> void: Global.can_draw = false - Tools.disconnect("color_changed", self, "update_color") + Tools.color_changed.disconnect(update_color) func _on_ColorPickerButton_popup_closed() -> void: Global.can_draw = true - Tools.connect("color_changed", self, "update_color") + Tools.color_changed.connect(update_color) func _on_ColorDefaults_pressed() -> void: @@ -48,7 +45,7 @@ func _on_ColorDefaults_pressed() -> void: func update_color(color: Color, button: int) -> void: - if button == BUTTON_LEFT: + if button == MOUSE_BUTTON_LEFT: left_picker.color = color else: right_picker.color = color @@ -56,23 +53,20 @@ func update_color(color: Color, button: int) -> void: func _average(color_1: Color, color_2: Color) -> void: - var average_r = (color_1.r + color_2.r) / 2.0 - var average_g = (color_1.g + color_2.g) / 2.0 - var average_b = (color_1.b + color_2.b) / 2.0 - var average_a = (color_1.a + color_2.a) / 2.0 + var average_r := (color_1.r + color_2.r) / 2.0 + var average_g := (color_1.g + color_2.g) / 2.0 + var average_b := (color_1.b + color_2.b) / 2.0 + var average_a := (color_1.a + color_2.a) / 2.0 var average := Color(average_r, average_g, average_b, average_a) var copy_button = average_color.get_parent() - copy_button.hint_tooltip = str("Average Color:\n#", average.to_html(), "\n(Press to Copy)") + copy_button.tooltip_text = str("Average Color:\n#", average.to_html(), "\n(Press to Copy)") average_color.color = average func _on_CopyAverage_button_down(): - transparent_checker.visible = false average_color.visible = false - OS.clipboard = average_color.color.to_html() func _on_CopyAverage_button_up(): - transparent_checker.visible = true average_color.visible = true diff --git a/src/UI/ColorPickers/ColorPickers.tscn b/src/UI/ColorPickers/ColorPickers.tscn index f8e47b5fb64..68777f3906d 100644 --- a/src/UI/ColorPickers/ColorPickers.tscn +++ b/src/UI/ColorPickers/ColorPickers.tscn @@ -1,187 +1,163 @@ -[gd_scene load_steps=10 format=2] - -[ext_resource path="res://assets/graphics/misc/color_defaults.png" type="Texture" id=1] -[ext_resource path="res://assets/graphics/misc/color_switch.png" type="Texture" id=2] -[ext_resource path="res://src/UI/ColorPickers/ColorPickers.gd" type="Script" id=3] -[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=4] -[ext_resource path="res://src/Shaders/TransparentChecker.shader" type="Shader" id=5] -[ext_resource path="res://assets/graphics/timeline/move_arrow.png" type="Texture" id=6] - -[sub_resource type="InputEventAction" id=20] -action = "switch_colors" - -[sub_resource type="ShortCut" id=19] -shortcut = SubResource( 20 ) - -[sub_resource type="ShaderMaterial" id=1] -shader = ExtResource( 5 ) -shader_param/size = 10.0 -shader_param/alpha = 1.0 -shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 ) -shader_param/color2 = Color( 1, 1, 1, 1 ) -shader_param/offset = Vector2( 0, 0 ) -shader_param/scale = Vector2( 0, 0 ) -shader_param/rect_size = Vector2( 0, 0 ) -shader_param/follow_movement = false -shader_param/follow_scale = false +[gd_scene load_steps=11 format=3 uid="uid://c3vcvhh4d8hd7"] + +[ext_resource type="Texture2D" uid="uid://dkpxkdk1xf0ea" path="res://assets/graphics/misc/color_defaults.png" id="1"] +[ext_resource type="Texture2D" uid="uid://d0v821l01w7go" path="res://assets/graphics/misc/color_switch.png" id="2"] +[ext_resource type="Script" path="res://src/UI/ColorPickers/ColorPickers.gd" id="3"] +[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="4"] +[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="5"] +[ext_resource type="Texture2D" uid="uid://d1oxrkwndy5fi" path="res://assets/graphics/timeline/move_arrow.png" id="6"] + +[sub_resource type="Shortcut" id="19"] + +[sub_resource type="ShaderMaterial" id="1"] +shader = ExtResource("5") +shader_parameter/size = 10.0 +shader_parameter/alpha = 1.0 +shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1) +shader_parameter/color2 = Color(1, 1, 1, 1) +shader_parameter/offset = Vector2(0, 0) +shader_parameter/scale = Vector2(0, 0) +shader_parameter/rect_size = Vector2(0, 0) +shader_parameter/follow_movement = false +shader_parameter/follow_scale = false + +[sub_resource type="InputEventAction" id="InputEventAction_nptxe"] +action = &"reset_colors_default" + +[sub_resource type="Shortcut" id="Shortcut_uay2n"] +events = [SubResource("InputEventAction_nptxe")] [node name="ColorPickers" type="PanelContainer"] -margin_left = 958.0 -margin_top = 170.0 -margin_right = 1276.0 -margin_bottom = 229.062 -script = ExtResource( 3 ) +offset_left = 958.0 +offset_top = 170.0 +offset_right = 1276.0 +offset_bottom = 229.062 +script = ExtResource("3") [node name="ColorPickersHorizontal" type="HBoxContainer" parent="."] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 311.0 -margin_bottom = 55.0 -custom_constants/separation = 13 +layout_mode = 2 +theme_override_constants/separation = 13 alignment = 1 [node name="LeftColorPickerButton" type="ColorPickerButton" parent="ColorPickersHorizontal"] -margin_left = 19.0 -margin_top = 8.0 -margin_right = 83.0 -margin_bottom = 40.0 -rect_min_size = Vector2( 64, 32 ) -hint_tooltip = "Choose a color for the left tool" -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(64, 32) +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 4 +tooltip_text = "Choose a color for the left tool" +mouse_default_cursor_shape = 2 [node name="ColorButtonsVertical" type="VBoxContainer" parent="ColorPickersHorizontal"] -margin_left = 96.0 -margin_right = 207.0 -margin_bottom = 48.0 +layout_mode = 2 alignment = 1 [node name="ColorSwitch" type="TextureButton" parent="ColorPickersHorizontal/ColorButtonsVertical" groups=["UIButtons"]] -margin_left = 43.0 -margin_right = 68.0 -margin_bottom = 7.0 -hint_tooltip = "Switch left and right colors +layout_mode = 2 +size_flags_horizontal = 4 +tooltip_text = "Switch left and right colors (%s)" mouse_default_cursor_shape = 2 -size_flags_horizontal = 4 +shortcut = SubResource("19") shortcut_in_tooltip = false -shortcut = SubResource( 19 ) -texture_normal = ExtResource( 2 ) +texture_normal = ExtResource("2") [node name="HBoxContainer" type="HBoxContainer" parent="ColorPickersHorizontal/ColorButtonsVertical"] -margin_top = 11.0 -margin_right = 111.0 -margin_bottom = 36.0 +layout_mode = 2 alignment = 1 [node name="ToLeft" type="Button" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer"] -margin_right = 25.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) -hint_tooltip = "Interpolate the (Left Color) +custom_minimum_size = Vector2(25, 25) +layout_mode = 2 +tooltip_text = "Interpolate the (Left Color) towards the (Right Color)" [node name="TextureRect" type="TextureRect" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/ToLeft"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 4.0 -margin_top = 4.0 -margin_right = -4.0 -margin_bottom = -4.0 -texture = ExtResource( 6 ) -expand = true +offset_left = 4.0 +offset_top = 4.0 +offset_right = -4.0 +offset_bottom = -4.0 +texture = ExtResource("6") +expand_mode = 1 stretch_mode = 6 flip_h = true -__meta__ = { -"_editor_description_": "" -} [node name="Line1" type="HSeparator" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer"] -margin_left = 29.0 -margin_right = 39.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 10, 0 ) +custom_minimum_size = Vector2(10, 0) +layout_mode = 2 size_flags_horizontal = 3 [node name="CopyAverage" type="Button" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer"] -margin_left = 43.0 -margin_right = 68.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) - -[node name="TransparentChecker" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/CopyAverage" instance=ExtResource( 4 )] -unique_name_in_owner = true -material = SubResource( 1 ) -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_right = 0.0 -margin_bottom = 0.0 -__meta__ = { -"_editor_description_": "" -} +custom_minimum_size = Vector2(25, 25) +layout_mode = 2 [node name="AverageColor" type="ColorRect" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/CopyAverage"] unique_name_in_owner = true +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -10.5 -margin_top = -10.5 -margin_right = 10.5 -margin_bottom = 10.5 +offset_left = -10.5 +offset_top = -10.5 +offset_right = 10.5 +offset_bottom = 10.5 mouse_filter = 2 +[node name="TransparentChecker" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/CopyAverage/AverageColor" instance=ExtResource("4")] +unique_name_in_owner = true +show_behind_parent = true +material = SubResource("1") +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + [node name="Line2" type="HSeparator" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer"] -margin_left = 72.0 -margin_right = 82.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 10, 0 ) +custom_minimum_size = Vector2(10, 0) +layout_mode = 2 size_flags_horizontal = 3 [node name="ToRight" type="Button" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer"] -margin_left = 86.0 -margin_right = 111.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) -hint_tooltip = "Interpolate the (Right Color) +custom_minimum_size = Vector2(25, 25) +layout_mode = 2 +tooltip_text = "Interpolate the (Right Color) towards the (Left Color)" [node name="TextureRect" type="TextureRect" parent="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/ToRight"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 4.0 -margin_top = 4.0 -margin_right = -4.0 -margin_bottom = -4.0 -texture = ExtResource( 6 ) -expand = true +offset_left = 4.0 +offset_top = 4.0 +offset_right = -4.0 +offset_bottom = -4.0 +texture = ExtResource("6") +expand_mode = 1 stretch_mode = 6 [node name="ColorDefaults" type="TextureButton" parent="ColorPickersHorizontal/ColorButtonsVertical"] -margin_left = 43.0 -margin_top = 40.0 -margin_right = 68.0 -margin_bottom = 48.0 -hint_tooltip = "Reset the colors to their default state (black for left, white for right)" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 4 -texture_normal = ExtResource( 1 ) +tooltip_text = "Reset the colors to their default state (black for left, white for right)" +mouse_default_cursor_shape = 2 +shortcut = SubResource("Shortcut_uay2n") +texture_normal = ExtResource("1") [node name="RightColorPickerButton" type="ColorPickerButton" parent="ColorPickersHorizontal"] -margin_left = 220.0 -margin_top = 8.0 -margin_right = 284.0 -margin_bottom = 40.0 -rect_min_size = Vector2( 64, 32 ) -hint_tooltip = "Choose a color for the right tool" -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(64, 32) +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 4 -color = Color( 1, 1, 1, 1 ) +tooltip_text = "Choose a color for the right tool" +mouse_default_cursor_shape = 2 +color = Color(1, 1, 1, 1) -[connection signal="color_changed" from="ColorPickersHorizontal/LeftColorPickerButton" to="." method="_on_ColorPickerButton_color_changed" binds= [ false ]] +[connection signal="color_changed" from="ColorPickersHorizontal/LeftColorPickerButton" to="." method="_on_ColorPickerButton_color_changed" binds= [false]] [connection signal="popup_closed" from="ColorPickersHorizontal/LeftColorPickerButton" to="." method="_on_ColorPickerButton_popup_closed"] [connection signal="pressed" from="ColorPickersHorizontal/LeftColorPickerButton" to="." method="_on_ColorPickerButton_pressed"] [connection signal="pressed" from="ColorPickersHorizontal/ColorButtonsVertical/ColorSwitch" to="." method="_on_ColorSwitch_pressed"] @@ -190,6 +166,6 @@ color = Color( 1, 1, 1, 1 ) [connection signal="button_up" from="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/CopyAverage" to="." method="_on_CopyAverage_button_up"] [connection signal="pressed" from="ColorPickersHorizontal/ColorButtonsVertical/HBoxContainer/ToRight" to="." method="_on_ToRight_pressed"] [connection signal="pressed" from="ColorPickersHorizontal/ColorButtonsVertical/ColorDefaults" to="." method="_on_ColorDefaults_pressed"] -[connection signal="color_changed" from="ColorPickersHorizontal/RightColorPickerButton" to="." method="_on_ColorPickerButton_color_changed" binds= [ true ]] +[connection signal="color_changed" from="ColorPickersHorizontal/RightColorPickerButton" to="." method="_on_ColorPickerButton_color_changed" binds= [true]] [connection signal="popup_closed" from="ColorPickersHorizontal/RightColorPickerButton" to="." method="_on_ColorPickerButton_popup_closed"] [connection signal="pressed" from="ColorPickersHorizontal/RightColorPickerButton" to="." method="_on_ColorPickerButton_pressed"] diff --git a/src/UI/Dialogs/AboutDialog.gd b/src/UI/Dialogs/AboutDialog.gd index 2db7d244317..692d2672d88 100644 --- a/src/UI/Dialogs/AboutDialog.gd +++ b/src/UI/Dialogs/AboutDialog.gd @@ -1,6 +1,6 @@ -extends WindowDialog +extends Window -const CONTRIBUTORS := [ +const CONTRIBUTORS: PackedStringArray = [ "20kdc", "Aaron Franke (aaronfranke)", "AbhinavKDev (abhinav3967)", @@ -23,6 +23,7 @@ const CONTRIBUTORS := [ "gschwind", "Haoyu Qiu (timothyqiu)", "Hugo Locurcio (Calinou)", + "huskee", "Igor Santarek (jegor377)", "Jeremy Behreandt (behreajj)", "John Jerome Romero (Wishdream)", @@ -50,12 +51,11 @@ const CONTRIBUTORS := [ "TheLsbt", "THWLF", "Vriska Weaver (henlo-birb)", - "Xenofon Konitsas (huskee)", ] const TRANSLATORS_DICTIONARY := { "Emmanouil Papadeas (Overloaded)": ["Greek"], - "Xenofon Konitsas (huskee)": ["Greek"], + "huskee": ["Greek"], "Lena Louloudaki (Soliscital)": ["Greek"], "Hugo Locurcio (Calinou)": ["French"], "blackjoker77777": ["French"], @@ -174,7 +174,7 @@ const TRANSLATORS_DICTIONARY := { ], } -const DONORS := [ +const DONORS: PackedStringArray = [ "BasicIncomePlz", "Benedikt", "David Maziarka", @@ -194,22 +194,22 @@ const DONORS := [ "ฮ ฮฟฮปฮนฯ„ฮนฯƒฮผฯŒฯ‚ ฮคฯฯ€ฮฟฯ… 1", ] -export(Array, String, MULTILINE) var licenses: Array +@export_multiline var licenses: PackedStringArray -onready var credits := $AboutUI/Credits as HSplitContainer -onready var groups := $AboutUI/Credits/Groups as Tree -onready var developer_container := $AboutUI/Credits/Developers as VBoxContainer -onready var contributors_container := $AboutUI/Credits/Contributors as VBoxContainer -onready var donors_container := $AboutUI/Credits/Donors as VBoxContainer -onready var translators_container := $AboutUI/Credits/Translators as VBoxContainer -onready var licenses_container := $AboutUI/Credits/Licenses as VBoxContainer +@onready var credits := $AboutUI/Credits as HSplitContainer +@onready var groups := $AboutUI/Credits/Groups as Tree +@onready var developer_container := $AboutUI/Credits/Developers as VBoxContainer +@onready var contributors_container := $AboutUI/Credits/Contributors as VBoxContainer +@onready var donors_container := $AboutUI/Credits/Donors as VBoxContainer +@onready var translators_container := $AboutUI/Credits/Translators as VBoxContainer +@onready var licenses_container := $AboutUI/Credits/Licenses as VBoxContainer -onready var developers := $AboutUI/Credits/Developers/DeveloperTree as Tree -onready var contributors := $AboutUI/Credits/Contributors/ContributorTree as Tree -onready var donors := $AboutUI/Credits/Donors/DonorTree as Tree -onready var translators := $AboutUI/Credits/Translators/TranslatorTree as Tree -onready var license_tabs := $AboutUI/Credits/Licenses/LicenseTabs as Tabs -onready var license_text := $AboutUI/Credits/Licenses/LicenseText as TextEdit +@onready var developers := $AboutUI/Credits/Developers/DeveloperTree as Tree +@onready var contributors := $AboutUI/Credits/Contributors/ContributorTree as Tree +@onready var donors := $AboutUI/Credits/Donors/DonorTree as Tree +@onready var translators := $AboutUI/Credits/Translators/TranslatorTree as Tree +@onready var license_tabs := $AboutUI/Credits/Licenses/LicenseTabs as TabBar +@onready var license_text := $AboutUI/Credits/Licenses/LicenseText as TextEdit func _ready() -> void: @@ -221,7 +221,6 @@ func _ready() -> void: license_tabs.add_tab("mbed TLS") license_tabs.add_tab("Keychain") license_tabs.add_tab("Roboto") - license_tabs.add_tab("DroidSansFallback") license_tabs.add_tab("Dockable Container") license_tabs.add_tab("aimgio") license_tabs.add_tab("godot-gdgifexporter") @@ -232,7 +231,7 @@ func _ready() -> void: func _on_AboutDialog_about_to_show() -> void: - window_title = tr("About Pixelorama") + " " + Global.current_version + title = tr("About Pixelorama") + " " + Global.current_version var groups_root := groups.create_item() var developers_button := groups.create_item(groups_root) @@ -258,10 +257,13 @@ func _on_AboutDialog_about_to_show() -> void: create_translators() -func _on_AboutDialog_popup_hide() -> void: +func _on_visibility_changed() -> void: + if visible: + return groups.clear() developers.clear() translators.clear() + Global.dialog_open(false) func _on_Groups_item_selected() -> void: @@ -332,3 +334,7 @@ func create_translators() -> void: func _on_LicenseTabs_tab_changed(tab: int) -> void: license_text.text = licenses[tab] + + +func _on_close_requested() -> void: + hide() diff --git a/src/UI/Dialogs/AboutDialog.tscn b/src/UI/Dialogs/AboutDialog.tscn index f4a3e9f2e67..0baa1f52aa0 100644 --- a/src/UI/Dialogs/AboutDialog.tscn +++ b/src/UI/Dialogs/AboutDialog.tscn @@ -1,709 +1,178 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=7 format=3 uid="uid://w1v6plnv6ppt"] -[ext_resource path="res://src/UI/Dialogs/AboutDialog.gd" type="Script" id=1] -[ext_resource path="res://assets/graphics/icons/icon.png" type="Texture" id=2] -[ext_resource path="res://assets/fonts/Roboto-Italic.tres" type="DynamicFont" id=3] -[ext_resource path="res://assets/graphics/splash_screen/orama_64x64.png" type="Texture" id=4] -[ext_resource path="res://assets/fonts/Roboto-Small.tres" type="DynamicFont" id=5] +[ext_resource type="Script" path="res://src/UI/Dialogs/AboutDialog.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://b47r0c6auaqk6" path="res://assets/graphics/icons/icon.png" id="2"] +[ext_resource type="FontFile" uid="uid://cy5lkye8vdr5t" path="res://assets/fonts/Roboto-Italic.ttf" id="3_jqhhb"] +[ext_resource type="Texture2D" uid="uid://s25pa611bpvj" path="res://assets/graphics/splash_screen/orama_64x64.png" id="4"] -[node name="AboutDialog" type="WindowDialog"] -margin_right = 600.0 -margin_bottom = 400.0 -rect_min_size = Vector2( 600, 400 ) -window_title = "About Pixelorama" -resizable = true -script = ExtResource( 1 ) -licenses = [ "MIT License - -Copyright (c) 2019-present Orama Interactive and contributors - -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.", "This software uses Godot Engine, available under the following license: - -Copyright (c) 2014-present Godot Engine contributors. -Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. - -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. -", "Portions of this software are copyright ยฉ 2021 The FreeType Project (www.freetype.org). All rights reserved.", "Copyright The Mbed TLS Contributors - -Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -", "MIT License - -Copyright (c) 2022-present Orama Interactive - -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.", " - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - \"License\" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - \"Licensor\" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - \"Legal Entity\" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - \"control\" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - \"You\" (or \"Your\") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - \"Source\" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - \"Object\" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - \"Work\" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - \"Derivative Works\" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - \"Contribution\" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, \"submitted\" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as \"Not a Contribution.\" - - \"Contributor\" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a \"NOTICE\" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an \"AS IS\" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets \"[]\" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same \"printed page\" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the \"License\"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an \"AS IS\" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License.", "Copyright (C) 2008 The Android Open Source Project - -Licensed under the Apache License, Version 2.0 (the \"License\"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an \"AS IS\" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -########## - -This directory contains the fonts for the platform. They are licensed -under the Apache 2 license.", "Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN \"AS-IS\" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an \"owner\") of an original work of -authorship and/or a database (each, a \"Work\"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works (\"Commons\") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the \"Affirmer\"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights (\"Copyright and -Related Rights\"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the \"Waiver\"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -\"License\"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. -", "This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -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 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. - -For more information, please refer to ", "MIT License - -Copyright (c) 2020 Igor Santarek - -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.", "MIT License - -Copyright (c) 2022 torcado - -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.", "MIT License - -Copyright (c) 2018 Nobuyuki - -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.", "MIT License - -Copyright (c) 2018-2019 Ezcha - -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." ] +[sub_resource type="LabelSettings" id="LabelSettings_bkh2e"] +font = ExtResource("3_jqhhb") + +[sub_resource type="LabelSettings" id="LabelSettings_aewb6"] +font_size = 12 + +[node name="AboutDialog" type="Popup"] +size = Vector2i(700, 470) +unresizable = false +borderless = false +script = ExtResource("1") +licenses = PackedStringArray("MIT License\n\nCopyright (c) 2019-present Orama Interactive and contributors\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.", "This software uses Godot Engine, available under the following license:\n\nCopyright (c) 2014-present Godot Engine contributors.\nCopyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n", "Portions of this software are copyright ยฉ 2021 The FreeType Project (www.freetype.org). All rights reserved.", "Copyright The Mbed TLS Contributors\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n", "MIT License\n\nCopyright (c) 2022-present Orama Interactive\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.", "\n Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or position of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don\'t include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.", "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN\n ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS\n INFORMATION ON AN \"AS-IS\" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES\n REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS\n PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM\n THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED\n HEREUNDER.\n\nStatement of Purpose\n\nThe laws of most jurisdictions throughout the world automatically confer\nexclusive Copyright and Related Rights (defined below) upon the creator\nand subsequent owner(s) (each and all, an \"owner\") of an original work of\nauthorship and/or a database (each, a \"Work\").\n\nCertain owners wish to permanently relinquish those rights to a Work for\nthe purpose of contributing to a commons of creative, cultural and\nscientific works (\"Commons\") that the public can reliably and without fear\nof later claims of infringement build upon, modify, incorporate in other\nworks, reuse and redistribute as freely as possible in any form whatsoever\nand for any purposes, including without limitation commercial purposes.\nThese owners may contribute to the Commons to promote the ideal of a free\nculture and the further production of creative, cultural and scientific\nworks, or to gain reputation or greater distribution for their Work in\npart through the use and efforts of others.\n\nFor these and/or other purposes and motivations, and without any\nexpectation of additional consideration or compensation, the person\nassociating CC0 with a Work (the \"Affirmer\"), to the extent that he or she\nis an owner of Copyright and Related Rights in the Work, voluntarily\nelects to apply CC0 to the Work and publicly distribute the Work under its\nterms, with knowledge of his or her Copyright and Related Rights in the\nWork and the meaning and intended legal effect of CC0 on those rights.\n\n1. Copyright and Related Rights. A Work made available under CC0 may be\nprotected by copyright and related or neighboring rights (\"Copyright and\nRelated Rights\"). Copyright and Related Rights include, but are not\nlimited to, the following:\n\n i. the right to reproduce, adapt, distribute, perform, display,\n communicate, and translate a Work;\n ii. moral rights retained by the original author(s) and/or performer(s);\niii. publicity and privacy rights pertaining to a person\'s image or\n likeness depicted in a Work;\n iv. rights protecting against unfair competition in regards to a Work,\n subject to the limitations in paragraph 4(a), below;\n v. rights protecting the extraction, dissemination, use and reuse of data\n in a Work;\n vi. database rights (such as those arising under Directive 96/9/EC of the\n European Parliament and of the Council of 11 March 1996 on the legal\n protection of databases, and under any national implementation\n thereof, including any amended or successor version of such\n directive); and\nvii. other similar, equivalent or corresponding rights throughout the\n world based on applicable law or treaty, and any national\n implementations thereof.\n\n2. Waiver. To the greatest extent permitted by, but not in contravention\nof, applicable law, Affirmer hereby overtly, fully, permanently,\nirrevocably and unconditionally waives, abandons, and surrenders all of\nAffirmer\'s Copyright and Related Rights and associated claims and causes\nof action, whether now known or unknown (including existing as well as\nfuture claims and causes of action), in the Work (i) in all territories\nworldwide, (ii) for the maximum duration provided by applicable law or\ntreaty (including future time extensions), (iii) in any current or future\nmedium and for any number of copies, and (iv) for any purpose whatsoever,\nincluding without limitation commercial, advertising or promotional\npurposes (the \"Waiver\"). Affirmer makes the Waiver for the benefit of each\nmember of the public at large and to the detriment of Affirmer\'s heirs and\nsuccessors, fully intending that such Waiver shall not be subject to\nrevocation, rescission, cancellation, termination, or any other legal or\nequitable action to disrupt the quiet enjoyment of the Work by the public\nas contemplated by Affirmer\'s express Statement of Purpose.\n\n3. Public License Fallback. Should any part of the Waiver for any reason\nbe judged legally invalid or ineffective under applicable law, then the\nWaiver shall be preserved to the maximum extent permitted taking into\naccount Affirmer\'s express Statement of Purpose. In addition, to the\nextent the Waiver is so judged Affirmer hereby grants to each affected\nperson a royalty-free, non transferable, non sublicensable, non exclusive,\nirrevocable and unconditional license to exercise Affirmer\'s Copyright and\nRelated Rights in the Work (i) in all territories worldwide, (ii) for the\nmaximum duration provided by applicable law or treaty (including future\ntime extensions), (iii) in any current or future medium and for any number\nof copies, and (iv) for any purpose whatsoever, including without\nlimitation commercial, advertising or promotional purposes (the\n\"License\"). The License shall be deemed effective as of the date CC0 was\napplied by Affirmer to the Work. Should any part of the License for any\nreason be judged legally invalid or ineffective under applicable law, such\npartial invalidity or ineffectiveness shall not invalidate the remainder\nof the License, and in such case Affirmer hereby affirms that he or she\nwill not (i) exercise any of his or her remaining Copyright and Related\nRights in the Work or (ii) assert any associated claims and causes of\naction with respect to the Work, in either case contrary to Affirmer\'s\nexpress Statement of Purpose.\n\n4. Limitations and Disclaimers.\n\n a. No trademark or patent rights held by Affirmer are waived, abandoned,\n surrendered, licensed or otherwise affected by this document.\n b. Affirmer offers the Work as-is and makes no representations or\n warranties of any kind concerning the Work, express, implied,\n statutory or otherwise, including without limitation warranties of\n title, merchantability, fitness for a particular purpose, non\n infringement, or the absence of latent or other defects, accuracy, or\n the present or absence of errors, whether or not discoverable, all to\n the greatest extent permissible under applicable law.\n c. Affirmer disclaims responsibility for clearing rights of other persons\n that may apply to the Work or any use thereof, including without\n limitation any person\'s Copyright and Related Rights in the Work.\n Further, Affirmer disclaims responsibility for obtaining any necessary\n consents, permissions or other rights required for any use of the\n Work.\n d. Affirmer understands and acknowledges that Creative Commons is not a\n party to this document and has no duty or obligation with respect to\n this CC0 or use of the Work.\n", "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or\ndistribute this software, either in source code form or as a compiled\nbinary, for any purpose, commercial or non-commercial, and by any\nmeans.\n\nIn jurisdictions that _recognize copyright laws, the author or authors\nof this software dedicate any and all copyright interest in the\nsoftware to the public domain. We make this dedication for the benefit\nof the public at large and to the detriment of our heirs and\nsuccessors. We intend this dedication to be an overt act of\nrelinquishment in perpetuity of all present and future rights to this\nsoftware under copyright law.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\nOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\nFor more information, please refer to ", "MIT License\n\nCopyright (c) 2020 Igor Santarek\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.", "MIT License\n\nCopyright (c) 2022 torcado\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.", "MIT License\n\nCopyright (c) 2018 Nobuyuki\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.", "MIT License\n\nCopyright (c) 2018-2019 Ezcha\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.") [node name="AboutUI" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 12.0 -margin_top = 4.0 -margin_right = -12.0 -margin_bottom = -8.0 +offset_left = 12.0 +offset_top = 4.0 +offset_right = -12.0 +offset_bottom = -8.0 alignment = 1 [node name="IconsButtons" type="HBoxContainer" parent="AboutUI"] -margin_right = 576.0 -margin_bottom = 64.0 +layout_mode = 2 [node name="PixeloramaLogo" type="TextureRect" parent="AboutUI/IconsButtons"] -margin_right = 64.0 -margin_bottom = 64.0 -rect_min_size = Vector2( 64, 64 ) -texture = ExtResource( 2 ) -expand = true +custom_minimum_size = Vector2(64, 64) +layout_mode = 2 +texture = ExtResource("2") +expand_mode = 1 [node name="SloganAndLinks" type="CenterContainer" parent="AboutUI/IconsButtons"] -margin_left = 68.0 -margin_right = 508.0 -margin_bottom = 64.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="VBoxContainer" type="VBoxContainer" parent="AboutUI/IconsButtons/SloganAndLinks"] -margin_left = 108.0 -margin_top = 12.0 -margin_right = 332.0 -margin_bottom = 51.0 +layout_mode = 2 [node name="PixeloramaSlogan" type="Label" parent="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer"] -margin_right = 224.0 -margin_bottom = 15.0 -custom_fonts/font = ExtResource( 3 ) +layout_mode = 2 text = "Pixelorama - Pixelate your dreams!" -align = 1 +label_settings = SubResource("LabelSettings_bkh2e") [node name="LinkButtons" type="HBoxContainer" parent="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer"] -margin_top = 19.0 -margin_right = 224.0 -margin_bottom = 39.0 +layout_mode = 2 [node name="Website" type="Button" parent="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons"] -margin_right = 65.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Website" [node name="GitHub" type="Button" parent="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons"] -margin_left = 69.0 -margin_right = 162.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "GitHub Repo" [node name="Donate" type="Button" parent="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons"] -margin_left = 166.0 -margin_right = 224.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Donate" [node name="OramaLogo" type="TextureRect" parent="AboutUI/IconsButtons"] -margin_left = 512.0 -margin_right = 576.0 -margin_bottom = 64.0 -texture = ExtResource( 4 ) +layout_mode = 2 +texture = ExtResource("4") [node name="HSeparator" type="HSeparator" parent="AboutUI"] -margin_top = 68.0 -margin_right = 576.0 -margin_bottom = 72.0 +layout_mode = 2 [node name="Credits" type="HSplitContainer" parent="AboutUI"] -margin_top = 76.0 -margin_right = 576.0 -margin_bottom = 345.0 +layout_mode = 2 size_flags_vertical = 3 [node name="Groups" type="Tree" parent="AboutUI/Credits"] -margin_right = 576.0 -margin_bottom = 269.0 -rect_min_size = Vector2( 120, 120 ) -custom_constants/item_margin = -2 +custom_minimum_size = Vector2(120, 120) +layout_mode = 2 +theme_override_constants/item_margin = -2 hide_root = true [node name="Developers" type="VBoxContainer" parent="AboutUI/Credits"] visible = false -margin_left = 132.0 -margin_right = 576.0 -margin_bottom = 269.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Label" type="Label" parent="AboutUI/Credits/Developers"] -margin_right = 444.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Development Team" [node name="DeveloperTree" type="Tree" parent="AboutUI/Credits/Developers"] -margin_top = 18.0 -margin_right = 444.0 -margin_bottom = 269.0 +layout_mode = 2 size_flags_vertical = 3 -custom_constants/item_margin = -2 -custom_constants/button_margin = 2 +theme_override_constants/item_margin = -2 +theme_override_constants/button_margin = 2 hide_root = true [node name="Contributors" type="VBoxContainer" parent="AboutUI/Credits"] visible = false -margin_left = 254.0 -margin_right = 496.0 -margin_bottom = 126.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Label" type="Label" parent="AboutUI/Credits/Contributors"] -margin_right = 242.0 -margin_bottom = 14.0 +layout_mode = 2 text = "GitHub Contributors" [node name="ContributorTree" type="Tree" parent="AboutUI/Credits/Contributors"] -margin_top = 18.0 -margin_right = 242.0 -margin_bottom = 126.0 +layout_mode = 2 size_flags_vertical = 3 -custom_constants/item_margin = -2 +theme_override_constants/item_margin = -2 hide_root = true [node name="Donors" type="VBoxContainer" parent="AboutUI/Credits"] visible = false -margin_left = 254.0 -margin_right = 496.0 -margin_bottom = 126.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Label" type="Label" parent="AboutUI/Credits/Donors"] -margin_right = 242.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Donors" [node name="DonorTree" type="Tree" parent="AboutUI/Credits/Donors"] -margin_top = 18.0 -margin_right = 242.0 -margin_bottom = 126.0 +layout_mode = 2 size_flags_vertical = 3 -custom_constants/item_margin = -2 +theme_override_constants/item_margin = -2 hide_root = true [node name="Translators" type="VBoxContainer" parent="AboutUI/Credits"] visible = false -margin_left = 254.0 -margin_right = 496.0 -margin_bottom = 126.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Label" type="Label" parent="AboutUI/Credits/Translators"] -margin_right = 242.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Translators" [node name="TranslatorTree" type="Tree" parent="AboutUI/Credits/Translators"] -margin_top = 18.0 -margin_right = 242.0 -margin_bottom = 126.0 +layout_mode = 2 size_flags_vertical = 3 -custom_constants/item_margin = -2 +theme_override_constants/item_margin = -2 hide_root = true [node name="Licenses" type="VBoxContainer" parent="AboutUI/Credits"] visible = false -margin_left = 132.0 -margin_right = 576.0 -margin_bottom = 269.0 +layout_mode = 2 size_flags_horizontal = 3 -[node name="LicenseTabs" type="Tabs" parent="AboutUI/Credits/Licenses"] -margin_right = 444.0 -margin_bottom = 24.0 +[node name="LicenseTabs" type="TabBar" parent="AboutUI/Credits/Licenses"] +layout_mode = 2 mouse_default_cursor_shape = 2 [node name="LicenseText" type="TextEdit" parent="AboutUI/Credits/Licenses"] -margin_top = 28.0 -margin_right = 444.0 -margin_bottom = 269.0 +layout_mode = 2 size_flags_vertical = 3 -readonly = true -wrap_enabled = true [node name="HSeparator2" type="HSeparator" parent="AboutUI"] -margin_top = 349.0 -margin_right = 576.0 -margin_bottom = 353.0 +layout_mode = 2 [node name="MadeBy" type="Label" parent="AboutUI"] -margin_top = 357.0 -margin_right = 576.0 -margin_bottom = 371.0 +layout_mode = 2 text = "Developed by Orama Interactive" -align = 1 [node name="Copyright" type="Label" parent="AboutUI"] -margin_top = 375.0 -margin_right = 576.0 -margin_bottom = 388.0 -custom_fonts/font = ExtResource( 5 ) +layout_mode = 2 text = "ยฉ2019-present by Orama Interactive and contributors" -align = 1 +label_settings = SubResource("LabelSettings_aewb6") -[connection signal="about_to_show" from="." to="." method="_on_AboutDialog_about_to_show"] -[connection signal="popup_hide" from="." to="." method="_on_AboutDialog_popup_hide"] +[connection signal="about_to_popup" from="." to="." method="_on_AboutDialog_about_to_show"] +[connection signal="close_requested" from="." to="." method="_on_close_requested"] +[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"] [connection signal="pressed" from="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons/Website" to="." method="_on_Website_pressed"] [connection signal="pressed" from="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons/GitHub" to="." method="_on_GitHub_pressed"] [connection signal="pressed" from="AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/LinkButtons/Donate" to="." method="_on_Donate_pressed"] diff --git a/src/UI/Dialogs/CreateNewImage.gd b/src/UI/Dialogs/CreateNewImage.gd index 32ea84657c4..d4809a9487f 100644 --- a/src/UI/Dialogs/CreateNewImage.gd +++ b/src/UI/Dialogs/CreateNewImage.gd @@ -2,65 +2,65 @@ extends ConfirmationDialog var aspect_ratio := 1.0 var recent_sizes := [] -var templates := [ +var templates: Array[Template] = [ # Basic - Template.new(Vector2(16, 16)), - Template.new(Vector2(32, 32)), - Template.new(Vector2(64, 64)), - Template.new(Vector2(128, 128)), + Template.new(Vector2i(16, 16)), + Template.new(Vector2i(32, 32)), + Template.new(Vector2i(64, 64)), + Template.new(Vector2i(128, 128)), # Nintendo - Template.new(Vector2(160, 144), "GB"), - Template.new(Vector2(240, 160), "GBA"), - Template.new(Vector2(256, 224), "NES (NTSC)"), - Template.new(Vector2(256, 240), "NES (PAL)"), - Template.new(Vector2(512, 448), "SNES (NTSC)"), - Template.new(Vector2(512, 480), "SNES (PAL)"), - Template.new(Vector2(646, 486), "N64 (NTSC)"), - Template.new(Vector2(786, 576), "N64 (PAL)"), + Template.new(Vector2i(160, 144), "GB"), + Template.new(Vector2i(240, 160), "GBA"), + Template.new(Vector2i(256, 224), "NES (NTSC)"), + Template.new(Vector2i(256, 240), "NES (PAL)"), + Template.new(Vector2i(512, 448), "SNES (NTSC)"), + Template.new(Vector2i(512, 480), "SNES (PAL)"), + Template.new(Vector2i(646, 486), "N64 (NTSC)"), + Template.new(Vector2i(786, 576), "N64 (PAL)"), # Sega - Template.new(Vector2(256, 192), "SMS (NTSC)"), - Template.new(Vector2(256, 224), "SMS (PAL)"), - Template.new(Vector2(160, 144), "GG"), - Template.new(Vector2(320, 224), "MD (NTSC)"), - Template.new(Vector2(320, 240), "MD (PAL)"), + Template.new(Vector2i(256, 192), "SMS (NTSC)"), + Template.new(Vector2i(256, 224), "SMS (PAL)"), + Template.new(Vector2i(160, 144), "GG"), + Template.new(Vector2i(320, 224), "MD (NTSC)"), + Template.new(Vector2i(320, 240), "MD (PAL)"), # NEC - Template.new(Vector2(256, 239), "PC Engine"), #256ร—224 to 512ร—242 (mostly 256ร—239) + Template.new(Vector2i(256, 239), "PC Engine"), #256ร—224 to 512ร—242 (mostly 256ร—239) # DOS - Template.new(Vector2(320, 200), "DOS EGA"), - Template.new(Vector2(320, 200), "DOS VGA"), - Template.new(Vector2(620, 480), "DOS SVGA"), - Template.new(Vector2(640, 200), "DOS CGA (2-Colour)"), - Template.new(Vector2(320, 200), "DOS CGA (4-Colour)"), - Template.new(Vector2(160, 240), "DOS CGA (Composite)"), - Template.new(Vector2(160, 240), "Tandy"), + Template.new(Vector2i(320, 200), "DOS EGA"), + Template.new(Vector2i(320, 200), "DOS VGA"), + Template.new(Vector2i(620, 480), "DOS SVGA"), + Template.new(Vector2i(640, 200), "DOS CGA (2-Colour)"), + Template.new(Vector2i(320, 200), "DOS CGA (4-Colour)"), + Template.new(Vector2i(160, 240), "DOS CGA (Composite)"), + Template.new(Vector2i(160, 240), "Tandy"), # Commodore - Template.new(Vector2(320, 200), "Amiga OCS LowRes (NTSC)"), - Template.new(Vector2(320, 256), "Amiga OCS LowRes (PAL)"), - Template.new(Vector2(640, 200), "Amiga OCS HiRes (NTSC)"), - Template.new(Vector2(640, 256), "Amiga OCS HiRes (PAL)"), - Template.new(Vector2(1280, 200), "Amiga ECS Super-HiRes (NTSC)"), - Template.new(Vector2(1280, 256), "Amiga ECS SuperHiRes (PAL)"), - Template.new(Vector2(640, 480), "Amiga ECS Multiscan"), - Template.new(Vector2(320, 200), "C64"), + Template.new(Vector2i(320, 200), "Amiga OCS LowRes (NTSC)"), + Template.new(Vector2i(320, 256), "Amiga OCS LowRes (PAL)"), + Template.new(Vector2i(640, 200), "Amiga OCS HiRes (NTSC)"), + Template.new(Vector2i(640, 256), "Amiga OCS HiRes (PAL)"), + Template.new(Vector2i(1280, 200), "Amiga ECS Super-HiRes (NTSC)"), + Template.new(Vector2i(1280, 256), "Amiga ECS SuperHiRes (PAL)"), + Template.new(Vector2i(640, 480), "Amiga ECS Multiscan"), + Template.new(Vector2i(320, 200), "C64"), # Sinclair - Template.new(Vector2(256, 192), "ZX Spectrum"), + Template.new(Vector2i(256, 192), "ZX Spectrum"), ] -onready var recent_templates_list = find_node("RecentTemplates") -onready var templates_options = find_node("TemplatesOptions") -onready var ratio_box = find_node("AspectRatioButton") -onready var width_value = find_node("WidthValue") -onready var height_value = find_node("HeightValue") -onready var portrait_button = find_node("PortraitButton") -onready var landscape_button = find_node("LandscapeButton") -onready var fill_color_node = find_node("FillColor") +@onready var templates_options := %TemplatesOptions as OptionButton +@onready var ratio_box := %AspectRatioButton as TextureButton +@onready var width_value := %WidthValue as SpinBox +@onready var height_value := %HeightValue as SpinBox +@onready var portrait_button := %PortraitButton as Button +@onready var landscape_button := %LandscapeButton as Button +@onready var fill_color_node := %FillColor as ColorPickerButton +@onready var recent_templates_list := %RecentTemplates as ItemList class Template: - var resolution: Vector2 + var resolution: Vector2i var name: String - func _init(_resolution: Vector2, _name := "") -> void: + func _init(_resolution: Vector2i, _name := "") -> void: resolution = _resolution name = _name @@ -107,19 +107,19 @@ func _create_option_list() -> void: func _create_recent_list() -> void: recent_templates_list.clear() - for size in recent_sizes: + for recent_size in recent_sizes: recent_templates_list.add_item( - "{width}x{height}".format({"width": size.x, "height": size.y}) + "{width}x{height}".format({"width": recent_size.x, "height": recent_size.y}) ) func _on_CreateNewImage_confirmed() -> void: var width: int = width_value.value var height: int = height_value.value - var size = Vector2(width, height) - if size in recent_sizes: - recent_sizes.erase(size) - recent_sizes.insert(0, size) + var image_size := Vector2i(width, height) + if image_size in recent_sizes: + recent_sizes.erase(image_size) + recent_sizes.insert(0, image_size) if recent_sizes.size() > 10: recent_sizes.resize(10) Global.config_cache.set_value("templates", "recent_sizes", recent_sizes) @@ -129,7 +129,7 @@ func _on_CreateNewImage_confirmed() -> void: if !proj_name.is_valid_filename(): proj_name = tr("untitled") - var new_project := Project.new([], proj_name, Vector2(width, height).floor()) + var new_project := Project.new([], proj_name, image_size) new_project.layers.append(PixelLayer.new(new_project)) new_project.fill_color = fill_color new_project.frames.append(new_project.new_empty_frame()) @@ -143,7 +143,7 @@ func _on_AspectRatioButton_toggled(_button_pressed: bool) -> void: func _on_SizeValue_value_changed(value: float) -> void: - if ratio_box.pressed: + if ratio_box.button_pressed: if width_value.value == value: height_value.value = width_value.value / aspect_ratio if height_value.value == value: @@ -153,20 +153,20 @@ func _on_SizeValue_value_changed(value: float) -> void: func toggle_size_buttons() -> void: - portrait_button.disconnect("toggled", self, "_on_PortraitButton_toggled") - landscape_button.disconnect("toggled", self, "_on_LandscapeButton_toggled") - portrait_button.pressed = width_value.value < height_value.value - landscape_button.pressed = width_value.value > height_value.value + portrait_button.toggled.disconnect(_on_PortraitButton_toggled) + landscape_button.toggled.disconnect(_on_LandscapeButton_toggled) + portrait_button.button_pressed = width_value.value < height_value.value + landscape_button.button_pressed = width_value.value > height_value.value - portrait_button.connect("toggled", self, "_on_PortraitButton_toggled") - landscape_button.connect("toggled", self, "_on_LandscapeButton_toggled") + portrait_button.toggled.connect(_on_PortraitButton_toggled) + landscape_button.toggled.connect(_on_LandscapeButton_toggled) func _on_TemplatesOptions_item_selected(id: int) -> void: - #if a template is chosen while "ratio button" is pressed then temporarily release it - var temporary_release = false - if ratio_box.pressed: - ratio_box.pressed = false + # If a template is chosen while "ratio button" is pressed then temporarily release it + var temporary_release := false + if ratio_box.button_pressed: + ratio_box.button_pressed = false temporary_release = true if id > 0: @@ -177,21 +177,21 @@ func _on_TemplatesOptions_item_selected(id: int) -> void: height_value.value = Global.default_height if temporary_release: - ratio_box.pressed = true + ratio_box.button_pressed = true func _on_RecentTemplates_item_selected(id): #if a template is chosen while "ratio button" is pressed then temporarily release it var temporary_release = false - if ratio_box.pressed: - ratio_box.pressed = false + if ratio_box.button_pressed: + ratio_box.button_pressed = false temporary_release = true width_value.value = recent_sizes[id].x height_value.value = recent_sizes[id].y if temporary_release: - ratio_box.pressed = true + ratio_box.button_pressed = true func _on_PortraitButton_toggled(button_pressed: bool) -> void: @@ -209,13 +209,13 @@ func _on_LandscapeButton_toggled(button_pressed: bool) -> void: func switch_width_height() -> void: - width_value.disconnect("value_changed", self, "_on_SizeValue_value_changed") - height_value.disconnect("value_changed", self, "_on_SizeValue_value_changed") + width_value.value_changed.disconnect(_on_SizeValue_value_changed) + height_value.value_changed.disconnect(_on_SizeValue_value_changed) - var height = height_value.value + var height := height_value.value height_value.value = width_value.value width_value.value = height toggle_size_buttons() - width_value.connect("value_changed", self, "_on_SizeValue_value_changed") - height_value.connect("value_changed", self, "_on_SizeValue_value_changed") + width_value.value_changed.connect(_on_SizeValue_value_changed) + height_value.value_changed.connect(_on_SizeValue_value_changed) diff --git a/src/UI/Dialogs/CreateNewImage.tscn b/src/UI/Dialogs/CreateNewImage.tscn index 1277136c54b..9e4c99c2be3 100644 --- a/src/UI/Dialogs/CreateNewImage.tscn +++ b/src/UI/Dialogs/CreateNewImage.tscn @@ -1,274 +1,221 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=7 format=3 uid="uid://btjf3lj873q1t"] -[ext_resource path="res://src/UI/Dialogs/CreateNewImage.gd" type="Script" id=1] -[ext_resource path="res://assets/graphics/misc/portrait.png" type="Texture" id=2] -[ext_resource path="res://assets/graphics/misc/landscape.png" type="Texture" id=3] -[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture" id=4] -[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture" id=5] -[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture" id=6] +[ext_resource type="Script" path="res://src/UI/Dialogs/CreateNewImage.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://kj867tldofxi" path="res://assets/graphics/misc/portrait.png" id="2"] +[ext_resource type="Texture2D" uid="uid://0vc1pn1sn2ud" path="res://assets/graphics/misc/landscape.png" id="3"] +[ext_resource type="Texture2D" uid="uid://cancw70yw0pv7" path="res://assets/graphics/misc/lock_aspect_2.png" id="4"] +[ext_resource type="Texture2D" uid="uid://beqermx8s5q8y" path="res://assets/graphics/misc/lock_aspect.png" id="5"] +[ext_resource type="Texture2D" uid="uid://kd10jfc1dxf5" path="res://assets/graphics/misc/lock_aspect_guides.png" id="6"] [node name="CreateNewImage" type="ConfirmationDialog"] -margin_right = 471.0 -margin_bottom = 284.0 -rect_min_size = Vector2( 375, 222 ) -window_title = "New..." -resizable = true -script = ExtResource( 1 ) +title = "New..." +exclusive = false +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -36.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -36.0 size_flags_horizontal = 0 [node name="ProjectName" type="HBoxContainer" parent="VBoxContainer"] -margin_right = 455.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="NameLabel" type="Label" parent="VBoxContainer/ProjectName"] -margin_top = 5.0 -margin_right = 100.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 text = "Project Name:" [node name="NameInput" type="LineEdit" parent="VBoxContainer/ProjectName"] -margin_left = 104.0 -margin_right = 455.0 -margin_bottom = 24.0 +layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "Enter name... (Default \"untitled\")" [node name="ImageSize" type="Label" parent="VBoxContainer"] -margin_top = 28.0 -margin_right = 455.0 -margin_bottom = 42.0 +layout_mode = 2 text = "Image Size" [node name="HSeparator" type="HSeparator" parent="VBoxContainer"] -margin_top = 46.0 -margin_right = 455.0 -margin_bottom = 50.0 +layout_mode = 2 [node name="VBoxContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 54.0 -margin_right = 455.0 -margin_bottom = 192.0 +layout_mode = 2 size_flags_vertical = 3 [node name="Templates" type="VBoxContainer" parent="VBoxContainer/VBoxContainer"] -margin_right = 293.0 -margin_bottom = 138.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="TemplatesContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates"] -margin_right = 293.0 -margin_bottom = 20.0 +layout_mode = 2 [node name="TemplatesLabel" type="Label" parent="VBoxContainer/VBoxContainer/Templates/TemplatesContainer"] -margin_top = 3.0 -margin_right = 100.0 -margin_bottom = 17.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 text = "Templates:" [node name="TemplatesOptions" type="OptionButton" parent="VBoxContainer/VBoxContainer/Templates/TemplatesContainer"] -margin_left = 104.0 -margin_right = 293.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +unique_name_in_owner = true +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 toggle_mode = false -text = "Default" -items = [ "Default", null, false, 0, null ] +item_count = 1 selected = 0 +popup/item_0/text = "Default" +popup/item_0/id = 0 [node name="SizeContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates"] -margin_top = 24.0 -margin_right = 293.0 -margin_bottom = 76.0 +layout_mode = 2 [node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer"] -margin_right = 280.0 -margin_bottom = 52.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="WidthContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer"] -margin_right = 280.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="WidthLabel" type="Label" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/WidthContainer"] -margin_top = 5.0 -margin_right = 100.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 text = "Width:" [node name="WidthValue" type="SpinBox" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/WidthContainer"] -margin_left = 104.0 -margin_right = 280.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +unique_name_in_owner = true +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 16384.0 value = 64.0 suffix = "px" [node name="HeightContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer"] -margin_top = 28.0 -margin_right = 280.0 -margin_bottom = 52.0 +layout_mode = 2 [node name="HeightLabel" type="Label" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/HeightContainer"] -margin_top = 5.0 -margin_right = 100.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 text = "Height:" [node name="HeightValue" type="SpinBox" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/HeightContainer"] -margin_left = 104.0 -margin_right = 280.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +unique_name_in_owner = true +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 16384.0 value = 64.0 suffix = "px" [node name="TextureRect" type="TextureRect" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer" groups=["UIButtons"]] -margin_left = 284.0 -margin_right = 293.0 -margin_bottom = 52.0 -texture = ExtResource( 6 ) +layout_mode = 2 +texture = ExtResource("6") [node name="AspectRatioButton" type="TextureButton" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/TextureRect" groups=["UIButtons"]] +unique_name_in_owner = true +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -4.5 -margin_top = -9.0 -margin_right = 11.5 -margin_bottom = 7.0 -hint_tooltip = "Lock aspect ratio" +offset_left = -4.5 +offset_top = -9.0 +offset_right = 11.5 +offset_bottom = 7.0 +tooltip_text = "Lock aspect ratio" mouse_default_cursor_shape = 2 toggle_mode = true -texture_normal = ExtResource( 4 ) -texture_pressed = ExtResource( 5 ) -__meta__ = { -"_edit_use_anchors_": false -} +texture_normal = ExtResource("4") +texture_pressed = ExtResource("5") [node name="VSeparator" type="VSeparator" parent="VBoxContainer/VBoxContainer"] -margin_left = 297.0 -margin_right = 301.0 -margin_bottom = 138.0 +layout_mode = 2 [node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer"] -margin_left = 305.0 -margin_right = 455.0 -margin_bottom = 138.0 -rect_min_size = Vector2( 150, 0 ) -rect_clip_content = true +clip_contents = true +custom_minimum_size = Vector2(150, 0) +layout_mode = 2 focus_mode = 2 mouse_filter = 0 -__meta__ = { -"_editor_description_": "" -} [node name="Label" type="Label" parent="VBoxContainer/VBoxContainer/VBoxContainer"] -margin_right = 150.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Recent:" [node name="RecentTemplates" type="ItemList" parent="VBoxContainer/VBoxContainer/VBoxContainer"] -margin_top = 18.0 -margin_right = 150.0 -margin_bottom = 138.0 +unique_name_in_owner = true +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 allow_reselect = true [node name="SizeButtonsContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 196.0 -margin_right = 455.0 -margin_bottom = 216.0 +layout_mode = 2 [node name="PortraitButton" type="Button" parent="VBoxContainer/SizeButtonsContainer" groups=["UIButtons"]] -margin_right = 20.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Portrait" +unique_name_in_owner = true +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +tooltip_text = "Portrait" focus_mode = 0 mouse_default_cursor_shape = 2 toggle_mode = true [node name="TextureRect" type="TextureRect" parent="VBoxContainer/SizeButtonsContainer/PortraitButton"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -8.0 -margin_top = -8.0 -margin_right = 8.0 -margin_bottom = 8.0 -texture = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -8.0 +offset_top = -8.0 +offset_right = 8.0 +offset_bottom = 8.0 +texture = ExtResource("2") [node name="LandscapeButton" type="Button" parent="VBoxContainer/SizeButtonsContainer" groups=["UIButtons"]] -margin_left = 24.0 -margin_right = 44.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Landscape" +unique_name_in_owner = true +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +tooltip_text = "Landscape" focus_mode = 0 mouse_default_cursor_shape = 2 toggle_mode = true [node name="TextureRect" type="TextureRect" parent="VBoxContainer/SizeButtonsContainer/LandscapeButton"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -8.0 -margin_top = -8.0 -margin_right = 8.0 -margin_bottom = 8.0 -texture = ExtResource( 3 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -8.0 +offset_top = -8.0 +offset_right = 8.0 +offset_bottom = 8.0 +texture = ExtResource("3") [node name="FillColorContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 220.0 -margin_right = 455.0 -margin_bottom = 240.0 +layout_mode = 2 [node name="FillColorLabel" type="Label" parent="VBoxContainer/FillColorContainer"] -margin_top = 3.0 -margin_right = 100.0 -margin_bottom = 17.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 text = "Fill with color:" [node name="FillColor" type="ColorPickerButton" parent="VBoxContainer/FillColorContainer"] -margin_left = 104.0 -margin_right = 455.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 64, 20 ) -mouse_default_cursor_shape = 2 +unique_name_in_owner = true +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 size_flags_horizontal = 3 -color = Color( 0, 0, 0, 0 ) +mouse_default_cursor_shape = 2 +color = Color(0, 0, 0, 0) -[connection signal="about_to_show" from="." to="." method="_on_CreateNewImage_about_to_show"] +[connection signal="about_to_popup" from="." to="." method="_on_CreateNewImage_about_to_show"] [connection signal="confirmed" from="." to="." method="_on_CreateNewImage_confirmed"] [connection signal="item_selected" from="VBoxContainer/VBoxContainer/Templates/TemplatesContainer/TemplatesOptions" to="." method="_on_TemplatesOptions_item_selected"] [connection signal="value_changed" from="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/WidthContainer/WidthValue" to="." method="_on_SizeValue_value_changed"] diff --git a/src/UI/Dialogs/ExportDialog.gd b/src/UI/Dialogs/ExportDialog.gd index 75a88f28395..c3a074ce27e 100644 --- a/src/UI/Dialogs/ExportDialog.gd +++ b/src/UI/Dialogs/ExportDialog.gd @@ -1,45 +1,45 @@ extends ConfirmationDialog -# called when user resumes export after filename collision +## Called when user resumes export after filename collision signal resume_export_function var preview_current_frame := 0 var preview_frames := [] -# allow custom exporters to be added +## Allow custom exporters to be added var image_exports := [Export.FileFormat.PNG, Export.FileFormat.GIF, Export.FileFormat.APNG] var spritesheet_exports := [Export.FileFormat.PNG] -onready var tabs: Tabs = $VBoxContainer/Tabs -onready var checker: ColorRect = $"%TransparentChecker" -onready var previews: GridContainer = $"%Previews" +@onready var tabs: TabBar = $VBoxContainer/TabBar +@onready var checker: ColorRect = $"%TransparentChecker" +@onready var previews: GridContainer = $"%Previews" -onready var spritesheet_orientation: OptionButton = $"%Orientation" -onready var spritesheet_lines_count: SpinBox = $"%LinesCount" -onready var spritesheet_lines_count_label: Label = $"%LinesCountLabel" +@onready var spritesheet_orientation: OptionButton = $"%Orientation" +@onready var spritesheet_lines_count: SpinBox = $"%LinesCount" +@onready var spritesheet_lines_count_label: Label = $"%LinesCountLabel" -onready var frames_option_button: OptionButton = $"%Frames" -onready var layers_option_button: OptionButton = $"%Layers" -onready var options_resize: ValueSlider = $"%Resize" -onready var dimension_label: Label = $"%DimensionLabel" +@onready var frames_option_button: OptionButton = $"%Frames" +@onready var layers_option_button: OptionButton = $"%Layers" +@onready var options_resize: ValueSlider = $"%Resize" +@onready var dimension_label: Label = $"%DimensionLabel" -onready var path_line_edit: LineEdit = $"%PathLineEdit" -onready var file_line_edit: LineEdit = $"%FileLineEdit" -onready var file_format_options: OptionButton = $"%FileFormat" +@onready var path_line_edit: LineEdit = $"%PathLineEdit" +@onready var file_line_edit: LineEdit = $"%FileLineEdit" +@onready var file_format_options: OptionButton = $"%FileFormat" -onready var options_interpolation: OptionButton = $"%Interpolation" +@onready var options_interpolation: OptionButton = $"%Interpolation" -onready var file_exists_alert_popup: AcceptDialog = $Popups/FileExistsAlert -onready var path_validation_alert_popup: AcceptDialog = $Popups/PathValidationAlert -onready var path_dialog_popup: FileDialog = $Popups/PathDialog -onready var export_progress_popup: WindowDialog = $Popups/ExportProgressBar -onready var export_progress_bar: ProgressBar = $Popups/ExportProgressBar/MarginContainer/ProgressBar -onready var frame_timer: Timer = $FrameTimer +@onready var file_exists_alert_popup: AcceptDialog = $Popups/FileExistsAlert +@onready var path_validation_alert_popup: AcceptDialog = $Popups/PathValidationAlert +@onready var path_dialog_popup: FileDialog = $Popups/PathDialog +@onready var export_progress_popup: Window = $Popups/ExportProgressBar +@onready var export_progress_bar := %ProgressBar as ProgressBar +@onready var frame_timer: Timer = $FrameTimer func _ready() -> void: - get_ok().size_flags_horizontal = Control.SIZE_EXPAND_FILL - get_cancel().size_flags_horizontal = Control.SIZE_EXPAND_FILL + get_ok_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL + get_cancel_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL tabs.add_tab("Image") tabs.add_tab("Spritesheet") if OS.get_name() == "Windows": @@ -47,9 +47,6 @@ func _ready() -> void: else: file_exists_alert_popup.add_button("Cancel Export", false, "cancel") - # Remove close button from export progress bar - export_progress_popup.get_close_button().hide() - func show_tab() -> void: get_tree().call_group("ExportImageOptions", "hide") @@ -95,7 +92,7 @@ func set_preview() -> void: previews.columns = 1 add_animated_preview() else: - previews.columns = ceil(sqrt(Export.processed_images.size())) + previews.columns = ceili(sqrt(Export.processed_images.size())) for i in range(Export.processed_images.size()): add_image_preview(Export.processed_images[i], i + 1) @@ -112,14 +109,13 @@ func _on_GifWarning_meta_clicked(meta) -> void: func add_image_preview(image: Image, canvas_number: int = -1) -> void: var container := create_preview_container() var preview := create_preview_rect() - preview.texture = ImageTexture.new() - preview.texture.create_from_image(image, 0) + preview.texture = ImageTexture.create_from_image(image) container.add_child(preview) if canvas_number != -1: var label := Label.new() - label.align = Label.ALIGN_CENTER - label.text = String(canvas_number) + label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + label.text = str(canvas_number) container.add_child(label) previews.add_child(container) @@ -130,8 +126,7 @@ func add_animated_preview() -> void: preview_frames = [] for processed_image in Export.processed_images: - var texture := ImageTexture.new() - texture.create_from_image(processed_image, 0) + var texture := ImageTexture.create_from_image(processed_image) preview_frames.push_back(texture) var container := create_preview_container() @@ -149,17 +144,17 @@ func add_animated_preview() -> void: func create_preview_container() -> VBoxContainer: var container := VBoxContainer.new() - container.size_flags_horizontal = SIZE_EXPAND_FILL - container.size_flags_vertical = SIZE_EXPAND_FILL - container.rect_min_size = Vector2(0, 128) + container.size_flags_horizontal = Control.SIZE_EXPAND_FILL + container.size_flags_vertical = Control.SIZE_EXPAND_FILL + container.custom_minimum_size = Vector2(0, 128) return container func create_preview_rect() -> TextureRect: var preview := TextureRect.new() preview.expand = true - preview.size_flags_horizontal = SIZE_EXPAND_FILL - preview.size_flags_vertical = SIZE_EXPAND_FILL + preview.size_flags_horizontal = Control.SIZE_EXPAND_FILL + preview.size_flags_vertical = Control.SIZE_EXPAND_FILL preview.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED return preview @@ -177,10 +172,10 @@ func set_file_format_selector() -> void: _set_file_format_selector_suitable_file_formats(spritesheet_exports) -# Updates the suitable list of file formats. First is preferred. -# Note that if the current format is in the list, it stays for consistency. +## Updates the suitable list of file formats. First is preferred. +## Note that if the current format is in the list, it stays for consistency. func _set_file_format_selector_suitable_file_formats(formats: Array) -> void: - var project: Project = Global.current_project + var project := Global.current_project file_format_options.clear() var needs_update := true for i in formats: @@ -231,9 +226,9 @@ func update_dimensions_label() -> void: func open_path_validation_alert_popup(path_or_name: int = -1) -> void: # 0 is invalid path, 1 is invalid name - var error_text := "Directory path and file name are not valid!" + var error_text := "DirAccess path and file name are not valid!" if path_or_name == 0: - error_text = "Directory path is not valid!" + error_text = "DirAccess path is not valid!" elif path_or_name == 1: error_text = "File name is not valid!" @@ -242,8 +237,8 @@ func open_path_validation_alert_popup(path_or_name: int = -1) -> void: path_validation_alert_popup.popup_centered() -func open_file_exists_alert_popup(dialog_text: String) -> void: - file_exists_alert_popup.dialog_text = dialog_text +func open_file_exists_alert_popup(text: String) -> void: + file_exists_alert_popup.dialog_text = text file_exists_alert_popup.popup_centered() @@ -259,15 +254,15 @@ func set_export_progress_bar(value: float) -> void: func _on_ExportDialog_about_to_show() -> void: - get_ok().text = "Export" + get_ok_button().text = "Export" Global.canvas.selection.transform_content_confirm() - var project: Project = Global.current_project - # If we're on HTML5, don't let the user change the directory path - if OS.get_name() == "HTML5": + var project := Global.current_project + # If we're on Web, don't let the user change the directory path + if OS.get_name() == "Web": get_tree().call_group("NotHTML5", "hide") project.directory_path = "user://" - if project.directory_path.empty(): + if project.directory_path.is_empty(): project.directory_path = Global.config_cache.get_value( "data", "current_dir", OS.get_system_dir(OS.SYSTEM_DIR_DESKTOP) ) @@ -282,15 +277,15 @@ func _on_ExportDialog_about_to_show() -> void: show_tab() # Set the size of the preview checker - checker.rect_size = checker.get_parent().rect_size + checker.size = checker.get_parent().size -func _on_Tabs_tab_clicked(tab: int) -> void: +func _on_Tabs_tab_clicked(tab: Export.ExportTab) -> void: Export.current_tab = tab show_tab() -func _on_Orientation_item_selected(id: int) -> void: +func _on_Orientation_item_selected(id: Export.Orientation) -> void: Export.orientation = id if Export.orientation == Export.Orientation.ROWS: spritesheet_lines_count_label.text = "Columns:" @@ -309,7 +304,7 @@ func _on_LinesCount_value_changed(value: float) -> void: set_preview() -func _on_Direction_item_selected(id: int) -> void: +func _on_Direction_item_selected(id: Export.AnimationDirection) -> void: Export.direction = id preview_current_frame = 0 Export.process_data() @@ -321,13 +316,13 @@ func _on_Resize_value_changed(value: float) -> void: update_dimensions_label() -func _on_Interpolation_item_selected(id: int) -> void: +func _on_Interpolation_item_selected(id: Image.Interpolation) -> void: Export.interpolation = id func _on_ExportDialog_confirmed() -> void: Global.current_project.export_overwrite = false - if Export.export_processed_images(false, self, Global.current_project): + if await Export.export_processed_images(false, self, Global.current_project): hide() @@ -349,7 +344,7 @@ func _on_FileDialog_dir_selected(dir: String) -> void: func _on_FileFormat_item_selected(idx: int) -> void: - var id := file_format_options.get_item_id(idx) + var id := file_format_options.get_item_id(idx) as Export.FileFormat Global.current_project.file_format = id if not Export.is_single_file_format(): get_tree().set_group("ExportMultipleFilesOptions", "disabled", false) @@ -365,7 +360,7 @@ func _on_FileExistsAlert_confirmed() -> void: # Overwrite existing file file_exists_alert_popup.dialog_text = Export.file_exists_alert Export.stop_export = false - emit_signal("resume_export_function") + resume_export_function.emit() func _on_FileExistsAlert_custom_action(action: String) -> void: @@ -373,7 +368,7 @@ func _on_FileExistsAlert_custom_action(action: String) -> void: # Cancel export file_exists_alert_popup.dialog_text = Export.file_exists_alert Export.stop_export = true - emit_signal("resume_export_function") + resume_export_function.emit() file_exists_alert_popup.hide() diff --git a/src/UI/Dialogs/ExportDialog.tscn b/src/UI/Dialogs/ExportDialog.tscn index 8121de8d499..b0c3f128685 100644 --- a/src/UI/Dialogs/ExportDialog.tscn +++ b/src/UI/Dialogs/ExportDialog.tscn @@ -1,63 +1,55 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=5 format=3 uid="uid://clgu8wb5o6oup"] -[ext_resource path="res://src/UI/Dialogs/ExportDialog.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.gd" type="Script" id=3] -[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=4] +[ext_resource type="Script" path="res://src/UI/Dialogs/ExportDialog.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="2"] +[ext_resource type="Script" path="res://src/UI/Nodes/CollapsibleContainer.gd" id="3"] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="4"] [node name="ExportDialog" type="ConfirmationDialog"] -margin_right = 532.0 -margin_bottom = 530.0 -rect_min_size = Vector2( 170, 59.5 ) -window_title = "Export..." -resizable = true +canvas_item_default_texture_filter = 0 +title = "Export..." +size = Vector2i(700, 600) +exclusive = false dialog_hide_on_ok = false -script = ExtResource( 1 ) +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 524.0 -margin_bottom = 494.0 -rect_min_size = Vector2( 330, 0 ) +custom_minimum_size = Vector2(330, 0) +offset_left = 8.0 +offset_top = 8.0 +offset_right = 524.0 +offset_bottom = 494.0 size_flags_vertical = 3 -[node name="Tabs" type="Tabs" parent="VBoxContainer"] -margin_right = 516.0 -margin_bottom = 24.0 +[node name="TabBar" type="TabBar" parent="VBoxContainer"] +layout_mode = 2 size_flags_vertical = 0 [node name="HSeparator" type="HSeparator" parent="VBoxContainer"] -margin_top = 28.0 -margin_right = 516.0 -margin_bottom = 32.0 +layout_mode = 2 [node name="PreviewLabel" type="Label" parent="VBoxContainer"] -margin_top = 36.0 -margin_right = 516.0 -margin_bottom = 50.0 +layout_mode = 2 text = "Preview:" [node name="VSplitContainer" type="VSplitContainer" parent="VBoxContainer"] -margin_top = 54.0 -margin_right = 516.0 -margin_bottom = 486.0 +layout_mode = 2 size_flags_vertical = 3 [node name="PreviewPanel" type="Panel" parent="VBoxContainer/VSplitContainer"] -margin_right = 516.0 -margin_bottom = 168.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="TransparentChecker" parent="VBoxContainer/VSplitContainer/PreviewPanel" instance=ExtResource( 2 )] +[node name="TransparentChecker" parent="VBoxContainer/VSplitContainer/PreviewPanel" instance=ExtResource("2")] unique_name_in_owner = true +layout_mode = 0 +anchors_preset = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = 0.0 -margin_bottom = 0.0 [node name="PreviewScroll" type="ScrollContainer" parent="VBoxContainer/VSplitContainer/PreviewPanel"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 size_flags_horizontal = 3 @@ -65,134 +57,108 @@ size_flags_vertical = 3 [node name="Previews" type="GridContainer" parent="VBoxContainer/VSplitContainer/PreviewPanel/PreviewScroll"] unique_name_in_owner = true -margin_right = 516.0 -margin_bottom = 168.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 columns = 3 [node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VSplitContainer"] -margin_top = 180.0 -margin_right = 516.0 -margin_bottom = 432.0 +layout_mode = 2 size_flags_vertical = 3 [node name="GridContainer" type="GridContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer"] -margin_right = 516.0 -margin_bottom = 156.0 +layout_mode = 2 columns = 2 [node name="OrientationLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer" groups=["ExportSpritesheetOptions"]] -margin_top = 3.0 -margin_right = 256.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Orientation:" -__meta__ = { -"_edit_use_anchors_": false -} [node name="Orientation" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer" groups=["ExportSpritesheetOptions"]] unique_name_in_owner = true -margin_left = 260.0 -margin_right = 516.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Rows" -items = [ "Rows", null, false, 0, null, "Columns", null, false, 1, null ] +mouse_default_cursor_shape = 2 +item_count = 2 selected = 0 +popup/item_0/text = "Rows" +popup/item_0/id = 0 +popup/item_1/text = "Columns" +popup/item_1/id = 1 [node name="LinesCountLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer" groups=["ExportSpritesheetOptions"]] unique_name_in_owner = true -margin_top = 29.0 -margin_right = 256.0 -margin_bottom = 43.0 +layout_mode = 2 text = "Columns:" [node name="LinesCount" type="SpinBox" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer" groups=["ExportSpritesheetOptions"]] unique_name_in_owner = true -margin_left = 260.0 -margin_top = 24.0 -margin_right = 516.0 -margin_bottom = 48.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 1000.0 value = 1.0 [node name="FramesLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] -margin_top = 55.0 -margin_right = 256.0 -margin_bottom = 69.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Frames:" [node name="Frames" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] unique_name_in_owner = true -margin_left = 260.0 -margin_top = 52.0 -margin_right = 516.0 -margin_bottom = 72.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "All frames" -items = [ "All frames", null, false, 0, null, "Selected frames", null, false, 1, null ] -selected = 0 +mouse_default_cursor_shape = 2 +item_count = 2 +popup/item_0/text = "All frames" +popup/item_0/id = 0 +popup/item_1/text = "Selected frames" +popup/item_1/id = 1 [node name="LayersLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] -margin_top = 79.0 -margin_right = 256.0 -margin_bottom = 93.0 +layout_mode = 2 text = "Layers:" [node name="Layers" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] unique_name_in_owner = true -margin_left = 260.0 -margin_top = 76.0 -margin_right = 516.0 -margin_bottom = 96.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "Visible layers" -items = [ "Visible layers", null, false, 0, null, "Selected layers", null, false, 1, null ] -selected = 0 +item_count = 2 +popup/item_0/text = "Visible layers" +popup/item_0/id = 0 +popup/item_1/text = "Selected layers" +popup/item_1/id = 1 [node name="DirectionLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] -margin_top = 103.0 -margin_right = 256.0 -margin_bottom = 117.0 +layout_mode = 2 text = "Direction:" [node name="Direction" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] -margin_left = 260.0 -margin_top = 100.0 -margin_right = 516.0 -margin_bottom = 120.0 -rect_min_size = Vector2( 100, 0 ) -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 size_flags_horizontal = 3 -text = "Forward" -items = [ "Forward", null, false, 0, null, "Backwards", null, false, 1, null, "Ping-Pong", null, false, 2, null ] +mouse_default_cursor_shape = 2 +item_count = 3 selected = 0 -__meta__ = { -"_edit_use_anchors_": false -} +popup/item_0/text = "Forward" +popup/item_0/id = 0 +popup/item_1/text = "Backwards" +popup/item_1/id = 1 +popup/item_2/text = "Ping-pong" +popup/item_2/id = 2 [node name="ResizeLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] -margin_top = 124.0 -margin_right = 256.0 -margin_bottom = 138.0 -rect_min_size = Vector2( 30, 0 ) +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 text = "Resize:" -[node name="Resize" type="TextureProgress" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] +[node name="Resize" type="TextureProgressBar" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] unique_name_in_owner = true -margin_left = 260.0 -margin_top = 124.0 -margin_right = 516.0 -margin_bottom = 138.0 +layout_mode = 2 +focus_mode = 2 mouse_default_cursor_shape = 2 -theme_type_variation = "ValueSlider" +theme_type_variation = &"ValueSlider" min_value = 50.0 max_value = 1000.0 step = 50.0 @@ -202,256 +168,180 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 4 ) +script = ExtResource("4") suffix = "%" snap_step = 100.0 [node name="DimensionLabelText" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] -margin_top = 142.0 -margin_right = 256.0 -margin_bottom = 156.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Export dimensions:" [node name="DimensionLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] unique_name_in_owner = true -margin_left = 260.0 -margin_top = 142.0 -margin_right = 516.0 -margin_bottom = 156.0 +layout_mode = 2 size_flags_horizontal = 3 text = "64ร—64" [node name="HSeparator2" type="HSeparator" parent="VBoxContainer/VSplitContainer/VBoxContainer"] -margin_top = 160.0 -margin_right = 516.0 -margin_bottom = 164.0 +layout_mode = 2 [node name="FilePath" type="GridContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer"] -margin_top = 168.0 -margin_right = 516.0 -margin_bottom = 220.0 +layout_mode = 2 columns = 3 [node name="Label" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath" groups=["NotHTML5"]] -margin_top = 5.0 -margin_right = 32.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 30, 0 ) +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 text = "Path:" [node name="PathLineEdit" type="LineEdit" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath" groups=["NotHTML5"]] unique_name_in_owner = true -margin_left = 36.0 -margin_right = 382.0 -margin_bottom = 24.0 +layout_mode = 2 size_flags_horizontal = 3 caret_blink = true -caret_blink_speed = 0.5 +caret_blink_interval = 0.5 [node name="PathButton" type="Button" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath" groups=["NotHTML5"]] -margin_left = 386.0 -margin_right = 516.0 -margin_bottom = 24.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Browse" [node name="Label2" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath"] -margin_top = 33.0 -margin_right = 32.0 -margin_bottom = 47.0 -rect_min_size = Vector2( 30, 0 ) +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 text = "File:" [node name="FileLineEdit" type="LineEdit" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath"] unique_name_in_owner = true -margin_left = 36.0 -margin_top = 28.0 -margin_right = 382.0 -margin_bottom = 52.0 +layout_mode = 2 size_flags_horizontal = 3 text = "untitled" caret_blink = true -caret_blink_speed = 0.5 +caret_blink_interval = 0.5 [node name="FileFormat" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/FilePath"] unique_name_in_owner = true -margin_left = 386.0 -margin_top = 28.0 -margin_right = 516.0 -margin_bottom = 52.0 -rect_min_size = Vector2( 130, 0 ) +custom_minimum_size = Vector2(130, 0) +layout_mode = 2 mouse_default_cursor_shape = 2 [node name="HSeparator3" type="HSeparator" parent="VBoxContainer/VSplitContainer/VBoxContainer"] -margin_top = 224.0 -margin_right = 516.0 -margin_bottom = 228.0 +layout_mode = 2 [node name="GifWarning" type="RichTextLabel" parent="VBoxContainer/VSplitContainer/VBoxContainer"] unique_name_in_owner = true visible = false -margin_top = 232.0 -margin_right = 516.0 -margin_bottom = 262.0 +custom_minimum_size = Vector2(0, 50) +layout_mode = 2 bbcode_enabled = true -bbcode_text = "[center]If exported GIF is distorted, it is recommended to convert to APNG and then use any online tool like [color=blue][url]https://ezgif.com/apng-to-gif[/url][/color] to turn it to GIF[/center]" -text = "If exported GIF is distorted, it is recommended to convert to APNG and then use any online tool like https://ezgif.com/apng-to-gif to turn it to GIF" -fit_content_height = true +text = "[center]If exported GIF is distorted, it is recommended to convert to APNG and then use any online tool like [color=blue][url]https://ezgif.com/apng-to-gif[/url][/color] to turn it to GIF[/center]" [node name="CollapsibleContainer" type="VBoxContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer"] -margin_top = 232.0 -margin_right = 516.0 -margin_bottom = 252.0 -theme_type_variation = "CollapsibleContainer" -script = ExtResource( 3 ) +layout_mode = 2 +theme_type_variation = &"CollapsibleContainer" +script = ExtResource("3") text = "Advanced options" [node name="GridContainer" type="GridContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer"] visible = false -margin_top = 24.0 -margin_right = 516.0 -margin_bottom = 44.0 +layout_mode = 2 columns = 2 [node name="InterpolationLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer"] -margin_top = 3.0 -margin_right = 256.0 -margin_bottom = 17.0 -rect_min_size = Vector2( 30, 0 ) +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 size_flags_horizontal = 3 text = "Interpolation:" [node name="Interpolation" type="OptionButton" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer"] unique_name_in_owner = true -margin_left = 260.0 -margin_right = 516.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Nearest" -items = [ "Nearest", null, false, 0, null, "Bilinear", null, false, 1, null, "Cubic", null, false, 2, null, "Trilinear", null, false, 3, null, "Lanczos", null, false, 4, null ] +mouse_default_cursor_shape = 2 +item_count = 5 selected = 0 +popup/item_0/text = "Nearest" +popup/item_0/id = 0 +popup/item_1/text = "Bilinear" +popup/item_1/id = 1 +popup/item_2/text = "Cubic" +popup/item_2/id = 2 +popup/item_3/text = "Trilinear" +popup/item_3/id = 3 +popup/item_4/text = "Lanczos" +popup/item_4/id = 4 [node name="IncludeTagsInFilename" type="CheckBox" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer" groups=["ExportImageOptions", "ExportMultipleFilesOptions"]] -margin_top = 24.0 -margin_right = 516.0 -margin_bottom = 48.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Include frame tags in the file name" [node name="MultipleAnimationsDirectories" type="CheckBox" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer" groups=["ExportImageOptions", "ExportMultipleFilesOptions"]] visible = false -margin_top = 24.0 -margin_right = 516.0 -margin_bottom = 48.0 -hint_tooltip = "Creates multiple files but every file is stored in different folder that corresponds to its frame tag" +layout_mode = 2 +tooltip_text = "Creates multiple files but every file is stored in different folder that corresponds to its frame tag" mouse_default_cursor_shape = 2 text = "Create new folder for each frame tag" [node name="SeparatorCharacterLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer" groups=["ExportImageOptions"]] -margin_top = 3.0 -margin_right = 256.0 -margin_bottom = 17.0 -rect_min_size = Vector2( 30, 0 ) +custom_minimum_size = Vector2(30, 0) +layout_mode = 2 size_flags_horizontal = 3 text = "Separator character(s):" [node name="SeparatorCharacter" type="LineEdit" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer/GridContainer" groups=["ExportImageOptions", "ExportMultipleFilesEditableOptions"]] -margin_right = 58.0 -margin_bottom = 24.0 -hint_tooltip = "The character(s) that separate the file name and the frame number" +layout_mode = 2 +tooltip_text = "The character(s) that separate the file name and the frame number" text = "_" [node name="Popups" type="Control" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 524.0 -margin_bottom = 494.0 +layout_mode = 3 +anchors_preset = 0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 524.0 +offset_bottom = 494.0 mouse_filter = 2 [node name="PathDialog" type="FileDialog" parent="Popups"] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 448.0 -margin_bottom = 494.0 -rect_min_size = Vector2( 440, 300 ) -size_flags_horizontal = 0 -size_flags_vertical = 0 -window_title = "Open a Directory" -resizable = true mode = 2 +title = "Open a Directory" +size = Vector2i(675, 500) +ok_button_text = "Select Current Folder" +file_mode = 2 access = 2 show_hidden_files = true [node name="PathValidationAlert" type="AcceptDialog" parent="Popups"] -margin_left = 8.0 -margin_top = 180.0 -margin_right = 448.0 -margin_bottom = 280.0 -size_flags_horizontal = 0 -size_flags_vertical = 0 -window_title = "Alarm!" -resizable = true -dialog_text = "Directory path and file name are not valid!" -__meta__ = { -"_edit_use_anchors_": false -} +dialog_text = "DirAccess path and file name are not valid!" [node name="FileExistsAlert" type="AcceptDialog" parent="Popups"] -margin_left = 10.5227 -margin_top = 176.636 -margin_right = 450.523 -margin_bottom = 276.636 -size_flags_horizontal = 0 -size_flags_vertical = 0 -window_title = "Alarm!" -resizable = true dialog_text = "File %s already exists. Overwrite?" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="ExportProgressBar" type="WindowDialog" parent="Popups"] -margin_left = 63.0 -margin_top = 215.0 -margin_right = 402.0 -margin_bottom = 256.0 -popup_exclusive = true -window_title = "Exporting in progress..." -__meta__ = { -"_edit_group_": true, -"_edit_use_anchors_": false -} + +[node name="ExportProgressBar" type="Window" parent="Popups"] +visible = false +exclusive = true [node name="MarginContainer" type="MarginContainer" parent="Popups/ExportProgressBar"] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 5.0 -margin_top = 5.0 -margin_right = -5.0 -margin_bottom = -5.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 5.0 +offset_top = 5.0 +offset_right = -5.0 +offset_bottom = -5.0 [node name="ProgressBar" type="ProgressBar" parent="Popups/ExportProgressBar/MarginContainer"] -margin_right = 329.0 -margin_bottom = 14.0 +unique_name_in_owner = true +layout_mode = 2 size_flags_horizontal = 3 -__meta__ = { -"_edit_use_anchors_": false -} [node name="FrameTimer" type="Timer" parent="."] -__meta__ = { -"_editor_description_": "Timer to advance animation frames in animation preview." -} -[connection signal="about_to_show" from="." to="." method="_on_ExportDialog_about_to_show"] +[connection signal="about_to_popup" from="." to="." method="_on_ExportDialog_about_to_show"] [connection signal="confirmed" from="." to="." method="_on_ExportDialog_confirmed"] -[connection signal="popup_hide" from="." to="." method="_on_ExportDialog_popup_hide"] -[connection signal="tab_clicked" from="VBoxContainer/Tabs" to="." method="_on_Tabs_tab_clicked"] +[connection signal="tab_clicked" from="VBoxContainer/TabBar" to="." method="_on_Tabs_tab_clicked"] [connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Orientation" to="." method="_on_Orientation_item_selected"] [connection signal="value_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/LinesCount" to="." method="_on_LinesCount_value_changed"] [connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Frames" to="." method="_on_Frames_item_selected"] diff --git a/src/UI/Dialogs/HelperScripts/RowColumnLines.gd b/src/UI/Dialogs/HelperScripts/RowColumnLines.gd index 46dc6d606b4..e45461cdaf2 100644 --- a/src/UI/Dialogs/HelperScripts/RowColumnLines.gd +++ b/src/UI/Dialogs/HelperScripts/RowColumnLines.gd @@ -1,39 +1,39 @@ extends Control -var color: Color = Color("6680ff") # Set this to a theme color later -var _spritesheet_vertical -var _spritesheet_horizontal +var color := Color("6680ff") # Set this to a theme color later +var _spritesheet_vertical: int +var _spritesheet_horizontal: int -func show_preview(spritesheet_vertical, spritesheet_horizontal) -> void: +func show_preview(spritesheet_vertical: int, spritesheet_horizontal: int) -> void: _spritesheet_vertical = spritesheet_vertical _spritesheet_horizontal = spritesheet_horizontal - update() + queue_redraw() func _draw() -> void: var texture_rect: TextureRect = get_parent() - var image = texture_rect.texture.get_data() - var image_size_y = texture_rect.rect_size.y - var image_size_x = texture_rect.rect_size.x + var image := texture_rect.texture.get_image() + var image_size_y := texture_rect.size.y + var image_size_x := texture_rect.size.x if image.get_size().x > image.get_size().y: - var scale_ratio = image.get_size().x / image_size_x + var scale_ratio := image.get_size().x / image_size_x image_size_y = image.get_size().y / scale_ratio else: - var scale_ratio = image.get_size().y / image_size_y + var scale_ratio := image.get_size().y / image_size_y image_size_x = image.get_size().x / scale_ratio - var offset_x = (texture_rect.rect_size.x - image_size_x) / 2 - var offset_y = (texture_rect.rect_size.y - image_size_y) / 2 + var offset_x := (texture_rect.size.x - image_size_x) / 2 + var offset_y := (texture_rect.size.y - image_size_y) / 2 - var line_distance_vertical = image_size_y / _spritesheet_vertical - var line_distance_horizontal = image_size_x / _spritesheet_horizontal + var line_distance_vertical := image_size_y / _spritesheet_vertical + var line_distance_horizontal := image_size_x / _spritesheet_horizontal for i in range(1, _spritesheet_vertical): - var from = Vector2(offset_x, i * line_distance_vertical + offset_y) - var to = Vector2(image_size_x + offset_x, i * line_distance_vertical + offset_y) + var from := Vector2(offset_x, i * line_distance_vertical + offset_y) + var to := Vector2(image_size_x + offset_x, i * line_distance_vertical + offset_y) draw_line(from, to, color) for i in range(1, _spritesheet_horizontal): - var from = Vector2(i * line_distance_horizontal + offset_x, offset_y) - var to = Vector2(i * line_distance_horizontal + offset_x, image_size_y + offset_y) + var from := Vector2(i * line_distance_horizontal + offset_x, offset_y) + var to := Vector2(i * line_distance_horizontal + offset_x, image_size_y + offset_y) draw_line(from, to, color) diff --git a/src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd b/src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd index f3e3e58e8c7..a53ee617a37 100644 --- a/src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd +++ b/src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd @@ -1,27 +1,29 @@ extends Control -# add this as a child of the texturerect that contains the main spritesheet -var color: Color = Color("6680ff") # Set this to a theme color later -var _sliced_rects: Array +## Add this as a child of the texturerect that contains the main spritesheet +var color := Color("6680ff") ## Set this to a theme color later +var _sliced_rects: Array[Rect2i] var _stretch_amount: float var _offset: Vector2 -func show_preview(sliced_rects: Array) -> void: - var image = get_parent().texture.get_data() +func show_preview(sliced_rects: Array[Rect2i]) -> void: + if not is_instance_valid(get_parent().texture): + return + var image: Image = get_parent().texture.get_image() if image.get_size().x > image.get_size().y: - _stretch_amount = rect_size.x / image.get_size().x + _stretch_amount = size.x / image.get_size().x else: - _stretch_amount = rect_size.y / image.get_size().y + _stretch_amount = size.y / image.get_size().y _sliced_rects = sliced_rects.duplicate() - _offset = (0.5 * (rect_size - (image.get_size() * _stretch_amount))).floor() - update() + _offset = (0.5 * (size - (image.get_size() * _stretch_amount))).floor() + queue_redraw() func _draw() -> void: draw_set_transform(_offset, 0, Vector2.ONE) for i in _sliced_rects.size(): - var rect = _sliced_rects[i] + var rect := _sliced_rects[i] var scaled_rect: Rect2 = rect scaled_rect.position = (scaled_rect.position * _stretch_amount) scaled_rect.size *= _stretch_amount diff --git a/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd b/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd index 1544eef8664..fd54405d1e5 100644 --- a/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd +++ b/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd @@ -5,30 +5,31 @@ var green := true var blue := true var alpha := false -var shader: Shader = preload("res://src/Shaders/Desaturate.shader") +var shader := preload("res://src/Shaders/Desaturate.gdshader") func _ready() -> void: + super._ready() var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) -func commit_action(cel: Image, project: Project = Global.current_project) -> void: - var selection_tex := ImageTexture.new() - if selection_checkbox.pressed and project.has_selection: - selection_tex.create_from_image(project.selection_map, 0) +func commit_action(cel: Image, project := Global.current_project) -> void: + var selection_tex: ImageTexture + if selection_checkbox.button_pressed and project.has_selection: + selection_tex = ImageTexture.create_from_image(project.selection_map) var params := { "red": red, "blue": blue, "green": green, "alpha": alpha, "selection": selection_tex } - if !confirmed: + if !has_been_confirmed: for param in params: - preview.material.set_shader_param(param, params[param]) + preview.material.set_shader_parameter(param, params[param]) else: var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) - yield(gen, "done") + await gen.done func _on_RButton_toggled(button_pressed: bool) -> void: diff --git a/src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn b/src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn index bb67b90d76a..2b2e2184435 100644 --- a/src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn +++ b/src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn @@ -1,74 +1,51 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://5gqka7tkg17k"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/DesaturateDialog.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/DesaturateDialog.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"] -[node name="DesaturateDialog" instance=ExtResource( 2 )] -window_title = "Desaturation" -script = ExtResource( 1 ) +[node name="DesaturateDialog" instance=ExtResource("2")] +title = "Desaturation" +script = ExtResource("1") [node name="ShowAnimate" parent="VBoxContainer" index="0"] visible = false -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 238.0 - -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 73.0 -margin_right = 287.0 -margin_bottom = 214.0 - [node name="RGBAContainer" type="HBoxContainer" parent="VBoxContainer" index="2"] -margin_top = 242.0 -margin_right = 360.0 -margin_bottom = 262.0 +layout_mode = 2 alignment = 1 [node name="RButton" type="Button" parent="VBoxContainer/RGBAContainer" index="0"] -margin_right = 87.0 -margin_bottom = 20.0 -hint_tooltip = "Modify Red Channel" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Modify Red Channel" +mouse_default_cursor_shape = 2 toggle_mode = true -pressed = true text = "R" [node name="GButton" type="Button" parent="VBoxContainer/RGBAContainer" index="1"] -margin_left = 91.0 -margin_right = 178.0 -margin_bottom = 20.0 -hint_tooltip = "Modify Green Channel" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Modify Green Channel" +mouse_default_cursor_shape = 2 toggle_mode = true -pressed = true text = "G" [node name="BButton" type="Button" parent="VBoxContainer/RGBAContainer" index="2"] -margin_left = 182.0 -margin_right = 269.0 -margin_bottom = 20.0 -hint_tooltip = "Modify Blue Channel" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Modify Blue Channel" +mouse_default_cursor_shape = 2 toggle_mode = true -pressed = true text = "B" [node name="AButton" type="Button" parent="VBoxContainer/RGBAContainer" index="3"] -margin_left = 273.0 -margin_right = 360.0 -margin_bottom = 20.0 -hint_tooltip = "Modify Alpha Channel" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Modify Alpha Channel" +mouse_default_cursor_shape = 2 toggle_mode = true text = "A" -[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"] -items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ] - [connection signal="toggled" from="VBoxContainer/RGBAContainer/RButton" to="." method="_on_RButton_toggled"] [connection signal="toggled" from="VBoxContainer/RGBAContainer/GButton" to="." method="_on_GButton_toggled"] [connection signal="toggled" from="VBoxContainer/RGBAContainer/BButton" to="." method="_on_BButton_toggled"] diff --git a/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd b/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd index d4868467de3..b8e898c366c 100644 --- a/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd +++ b/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd @@ -1,13 +1,14 @@ extends ImageEffect enum Animate { OFFSET_X, OFFSET_Y } -var color := Color.black -var shader: Shader = preload("res://src/Shaders/DropShadow.tres") +var color := Color.BLACK +var shader := preload("res://src/Shaders/DropShadow.gdshader") -onready var shadow_color := $VBoxContainer/ShadowOptions/ShadowColor as ColorPickerButton +@onready var shadow_color := $VBoxContainer/ShadowOptions/ShadowColor as ColorPickerButton func _ready() -> void: + super._ready() shadow_color.get_picker().presets_visible = false color = shadow_color.color var sm := ShaderMaterial.new() @@ -16,32 +17,32 @@ func _ready() -> void: # set as in enum animate_panel.add_float_property( - "Offset X", $VBoxContainer/ShadowOptions/OffsetSliders.find_node("X") + "Offset X", $VBoxContainer/ShadowOptions/OffsetSliders.find_child("X") ) animate_panel.add_float_property( - "Offset Y", $VBoxContainer/ShadowOptions/OffsetSliders.find_node("Y") + "Offset Y", $VBoxContainer/ShadowOptions/OffsetSliders.find_child("Y") ) -func commit_action(cel: Image, project: Project = Global.current_project) -> void: +func commit_action(cel: Image, project := Global.current_project) -> void: var offset_x := animate_panel.get_animated_value(commit_idx, Animate.OFFSET_X) var offset_y := animate_panel.get_animated_value(commit_idx, Animate.OFFSET_Y) - var selection_tex := ImageTexture.new() - if selection_checkbox.pressed and project.has_selection: - selection_tex.create_from_image(project.selection_map, 0) + var selection_tex: ImageTexture + if selection_checkbox.button_pressed and project.has_selection: + selection_tex = ImageTexture.create_from_image(project.selection_map) var params := { "shadow_offset": Vector2(offset_x, offset_y), "shadow_color": color, "selection": selection_tex, } - if !confirmed: + if !has_been_confirmed: for param in params: - preview.material.set_shader_param(param, params[param]) + preview.material.set_shader_parameter(param, params[param]) else: var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) - yield(gen, "done") + await gen.done func _on_OffsetSliders_value_changed(_value: Vector2) -> void: diff --git a/src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn b/src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn index f69aa514e50..3f0f55a8f0b 100644 --- a/src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn +++ b/src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn @@ -1,48 +1,44 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://duse1w3q7whmm"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/DropShadowDialog.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=3] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="1"] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/DropShadowDialog.gd" id="2"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="3"] -[node name="DropShadowDialog" instance=ExtResource( 1 )] -window_title = "Drop Shadow" -script = ExtResource( 2 ) +[node name="DropShadowDialog" instance=ExtResource("1")] +title = "Drop Shadow" +script = ExtResource("2") [node name="VBoxContainer" parent="." index="3"] -margin_bottom = 340.0 +offset_bottom = 340.0 -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 224.0 +[node name="TextureRect" parent="VBoxContainer/ShowAnimate" index="0"] +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_left = 0.0 +offset_top = 0.0 +offset_right = 0.0 +offset_bottom = 0.0 -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 80.0 -margin_right = 280.0 -margin_bottom = 200.0 +[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" index="0"] +anchor_right = 0.0 +anchor_bottom = 0.0 [node name="ShadowOptions" type="GridContainer" parent="VBoxContainer" index="2"] -margin_top = 228.0 -margin_right = 360.0 -margin_bottom = 304.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 2 -__meta__ = { -"_edit_use_anchors_": false -} [node name="Label" type="Label" parent="VBoxContainer/ShadowOptions" index="0"] -margin_top = 19.0 -margin_right = 178.0 -margin_bottom = 33.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Offset:" -[node name="OffsetSliders" parent="VBoxContainer/ShadowOptions" index="1" instance=ExtResource( 3 )] -margin_left = 182.0 -margin_right = 360.0 -value = Vector2( 5, 5 ) -min_value = Vector2( -64, -64 ) -max_value = Vector2( 64, 64 ) +[node name="OffsetSliders" parent="VBoxContainer/ShadowOptions" index="1" instance=ExtResource("3")] +layout_mode = 2 +value = Vector2(5, 5) +min_value = Vector2(-64, -64) +max_value = Vector2(64, 64) allow_greater = true allow_lesser = true show_ratio = true @@ -50,30 +46,22 @@ suffix_x = "px" suffix_y = "px" [node name="ShadowColorLabel" type="Label" parent="VBoxContainer/ShadowOptions" index="2"] -margin_top = 59.0 -margin_right = 178.0 -margin_bottom = 73.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Shadow color:" [node name="ShadowColor" type="ColorPickerButton" parent="VBoxContainer/ShadowOptions" index="3"] -margin_left = 182.0 -margin_top = 56.0 -margin_right = 360.0 -margin_bottom = 76.0 -rect_min_size = Vector2( 64, 20 ) +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 size_flags_horizontal = 3 -color = Color( 0.0823529, 0.0823529, 0.0823529, 0.627451 ) - -[node name="OptionsContainer" parent="VBoxContainer" index="3"] -margin_top = 308.0 -margin_bottom = 332.0 +color = Color(0.0823529, 0.0823529, 0.0823529, 0.627451) [node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"] -items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ] +selected = -1 -[node name="AnimateDialog" parent="." index="4"] -margin_bottom = 340.0 +[node name="AnimatePanel" parent="AnimateDialog" index="0"] +grow_horizontal = 2 +grow_vertical = 2 [connection signal="value_changed" from="VBoxContainer/ShadowOptions/OffsetSliders" to="." method="_on_OffsetSliders_value_changed"] [connection signal="color_changed" from="VBoxContainer/ShadowOptions/ShadowColor" to="." method="_on_ShadowColor_color_changed"] diff --git a/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd b/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd index aee63a937f0..b33944a62f8 100644 --- a/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd +++ b/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd @@ -1,11 +1,11 @@ extends ImageEffect -onready var flip_h := $VBoxContainer/FlipOptions/FlipHorizontal as CheckBox -onready var flip_v := $VBoxContainer/FlipOptions/FlipVertical as CheckBox +@onready var flip_h := $VBoxContainer/FlipOptions/FlipHorizontal as CheckBox +@onready var flip_v := $VBoxContainer/FlipOptions/FlipVertical as CheckBox -func commit_action(cel: Image, project: Project = Global.current_project) -> void: - _flip_image(cel, selection_checkbox.pressed, project) +func commit_action(cel: Image, project := Global.current_project) -> void: + _flip_image(cel, selection_checkbox.button_pressed, project) func _on_FlipHorizontal_toggled(_button_pressed: bool) -> void: @@ -18,35 +18,31 @@ func _on_FlipVertical_toggled(_button_pressed: bool) -> void: func _flip_image(cel: Image, affect_selection: bool, project: Project) -> void: if !(affect_selection and project.has_selection): - if flip_h.pressed: + if flip_h.button_pressed: cel.flip_x() - if flip_v.pressed: + if flip_v.button_pressed: cel.flip_y() else: # Create a temporary image that only has the selected pixels in it var selected := Image.new() - var rectangle: Rect2 = Global.canvas.selection.big_bounding_rectangle + var rectangle: Rect2i = Global.canvas.selection.big_bounding_rectangle if project != Global.current_project: rectangle = project.selection_map.get_used_rect() - selected = cel.get_rect(rectangle) - selected.lock() - cel.lock() + selected = cel.get_region(rectangle) for x in selected.get_width(): for y in selected.get_height(): - var pos := Vector2(x, y) + var pos := Vector2i(x, y) var cel_pos := pos + rectangle.position if project.can_pixel_get_drawn(cel_pos): cel.set_pixelv(cel_pos, Color(0, 0, 0, 0)) else: selected.set_pixelv(pos, Color(0, 0, 0, 0)) - selected.unlock() - cel.unlock() - if flip_h.pressed: + if flip_h.button_pressed: selected.flip_x() - if flip_v.pressed: + if flip_v.button_pressed: selected.flip_y() - cel.blend_rect(selected, Rect2(Vector2.ZERO, selected.get_size()), rectangle.position) + cel.blend_rect(selected, Rect2i(Vector2i.ZERO, selected.get_size()), rectangle.position) func _commit_undo(action: String, undo_data: Dictionary, project: Project) -> void: @@ -64,15 +60,14 @@ func _commit_undo(action: String, undo_data: Dictionary, project: Project) -> vo if not image is Image: continue project.undo_redo.add_do_property(image, "data", redo_data[image]) - image.unlock() for image in undo_data: if not image is Image: continue project.undo_redo.add_undo_property(image, "data", undo_data[image]) - project.undo_redo.add_do_method(Global, "undo_or_redo", false, -1, -1, project) - project.undo_redo.add_do_method(project, "selection_map_changed") - project.undo_redo.add_undo_method(Global, "undo_or_redo", true, -1, -1, project) - project.undo_redo.add_undo_method(project, "selection_map_changed") + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, -1, -1, project)) + project.undo_redo.add_do_method(project.selection_map_changed) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, -1, -1, project)) + project.undo_redo.add_undo_method(project.selection_map_changed) project.undo_redo.commit_action() @@ -85,30 +80,29 @@ func _get_undo_data(project: Project) -> Dictionary: var images := _get_selected_draw_images(project) for image in images: - image.unlock() data[image] = image.data return data -func _flip_selection(project: Project = Global.current_project) -> void: - if !(selection_checkbox.pressed and project.has_selection): +func _flip_selection(project := Global.current_project) -> void: + if !(selection_checkbox.button_pressed and project.has_selection): return var bitmap_image := SelectionMap.new() bitmap_image.copy_from(project.selection_map) var selection_rect := bitmap_image.get_used_rect() - var smaller_bitmap_image := bitmap_image.get_rect(selection_rect) + var smaller_bitmap_image := bitmap_image.get_region(selection_rect) - if flip_h.pressed: + if flip_h.button_pressed: smaller_bitmap_image.flip_x() - if flip_v.pressed: + if flip_v.button_pressed: smaller_bitmap_image.flip_y() bitmap_image.fill(Color(0, 0, 0, 0)) bitmap_image.blend_rect( smaller_bitmap_image, - Rect2(Vector2.ZERO, smaller_bitmap_image.get_size()), + Rect2i(Vector2.ZERO, smaller_bitmap_image.get_size()), selection_rect.position ) project.selection_map = bitmap_image diff --git a/src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn b/src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn index 5487adecdac..1ab72eb79b7 100644 --- a/src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn +++ b/src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn @@ -1,59 +1,34 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://c7hnynip21y6u"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/FlipImageDialog.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/FlipImageDialog.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"] -[node name="FlipImageDialog" instance=ExtResource( 2 )] -margin_right = 376.0 -margin_bottom = 324.0 -window_title = "Mirror Image" -script = ExtResource( 1 ) +[node name="FlipImageDialog" instance=ExtResource("2")] +title = "Mirror Image" +script = ExtResource("1") [node name="VBoxContainer" parent="." index="3"] -margin_bottom = 288.0 +offset_bottom = 288.0 [node name="ShowAnimate" parent="VBoxContainer" index="0"] visible = false -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 224.0 - -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 80.0 -margin_right = 280.0 -margin_bottom = 200.0 - [node name="FlipOptions" type="GridContainer" parent="VBoxContainer" index="2"] -margin_top = 228.0 -margin_right = 360.0 -margin_bottom = 252.0 +layout_mode = 2 columns = 2 [node name="FlipHorizontal" type="CheckBox" parent="VBoxContainer/FlipOptions" index="0"] -margin_right = 178.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -pressed = true +mouse_default_cursor_shape = 2 +button_pressed = true text = "Horizontal" [node name="FlipVertical" type="CheckBox" parent="VBoxContainer/FlipOptions" index="1"] -margin_left = 182.0 -margin_right = 360.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "Vertical" -[node name="OptionsContainer" parent="VBoxContainer" index="3"] -margin_top = 256.0 -margin_bottom = 280.0 - -[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"] -items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ] - -[node name="AnimateDialog" parent="." index="4"] -margin_bottom = 288.0 - [connection signal="toggled" from="VBoxContainer/FlipOptions/FlipHorizontal" to="." method="_on_FlipHorizontal_toggled"] [connection signal="toggled" from="VBoxContainer/FlipOptions/FlipVertical" to="." method="_on_FlipVertical_toggled"] diff --git a/src/UI/Dialogs/ImageEffects/GradientDialog.gd b/src/UI/Dialogs/ImageEffects/GradientDialog.gd index 410084b8dbc..f7007d6369c 100644 --- a/src/UI/Dialogs/ImageEffects/GradientDialog.gd +++ b/src/UI/Dialogs/ImageEffects/GradientDialog.gd @@ -3,40 +3,41 @@ extends ImageEffect enum { LINEAR, RADIAL, LINEAR_DITHERING, RADIAL_DITHERING } enum Animate { POSITION, SIZE, ANGLE, CENTER_X, CENTER_Y, RADIUS_X, RADIUS_Y } -var shader_linear: Shader = preload("res://src/Shaders/Gradients/Linear.gdshader") -var shader_linear_dither: Shader = preload("res://src/Shaders/Gradients/LinearDithering.gdshader") +var shader_linear := preload("res://src/Shaders/Gradients/Linear.gdshader") +var shader_linear_dither := preload("res://src/Shaders/Gradients/LinearDithering.gdshader") -var shader: Shader = shader_linear -var dither_matrices := [ +var shader := shader_linear +var dither_matrices: Array[DitherMatrix] = [ DitherMatrix.new(preload("res://assets/dither-matrices/bayer2.png"), "Bayer 2x2"), DitherMatrix.new(preload("res://assets/dither-matrices/bayer4.png"), "Bayer 4x4"), DitherMatrix.new(preload("res://assets/dither-matrices/bayer8.png"), "Bayer 8x8"), DitherMatrix.new(preload("res://assets/dither-matrices/bayer16.png"), "Bayer 16x16"), ] -var selected_dither_matrix: DitherMatrix = dither_matrices[0] +var selected_dither_matrix := dither_matrices[0] -onready var options_cont: Container = $VBoxContainer/GradientOptions -onready var gradient_edit: GradientEditNode = $VBoxContainer/GradientEdit -onready var shape_option_button: OptionButton = $"%ShapeOptionButton" -onready var dithering_option_button: OptionButton = $"%DitheringOptionButton" -onready var repeat_option_button: OptionButton = $"%RepeatOptionButton" -onready var position_slider: ValueSlider = $"%PositionSlider" -onready var size_slider: ValueSlider = $"%SizeSlider" -onready var angle_slider: ValueSlider = $"%AngleSlider" -onready var center_slider := $"%CenterSlider" as ValueSliderV2 -onready var radius_slider := $"%RadiusSlider" as ValueSliderV2 +@onready var options_cont: Container = $VBoxContainer/GradientOptions +@onready var gradient_edit: GradientEditNode = $VBoxContainer/GradientEdit +@onready var shape_option_button: OptionButton = $"%ShapeOptionButton" +@onready var dithering_option_button: OptionButton = $"%DitheringOptionButton" +@onready var repeat_option_button: OptionButton = $"%RepeatOptionButton" +@onready var position_slider: ValueSlider = $"%PositionSlider" +@onready var size_slider: ValueSlider = $"%SizeSlider" +@onready var angle_slider: ValueSlider = $"%AngleSlider" +@onready var center_slider := $"%CenterSlider" as ValueSliderV2 +@onready var radius_slider := $"%RadiusSlider" as ValueSliderV2 class DitherMatrix: - var texture: Texture + var texture: Texture2D var name: String - func _init(_texture: Texture, _name: String) -> void: + func _init(_texture: Texture2D, _name: String) -> void: texture = _texture name = _name func _ready() -> void: + super._ready() var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) @@ -54,44 +55,30 @@ func _ready() -> void: animate_panel.add_float_property("Radius Y", radius_slider.get_sliders()[1]) -func commit_action(cel: Image, project: Project = Global.current_project) -> void: - var selection: Image - var selection_tex := ImageTexture.new() - if selection_checkbox.pressed and project.has_selection: - selection = project.selection_map - else: # This is needed to prevent a weird bug with the dithering shaders and GLES2 - selection = Image.new() - selection.create(project.size.x, project.size.y, false, Image.FORMAT_L8) - selection_tex.create_from_image(selection, 0) +func commit_action(cel: Image, project := Global.current_project) -> void: + var selection_tex: ImageTexture + if selection_checkbox.button_pressed and project.has_selection: + selection_tex = ImageTexture.create_from_image(project.selection_map) - var dither_texture: Texture = selected_dither_matrix.texture - var pixel_size := dither_texture.get_width() - var gradient: Gradient = gradient_edit.gradient + var dither_texture := selected_dither_matrix.texture + var gradient := gradient_edit.gradient var n_of_colors := gradient.offsets.size() # Pass the gradient offsets as an array to the shader # ...but since Godot 3.x doesn't support uniform arrays, instead we construct # a nx1 grayscale texture with each offset stored in each pixel, and pass it to the shader - var offsets_image := Image.new() - offsets_image.create(n_of_colors, 1, false, Image.FORMAT_L8) + var offsets_image := Image.create(n_of_colors, 1, false, Image.FORMAT_L8) # Construct an image that contains the selected colors of the gradient without interpolation - var gradient_image := Image.new() - gradient_image.create(n_of_colors, 1, false, Image.FORMAT_RGBA8) - offsets_image.lock() - gradient_image.lock() + var gradient_image := Image.create(n_of_colors, 1, false, Image.FORMAT_RGBA8) for i in n_of_colors: var c := gradient.offsets[i] offsets_image.set_pixel(i, 0, Color(c, c, c, c)) gradient_image.set_pixel(i, 0, gradient.colors[i]) - offsets_image.unlock() - gradient_image.unlock() - var offsets_tex := ImageTexture.new() - offsets_tex.create_from_image(offsets_image, 0) - var gradient_tex: Texture + var offsets_tex := ImageTexture.create_from_image(offsets_image) + var gradient_tex: Texture2D if shader == shader_linear: gradient_tex = gradient_edit.texture else: - gradient_tex = ImageTexture.new() - gradient_tex.create_from_image(gradient_image, 0) + gradient_tex = ImageTexture.create_from_image(gradient_image) var center := Vector2( animate_panel.get_animated_value(commit_idx, Animate.CENTER_X), animate_panel.get_animated_value(commit_idx, Animate.CENTER_Y) @@ -111,20 +98,17 @@ func commit_action(cel: Image, project: Project = Global.current_project) -> voi "center": center / 100.0, "radius": radius, "dither_texture": dither_texture, - "image_size": project.size, - "pixel_size": pixel_size, "shape": shape_option_button.selected, - "n_of_colors": n_of_colors } - if !confirmed: + if !has_been_confirmed: preview.material.shader = shader for param in params: - preview.material.set_shader_param(param, params[param]) + preview.material.set_shader_parameter(param, params[param]) else: var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) - yield(gen, "done") + await gen.done func _on_ShapeOptionButton_item_selected(index: int) -> void: diff --git a/src/UI/Dialogs/ImageEffects/GradientDialog.tscn b/src/UI/Dialogs/ImageEffects/GradientDialog.tscn index 08378537c5c..004eea72b75 100644 --- a/src/UI/Dialogs/ImageEffects/GradientDialog.tscn +++ b/src/UI/Dialogs/ImageEffects/GradientDialog.tscn @@ -1,105 +1,86 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=6 format=3 uid="uid://u0y5xogg636e"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/GradientDialog.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UI/Nodes/GradientEdit.tscn" type="PackedScene" id=3] -[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=4] -[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=5] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/GradientDialog.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"] +[ext_resource type="PackedScene" uid="uid://bn4aw27dj7pwi" path="res://src/UI/Nodes/GradientEdit.tscn" id="3"] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="4"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="5"] -[node name="GradientDialog" instance=ExtResource( 2 )] -window_title = "Gradient" -script = ExtResource( 1 ) +[node name="GradientDialog" instance=ExtResource("2")] +title = "Gradient" +size = Vector2i(700, 603) +script = ExtResource("1") [node name="VBoxContainer" parent="." index="3"] -margin_bottom = 444.0 +offset_right = 692.0 +offset_bottom = 554.0 -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 224.0 - -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 80.0 -margin_right = 280.0 -margin_bottom = 200.0 - -[node name="GradientEdit" parent="VBoxContainer" index="2" instance=ExtResource( 3 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_top = 228.0 -margin_right = 360.0 -margin_bottom = 306.0 +[node name="GradientEdit" parent="VBoxContainer" index="2" instance=ExtResource("3")] +layout_mode = 2 [node name="GradientOptions" type="GridContainer" parent="VBoxContainer" index="3"] -margin_top = 310.0 -margin_right = 360.0 -margin_bottom = 432.0 +layout_mode = 2 columns = 2 [node name="ShapeLabel" type="Label" parent="VBoxContainer/GradientOptions" index="0" groups=["gradient_common"]] -margin_top = 3.0 -margin_right = 178.0 -margin_bottom = 17.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Shape:" [node name="ShapeOptionButton" type="OptionButton" parent="VBoxContainer/GradientOptions" index="1" groups=["gradient_common"]] unique_name_in_owner = true -margin_left = 182.0 -margin_right = 360.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Linear" -items = [ "Linear", null, false, 0, null, "Radial", null, false, 1, null ] +mouse_default_cursor_shape = 2 +item_count = 2 selected = 0 +popup/item_0/text = "Linear" +popup/item_0/id = 0 +popup/item_1/text = "Radial" +popup/item_1/id = 1 [node name="DitheringLabel" type="Label" parent="VBoxContainer/GradientOptions" index="2" groups=["gradient_common"]] -margin_top = 27.0 -margin_right = 178.0 -margin_bottom = 41.0 +layout_mode = 2 text = "Dithering pattern:" [node name="DitheringOptionButton" type="OptionButton" parent="VBoxContainer/GradientOptions" index="3" groups=["gradient_common"]] unique_name_in_owner = true -margin_left = 182.0 -margin_top = 24.0 -margin_right = 360.0 -margin_bottom = 44.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "None" -items = [ "None", null, false, 0, null ] +item_count = 1 selected = 0 +popup/item_0/text = "None" +popup/item_0/id = 0 [node name="RepeatLabel" type="Label" parent="VBoxContainer/GradientOptions" index="4" groups=["gradient_common"]] -margin_top = 51.0 -margin_right = 178.0 -margin_bottom = 65.0 +layout_mode = 2 text = "Repeat:" [node name="RepeatOptionButton" type="OptionButton" parent="VBoxContainer/GradientOptions" index="5" groups=["gradient_common"]] unique_name_in_owner = true -margin_left = 182.0 -margin_top = 48.0 -margin_right = 360.0 -margin_bottom = 68.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "None" -items = [ "None", null, false, 0, null, "Repeat", null, false, 1, null, "Mirror", null, false, 2, null, "Truncate", null, false, 3, null ] +item_count = 4 selected = 0 +popup/item_0/text = "None" +popup/item_0/id = 0 +popup/item_1/text = "Repeat" +popup/item_1/id = 1 +popup/item_2/text = "Mirror" +popup/item_2/id = 2 +popup/item_3/text = "Truncate" +popup/item_3/id = 3 [node name="PositionLabel" type="Label" parent="VBoxContainer/GradientOptions" index="6" groups=["gradient_linear"]] -margin_top = 72.0 -margin_right = 178.0 -margin_bottom = 86.0 +layout_mode = 2 text = "Position:" -[node name="PositionSlider" type="TextureProgress" parent="VBoxContainer/GradientOptions" index="7" groups=["gradient_linear"]] +[node name="PositionSlider" type="TextureProgressBar" parent="VBoxContainer/GradientOptions" index="7" groups=["gradient_linear"]] unique_name_in_owner = true -margin_left = 182.0 -margin_top = 72.0 -margin_right = 360.0 -margin_bottom = 86.0 +layout_mode = 2 +focus_mode = 2 mouse_default_cursor_shape = 2 -theme_type_variation = "ValueSlider" +theme_type_variation = &"ValueSlider" value = 50.0 allow_greater = true allow_lesser = true @@ -108,25 +89,21 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 4 ) +script = ExtResource("4") suffix = "%" snap_step = 10.0 [node name="SizeLabel" type="Label" parent="VBoxContainer/GradientOptions" index="8" groups=["gradient_linear"]] -margin_top = 90.0 -margin_right = 178.0 -margin_bottom = 104.0 +layout_mode = 2 text = "Size:" -[node name="SizeSlider" type="TextureProgress" parent="VBoxContainer/GradientOptions" index="9" groups=["gradient_linear"]] +[node name="SizeSlider" type="TextureProgressBar" parent="VBoxContainer/GradientOptions" index="9" groups=["gradient_linear"]] unique_name_in_owner = true -margin_left = 182.0 -margin_top = 90.0 -margin_right = 360.0 -margin_bottom = 104.0 +layout_mode = 2 +focus_mode = 2 mouse_default_cursor_shape = 2 -theme_type_variation = "ValueSlider" -min_value = 0.01 +theme_type_variation = &"ValueSlider" +min_value = 1.0 max_value = 200.0 value = 100.0 allow_greater = true @@ -135,46 +112,41 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 4 ) +script = ExtResource("4") suffix = "%" snap_step = 10.0 [node name="AngleLabel" type="Label" parent="VBoxContainer/GradientOptions" index="10" groups=["gradient_linear"]] -margin_top = 108.0 -margin_right = 178.0 -margin_bottom = 122.0 +layout_mode = 2 text = "Angle:" -[node name="AngleSlider" type="TextureProgress" parent="VBoxContainer/GradientOptions" index="11" groups=["gradient_linear"]] +[node name="AngleSlider" type="TextureProgressBar" parent="VBoxContainer/GradientOptions" index="11" groups=["gradient_linear"]] unique_name_in_owner = true -margin_left = 182.0 -margin_top = 108.0 -margin_right = 360.0 -margin_bottom = 122.0 +layout_mode = 2 +focus_mode = 2 mouse_default_cursor_shape = 2 -theme_type_variation = "ValueSlider" +theme_type_variation = &"ValueSlider" max_value = 360.0 nine_patch_stretch = true stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 4 ) +script = ExtResource("4") suffix = "ยฐ" snap_step = 45.0 [node name="CenterLabel" type="Label" parent="VBoxContainer/GradientOptions" index="12" groups=["gradient_radial"]] visible = false -margin_top = 60.0 -margin_right = 160.0 -margin_bottom = 74.0 +layout_mode = 2 size_flags_vertical = 1 text = "Center:" -[node name="CenterSlider" parent="VBoxContainer/GradientOptions" index="13" groups=["gradient_radial"] instance=ExtResource( 5 )] +[node name="CenterSlider" parent="VBoxContainer/GradientOptions" index="13" groups=["gradient_radial"] instance=ExtResource("5")] unique_name_in_owner = true visible = false -value = Vector2( 50, 50 ) +layout_mode = 2 +value = Vector2(50, 50) allow_greater = true allow_lesser = true snap_step = 10.0 @@ -183,30 +155,21 @@ suffix_y = "%" [node name="RadiusLabel" type="Label" parent="VBoxContainer/GradientOptions" index="14" groups=["gradient_radial"]] visible = false -margin_top = 193.0 -margin_right = 160.0 -margin_bottom = 207.0 +layout_mode = 2 size_flags_vertical = 1 text = "Radius:" -[node name="RadiusSlider" parent="VBoxContainer/GradientOptions" index="15" groups=["gradient_radial"] instance=ExtResource( 5 )] +[node name="RadiusSlider" parent="VBoxContainer/GradientOptions" index="15" groups=["gradient_radial"] instance=ExtResource("5")] unique_name_in_owner = true visible = false -margin_right = 52.0 -value = Vector2( 1, 1 ) -min_value = Vector2( 0.01, 0.01 ) -max_value = Vector2( 10, 10 ) +layout_mode = 2 +value = Vector2(1, 1) +min_value = Vector2(0.01, 0.01) +max_value = Vector2(10, 10) step = 0.01 allow_greater = true show_ratio = true -[node name="OptionsContainer" parent="VBoxContainer" index="4"] -margin_top = 436.0 -margin_bottom = 460.0 - -[node name="AnimateDialog" parent="." index="4"] -margin_bottom = 444.0 - [connection signal="updated" from="VBoxContainer/GradientEdit" to="." method="_on_GradientEdit_updated"] [connection signal="item_selected" from="VBoxContainer/GradientOptions/ShapeOptionButton" to="." method="_on_ShapeOptionButton_item_selected"] [connection signal="item_selected" from="VBoxContainer/GradientOptions/DitheringOptionButton" to="." method="_on_DitheringOptionButton_item_selected"] diff --git a/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd b/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd index 7527fed04fd..754e347bb6a 100644 --- a/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd +++ b/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd @@ -1,29 +1,30 @@ extends ImageEffect -var shader: Shader = preload("res://src/Shaders/GradientMap.gdshader") +var shader := preload("res://src/Shaders/GradientMap.gdshader") func _ready() -> void: + super._ready() var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) -func commit_action(cel: Image, project: Project = Global.current_project) -> void: - var selection_tex := ImageTexture.new() - if selection_checkbox.pressed and project.has_selection: - selection_tex.create_from_image(project.selection_map, 0) +func commit_action(cel: Image, project := Global.current_project) -> void: + var selection_tex: ImageTexture + if selection_checkbox.button_pressed and project.has_selection: + selection_tex = ImageTexture.create_from_image(project.selection_map) var params := {"selection": selection_tex, "map": $VBoxContainer/GradientEdit.texture} - if !confirmed: + if !has_been_confirmed: for param in params: - preview.material.set_shader_param(param, params[param]) + preview.material.set_shader_parameter(param, params[param]) else: var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) - yield(gen, "done") + await gen.done -func _on_GradientEdit_updated(_gradient, _cc) -> void: +func _on_GradientEdit_updated(_gradient: Gradient, _cc: bool) -> void: update_preview() diff --git a/src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn b/src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn index 541e8c09f5f..37e254df22d 100644 --- a/src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn +++ b/src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn @@ -1,40 +1,18 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://cjd5sjemyea4a"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Nodes/GradientEdit.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/GradientMapDialog.gd" type="Script" id=3] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="1"] +[ext_resource type="PackedScene" uid="uid://bn4aw27dj7pwi" path="res://src/UI/Nodes/GradientEdit.tscn" id="2"] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/GradientMapDialog.gd" id="3"] -[node name="GradientMapDialog" instance=ExtResource( 1 )] -window_title = "Gradient Map" -script = ExtResource( 3 ) +[node name="GradientMapDialog" instance=ExtResource("1")] +title = "Gradient Map" +script = ExtResource("3") [node name="VBoxContainer" parent="." index="3"] -margin_bottom = 342.0 +offset_bottom = 342.0 [node name="ShowAnimate" parent="VBoxContainer" index="0"] visible = false -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 224.0 - -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 80.0 -margin_right = 280.0 -margin_bottom = 200.0 - -[node name="GradientEdit" parent="VBoxContainer" index="2" instance=ExtResource( 2 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_top = 228.0 -margin_right = 360.0 -margin_bottom = 306.0 - -[node name="OptionsContainer" parent="VBoxContainer" index="3"] -margin_top = 310.0 -margin_bottom = 334.0 - -[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"] -items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ] - -[node name="AnimateDialog" parent="." index="4"] -margin_bottom = 342.0 +[node name="GradientEdit" parent="VBoxContainer" index="2" instance=ExtResource("2")] +layout_mode = 2 diff --git a/src/UI/Dialogs/ImageEffects/HSVDialog.gd b/src/UI/Dialogs/ImageEffects/HSVDialog.gd index 5fe593f96c4..cee1c2fe8ba 100644 --- a/src/UI/Dialogs/ImageEffects/HSVDialog.gd +++ b/src/UI/Dialogs/ImageEffects/HSVDialog.gd @@ -1,14 +1,15 @@ extends ImageEffect enum Animate { HUE, SATURATION, VALUE } -var shader: Shader = preload("res://src/Shaders/HSV.shader") +var shader := preload("res://src/Shaders/HSV.gdshader") -onready var hue_slider := $VBoxContainer/HueSlider as ValueSlider -onready var sat_slider := $VBoxContainer/SaturationSlider as ValueSlider -onready var val_slider := $VBoxContainer/ValueSlider as ValueSlider +@onready var hue_slider := $VBoxContainer/HueSlider as ValueSlider +@onready var sat_slider := $VBoxContainer/SaturationSlider as ValueSlider +@onready var val_slider := $VBoxContainer/ValueSlider as ValueSlider func _ready() -> void: + super._ready() var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) @@ -18,34 +19,34 @@ func _ready() -> void: animate_panel.add_float_property("Value", val_slider) -func _about_to_show() -> void: +func _about_to_popup() -> void: _reset() - ._about_to_show() + super._about_to_popup() -func commit_action(cel: Image, project: Project = Global.current_project) -> void: +func commit_action(cel: Image, project := Global.current_project) -> void: var hue = animate_panel.get_animated_value(commit_idx, Animate.HUE) / 360 var sat = animate_panel.get_animated_value(commit_idx, Animate.SATURATION) / 100 var val = animate_panel.get_animated_value(commit_idx, Animate.VALUE) / 100 - var selection_tex := ImageTexture.new() - if selection_checkbox.pressed and project.has_selection: - selection_tex.create_from_image(project.selection_map, 0) + var selection_tex: ImageTexture + if selection_checkbox.button_pressed and project.has_selection: + selection_tex = ImageTexture.create_from_image(project.selection_map) var params := {"hue_shift": hue, "sat_shift": sat, "val_shift": val, "selection": selection_tex} - if !confirmed: + if !has_been_confirmed: for param in params: - preview.material.set_shader_param(param, params[param]) + preview.material.set_shader_parameter(param, params[param]) else: var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) - yield(gen, "done") + await gen.done func _reset() -> void: hue_slider.value = 0 sat_slider.value = 0 val_slider.value = 0 - confirmed = false + has_been_confirmed = false func _on_HueSlider_value_changed(_value: float) -> void: diff --git a/src/UI/Dialogs/ImageEffects/HSVDialog.tscn b/src/UI/Dialogs/ImageEffects/HSVDialog.tscn index 6b413df0c09..bbc2f04e357 100644 --- a/src/UI/Dialogs/ImageEffects/HSVDialog.tscn +++ b/src/UI/Dialogs/ImageEffects/HSVDialog.tscn @@ -1,54 +1,32 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://oq036vr10yvk"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/HSVDialog.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/HSVDialog.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"] +[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[node name="HSVDialog" instance=ExtResource( 2 )] -visible = false -window_title = "Adjust HSV" -script = ExtResource( 1 ) +[node name="HSVDialog" instance=ExtResource("2")] +title = "Adjust Hue/Saturation/Value" +script = ExtResource("1") [node name="VBoxContainer" parent="." index="3"] -margin_bottom = 344.0 +offset_bottom = 344.0 -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 224.0 - -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 80.0 -margin_right = 280.0 -margin_bottom = 200.0 - -[node name="HueSlider" parent="VBoxContainer" index="2" instance=ExtResource( 3 )] -margin_top = 228.0 -margin_right = 360.0 -margin_bottom = 252.0 +[node name="HueSlider" parent="VBoxContainer" index="2" instance=ExtResource("3")] +layout_mode = 2 min_value = -180.0 max_value = 180.0 prefix = "Hue:" -[node name="SaturationSlider" parent="VBoxContainer" index="3" instance=ExtResource( 3 )] -margin_top = 256.0 -margin_right = 360.0 -margin_bottom = 280.0 +[node name="SaturationSlider" parent="VBoxContainer" index="3" instance=ExtResource("3")] +layout_mode = 2 min_value = -100.0 prefix = "Saturation:" -[node name="ValueSlider" parent="VBoxContainer" index="4" instance=ExtResource( 3 )] -margin_top = 284.0 -margin_right = 360.0 -margin_bottom = 308.0 +[node name="ValueSlider" parent="VBoxContainer" index="4" instance=ExtResource("3")] +layout_mode = 2 min_value = -100.0 prefix = "Value:" -[node name="OptionsContainer" parent="VBoxContainer" index="5"] -margin_top = 312.0 -margin_bottom = 336.0 - -[node name="AnimateDialog" parent="." index="4"] -margin_bottom = 344.0 - [connection signal="value_changed" from="VBoxContainer/HueSlider" to="." method="_on_HueSlider_value_changed"] [connection signal="value_changed" from="VBoxContainer/SaturationSlider" to="." method="_on_SaturationSlider_value_changed"] [connection signal="value_changed" from="VBoxContainer/ValueSlider" to="." method="_on_ValueSlider_value_changed"] diff --git a/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn b/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn index 13f4f91f805..f73483fd379 100644 --- a/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn +++ b/src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn @@ -1,98 +1,92 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=5 format=3 uid="uid://bybqhhayl5ay5"] -[ext_resource path="res://src/UI/Nodes/AnimatePanel.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/Classes/ImageEffect.gd" type="Script" id=3] -[ext_resource path="res://assets/graphics/misc/animate.png" type="Texture" id=4] +[ext_resource type="PackedScene" uid="uid://dmlgx1jgau8a5" path="res://src/UI/Nodes/AnimatePanel.tscn" id="1"] +[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="2"] +[ext_resource type="Script" path="res://src/Classes/ImageEffect.gd" id="3"] +[ext_resource type="Texture2D" uid="uid://blrd4x0ma7b3h" path="res://assets/graphics/misc/animate.png" id="4"] [node name="ImageEffectParent" type="ConfirmationDialog"] -margin_right = 294.0 -margin_bottom = 334.0 -rect_min_size = Vector2( 172, 60.2 ) -resizable = true -script = ExtResource( 3 ) +canvas_item_default_texture_filter = 0 +size = Vector2i(360, 316) +exclusive = false +script = ExtResource("3") [node name="VBoxContainer" type="VBoxContainer" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 368.0 -margin_bottom = 298.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 352.0 +offset_bottom = 267.0 [node name="ShowAnimate" type="Button" parent="VBoxContainer"] unique_name_in_owner = true -margin_left = 340.0 -margin_right = 360.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 20, 0 ) -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(20, 20) +layout_mode = 2 size_flags_horizontal = 8 +mouse_default_cursor_shape = 2 toggle_mode = true [node name="TextureRect" type="TextureRect" parent="VBoxContainer/ShowAnimate"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 2.0 -margin_top = 2.0 -margin_right = -2.0 -margin_bottom = -2.0 -texture = ExtResource( 4 ) -expand = true +offset_left = 2.0 +offset_top = 2.0 +offset_right = -2.0 +offset_bottom = -2.0 +texture = ExtResource("4") +expand_mode = 1 stretch_mode = 6 [node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"] -margin_top = 24.0 -margin_right = 360.0 -margin_bottom = 262.0 +layout_mode = 2 size_flags_vertical = 3 [node name="Preview" type="TextureRect" parent="VBoxContainer/AspectRatioContainer"] -margin_left = 61.0 -margin_right = 299.0 -margin_bottom = 238.0 -rect_min_size = Vector2( 200, 200 ) -expand = true +custom_minimum_size = Vector2(200, 200) +layout_mode = 2 +expand_mode = 1 stretch_mode = 5 -[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource( 2 )] +[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("2")] show_behind_parent = true +layout_mode = 0 +anchors_preset = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = 0.0 -margin_bottom = 0.0 [node name="OptionsContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 266.0 -margin_right = 360.0 -margin_bottom = 290.0 +layout_mode = 2 [node name="SelectionCheckBox" type="CheckBox" parent="VBoxContainer/OptionsContainer"] -margin_right = 178.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -pressed = true +mouse_default_cursor_shape = 2 +button_pressed = true text = "Only affect selection" [node name="AffectOptionButton" type="OptionButton" parent="VBoxContainer/OptionsContainer"] -margin_left = 182.0 -margin_right = 360.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Selected cels" -items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ] +mouse_default_cursor_shape = 2 +item_count = 4 selected = 0 +popup/item_0/text = "Selected cels" +popup/item_0/id = 0 +popup/item_1/text = "Current frame" +popup/item_1/id = 1 +popup/item_2/text = "All frames" +popup/item_2/id = 2 +popup/item_3/text = "All projects" +popup/item_3/id = 3 [node name="AnimateDialog" type="Popup" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 368.0 -margin_bottom = 298.0 -rect_min_size = Vector2( 360, 270 ) +size = Vector2i(350, 200) +unresizable = false -[node name="AnimatePanel" parent="AnimateDialog" instance=ExtResource( 1 )] +[node name="AnimatePanel" parent="AnimateDialog" instance=ExtResource("1")] unique_name_in_owner = true +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = 0.0 -margin_bottom = 0.0 +offset_right = 0.0 +offset_bottom = 0.0 diff --git a/src/UI/Dialogs/ImageEffects/ImageEffects.tscn b/src/UI/Dialogs/ImageEffects/ImageEffects.tscn index 5c917c49002..c05245db452 100644 --- a/src/UI/Dialogs/ImageEffects/ImageEffects.tscn +++ b/src/UI/Dialogs/ImageEffects/ImageEffects.tscn @@ -1,55 +1,49 @@ -[gd_scene load_steps=15 format=2] - -[ext_resource path="res://src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn" type="PackedScene" id=3] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn" type="PackedScene" id=4] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn" type="PackedScene" id=5] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/Posterize.tscn" type="PackedScene" id=6] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/OffsetImage.tscn" type="PackedScene" id=7] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn" type="PackedScene" id=8] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/RotateImage.tscn" type="PackedScene" id=9] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ShaderEffect.tscn" type="PackedScene" id=10] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/HSVDialog.tscn" type="PackedScene" id=11] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/GradientDialog.tscn" type="PackedScene" id=12] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/OutlineDialog.tscn" type="PackedScene" id=13] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ScaleImage.tscn" type="PackedScene" id=14] +[gd_scene load_steps=15 format=3 uid="uid://cfihuvhy4ocx7"] + +[ext_resource type="PackedScene" uid="uid://c7hnynip21y6u" path="res://src/UI/Dialogs/ImageEffects/FlipImageDialog.tscn" id="1"] +[ext_resource type="PackedScene" uid="uid://bl1t33abu7kl8" path="res://src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn" id="2"] +[ext_resource type="PackedScene" uid="uid://5gqka7tkg17k" path="res://src/UI/Dialogs/ImageEffects/DesaturateDialog.tscn" id="3"] +[ext_resource type="PackedScene" uid="uid://duse1w3q7whmm" path="res://src/UI/Dialogs/ImageEffects/DropShadowDialog.tscn" id="4"] +[ext_resource type="PackedScene" uid="uid://cjd5sjemyea4a" path="res://src/UI/Dialogs/ImageEffects/GradientMapDialog.tscn" id="5"] +[ext_resource type="PackedScene" uid="uid://cnryslyvxv4ye" path="res://src/UI/Dialogs/ImageEffects/Posterize.tscn" id="6"] +[ext_resource type="PackedScene" uid="uid://q355qqjvuajs" path="res://src/UI/Dialogs/ImageEffects/OffsetImage.tscn" id="7"] +[ext_resource type="PackedScene" uid="uid://birggxam3fjnb" path="res://src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn" id="8"] +[ext_resource type="PackedScene" uid="uid://bvr6j8sohxob3" path="res://src/UI/Dialogs/ImageEffects/RotateImage.tscn" id="9"] +[ext_resource type="PackedScene" uid="uid://bkr47ocij684y" path="res://src/UI/Dialogs/ImageEffects/ShaderEffect.tscn" id="10"] +[ext_resource type="PackedScene" uid="uid://oq036vr10yvk" path="res://src/UI/Dialogs/ImageEffects/HSVDialog.tscn" id="11"] +[ext_resource type="PackedScene" uid="uid://u0y5xogg636e" path="res://src/UI/Dialogs/ImageEffects/GradientDialog.tscn" id="12"] +[ext_resource type="PackedScene" uid="uid://ci2qpf6t3dyyr" path="res://src/UI/Dialogs/ImageEffects/OutlineDialog.tscn" id="13"] +[ext_resource type="PackedScene" uid="uid://omm7xmtf5kbj" path="res://src/UI/Dialogs/ImageEffects/ScaleImage.tscn" id="14"] [node name="ImageEffects" type="Control"] +layout_mode = 3 +anchors_preset = 0 mouse_filter = 2 -[node name="OffsetImage" parent="." instance=ExtResource( 7 )] -margin_right = 376.0 -margin_bottom = 370.0 +[node name="OffsetImage" parent="." instance=ExtResource("7")] -[node name="ScaleImage" parent="." instance=ExtResource( 14 )] -margin_bottom = 127.0 +[node name="ScaleImage" parent="." instance=ExtResource("14")] -[node name="ResizeCanvas" parent="." instance=ExtResource( 8 )] -margin_right = 216.0 -margin_bottom = 392.0 +[node name="ResizeCanvas" parent="." instance=ExtResource("8")] -[node name="RotateImage" parent="." instance=ExtResource( 9 )] +[node name="RotateImage" parent="." instance=ExtResource("9")] -[node name="FlipImageDialog" parent="." instance=ExtResource( 1 )] +[node name="FlipImageDialog" parent="." instance=ExtResource("1")] -[node name="InvertColorsDialog" parent="." instance=ExtResource( 2 )] +[node name="InvertColorsDialog" parent="." instance=ExtResource("2")] -[node name="DesaturateDialog" parent="." instance=ExtResource( 3 )] +[node name="DesaturateDialog" parent="." instance=ExtResource("3")] -[node name="OutlineDialog" parent="." instance=ExtResource( 13 )] -margin_right = 217.0 -margin_bottom = 106.0 +[node name="OutlineDialog" parent="." instance=ExtResource("13")] -[node name="DropShadowDialog" parent="." instance=ExtResource( 4 )] +[node name="DropShadowDialog" parent="." instance=ExtResource("4")] -[node name="HSVDialog" parent="." instance=ExtResource( 11 )] +[node name="HSVDialog" parent="." instance=ExtResource("11")] -[node name="GradientDialog" parent="." instance=ExtResource( 12 )] -margin_bottom = 214.0 +[node name="GradientDialog" parent="." instance=ExtResource("12")] -[node name="GradientMapDialog" parent="." instance=ExtResource( 5 )] +[node name="GradientMapDialog" parent="." instance=ExtResource("5")] -[node name="Posterize" parent="." instance=ExtResource( 6 )] +[node name="Posterize" parent="." instance=ExtResource("6")] -[node name="ShaderEffect" parent="." instance=ExtResource( 10 )] +[node name="ShaderEffect" parent="." instance=ExtResource("10")] diff --git a/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd b/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd index 16270cb29e9..5693d7da687 100644 --- a/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd +++ b/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd @@ -5,31 +5,32 @@ var green := true var blue := true var alpha := false -var shader: Shader = preload("res://src/Shaders/Invert.shader") +var shader := preload("res://src/Shaders/Invert.gdshader") func _ready() -> void: + super._ready() var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) -func commit_action(cel: Image, project: Project = Global.current_project) -> void: - var selection_tex := ImageTexture.new() - if selection_checkbox.pressed and project.has_selection: - selection_tex.create_from_image(project.selection_map, 0) +func commit_action(cel: Image, project := Global.current_project) -> void: + var selection_tex: ImageTexture + if selection_checkbox.button_pressed and project.has_selection: + selection_tex = ImageTexture.create_from_image(project.selection_map) var params := { "red": red, "blue": blue, "green": green, "alpha": alpha, "selection": selection_tex } - if !confirmed: + if !has_been_confirmed: for param in params: - preview.material.set_shader_param(param, params[param]) + preview.material.set_shader_parameter(param, params[param]) else: var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) - yield(gen, "done") + await gen.done func _on_RButton_toggled(button_pressed: bool) -> void: diff --git a/src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn b/src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn index d1228253b43..9e3c2c8de85 100644 --- a/src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn +++ b/src/UI/Dialogs/ImageEffects/InvertColorsDialog.tscn @@ -1,74 +1,51 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://bl1t33abu7kl8"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"] -[node name="InvertColorsDialog" instance=ExtResource( 2 )] -window_title = "Invert Colors" -script = ExtResource( 1 ) +[node name="InvertColorsDialog" instance=ExtResource("2")] +title = "Invert Colors" +script = ExtResource("1") [node name="ShowAnimate" parent="VBoxContainer" index="0"] visible = false -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 238.0 - -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 73.0 -margin_right = 287.0 -margin_bottom = 214.0 - [node name="RGBAContainer" type="HBoxContainer" parent="VBoxContainer" index="2"] -margin_top = 242.0 -margin_right = 360.0 -margin_bottom = 262.0 +layout_mode = 2 alignment = 1 [node name="RButton" type="Button" parent="VBoxContainer/RGBAContainer" index="0"] -margin_right = 87.0 -margin_bottom = 20.0 -hint_tooltip = "Modify Red Channel" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Modify Red Channel" +mouse_default_cursor_shape = 2 toggle_mode = true -pressed = true text = "R" [node name="GButton" type="Button" parent="VBoxContainer/RGBAContainer" index="1"] -margin_left = 91.0 -margin_right = 178.0 -margin_bottom = 20.0 -hint_tooltip = "Modify Green Channel" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Modify Green Channel" +mouse_default_cursor_shape = 2 toggle_mode = true -pressed = true text = "G" [node name="BButton" type="Button" parent="VBoxContainer/RGBAContainer" index="2"] -margin_left = 182.0 -margin_right = 269.0 -margin_bottom = 20.0 -hint_tooltip = "Modify Blue Channel" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Modify Blue Channel" +mouse_default_cursor_shape = 2 toggle_mode = true -pressed = true text = "B" [node name="AButton" type="Button" parent="VBoxContainer/RGBAContainer" index="3"] -margin_left = 273.0 -margin_right = 360.0 -margin_bottom = 20.0 -hint_tooltip = "Modify Alpha Channel" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "Modify Alpha Channel" +mouse_default_cursor_shape = 2 toggle_mode = true text = "A" -[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"] -items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ] - [connection signal="toggled" from="VBoxContainer/RGBAContainer/RButton" to="." method="_on_RButton_toggled"] [connection signal="toggled" from="VBoxContainer/RGBAContainer/GButton" to="." method="_on_GButton_toggled"] [connection signal="toggled" from="VBoxContainer/RGBAContainer/BButton" to="." method="_on_BButton_toggled"] diff --git a/src/UI/Dialogs/ImageEffects/OffsetImage.gd b/src/UI/Dialogs/ImageEffects/OffsetImage.gd index e44ef86279e..3f0e3694abe 100644 --- a/src/UI/Dialogs/ImageEffects/OffsetImage.gd +++ b/src/UI/Dialogs/ImageEffects/OffsetImage.gd @@ -2,17 +2,18 @@ extends ImageEffect enum Animate { OFFSET_X, OFFSET_Y } -var shader: Shader = preload("res://src/Shaders/OffsetPixels.gdshader") +var shader := preload("res://src/Shaders/OffsetPixels.gdshader") var wrap_around := false -onready var offset_sliders := $VBoxContainer/OffsetOptions/OffsetSliders as ValueSliderV2 +@onready var offset_sliders := $VBoxContainer/OffsetOptions/OffsetSliders as ValueSliderV2 func _ready() -> void: + super._ready() var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) - # Set as in the Animate enum + # Set in the order of the Animate enum animate_panel.add_float_property( "Offset X", $VBoxContainer/OffsetOptions/OffsetSliders.get_sliders()[0] ) @@ -21,28 +22,28 @@ func _ready() -> void: ) -func _about_to_show() -> void: +func _about_to_popup() -> void: offset_sliders.min_value = -Global.current_project.size offset_sliders.max_value = Global.current_project.size - ._about_to_show() + super._about_to_popup() -func commit_action(cel: Image, project: Project = Global.current_project) -> void: +func commit_action(cel: Image, project := Global.current_project) -> void: var offset_x := animate_panel.get_animated_value(commit_idx, Animate.OFFSET_X) var offset_y := animate_panel.get_animated_value(commit_idx, Animate.OFFSET_Y) var offset := Vector2(offset_x, offset_y) - var selection_tex := ImageTexture.new() - if selection_checkbox.pressed and project.has_selection: - selection_tex.create_from_image(project.selection_map, 0) + var selection_tex: ImageTexture + if selection_checkbox.button_pressed and project.has_selection: + selection_tex = ImageTexture.create_from_image(project.selection_map) var params := {"offset": offset, "wrap_around": wrap_around, "selection": selection_tex} - if !confirmed: + if !has_been_confirmed: for param in params: - preview.material.set_shader_param(param, params[param]) + preview.material.set_shader_parameter(param, params[param]) else: var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) - yield(gen, "done") + await gen.done func _on_OffsetSliders_value_changed(_value: Vector2) -> void: diff --git a/src/UI/Dialogs/ImageEffects/OffsetImage.tscn b/src/UI/Dialogs/ImageEffects/OffsetImage.tscn index ced6a84a298..75bb0f3afc2 100644 --- a/src/UI/Dialogs/ImageEffects/OffsetImage.tscn +++ b/src/UI/Dialogs/ImageEffects/OffsetImage.tscn @@ -1,43 +1,30 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://q355qqjvuajs"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/OffsetImage.gd" type="Script" id=3] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="1"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="2"] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/OffsetImage.gd" id="3"] -[node name="OffsetImage" instance=ExtResource( 1 )] -window_title = "Offset Image" -script = ExtResource( 3 ) +[node name="OffsetImage" instance=ExtResource("1")] +title = "Offset Image" +script = ExtResource("3") [node name="VBoxContainer" parent="." index="3"] -margin_bottom = 344.0 - -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 224.0 - -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 80.0 -margin_right = 280.0 -margin_bottom = 200.0 +offset_bottom = 344.0 [node name="OffsetOptions" type="GridContainer" parent="VBoxContainer" index="2"] -margin_top = 228.0 -margin_right = 360.0 -margin_bottom = 308.0 +layout_mode = 2 columns = 2 [node name="OffsetLabel" type="Label" parent="VBoxContainer/OffsetOptions" index="0"] -margin_top = 19.0 -margin_right = 178.0 -margin_bottom = 33.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Offset:" -[node name="OffsetSliders" parent="VBoxContainer/OffsetOptions" index="1" instance=ExtResource( 2 )] -margin_left = 182.0 -margin_right = 360.0 +[node name="OffsetSliders" parent="VBoxContainer/OffsetOptions" index="1" instance=ExtResource("2")] +layout_mode = 2 size_flags_horizontal = 3 -min_value = Vector2( -64, -64 ) -max_value = Vector2( 64, 64 ) +min_value = Vector2(-64, -64) +max_value = Vector2(64, 64) allow_greater = true allow_lesser = true show_ratio = true @@ -45,27 +32,15 @@ suffix_x = "px" suffix_y = "px" [node name="WrapLabel" type="Label" parent="VBoxContainer/OffsetOptions" index="2"] -margin_top = 61.0 -margin_right = 178.0 -margin_bottom = 75.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Wrap around:" [node name="WrapCheckBox" type="CheckBox" parent="VBoxContainer/OffsetOptions" index="3"] -margin_left = 182.0 -margin_top = 56.0 -margin_right = 360.0 -margin_bottom = 80.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "On" -[node name="OptionsContainer" parent="VBoxContainer" index="3"] -margin_top = 312.0 -margin_bottom = 336.0 - -[node name="AnimateDialog" parent="." index="4"] -margin_bottom = 344.0 - [connection signal="value_changed" from="VBoxContainer/OffsetOptions/OffsetSliders" to="." method="_on_OffsetSliders_value_changed"] [connection signal="toggled" from="VBoxContainer/OffsetOptions/WrapCheckBox" to="." method="_on_WrapCheckBox_toggled"] diff --git a/src/UI/Dialogs/ImageEffects/OutlineDialog.gd b/src/UI/Dialogs/ImageEffects/OutlineDialog.gd index d89cf7b5a33..e900fb47e53 100644 --- a/src/UI/Dialogs/ImageEffects/OutlineDialog.gd +++ b/src/UI/Dialogs/ImageEffects/OutlineDialog.gd @@ -1,41 +1,31 @@ extends ImageEffect enum Animate { THICKNESS } -var color := Color.black +var color := Color.BLACK var thickness := 1 var pattern := 0 var inside_image := false -var shader: Shader +var shader := preload("res://src/Shaders/OutlineInline.gdshader") -onready var outline_color := $VBoxContainer/OutlineOptions/OutlineColor as ColorPickerButton +@onready var outline_color := $VBoxContainer/OutlineOptions/OutlineColor as ColorPickerButton func _ready() -> void: - if _is_webgl1(): - $VBoxContainer/OptionsContainer/PatternOptionButton.disabled = true - else: - shader = load("res://src/Shaders/OutlineInline.gdshader") - var sm := ShaderMaterial.new() - sm.shader = shader - preview.set_material(sm) + super._ready() + var sm := ShaderMaterial.new() + sm.shader = shader + preview.set_material(sm) outline_color.get_picker().presets_visible = false color = outline_color.color - # set as in enum + # Set in the order of the Animate enum animate_panel.add_float_property("Thickness", $VBoxContainer/OutlineOptions/ThickValue) -func commit_action(cel: Image, project: Project = Global.current_project) -> void: - var anim_thickness = animate_panel.get_animated_value(commit_idx, Animate.THICKNESS) - - if !shader: # Web version - DrawingAlgos.generate_outline( - cel, selection_checkbox.pressed, project, color, anim_thickness, false, inside_image - ) - return - - var selection_tex := ImageTexture.new() - if selection_checkbox.pressed and project.has_selection: - selection_tex.create_from_image(project.selection_map, 0) +func commit_action(cel: Image, project := Global.current_project) -> void: + var anim_thickness := animate_panel.get_animated_value(commit_idx, Animate.THICKNESS) + var selection_tex: ImageTexture + if selection_checkbox.button_pressed and project.has_selection: + selection_tex = ImageTexture.create_from_image(project.selection_map) var params := { "color": color, @@ -44,13 +34,13 @@ func commit_action(cel: Image, project: Project = Global.current_project) -> voi "inside": inside_image, "selection": selection_tex } - if !confirmed: + if !has_been_confirmed: for param in params: - preview.material.set_shader_param(param, params[param]) + preview.material.set_shader_parameter(param, params[param]) else: var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) - yield(gen, "done") + await gen.done func _on_ThickValue_value_changed(value: int) -> void: diff --git a/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn b/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn index 4616d23b6b1..c6192084b34 100644 --- a/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn +++ b/src/UI/Dialogs/ImageEffects/OutlineDialog.tscn @@ -1,48 +1,32 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://ci2qpf6t3dyyr"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/OutlineDialog.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=3] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/OutlineDialog.gd" id="1"] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="2"] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="3"] -[node name="OutlineDialog" instance=ExtResource( 3 )] -visible = false -window_title = "Outline" -script = ExtResource( 1 ) +[node name="OutlineDialog" instance=ExtResource("3")] +title = "Outline" +script = ExtResource("1") [node name="VBoxContainer" parent="." index="3"] -margin_bottom = 354.0 - -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 224.0 - -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 80.0 -margin_right = 280.0 -margin_bottom = 200.0 +offset_bottom = 354.0 [node name="OutlineOptions" type="GridContainer" parent="VBoxContainer" index="2"] -margin_top = 228.0 -margin_right = 360.0 -margin_bottom = 318.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 4 +layout_mode = 2 +theme_override_constants/h_separation = 4 +theme_override_constants/v_separation = 4 columns = 2 -__meta__ = { -"_edit_use_anchors_": false -} [node name="ThickLabel" type="Label" parent="VBoxContainer/OutlineOptions" index="0"] -margin_right = 178.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Thickness:" -[node name="ThickValue" type="TextureProgress" parent="VBoxContainer/OutlineOptions" index="1"] -margin_left = 182.0 -margin_right = 360.0 -margin_bottom = 14.0 +[node name="ThickValue" type="TextureProgressBar" parent="VBoxContainer/OutlineOptions" index="1"] +layout_mode = 2 +focus_mode = 2 mouse_default_cursor_shape = 2 -theme_type_variation = "ValueSlider" +theme_type_variation = &"ValueSlider" min_value = 1.0 value = 1.0 allow_greater = true @@ -51,65 +35,48 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 2 ) +script = ExtResource("2") suffix = "px" [node name="OutlineColorLabel" type="Label" parent="VBoxContainer/OutlineOptions" index="2"] -margin_top = 21.0 -margin_right = 178.0 -margin_bottom = 35.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Fill with color:" [node name="OutlineColor" type="ColorPickerButton" parent="VBoxContainer/OutlineOptions" index="3"] -margin_left = 182.0 -margin_top = 18.0 -margin_right = 360.0 -margin_bottom = 38.0 -rect_min_size = Vector2( 64, 20 ) +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 size_flags_horizontal = 3 [node name="PatternLabel" type="Label" parent="VBoxContainer/OutlineOptions" index="4"] -margin_top = 45.0 -margin_right = 178.0 -margin_bottom = 59.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Pattern:" [node name="PatternOptionButton" type="OptionButton" parent="VBoxContainer/OutlineOptions" index="5"] -margin_left = 182.0 -margin_top = 42.0 -margin_right = 360.0 -margin_bottom = 62.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Diamond" -items = [ "Diamond", null, false, 0, null, "Circle", null, false, 1, null, "Square", null, false, 2, null ] +mouse_default_cursor_shape = 2 +item_count = 3 selected = 0 +popup/item_0/text = "Diamond" +popup/item_0/id = 0 +popup/item_1/text = "Square" +popup/item_1/id = 1 +popup/item_2/text = "Circle" +popup/item_2/id = 2 [node name="InsideImageLabel" type="Label" parent="VBoxContainer/OutlineOptions" index="6"] -margin_top = 71.0 -margin_right = 178.0 -margin_bottom = 85.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Place inside image" [node name="InsideImageCheckBox" type="CheckBox" parent="VBoxContainer/OutlineOptions" index="7"] -margin_left = 182.0 -margin_top = 66.0 -margin_right = 360.0 -margin_bottom = 90.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "On" -[node name="OptionsContainer" parent="VBoxContainer" index="3"] -margin_top = 322.0 -margin_bottom = 346.0 - -[node name="AnimateDialog" parent="." index="4"] -margin_bottom = 354.0 - [connection signal="value_changed" from="VBoxContainer/OutlineOptions/ThickValue" to="." method="_on_ThickValue_value_changed"] [connection signal="color_changed" from="VBoxContainer/OutlineOptions/OutlineColor" to="." method="_on_OutlineColor_color_changed"] [connection signal="item_selected" from="VBoxContainer/OutlineOptions/PatternOptionButton" to="." method="_on_PatternOptionButton_item_selected"] diff --git a/src/UI/Dialogs/ImageEffects/Posterize.gd b/src/UI/Dialogs/ImageEffects/Posterize.gd index 0b443b5ce44..c76fbca5822 100644 --- a/src/UI/Dialogs/ImageEffects/Posterize.gd +++ b/src/UI/Dialogs/ImageEffects/Posterize.gd @@ -1,30 +1,31 @@ extends ImageEffect -var shader: Shader = preload("res://src/Shaders/Posterize.gdshader") +var shader := preload("res://src/Shaders/Posterize.gdshader") var levels := 2.0 var dither := 0.0 func _ready() -> void: + super._ready() var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) -func commit_action(cel: Image, project: Project = Global.current_project) -> void: - var selection_tex := ImageTexture.new() - if selection_checkbox.pressed and project.has_selection: - selection_tex.create_from_image(project.selection_map, 0) +func commit_action(cel: Image, project := Global.current_project) -> void: + var selection_tex: ImageTexture + if selection_checkbox.button_pressed and project.has_selection: + selection_tex = ImageTexture.create_from_image(project.selection_map) var params := {"colors": levels, "dither": dither, "selection": selection_tex} - if !confirmed: + if !has_been_confirmed: for param in params: - preview.material.set_shader_param(param, params[param]) + preview.material.set_shader_parameter(param, params[param]) else: var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) - yield(gen, "done") + await gen.done func _on_LevelsSlider_value_changed(value: float) -> void: diff --git a/src/UI/Dialogs/ImageEffects/Posterize.tscn b/src/UI/Dialogs/ImageEffects/Posterize.tscn index 3265ed0b0a2..a97486c1caa 100644 --- a/src/UI/Dialogs/ImageEffects/Posterize.tscn +++ b/src/UI/Dialogs/ImageEffects/Posterize.tscn @@ -1,34 +1,25 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://cnryslyvxv4ye"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/Posterize.gd" type="Script" id=3] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="1"] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="2"] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/Posterize.gd" id="3"] -[node name="Posterize" instance=ExtResource( 1 )] -window_title = "Posterize" -script = ExtResource( 3 ) +[node name="Posterize" instance=ExtResource("1")] +title = "Posterize" +script = ExtResource("3") [node name="VBoxContainer" parent="." index="3"] -margin_bottom = 316.0 +offset_bottom = 316.0 [node name="ShowAnimate" parent="VBoxContainer" index="0"] visible = false -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 224.0 - -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 80.0 -margin_right = 280.0 -margin_bottom = 200.0 - -[node name="LevelsSlider" type="TextureProgress" parent="VBoxContainer" index="2"] -margin_top = 228.0 -margin_right = 360.0 -margin_bottom = 252.0 -rect_min_size = Vector2( 0, 24 ) +[node name="LevelsSlider" type="TextureProgressBar" parent="VBoxContainer" index="2"] +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 +focus_mode = 2 mouse_default_cursor_shape = 2 -theme_type_variation = "ValueSlider" +theme_type_variation = &"ValueSlider" min_value = 2.0 max_value = 256.0 step = 0.01 @@ -38,17 +29,16 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 2 ) +script = ExtResource("2") prefix = "Posterize levels:" snap_by_default = true -[node name="DitherSlider" type="TextureProgress" parent="VBoxContainer" index="3"] -margin_top = 256.0 -margin_right = 360.0 -margin_bottom = 280.0 -rect_min_size = Vector2( 0, 24 ) +[node name="DitherSlider" type="TextureProgressBar" parent="VBoxContainer" index="3"] +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 +focus_mode = 2 mouse_default_cursor_shape = 2 -theme_type_variation = "ValueSlider" +theme_type_variation = &"ValueSlider" max_value = 0.5 step = 0.01 nine_patch_stretch = true @@ -56,19 +46,9 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 2 ) +script = ExtResource("2") prefix = "Dither intensity:" snap_step = 0.1 -[node name="OptionsContainer" parent="VBoxContainer" index="4"] -margin_top = 284.0 -margin_bottom = 308.0 - -[node name="AffectOptionButton" parent="VBoxContainer/OptionsContainer" index="1"] -items = [ "Selected cels", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null, "All projects", null, false, 3, null ] - -[node name="AnimateDialog" parent="." index="4"] -margin_bottom = 316.0 - [connection signal="value_changed" from="VBoxContainer/LevelsSlider" to="." method="_on_LevelsSlider_value_changed"] [connection signal="value_changed" from="VBoxContainer/DitherSlider" to="." method="_on_DitherSlider_value_changed"] diff --git a/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd b/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd index d87d8dac9f9..134e0af6d60 100644 --- a/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd +++ b/src/UI/Dialogs/ImageEffects/ResizeCanvas.gd @@ -6,17 +6,16 @@ var offset_x := 0 var offset_y := 0 var image: Image -onready var width_spinbox: SpinBox = $VBoxContainer/OptionsContainer/WidthValue -onready var height_spinbox: SpinBox = $VBoxContainer/OptionsContainer/HeightValue -onready var x_spinbox: SpinBox = $VBoxContainer/OptionsContainer/XSpinBox -onready var y_spinbox: SpinBox = $VBoxContainer/OptionsContainer/YSpinBox -onready var preview_rect: TextureRect = $VBoxContainer/AspectRatioContainer/Preview +@onready var width_spinbox: SpinBox = $VBoxContainer/OptionsContainer/WidthValue +@onready var height_spinbox: SpinBox = $VBoxContainer/OptionsContainer/HeightValue +@onready var x_spinbox: SpinBox = $VBoxContainer/OptionsContainer/XSpinBox +@onready var y_spinbox: SpinBox = $VBoxContainer/OptionsContainer/YSpinBox +@onready var preview_rect: TextureRect = $VBoxContainer/AspectRatioContainer/Preview func _on_ResizeCanvas_about_to_show() -> void: Global.canvas.selection.transform_content_confirm() - image = Image.new() - image.create( + image = Image.create( Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8 ) @@ -24,19 +23,15 @@ func _on_ResizeCanvas_about_to_show() -> void: for cel in Global.current_project.frames[Global.current_project.current_frame].cels: if cel is PixelCel and Global.current_project.layers[layer_i].is_visible_in_hierarchy(): var cel_image := Image.new() - cel_image.copy_from(cel.image) - cel_image.lock() + cel_image.copy_from(cel.get_image()) if cel.opacity < 1: # If we have cel transparency for xx in cel_image.get_size().x: for yy in cel_image.get_size().y: var pixel_color := cel_image.get_pixel(xx, yy) - var alpha: float = pixel_color.a * cel.opacity - cel_image.set_pixel( - xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha) - ) - cel_image.unlock() + pixel_color.a *= cel.opacity + cel_image.set_pixel(xx, yy, pixel_color) image.blend_rect( - cel_image, Rect2(Vector2.ZERO, Global.current_project.size), Vector2.ZERO + cel_image, Rect2i(Vector2i.ZERO, Global.current_project.size), Vector2i.ZERO ) layer_i += 1 @@ -51,17 +46,17 @@ func _on_ResizeCanvas_confirmed() -> void: func _on_WidthValue_value_changed(value: int) -> void: width = value - x_spinbox.min_value = min(width - Global.current_project.size.x, 0) - x_spinbox.max_value = max(width - Global.current_project.size.x, 0) - x_spinbox.value = clamp(x_spinbox.value, x_spinbox.min_value, x_spinbox.max_value) + x_spinbox.min_value = mini(width - Global.current_project.size.x, 0) + x_spinbox.max_value = maxi(width - Global.current_project.size.x, 0) + x_spinbox.value = clampi(x_spinbox.value, x_spinbox.min_value, x_spinbox.max_value) update_preview() func _on_HeightValue_value_changed(value: int) -> void: height = value - y_spinbox.min_value = min(height - Global.current_project.size.y, 0) - y_spinbox.max_value = max(height - Global.current_project.size.y, 0) - y_spinbox.value = clamp(y_spinbox.value, y_spinbox.min_value, y_spinbox.max_value) + y_spinbox.min_value = mini(height - Global.current_project.size.y, 0) + y_spinbox.max_value = maxi(height - Global.current_project.size.y, 0) + y_spinbox.value = clampi(y_spinbox.value, y_spinbox.min_value, y_spinbox.max_value) update_preview() @@ -82,30 +77,28 @@ func _on_CenterButton_pressed() -> void: func update_preview() -> void: # preview_image is the same as image but offsetted - var preview_image := Image.new() - preview_image.create(width, height, false, Image.FORMAT_RGBA8) + var preview_image := Image.create(width, height, false, Image.FORMAT_RGBA8) preview_image.blend_rect( - image, Rect2(Vector2.ZERO, Global.current_project.size), Vector2(offset_x, offset_y) + image, Rect2i(Vector2i.ZERO, Global.current_project.size), Vector2i(offset_x, offset_y) ) - var preview_texture := ImageTexture.new() - preview_texture.create_from_image(preview_image, 0) + var preview_texture := ImageTexture.create_from_image(preview_image) preview_rect.texture = preview_texture update_transparent_background_size(preview_image) func update_transparent_background_size(preview_image: Image) -> void: - var image_size_y = preview_rect.rect_size.y - var image_size_x = preview_rect.rect_size.x + var image_size_y := preview_rect.size.y + var image_size_x := preview_rect.size.x if preview_image.get_size().x > preview_image.get_size().y: - var scale_ratio = preview_image.get_size().x / image_size_x + var scale_ratio := preview_image.get_size().x / image_size_x image_size_y = preview_image.get_size().y / scale_ratio else: - var scale_ratio = preview_image.get_size().y / image_size_y + var scale_ratio := preview_image.get_size().y / image_size_y image_size_x = preview_image.get_size().x / scale_ratio - preview_rect.get_node("TransparentChecker").rect_size.x = image_size_x - preview_rect.get_node("TransparentChecker").rect_size.y = image_size_y + preview_rect.get_node("TransparentChecker").size.x = image_size_x + preview_rect.get_node("TransparentChecker").size.y = image_size_y -func _on_ResizeCanvas_popup_hide() -> void: +func _on_visibility_changed() -> void: Global.dialog_open(false) diff --git a/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn b/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn index 8d285b58413..f51b7ff7e37 100644 --- a/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn +++ b/src/UI/Dialogs/ImageEffects/ResizeCanvas.tscn @@ -1,154 +1,117 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://birggxam3fjnb"] -[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ResizeCanvas.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="1"] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/ResizeCanvas.gd" id="2"] [node name="ResizeCanvas" type="ConfirmationDialog"] -margin_right = 200.0 -margin_bottom = 114.0 -rect_min_size = Vector2( 172, 60.2 ) -window_title = "Resize Canvas" -resizable = true -script = ExtResource( 2 ) +canvas_item_default_texture_filter = 0 +title = "Resize Canvas" +exclusive = false +script = ExtResource("2") [node name="VBoxContainer" type="VBoxContainer" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 208.0 -margin_bottom = 380.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = 208.0 +offset_bottom = 380.0 [node name="ImageSize" type="Label" parent="VBoxContainer"] -margin_right = 200.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Canvas Size" [node name="OptionsContainer" type="GridContainer" parent="VBoxContainer"] -margin_top = 18.0 -margin_right = 200.0 -margin_bottom = 168.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 2 +layout_mode = 2 +theme_override_constants/h_separation = 2 +theme_override_constants/v_separation = 4 columns = 2 [node name="WidthLabel" type="Label" parent="VBoxContainer/OptionsContainer"] -margin_top = 5.0 -margin_right = 99.0 -margin_bottom = 19.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Width:" [node name="WidthValue" type="SpinBox" parent="VBoxContainer/OptionsContainer"] -margin_left = 101.0 -margin_right = 200.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 16384.0 value = 64.0 suffix = "px" [node name="Height" type="Label" parent="VBoxContainer/OptionsContainer"] -margin_top = 33.0 -margin_right = 99.0 -margin_bottom = 47.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Height:" [node name="HeightValue" type="SpinBox" parent="VBoxContainer/OptionsContainer"] -margin_left = 101.0 -margin_top = 28.0 -margin_right = 200.0 -margin_bottom = 52.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 16384.0 value = 64.0 suffix = "px" [node name="OffsetLabel" type="Label" parent="VBoxContainer/OptionsContainer"] -margin_top = 56.0 -margin_right = 99.0 -margin_bottom = 70.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Offset" [node name="EmptySpacer" type="Control" parent="VBoxContainer/OptionsContainer"] -margin_left = 101.0 -margin_top = 56.0 -margin_right = 200.0 -margin_bottom = 70.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="XLabel" type="Label" parent="VBoxContainer/OptionsContainer"] -margin_top = 79.0 -margin_right = 99.0 -margin_bottom = 93.0 +layout_mode = 2 size_flags_horizontal = 3 text = "X:" [node name="XSpinBox" type="SpinBox" parent="VBoxContainer/OptionsContainer"] -margin_left = 101.0 -margin_top = 74.0 -margin_right = 200.0 -margin_bottom = 98.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 max_value = 0.0 suffix = "px" [node name="YLabel" type="Label" parent="VBoxContainer/OptionsContainer"] -margin_top = 107.0 -margin_right = 99.0 -margin_bottom = 121.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Y:" [node name="YSpinBox" type="SpinBox" parent="VBoxContainer/OptionsContainer"] -margin_left = 101.0 -margin_top = 102.0 -margin_right = 200.0 -margin_bottom = 126.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 max_value = 0.0 suffix = "px" [node name="CenterButton" type="Button" parent="VBoxContainer/OptionsContainer"] -margin_top = 130.0 -margin_right = 99.0 -margin_bottom = 150.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "Center" [node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"] -margin_top = 172.0 -margin_right = 200.0 -margin_bottom = 372.0 +layout_mode = 2 size_flags_vertical = 3 [node name="Preview" type="TextureRect" parent="VBoxContainer/AspectRatioContainer"] -margin_right = 200.0 -margin_bottom = 200.0 -rect_min_size = Vector2( 200, 200 ) -expand = true +custom_minimum_size = Vector2(200, 200) +layout_mode = 2 +expand_mode = 1 stretch_mode = 5 -[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource( 1 )] +[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("1")] show_behind_parent = true +layout_mode = 0 +anchors_preset = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = 0.0 -margin_bottom = 0.0 -[connection signal="about_to_show" from="." to="." method="_on_ResizeCanvas_about_to_show"] +[connection signal="about_to_popup" from="." to="." method="_on_ResizeCanvas_about_to_show"] [connection signal="confirmed" from="." to="." method="_on_ResizeCanvas_confirmed"] -[connection signal="popup_hide" from="." to="." method="_on_ResizeCanvas_popup_hide"] +[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"] [connection signal="value_changed" from="VBoxContainer/OptionsContainer/WidthValue" to="." method="_on_WidthValue_value_changed"] [connection signal="value_changed" from="VBoxContainer/OptionsContainer/HeightValue" to="." method="_on_HeightValue_value_changed"] [connection signal="value_changed" from="VBoxContainer/OptionsContainer/XSpinBox" to="." method="_on_XSpinBox_value_changed"] diff --git a/src/UI/Dialogs/ImageEffects/RotateImage.gd b/src/UI/Dialogs/ImageEffects/RotateImage.gd index aff16a5b5bd..6594e0fd165 100644 --- a/src/UI/Dialogs/ImageEffects/RotateImage.gd +++ b/src/UI/Dialogs/ImageEffects/RotateImage.gd @@ -3,54 +3,52 @@ extends ImageEffect enum { ROTXEL_SMEAR, CLEANEDGE, OMNISCALE, NNS, NN, ROTXEL, URD } enum Animate { ANGLE, INITIAL_ANGLE } -var live_preview: bool = true -var rotxel_shader: Shader -var nn_shader: Shader = preload("res://src/Shaders/Rotation/NearestNeighbour.shader") +var live_preview := true +var rotxel_shader := preload("res://src/Shaders/Rotation/SmearRotxel.gdshader") +var nn_shader := preload("res://src/Shaders/Rotation/NearestNeighbour.gdshader") var pivot := Vector2.INF var drag_pivot := false -onready var type_option_button: OptionButton = $VBoxContainer/HBoxContainer2/TypeOptionButton -onready var pivot_indicator: Control = $VBoxContainer/AspectRatioContainer/Indicator -onready var pivot_sliders := $VBoxContainer/PivotOptions/Pivot as ValueSliderV2 -onready var angle_slider: ValueSlider = $VBoxContainer/AngleSlider -onready var smear_options: Container = $VBoxContainer/SmearOptions -onready var init_angle_slider: ValueSlider = smear_options.get_node("InitialAngleSlider") -onready var tolerance_slider: ValueSlider = smear_options.get_node("ToleranceSlider") -onready var wait_apply_timer: Timer = $WaitApply -onready var wait_time_slider: ValueSlider = $VBoxContainer/WaitTime +@onready var type_option_button: OptionButton = $VBoxContainer/HBoxContainer2/TypeOptionButton +@onready var pivot_indicator: Control = $VBoxContainer/AspectRatioContainer/Indicator +@onready var pivot_sliders := $VBoxContainer/PivotOptions/Pivot as ValueSliderV2 +@onready var angle_slider: ValueSlider = $VBoxContainer/AngleSlider +@onready var smear_options: Container = $VBoxContainer/SmearOptions +@onready var init_angle_slider: ValueSlider = smear_options.get_node("InitialAngleSlider") +@onready var tolerance_slider: ValueSlider = smear_options.get_node("ToleranceSlider") +@onready var wait_apply_timer: Timer = $WaitApply +@onready var wait_time_slider: ValueSlider = $VBoxContainer/WaitTime func _ready() -> void: - # set as in enum + super._ready() + # Set as in the Animate enum animate_panel.add_float_property("Angle", angle_slider) animate_panel.add_float_property("Initial Angle", init_angle_slider) - if not _is_webgl1(): - type_option_button.add_item("Rotxel with Smear", ROTXEL_SMEAR) - rotxel_shader = load("res://src/Shaders/Rotation/SmearRotxel.shader") + type_option_button.add_item("Rotxel with Smear", ROTXEL_SMEAR) type_option_button.add_item("cleanEdge", CLEANEDGE) type_option_button.add_item("OmniScale", OMNISCALE) - type_option_button.set_item_disabled(OMNISCALE, not DrawingAlgos.omniscale_shader) type_option_button.add_item("Nearest neighbour (Shader)", NNS) type_option_button.add_item("Nearest neighbour", NN) type_option_button.add_item("Rotxel", ROTXEL) type_option_button.add_item("Upscale, Rotate and Downscale", URD) - type_option_button.emit_signal("item_selected", 0) + type_option_button.item_selected.emit(0) -func _about_to_show() -> void: +func _about_to_popup() -> void: if DrawingAlgos.clean_edge_shader == null: DrawingAlgos.clean_edge_shader = load("res://src/Shaders/Rotation/cleanEdge.gdshader") drag_pivot = false if pivot == Vector2.INF: _calculate_pivot() - confirmed = false - ._about_to_show() + has_been_confirmed = false + super._about_to_popup() wait_apply_timer.wait_time = wait_time_slider.value / 1000.0 func _calculate_pivot() -> void: - var size := Global.current_project.size - pivot = size / 2 + var project_size := Global.current_project.size + pivot = project_size / 2.0 # Pivot correction in case of even size if ( @@ -58,13 +56,13 @@ func _calculate_pivot() -> void: and type_option_button.get_selected_id() != CLEANEDGE and type_option_button.get_selected_id() != OMNISCALE ): - if int(size.x) % 2 == 0: + if project_size.x % 2 == 0: pivot.x -= 0.5 - if int(size.y) % 2 == 0: + if project_size.y % 2 == 0: pivot.y -= 0.5 - if Global.current_project.has_selection and selection_checkbox.pressed: - var selection_rectangle: Rect2 = Global.current_project.selection_map.get_used_rect() + if Global.current_project.has_selection and selection_checkbox.button_pressed: + var selection_rectangle := Global.current_project.selection_map.get_used_rect() pivot = ( selection_rectangle.position + ((selection_rectangle.end - selection_rectangle.position) / 2) @@ -75,120 +73,75 @@ func _calculate_pivot() -> void: and type_option_button.get_selected_id() != OMNISCALE ): # Pivot correction in case of even size - if int(selection_rectangle.end.x - selection_rectangle.position.x) % 2 == 0: + if (selection_rectangle.end.x - selection_rectangle.position.x) % 2 == 0: pivot.x -= 0.5 - if int(selection_rectangle.end.y - selection_rectangle.position.y) % 2 == 0: + if (selection_rectangle.end.y - selection_rectangle.position.y) % 2 == 0: pivot.y -= 0.5 pivot_sliders.value = pivot _on_Pivot_value_changed(pivot) -func commit_action(cel: Image, _project: Project = Global.current_project) -> void: - var angle: float = deg2rad(animate_panel.get_animated_value(commit_idx, Animate.ANGLE)) - var init_angle: float = animate_panel.get_animated_value(commit_idx, Animate.INITIAL_ANGLE) - - var selection_size := cel.get_size() - var selection_tex := ImageTexture.new() +func commit_action(cel: Image, _project := Global.current_project) -> void: + var angle := deg_to_rad(animate_panel.get_animated_value(commit_idx, Animate.ANGLE)) + var init_angle := animate_panel.get_animated_value(commit_idx, Animate.INITIAL_ANGLE) + var selection_tex: ImageTexture var image := Image.new() image.copy_from(cel) - if _project.has_selection and selection_checkbox.pressed: - var selection_rectangle: Rect2 = _project.selection_map.get_used_rect() - selection_size = selection_rectangle.size - - var selection: Image = _project.selection_map - selection_tex.create_from_image(selection, 0) + if _project.has_selection and selection_checkbox.button_pressed: + var selection := _project.selection_map + selection_tex = ImageTexture.create_from_image(selection) if !_type_is_shader(): - image.lock() - cel.lock() for x in _project.size.x: for y in _project.size.y: - var pos := Vector2(x, y) + var pos := Vector2i(x, y) if !_project.can_pixel_get_drawn(pos): image.set_pixelv(pos, Color(0, 0, 0, 0)) else: cel.set_pixelv(pos, Color(0, 0, 0, 0)) - image.unlock() - cel.unlock() - match type_option_button.get_selected_id(): - ROTXEL_SMEAR: - var params := { - "initial_angle": init_angle, - "ending_angle": rad2deg(angle), - "tolerance": tolerance_slider.value, - "selection_tex": selection_tex, - "origin": pivot / cel.get_size(), - "selection_size": selection_size - } - if !confirmed: - for param in params: - preview.material.set_shader_param(param, params[param]) - else: - var gen := ShaderImageEffect.new() - gen.generate_image(cel, rotxel_shader, params, _project.size) - yield(gen, "done") - - CLEANEDGE: - var params := { - "angle": angle, - "selection_tex": selection_tex, - "selection_pivot": pivot, - "selection_size": selection_size, - "slope": true, - "cleanup": false, - "preview": true - } - if !confirmed: - for param in params: - preview.material.set_shader_param(param, params[param]) - else: - params["preview"] = false - var gen := ShaderImageEffect.new() - gen.generate_image(cel, DrawingAlgos.clean_edge_shader, params, _project.size) - yield(gen, "done") - OMNISCALE: - var params := { - "angle": angle, - "selection_tex": selection_tex, - "selection_pivot": pivot, - "selection_size": selection_size, - "preview": true - } - if !confirmed: - for param in params: - preview.material.set_shader_param(param, params[param]) - else: - params["preview"] = false - var gen := ShaderImageEffect.new() - gen.generate_image(cel, DrawingAlgos.omniscale_shader, params, _project.size) - yield(gen, "done") - NNS: - var params := { - "angle": angle, - "selection_tex": selection_tex, - "selection_pivot": pivot, - "selection_size": selection_size - } - if !confirmed: - for param in params: - preview.material.set_shader_param(param, params[param]) - else: - var gen := ShaderImageEffect.new() - gen.generate_image(cel, nn_shader, params, _project.size) - yield(gen, "done") - ROTXEL: - DrawingAlgos.rotxel(image, angle, pivot) - NN: - DrawingAlgos.nn_rotate(image, angle, pivot) - URD: - DrawingAlgos.fake_rotsprite(image, angle, pivot) - - if _project.has_selection and selection_checkbox.pressed and !_type_is_shader(): - cel.blend_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO) + if _type_is_shader(): + var shader := rotxel_shader + var params := { + "angle": angle, "selection_tex": selection_tex, "pivot_pixel": pivot, "preview": true + } + match type_option_button.get_selected_id(): + ROTXEL_SMEAR: + params = { + "initial_angle": init_angle, + "ending_angle": rad_to_deg(angle), + "tolerance": tolerance_slider.value, + "selection_tex": selection_tex, + "origin": pivot / Vector2(cel.get_size()), + } + CLEANEDGE: + shader = DrawingAlgos.clean_edge_shader + OMNISCALE: + shader = DrawingAlgos.omniscale_shader + NNS: + shader = nn_shader + if !has_been_confirmed: + for param in params: + preview.material.set_shader_parameter(param, params[param]) + else: + params["preview"] = false + var gen := ShaderImageEffect.new() + gen.generate_image(cel, shader, params, _project.size) + await gen.done + else: + match type_option_button.get_selected_id(): + ROTXEL: + DrawingAlgos.rotxel(image, angle, pivot) + NN: + DrawingAlgos.nn_rotate(image, angle, pivot) + URD: + DrawingAlgos.fake_rotsprite(image, angle, pivot) + + if _project.has_selection and selection_checkbox.button_pressed and !_type_is_shader(): + cel.blend_rect(image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO) else: - cel.blit_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO) + cel.blit_rect(image, Rect2i(Vector2i.ZERO, image.get_size()), Vector2i.ZERO) func _type_is_shader() -> bool: @@ -257,7 +210,7 @@ func _on_LiveCheckbox_toggled(button_pressed: bool) -> void: wait_time_slider.editable = !live_preview wait_time_slider.visible = !live_preview if !button_pressed: - rect_size.y += 1 # Reset rect_size of dialog + size.y += 1 # Reset size of dialog func _on_quick_change_angle_pressed(angle_value: int) -> void: @@ -280,7 +233,7 @@ func _on_Centre_pressed() -> void: func _on_Pivot_value_changed(value: Vector2) -> void: pivot = value # Refresh the indicator - pivot_indicator.update() + pivot_indicator.queue_redraw() if angle_slider.value != 0: update_preview() @@ -288,7 +241,7 @@ func _on_Pivot_value_changed(value: Vector2) -> void: func _on_Indicator_draw() -> void: var img_size := preview_image.get_size() # find the scale using the larger measurement - var ratio := pivot_indicator.rect_size / img_size + var ratio := pivot_indicator.size / Vector2(img_size) # we need to set the scale according to the larger side var conversion_scale: float if img_size.x > img_size.y: @@ -296,13 +249,13 @@ func _on_Indicator_draw() -> void: else: conversion_scale = ratio.y var pivot_position := pivot * conversion_scale - pivot_indicator.draw_arc(pivot_position, 2, 0, 360, 360, Color.yellow, 0.5) - pivot_indicator.draw_arc(pivot_position, 6, 0, 360, 360, Color.white, 0.5) + pivot_indicator.draw_arc(pivot_position, 2, 0, 360, 360, Color.YELLOW, 0.5) + pivot_indicator.draw_arc(pivot_position, 6, 0, 360, 360, Color.WHITE, 0.5) pivot_indicator.draw_line( - pivot_position - Vector2.UP * 10, pivot_position - Vector2.DOWN * 10, Color.white, 0.5 + pivot_position - Vector2.UP * 10, pivot_position - Vector2.DOWN * 10, Color.WHITE, 0.5 ) pivot_indicator.draw_line( - pivot_position - Vector2.RIGHT * 10, pivot_position - Vector2.LEFT * 10, Color.white, 0.5 + pivot_position - Vector2.RIGHT * 10, pivot_position - Vector2.LEFT * 10, Color.WHITE, 0.5 ) @@ -313,8 +266,9 @@ func _on_Indicator_gui_input(event: InputEvent) -> void: drag_pivot = false if drag_pivot: var img_size := preview_image.get_size() - var mouse_pos := get_local_mouse_position() - pivot_indicator.rect_position - var ratio := img_size / pivot_indicator.rect_size +# var mouse_pos := get_local_mouse_position() - pivot_indicator.position + var mouse_pos := pivot_indicator.position + var ratio := Vector2(img_size) / pivot_indicator.size # we need to set the scale according to the larger side var conversion_scale: float if img_size.x > img_size.y: diff --git a/src/UI/Dialogs/ImageEffects/RotateImage.tscn b/src/UI/Dialogs/ImageEffects/RotateImage.tscn index 04a7e3d1bd2..59570855488 100644 --- a/src/UI/Dialogs/ImageEffects/RotateImage.tscn +++ b/src/UI/Dialogs/ImageEffects/RotateImage.tscn @@ -1,51 +1,33 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=5 format=3 uid="uid://bvr6j8sohxob3"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/RotateImage.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=3] -[ext_resource path="res://src/UI/Nodes/ValueSliderV2.tscn" type="PackedScene" id=4] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/RotateImage.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://bybqhhayl5ay5" path="res://src/UI/Dialogs/ImageEffects/ImageEffectParent.tscn" id="2"] +[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] +[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="4"] -[node name="RotateImage" instance=ExtResource( 2 )] -visible = false -window_title = "Rotate Image" -script = ExtResource( 1 ) +[node name="RotateImage" instance=ExtResource("2")] +title = "Rotate Image" +script = ExtResource("1") [node name="VBoxContainer" parent="." index="3"] -margin_bottom = 416.0 - -[node name="AspectRatioContainer" parent="VBoxContainer" index="1"] -margin_bottom = 224.0 - -[node name="Preview" parent="VBoxContainer/AspectRatioContainer" index="0"] -margin_left = 80.0 -margin_right = 280.0 -margin_bottom = 200.0 +offset_bottom = 416.0 [node name="Indicator" type="Control" parent="VBoxContainer/AspectRatioContainer" index="1"] -margin_left = 80.0 -margin_right = 280.0 -margin_bottom = 200.0 +layout_mode = 2 mouse_default_cursor_shape = 2 [node name="LiveSettings" type="HBoxContainer" parent="VBoxContainer" index="2"] -margin_top = 228.0 -margin_right = 360.0 -margin_bottom = 252.0 +layout_mode = 2 alignment = 1 [node name="LiveCheckbox" type="CheckBox" parent="VBoxContainer/LiveSettings" index="0"] -margin_left = 126.0 -margin_right = 234.0 -margin_bottom = 24.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -pressed = true text = "Live Preview" -[node name="WaitTime" parent="VBoxContainer" index="3" instance=ExtResource( 3 )] +[node name="WaitTime" parent="VBoxContainer" index="3" instance=ExtResource("3")] visible = false -margin_top = 232.0 -margin_right = 326.0 -margin_bottom = 256.0 +layout_mode = 2 min_value = 1.0 max_value = 1000.0 value = 200.0 @@ -54,37 +36,26 @@ prefix = "Preview delay:" suffix = "ms" [node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer" index="4"] -margin_top = 256.0 -margin_right = 360.0 -margin_bottom = 276.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer2" index="0"] -margin_top = 3.0 -margin_right = 34.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Type:" [node name="TypeOptionButton" type="OptionButton" parent="VBoxContainer/HBoxContainer2" index="1"] -margin_left = 38.0 -margin_right = 360.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +mouse_default_cursor_shape = 2 [node name="HSeparator" type="HSeparator" parent="VBoxContainer" index="5"] -margin_top = 280.0 -margin_right = 360.0 -margin_bottom = 284.0 +layout_mode = 2 [node name="PivotOptions" type="HBoxContainer" parent="VBoxContainer" index="6"] -margin_top = 288.0 -margin_right = 360.0 -margin_bottom = 312.0 +layout_mode = 2 -[node name="Pivot" parent="VBoxContainer/PivotOptions" index="0" instance=ExtResource( 4 )] -margin_right = 302.0 -margin_bottom = 24.0 +[node name="Pivot" parent="VBoxContainer/PivotOptions" index="0" instance=ExtResource("4")] +layout_mode = 2 size_flags_horizontal = 3 step = 0.5 allow_greater = true @@ -94,100 +65,74 @@ prefix_x = "Pivot x:" prefix_y = "Pivot y:" [node name="Centre" type="Button" parent="VBoxContainer/PivotOptions" index="1"] -margin_left = 306.0 -margin_right = 360.0 -margin_bottom = 24.0 -hint_tooltip = "Places the pivot at the center of the image, or at the center of the selection, if it is present." +layout_mode = 2 +tooltip_text = "Places the pivot at the center of the image, or at the center of the selection, if it is present." mouse_default_cursor_shape = 2 text = "Center" [node name="HSeparator2" type="HSeparator" parent="VBoxContainer" index="7"] -margin_top = 316.0 -margin_right = 360.0 -margin_bottom = 320.0 - -[node name="AngleSlider" parent="VBoxContainer" index="8" instance=ExtResource( 3 )] -margin_top = 324.0 -margin_right = 360.0 -margin_bottom = 348.0 +layout_mode = 2 + +[node name="AngleSlider" parent="VBoxContainer" index="8" instance=ExtResource("3")] +layout_mode = 2 max_value = 359.0 prefix = "Angle:" suffix = "ยฐ" snap_step = 45.0 [node name="QuickRotations" type="HBoxContainer" parent="VBoxContainer" index="9"] -margin_top = 352.0 -margin_right = 360.0 -margin_bottom = 372.0 +layout_mode = 2 alignment = 1 [node name="Deduct90" type="Button" parent="VBoxContainer/QuickRotations" index="0"] -margin_right = 68.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "-90" [node name="Deduct45" type="Button" parent="VBoxContainer/QuickRotations" index="1"] -margin_left = 72.0 -margin_right = 141.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "-45" [node name="Zero" type="Button" parent="VBoxContainer/QuickRotations" index="2"] -margin_left = 145.0 -margin_right = 214.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "0" [node name="Add45" type="Button" parent="VBoxContainer/QuickRotations" index="3"] -margin_left = 218.0 -margin_right = 287.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "+45" [node name="Add90" type="Button" parent="VBoxContainer/QuickRotations" index="4"] -margin_left = 291.0 -margin_right = 360.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 text = "+90" [node name="SmearOptions" type="VBoxContainer" parent="VBoxContainer" index="10"] visible = false -margin_top = 352.0 -margin_right = 326.0 -margin_bottom = 430.0 +layout_mode = 2 [node name="HSeparator" type="HSeparator" parent="VBoxContainer/SmearOptions" index="0"] -margin_right = 326.0 -margin_bottom = 4.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/SmearOptions" index="1"] -margin_top = 8.0 -margin_right = 326.0 -margin_bottom = 22.0 +layout_mode = 2 text = "Smear options:" -[node name="ToleranceSlider" parent="VBoxContainer/SmearOptions" index="2" instance=ExtResource( 3 )] -margin_top = 26.0 -margin_right = 326.0 -margin_bottom = 50.0 +[node name="ToleranceSlider" parent="VBoxContainer/SmearOptions" index="2" instance=ExtResource("3")] +layout_mode = 2 max_value = 255.0 value = 100.0 prefix = "Tolerance:" -[node name="InitialAngleSlider" parent="VBoxContainer/SmearOptions" index="3" instance=ExtResource( 3 )] -margin_top = 54.0 -margin_right = 326.0 -margin_bottom = 78.0 +[node name="InitialAngleSlider" parent="VBoxContainer/SmearOptions" index="3" instance=ExtResource("3")] +layout_mode = 2 max_value = 359.0 value = 359.0 prefix = "Initial angle:" @@ -195,18 +140,9 @@ suffix = "ยฐ" snap_step = 45.0 [node name="HSeparator3" type="HSeparator" parent="VBoxContainer" index="11"] -margin_top = 376.0 -margin_right = 360.0 -margin_bottom = 380.0 - -[node name="OptionsContainer" parent="VBoxContainer" index="12"] -margin_top = 384.0 -margin_bottom = 408.0 - -[node name="WaitApply" type="Timer" parent="." index="4"] +layout_mode = 2 -[node name="AnimateDialog" parent="." index="5"] -margin_bottom = 416.0 +[node name="WaitApply" type="Timer" parent="." index="5"] [connection signal="draw" from="VBoxContainer/AspectRatioContainer/Indicator" to="." method="_on_Indicator_draw"] [connection signal="gui_input" from="VBoxContainer/AspectRatioContainer/Indicator" to="." method="_on_Indicator_gui_input"] @@ -216,11 +152,11 @@ margin_bottom = 416.0 [connection signal="value_changed" from="VBoxContainer/PivotOptions/Pivot" to="." method="_on_Pivot_value_changed"] [connection signal="pressed" from="VBoxContainer/PivotOptions/Centre" to="." method="_on_Centre_pressed"] [connection signal="value_changed" from="VBoxContainer/AngleSlider" to="." method="_on_AngleSlider_value_changed"] -[connection signal="pressed" from="VBoxContainer/QuickRotations/Deduct90" to="." method="_on_quick_change_angle_pressed" binds= [ -90 ]] -[connection signal="pressed" from="VBoxContainer/QuickRotations/Deduct45" to="." method="_on_quick_change_angle_pressed" binds= [ -45 ]] -[connection signal="pressed" from="VBoxContainer/QuickRotations/Zero" to="." method="_on_quick_change_angle_pressed" binds= [ 0 ]] -[connection signal="pressed" from="VBoxContainer/QuickRotations/Add45" to="." method="_on_quick_change_angle_pressed" binds= [ 45 ]] -[connection signal="pressed" from="VBoxContainer/QuickRotations/Add90" to="." method="_on_quick_change_angle_pressed" binds= [ 90 ]] +[connection signal="pressed" from="VBoxContainer/QuickRotations/Deduct90" to="." method="_on_quick_change_angle_pressed" binds= [-90]] +[connection signal="pressed" from="VBoxContainer/QuickRotations/Deduct45" to="." method="_on_quick_change_angle_pressed" binds= [-45]] +[connection signal="pressed" from="VBoxContainer/QuickRotations/Zero" to="." method="_on_quick_change_angle_pressed" binds= [0]] +[connection signal="pressed" from="VBoxContainer/QuickRotations/Add45" to="." method="_on_quick_change_angle_pressed" binds= [45]] +[connection signal="pressed" from="VBoxContainer/QuickRotations/Add90" to="." method="_on_quick_change_angle_pressed" binds= [90]] [connection signal="value_changed" from="VBoxContainer/SmearOptions/ToleranceSlider" to="." method="_on_ToleranceSlider_value_changed"] [connection signal="value_changed" from="VBoxContainer/SmearOptions/InitialAngleSlider" to="." method="_on_InitialAngleSlider_value_changed"] [connection signal="timeout" from="WaitApply" to="." method="_on_WaitApply_timeout"] diff --git a/src/UI/Dialogs/ImageEffects/ScaleImage.gd b/src/UI/Dialogs/ImageEffects/ScaleImage.gd index 5f3ccddbcdc..c6cb21fcdbe 100644 --- a/src/UI/Dialogs/ImageEffects/ScaleImage.gd +++ b/src/UI/Dialogs/ImageEffects/ScaleImage.gd @@ -2,12 +2,12 @@ extends ConfirmationDialog var aspect_ratio := 1.0 -onready var width_value: SpinBox = find_node("WidthValue") -onready var height_value: SpinBox = find_node("HeightValue") -onready var width_value_perc: SpinBox = find_node("WidthValuePerc") -onready var height_value_perc: SpinBox = find_node("HeightValuePerc") -onready var interpolation_type: OptionButton = find_node("InterpolationType") -onready var ratio_box: BaseButton = find_node("AspectRatioButton") +@onready var width_value: SpinBox = find_child("WidthValue") +@onready var height_value: SpinBox = find_child("HeightValue") +@onready var width_value_perc: SpinBox = find_child("WidthValuePerc") +@onready var height_value_perc: SpinBox = find_child("HeightValuePerc") +@onready var interpolation_type: OptionButton = find_child("InterpolationType") +@onready var ratio_box: BaseButton = find_child("AspectRatioButton") func _ready() -> void: @@ -19,15 +19,13 @@ func _ready() -> void: interpolation_type.add_item("Scale3X", DrawingAlgos.Interpolation.SCALE3X) interpolation_type.add_item("cleanEdge", DrawingAlgos.Interpolation.CLEANEDGE) interpolation_type.add_item("OmniScale", DrawingAlgos.Interpolation.OMNISCALE) - if not DrawingAlgos.omniscale_shader: - interpolation_type.set_item_disabled(DrawingAlgos.Interpolation.OMNISCALE, true) func _on_ScaleImage_about_to_show() -> void: if DrawingAlgos.clean_edge_shader == null: DrawingAlgos.clean_edge_shader = load("res://src/Shaders/Rotation/cleanEdge.gdshader") Global.canvas.selection.transform_content_confirm() - aspect_ratio = Global.current_project.size.x / Global.current_project.size.y + aspect_ratio = float(Global.current_project.size.x) / float(Global.current_project.size.y) width_value.value = Global.current_project.size.x height_value.value = Global.current_project.size.y width_value_perc.value = 100 @@ -41,18 +39,18 @@ func _on_ScaleImage_confirmed() -> void: DrawingAlgos.scale_image(width, height, interpolation) -func _on_ScaleImage_popup_hide() -> void: +func _on_visibility_changed() -> void: Global.dialog_open(false) func _on_WidthValue_value_changed(value: float) -> void: - if ratio_box.pressed: + if ratio_box.button_pressed: height_value.value = width_value.value / aspect_ratio width_value_perc.value = (value * 100) / Global.current_project.size.x func _on_HeightValue_value_changed(value: float) -> void: - if ratio_box.pressed: + if ratio_box.button_pressed: width_value.value = height_value.value * aspect_ratio height_value_perc.value = (value * 100) / Global.current_project.size.y diff --git a/src/UI/Dialogs/ImageEffects/ScaleImage.tscn b/src/UI/Dialogs/ImageEffects/ScaleImage.tscn index f86c556db24..0c8c0df7bea 100644 --- a/src/UI/Dialogs/ImageEffects/ScaleImage.tscn +++ b/src/UI/Dialogs/ImageEffects/ScaleImage.tscn @@ -1,159 +1,116 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=5 format=3 uid="uid://omm7xmtf5kbj"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ScaleImage.gd" type="Script" id=1] -[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture" id=2] -[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture" id=3] -[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture" id=4] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/ScaleImage.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://kd10jfc1dxf5" path="res://assets/graphics/misc/lock_aspect_guides.png" id="2"] +[ext_resource type="Texture2D" uid="uid://cancw70yw0pv7" path="res://assets/graphics/misc/lock_aspect_2.png" id="3"] +[ext_resource type="Texture2D" uid="uid://beqermx8s5q8y" path="res://assets/graphics/misc/lock_aspect.png" id="4"] [node name="ScaleImage" type="ConfirmationDialog"] -margin_right = 200.0 -margin_bottom = 114.0 -rect_min_size = Vector2( 250, 87.5 ) -window_title = "Scale Image" -resizable = true -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +title = "Scale Image" +exclusive = false +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 242.0 -margin_bottom = 218.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 242.0 +offset_bottom = 218.0 size_flags_horizontal = 3 -__meta__ = { -"_edit_use_anchors_": false -} [node name="ImageSize" type="Label" parent="VBoxContainer"] -margin_right = 234.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Image Size" [node name="HSeparator" type="HSeparator" parent="VBoxContainer"] -margin_top = 18.0 -margin_right = 234.0 -margin_bottom = 22.0 +layout_mode = 2 [node name="PixelsLabel" type="Label" parent="VBoxContainer"] -margin_top = 26.0 -margin_right = 234.0 -margin_bottom = 40.0 +layout_mode = 2 text = "Pixels" [node name="SizeContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 44.0 -margin_right = 234.0 -margin_bottom = 96.0 +layout_mode = 2 [node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/SizeContainer"] -margin_right = 221.0 -margin_bottom = 52.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="WidthContainer" type="HBoxContainer" parent="VBoxContainer/SizeContainer/VBoxContainer"] -margin_right = 221.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="WidthLabel" type="Label" parent="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer"] -margin_top = 5.0 -margin_right = 90.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 90, 0 ) +custom_minimum_size = Vector2(90, 0) +layout_mode = 2 text = "Width:" [node name="WidthValue" type="SpinBox" parent="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer"] -margin_left = 94.0 -margin_right = 221.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 16384.0 value = 64.0 suffix = "px" [node name="HeightContainer" type="HBoxContainer" parent="VBoxContainer/SizeContainer/VBoxContainer"] -margin_top = 28.0 -margin_right = 221.0 -margin_bottom = 52.0 +layout_mode = 2 [node name="Height" type="Label" parent="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer"] -margin_top = 5.0 -margin_right = 90.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 90, 0 ) +custom_minimum_size = Vector2(90, 0) +layout_mode = 2 text = "Height:" [node name="HeightValue" type="SpinBox" parent="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer"] -margin_left = 94.0 -margin_right = 221.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 16384.0 value = 64.0 suffix = "px" [node name="TextureRect" type="TextureRect" parent="VBoxContainer/SizeContainer" groups=["UIButtons"]] -margin_left = 225.0 -margin_right = 234.0 -margin_bottom = 52.0 -texture = ExtResource( 2 ) +layout_mode = 2 +texture = ExtResource("2") [node name="AspectRatioButton" type="TextureButton" parent="VBoxContainer/SizeContainer/TextureRect" groups=["UIButtons"]] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -4.5 -margin_top = -9.0 -margin_right = 11.5 -margin_bottom = 7.0 -hint_tooltip = "Lock aspect ratio" +offset_left = -4.5 +offset_top = -9.0 +offset_right = 11.5 +offset_bottom = 7.0 +tooltip_text = "Lock aspect ratio" mouse_default_cursor_shape = 2 toggle_mode = true -texture_normal = ExtResource( 3 ) -texture_pressed = ExtResource( 4 ) -__meta__ = { -"_edit_use_anchors_": false -} +texture_normal = ExtResource("3") +texture_pressed = ExtResource("4") [node name="HSeparator2" type="HSeparator" parent="VBoxContainer"] -margin_top = 100.0 -margin_right = 234.0 -margin_bottom = 104.0 +layout_mode = 2 [node name="PercentageLabel" type="Label" parent="VBoxContainer"] -margin_top = 108.0 -margin_right = 234.0 -margin_bottom = 122.0 +layout_mode = 2 text = "Percentage" [node name="PercentageContainer" type="VBoxContainer" parent="VBoxContainer"] -margin_top = 126.0 -margin_right = 234.0 -margin_bottom = 178.0 +layout_mode = 2 [node name="WidthContainer" type="HBoxContainer" parent="VBoxContainer/PercentageContainer"] -margin_right = 234.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="WidthLabel" type="Label" parent="VBoxContainer/PercentageContainer/WidthContainer"] -margin_top = 5.0 -margin_right = 90.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 90, 0 ) +custom_minimum_size = Vector2(90, 0) +layout_mode = 2 text = "Width:" [node name="WidthValuePerc" type="SpinBox" parent="VBoxContainer/PercentageContainer/WidthContainer"] -margin_left = 94.0 -margin_right = 234.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 16384.0 step = 0.01 @@ -161,23 +118,17 @@ value = 100.0 suffix = "%" [node name="HeightContainer" type="HBoxContainer" parent="VBoxContainer/PercentageContainer"] -margin_top = 28.0 -margin_right = 234.0 -margin_bottom = 52.0 +layout_mode = 2 [node name="Height" type="Label" parent="VBoxContainer/PercentageContainer/HeightContainer"] -margin_top = 5.0 -margin_right = 90.0 -margin_bottom = 19.0 -rect_min_size = Vector2( 90, 0 ) +custom_minimum_size = Vector2(90, 0) +layout_mode = 2 text = "Height:" [node name="HeightValuePerc" type="SpinBox" parent="VBoxContainer/PercentageContainer/HeightContainer"] -margin_left = 94.0 -margin_right = 234.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 16384.0 step = 0.01 @@ -185,32 +136,24 @@ value = 100.0 suffix = "%" [node name="HSeparator3" type="HSeparator" parent="VBoxContainer"] -margin_top = 182.0 -margin_right = 234.0 -margin_bottom = 186.0 +layout_mode = 2 [node name="InterpolationContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 190.0 -margin_right = 234.0 -margin_bottom = 210.0 +layout_mode = 2 [node name="InterpolationLabel" type="Label" parent="VBoxContainer/InterpolationContainer"] -margin_top = 3.0 -margin_right = 90.0 -margin_bottom = 17.0 -rect_min_size = Vector2( 90, 0 ) +custom_minimum_size = Vector2(90, 0) +layout_mode = 2 text = "Interpolation:" [node name="InterpolationType" type="OptionButton" parent="VBoxContainer/InterpolationContainer"] -margin_left = 94.0 -margin_right = 234.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 -[connection signal="about_to_show" from="." to="." method="_on_ScaleImage_about_to_show"] +[connection signal="about_to_popup" from="." to="." method="_on_ScaleImage_about_to_show"] [connection signal="confirmed" from="." to="." method="_on_ScaleImage_confirmed"] -[connection signal="popup_hide" from="." to="." method="_on_ScaleImage_popup_hide"] +[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"] [connection signal="value_changed" from="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer/WidthValue" to="." method="_on_WidthValue_value_changed"] [connection signal="value_changed" from="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer/HeightValue" to="." method="_on_HeightValue_value_changed"] [connection signal="toggled" from="VBoxContainer/SizeContainer/TextureRect/AspectRatioButton" to="." method="_on_AspectRatioButton_toggled"] diff --git a/src/UI/Dialogs/ImageEffects/ShaderEffect.gd b/src/UI/Dialogs/ImageEffects/ShaderEffect.gd index 974adf62446..afe443125ed 100644 --- a/src/UI/Dialogs/ImageEffects/ShaderEffect.gd +++ b/src/UI/Dialogs/ImageEffects/ShaderEffect.gd @@ -1,40 +1,38 @@ extends ImageEffect var shader: Shader -var param_names := [] # String[] -var value_slider_tscn := preload("res://src/UI/Nodes/ValueSlider.tscn") +var param_names: PackedStringArray = [] -onready var shader_loaded_label: Label = $VBoxContainer/ShaderLoadedLabel -onready var shader_params: BoxContainer = $VBoxContainer/ShaderParams +@onready var shader_loaded_label: Label = $VBoxContainer/ShaderLoadedLabel +@onready var shader_params: BoxContainer = $VBoxContainer/ShaderParams -func _about_to_show() -> void: +func _about_to_popup() -> void: Global.canvas.selection.transform_content_confirm() - var frame: Frame = Global.current_project.frames[Global.current_project.current_frame] + var frame := Global.current_project.frames[Global.current_project.current_frame] Export.blend_selected_cels(selected_cels, frame) preview_image.copy_from(selected_cels) - preview_texture.create_from_image(preview_image, 0) + preview_texture = ImageTexture.create_from_image(preview_image) preview.texture = preview_texture - ._about_to_show() + super._about_to_popup() -func commit_action(cel: Image, project: Project = Global.current_project) -> void: +func commit_action(cel: Image, project := Global.current_project) -> void: if !shader: return var params := {} for param in param_names: - var param_data = preview.material.get_shader_param(param) + var param_data = preview.material.get_shader_parameter(param) params[param] = param_data var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) - selected_cels.unlock() - yield(gen, "done") + await gen.done func _on_ChooseShader_pressed() -> void: - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": Html5FileExchange.load_shader() else: $FileDialog.popup_centered(Vector2(300, 340)) @@ -51,16 +49,16 @@ func set_nodes() -> void: preview = $VBoxContainer/AspectRatioContainer/Preview -func change_shader(shader_tmp: Shader, name: String) -> void: +func change_shader(shader_tmp: Shader, shader_name: String) -> void: shader = shader_tmp preview.material.shader = shader_tmp - shader_loaded_label.text = tr("Shader loaded:") + " " + name + shader_loaded_label.text = tr("Shader loaded:") + " " + shader_name param_names.clear() for child in shader_params.get_children(): child.queue_free() var code := shader.code.split("\n") - var uniforms := [] + var uniforms: PackedStringArray = [] for line in code: if line.begins_with("uniform"): uniforms.append(line) @@ -68,33 +66,33 @@ func change_shader(shader_tmp: Shader, name: String) -> void: for uniform in uniforms: # Example uniform: # uniform float parameter_name : hint_range(0, 255) = 100.0; - var uniform_split: PoolStringArray = uniform.split("=") + var uniform_split := uniform.split("=") var u_value := "" if uniform_split.size() > 1: u_value = uniform_split[1].replace(";", "").strip_edges() else: uniform_split[0] = uniform_split[0].replace(";", "").strip_edges() - var u_left_side: PoolStringArray = uniform_split[0].split(":") + var u_left_side := uniform_split[0].split(":") var u_hint := "" if u_left_side.size() > 1: u_hint = u_left_side[1].strip_edges() u_hint = u_hint.replace(";", "") - var u_init: PoolStringArray = u_left_side[0].split(" ") - var u_type: String = u_init[1] - var u_name: String = u_init[2] + var u_init := u_left_side[0].split(" ") + var u_type := u_init[1] + var u_name := u_init[2] param_names.append(u_name) if u_type == "float" or u_type == "int": var label := Label.new() label.text = u_name label.size_flags_horizontal = Control.SIZE_EXPAND_FILL - var slider: ValueSlider = value_slider_tscn.instance() + var slider := ValueSlider.new() var min_value := 0.0 var max_value := 255.0 var step := 1.0 - var range_values_array: PoolStringArray + var range_values_array: PackedStringArray if "hint_range" in u_hint: var range_values: String = u_hint.replace("hint_range(", "") range_values = range_values.replace(")", "").strip_edges() @@ -131,7 +129,7 @@ func change_shader(shader_tmp: Shader, name: String) -> void: slider.min_value = min_value slider.max_value = max_value slider.step = step - slider.connect("value_changed", self, "set_shader_param", [u_name]) + slider.value_changed.connect(set_shader_parameter.bind(u_name)) var hbox := HBoxContainer.new() hbox.add_child(label) hbox.add_child(slider) @@ -141,27 +139,27 @@ func change_shader(shader_tmp: Shader, name: String) -> void: label.text = u_name label.size_flags_horizontal = Control.SIZE_EXPAND_FILL var vector2 := _vec2str_to_vector2(u_value) - var slider1: ValueSlider = value_slider_tscn.instance() + var slider1 := ValueSlider.new() slider1.value = vector2.x - slider1.connect("value_changed", self, "_set_vector2_shader_param", [u_name, true]) - var slider2: ValueSlider = value_slider_tscn.instance() + slider1.value_changed.connect(_set_vector2_shader_param.bind(u_name, true)) + var slider2 := ValueSlider.new() slider2.value = vector2.y - slider2.connect("value_changed", self, "_set_vector2_shader_param", [u_name, false]) + slider2.value_changed.connect(_set_vector2_shader_param.bind(u_name, false)) var hbox := HBoxContainer.new() hbox.add_child(label) hbox.add_child(slider1) hbox.add_child(slider2) shader_params.add_child(hbox) elif u_type == "vec4": - if "hint_color" in u_hint: + if "source_color" in u_hint: var label := Label.new() label.text = u_name label.size_flags_horizontal = Control.SIZE_EXPAND_FILL var color := _vec4str_to_color(u_value) var color_button := ColorPickerButton.new() - color_button.rect_min_size = Vector2(20, 20) + color_button.custom_minimum_size = Vector2(20, 20) color_button.color = color - color_button.connect("color_changed", self, "set_shader_param", [u_name]) + color_button.color_changed.connect(set_shader_parameter.bind(u_name)) color_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL var hbox := HBoxContainer.new() hbox.add_child(label) @@ -172,15 +170,15 @@ func change_shader(shader_tmp: Shader, name: String) -> void: label.text = u_name label.size_flags_horizontal = Control.SIZE_EXPAND_FILL var file_dialog := FileDialog.new() - file_dialog.mode = FileDialog.MODE_OPEN_FILE + file_dialog.file_mode = FileDialog.FILE_MODE_OPEN_FILE file_dialog.access = FileDialog.ACCESS_FILESYSTEM file_dialog.resizable = true - file_dialog.rect_min_size = Vector2(200, 70) - file_dialog.rect_size = Vector2(384, 281) - file_dialog.connect("file_selected", self, "_load_texture", [u_name]) + file_dialog.custom_minimum_size = Vector2(200, 70) + file_dialog.size = Vector2(384, 281) + file_dialog.file_selected.connect(_load_texture.bind(u_name)) var button := Button.new() button.text = "Load texture" - button.connect("pressed", file_dialog, "popup_centered") + button.pressed.connect(file_dialog.popup_centered) button.size_flags_horizontal = Control.SIZE_EXPAND_FILL var hbox := HBoxContainer.new() hbox.add_child(label) @@ -194,8 +192,8 @@ func change_shader(shader_tmp: Shader, name: String) -> void: var checkbox := CheckBox.new() checkbox.text = "On" if u_value == "true": - checkbox.pressed = true - checkbox.connect("toggled", self, "set_shader_param", [u_name]) + checkbox.button_pressed = true + checkbox.toggled.connect(set_shader_parameter.bind(u_name)) checkbox.size_flags_horizontal = Control.SIZE_EXPAND_FILL var hbox := HBoxContainer.new() hbox.add_child(label) @@ -212,25 +210,25 @@ func change_shader(shader_tmp: Shader, name: String) -> void: # print("--") -func set_shader_param(value, param: String) -> void: +func set_shader_parameter(value, param: String) -> void: var mat: ShaderMaterial = preview.material - mat.set_shader_param(param, value) + mat.set_shader_parameter(param, value) func _set_vector2_shader_param(value: float, param: String, x: bool) -> void: var mat: ShaderMaterial = preview.material - var vector2: Vector2 = mat.get_shader_param(param) + var vector2: Vector2 = mat.get_shader_parameter(param) if x: vector2.x = value else: vector2.y = value - set_shader_param(vector2, param) + set_shader_parameter(vector2, param) func _vec2str_to_vector2(vec2: String) -> Vector2: vec2 = vec2.replace("vec2(", "") vec2 = vec2.replace(")", "") - var vec_values: PoolStringArray = vec2.split(",") + var vec_values: PackedStringArray = vec2.split(",") if vec_values.size() == 0: return Vector2.ZERO var y := float(vec_values[0]) @@ -243,7 +241,7 @@ func _vec2str_to_vector2(vec2: String) -> Vector2: func _vec4str_to_color(vec4: String) -> Color: vec4 = vec4.replace("vec4(", "") vec4 = vec4.replace(")", "") - var rgba_values: PoolStringArray = vec4.split(",") + var rgba_values: PackedStringArray = vec4.split(",") var red := float(rgba_values[0]) var green := float(rgba_values[0]) @@ -267,7 +265,5 @@ func _load_texture(path: String, param: String) -> void: if !image: print("Error loading texture") return - var image_tex := ImageTexture.new() - image_tex.create_from_image(image, 0) - image_tex.flags = ImageTexture.FLAG_REPEAT - set_shader_param(image_tex, param) + var image_tex := ImageTexture.create_from_image(image) + set_shader_parameter(image_tex, param) diff --git a/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn b/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn index 1343b0054ad..55bcc4d23e6 100644 --- a/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn +++ b/src/UI/Dialogs/ImageEffects/ShaderEffect.tscn @@ -1,86 +1,60 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://bkr47ocij684y"] -[ext_resource path="res://src/UI/Dialogs/ImageEffects/ShaderEffect.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=2] +[ext_resource type="Script" path="res://src/UI/Dialogs/ImageEffects/ShaderEffect.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="2"] -[sub_resource type="ShaderMaterial" id=1] +[sub_resource type="ShaderMaterial" id="1"] [node name="ShaderEffect" type="ConfirmationDialog"] -margin_right = 200.0 -margin_bottom = 228.0 -rect_min_size = Vector2( 400, 300 ) -window_title = "Shader" -resizable = true -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +exclusive = false +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -36.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -36.0 [node name="Label" type="Label" parent="VBoxContainer"] -margin_right = 442.0 -margin_bottom = 31.0 +layout_mode = 2 text = "This is an experimental feature and may not be included in the stable version" -autowrap = true [node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"] -margin_top = 35.0 -margin_right = 442.0 -margin_bottom = 235.0 +layout_mode = 2 size_flags_vertical = 3 [node name="Preview" type="TextureRect" parent="VBoxContainer/AspectRatioContainer"] -material = SubResource( 1 ) -margin_left = 121.0 -margin_right = 321.0 -margin_bottom = 200.0 -rect_min_size = Vector2( 200, 200 ) -expand = true +material = SubResource("1") +custom_minimum_size = Vector2(200, 200) +layout_mode = 2 +expand_mode = 1 stretch_mode = 5 -[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource( 2 )] +[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("2")] show_behind_parent = true +layout_mode = 0 +anchors_preset = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = 0.0 -margin_bottom = 0.0 [node name="ChooseShader" type="Button" parent="VBoxContainer"] -margin_top = 239.0 -margin_right = 442.0 -margin_bottom = 259.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Choose Shader" [node name="ShaderLoadedLabel" type="Label" parent="VBoxContainer"] -margin_top = 263.0 -margin_right = 442.0 -margin_bottom = 277.0 +layout_mode = 2 text = "No shader loaded!" -autowrap = true [node name="ShaderParams" type="VBoxContainer" parent="VBoxContainer"] -margin_top = 281.0 -margin_right = 442.0 -margin_bottom = 281.0 +layout_mode = 2 [node name="FileDialog" type="FileDialog" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 450.0 -margin_bottom = 289.0 -window_title = "Open a File" -resizable = true -mode = 0 access = 2 -filters = PoolStringArray( "*shader; Godot Shader File" ) +filters = PackedStringArray("*shader; Godot Shader File") show_hidden_files = true [connection signal="pressed" from="VBoxContainer/ChooseShader" to="." method="_on_ChooseShader_pressed"] diff --git a/src/UI/Dialogs/ManageLayouts.gd b/src/UI/Dialogs/ManageLayouts.gd index 52cdaed444d..ccd14173fd3 100644 --- a/src/UI/Dialogs/ManageLayouts.gd +++ b/src/UI/Dialogs/ManageLayouts.gd @@ -3,13 +3,13 @@ extends AcceptDialog var layout_selected := -1 var is_editing := false -onready var layout_list: ItemList = find_node("SavedLayouts") -onready var edit_layout: Button = find_node("EditLayout") -onready var delete_layout: Button = find_node("DeleteLayout") -onready var layout_settings: ConfirmationDialog = $LayoutSettings -onready var layout_name: LineEdit = $LayoutSettings/LayoutName -onready var delete_confirmation: ConfirmationDialog = $DeleteConfirmation -onready var mimic_ui = find_node("LayoutPreview") +@onready var layout_list: ItemList = find_child("SavedLayouts") +@onready var edit_layout: Button = find_child("EditLayout") +@onready var delete_layout: Button = find_child("DeleteLayout") +@onready var layout_settings: ConfirmationDialog = $LayoutSettings +@onready var layout_name: LineEdit = $LayoutSettings/LayoutName +@onready var delete_confirmation: ConfirmationDialog = $DeleteConfirmation +@onready var mimic_ui = find_child("LayoutPreview") func _on_ManageLayouts_about_to_show() -> void: @@ -20,7 +20,9 @@ func _on_ManageLayouts_about_to_show() -> void: layout_list.select(layout_selected) -func _on_ManageLayouts_popup_hide() -> void: +func _on_ManageLayouts_visibility_changed() -> void: + if visible: + return layout_list.clear() Global.dialog_open(false) @@ -36,7 +38,7 @@ func _on_SavedLayouts_item_selected(index: int) -> void: refresh_preview() -func _on_SavedLayouts_nothing_selected() -> void: +func _on_SavedLayouts_empty_clicked(_position: Vector2, _button_index: int) -> void: edit_layout.disabled = true delete_layout.disabled = true @@ -44,14 +46,14 @@ func _on_SavedLayouts_nothing_selected() -> void: func _on_AddLayout_pressed() -> void: is_editing = false layout_name.text = "New Layout" - layout_settings.window_title = "Add Layout" + layout_settings.title = "Add Layout" layout_settings.popup_centered() func _on_EditLayout_pressed() -> void: is_editing = true layout_name.text = layout_list.get_item_text(layout_selected) - layout_settings.window_title = "Edit Layout" + layout_settings.title = "Edit Layout" layout_settings.popup_centered() @@ -61,9 +63,9 @@ func _on_DeleteLayout_pressed() -> void: func _on_LayoutSettings_confirmed() -> void: var file_name := layout_name.text + ".tres" - var path := "user://layouts/".plus_file(file_name) - var layout = Global.control.ui.get_layout() - var err := ResourceSaver.save(path, layout) + var path := "user://layouts/".path_join(file_name) + var layout: DockableLayout = Global.control.ui.layout + var err := ResourceSaver.save(layout, path) if err != OK: print(err) else: @@ -86,13 +88,15 @@ func _on_LayoutSettings_confirmed() -> void: func delete_layout_file(file_name: String) -> void: - var dir := Directory.new() - dir.remove("user://layouts/".plus_file(file_name)) + var dir := DirAccess.open("user://layouts/") + if not is_instance_valid(dir): + return + dir.remove("user://layouts/".path_join(file_name)) func _on_DeleteConfirmation_confirmed() -> void: delete_layout_file(layout_list.get_item_text(layout_selected) + ".tres") - Global.top_menu_container.layouts.remove(layout_selected) + Global.top_menu_container.layouts.remove_at(layout_selected) layout_list.remove_item(layout_selected) Global.top_menu_container.populate_layouts_submenu() layout_selected = -1 @@ -108,8 +112,7 @@ func refresh_preview(): var box := TextEdit.new() box.name = item.name box.text = item.name - box.wrap_enabled = true - box.readonly = true + box.editable = false mimic_ui.add_child(box) if layout_selected == -1: mimic_ui.visible = false diff --git a/src/UI/Dialogs/ManageLayouts.tscn b/src/UI/Dialogs/ManageLayouts.tscn index 0b97e8372cc..98b8faf2d3b 100644 --- a/src/UI/Dialogs/ManageLayouts.tscn +++ b/src/UI/Dialogs/ManageLayouts.tscn @@ -1,171 +1,131 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=7 format=3 uid="uid://d1phd84dk4t5e"] -[ext_resource path="res://src/UI/Dialogs/ManageLayouts.gd" type="Script" id=1] -[ext_resource path="res://addons/dockable_container/layout_panel.gd" type="Script" id=2] -[ext_resource path="res://addons/dockable_container/layout.gd" type="Script" id=3] -[ext_resource path="res://addons/dockable_container/dockable_container.gd" type="Script" id=4] +[ext_resource type="Script" path="res://src/UI/Dialogs/ManageLayouts.gd" id="1"] +[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="2"] +[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="3"] +[ext_resource type="Script" path="res://addons/dockable_container/dockable_container.gd" id="4"] -[sub_resource type="Resource" id=1] +[sub_resource type="Resource" id="1"] resource_name = "Tabs" -script = ExtResource( 2 ) -names = PoolStringArray( ) -current_tab = 0 +script = ExtResource("2") +names = PackedStringArray() +current_tab = -1 -[sub_resource type="Resource" id=2] +[sub_resource type="Resource" id="2"] resource_name = "Layout" -script = ExtResource( 3 ) -root = SubResource( 1 ) -hidden_tabs = { -} +script = ExtResource("3") +root = SubResource("1") +hidden_tabs = {} [node name="ManageLayouts" type="AcceptDialog"] -margin_right = 543.0 -margin_bottom = 562.0 -window_title = "Manage Layouts" -resizable = true -script = ExtResource( 1 ) +title = "Manage Layouts" +exclusive = false +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -36.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -36.0 [node name="PreviewHeader" type="HBoxContainer" parent="VBoxContainer"] -margin_right = 527.0 -margin_bottom = 14.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="VBoxContainer/PreviewHeader"] -margin_right = 50.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Preview" [node name="HSeparator" type="HSeparator" parent="VBoxContainer/PreviewHeader"] -margin_left = 50.0 -margin_right = 527.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="PreviewInstruction" type="Label" parent="VBoxContainer"] -margin_top = 18.0 -margin_right = 527.0 -margin_bottom = 32.0 +layout_mode = 2 text = "This is a preview, changing this won't change the layout" -align = 1 -autowrap = true [node name="PreviewContainer" type="ScrollContainer" parent="VBoxContainer"] -margin_top = 36.0 -margin_right = 527.0 -margin_bottom = 354.0 +layout_mode = 2 size_flags_vertical = 3 [node name="LayoutPreview" type="Container" parent="VBoxContainer/PreviewContainer"] -margin_right = 527.0 -margin_bottom = 318.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -script = ExtResource( 4 ) +script = ExtResource("4") tabs_visible = false -layout = SubResource( 2 ) +layout = SubResource("2") [node name="LayoutsHeader" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 358.0 -margin_right = 527.0 -margin_bottom = 372.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="VBoxContainer/LayoutsHeader"] -margin_right = 49.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Layouts" [node name="HSeparator" type="HSeparator" parent="VBoxContainer/LayoutsHeader"] -margin_left = 49.0 -margin_right = 527.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="LayoutInstruction" type="Label" parent="VBoxContainer"] -margin_top = 376.0 -margin_right = 527.0 -margin_bottom = 390.0 +layout_mode = 2 text = "Double click to set as new startup layout" -autowrap = true [node name="SavedLayouts" type="ItemList" parent="VBoxContainer"] -margin_top = 394.0 -margin_right = 527.0 -margin_bottom = 494.0 -rect_min_size = Vector2( 0, 100 ) +custom_minimum_size = Vector2(0, 100) +layout_mode = 2 [node name="ButtonsContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 498.0 -margin_right = 527.0 -margin_bottom = 518.0 +layout_mode = 2 [node name="AddLayout" type="Button" parent="VBoxContainer/ButtonsContainer"] -margin_right = 37.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 0 +mouse_default_cursor_shape = 2 text = "Add" [node name="EditLayout" type="Button" parent="VBoxContainer/ButtonsContainer"] -margin_left = 41.0 -margin_right = 77.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 0 +mouse_default_cursor_shape = 2 disabled = true text = "Edit" [node name="DeleteLayout" type="Button" parent="VBoxContainer/ButtonsContainer"] -margin_left = 81.0 -margin_right = 136.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 0 +mouse_default_cursor_shape = 2 disabled = true text = "Delete" [node name="LayoutSettings" type="ConfirmationDialog" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 180.0 -margin_bottom = 76.0 -rect_min_size = Vector2( 172, 60.2 ) -resizable = true [node name="LayoutName" type="LineEdit" parent="LayoutSettings"] +anchors_preset = 14 anchor_top = 0.5 anchor_right = 1.0 anchor_bottom = 0.5 -margin_left = 8.0 -margin_top = -26.0 -margin_right = -8.0 -margin_bottom = -2.0 +offset_left = 8.0 +offset_top = -26.0 +offset_right = -8.0 +offset_bottom = -2.0 size_flags_horizontal = 3 placeholder_text = "Insert name" [node name="DeleteConfirmation" type="ConfirmationDialog" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 305.0 -margin_bottom = 68.2 -rect_min_size = Vector2( 172, 60.2 ) dialog_text = "Are you sure you want to delete this layout?" -[connection signal="about_to_show" from="." to="." method="_on_ManageLayouts_about_to_show"] -[connection signal="popup_hide" from="." to="." method="_on_ManageLayouts_popup_hide"] +[connection signal="about_to_popup" from="." to="." method="_on_ManageLayouts_about_to_show"] +[connection signal="visibility_changed" from="." to="." method="_on_ManageLayouts_visibility_changed"] +[connection signal="empty_clicked" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_empty_clicked"] [connection signal="item_activated" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_item_activated"] [connection signal="item_selected" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_item_selected"] -[connection signal="nothing_selected" from="VBoxContainer/SavedLayouts" to="." method="_on_SavedLayouts_nothing_selected"] [connection signal="pressed" from="VBoxContainer/ButtonsContainer/AddLayout" to="." method="_on_AddLayout_pressed"] [connection signal="pressed" from="VBoxContainer/ButtonsContainer/EditLayout" to="." method="_on_EditLayout_pressed"] [connection signal="pressed" from="VBoxContainer/ButtonsContainer/DeleteLayout" to="." method="_on_DeleteLayout_pressed"] diff --git a/src/UI/Dialogs/OpenSprite.tscn b/src/UI/Dialogs/OpenSprite.tscn index 80d6977dee7..9fa9ee26ecc 100644 --- a/src/UI/Dialogs/OpenSprite.tscn +++ b/src/UI/Dialogs/OpenSprite.tscn @@ -1,10 +1,10 @@ -[gd_scene format=2] +[gd_scene format=3 uid="uid://b3aeqj2k58wdk"] [node name="OpenSprite" type="FileDialog"] -margin_right = 515.0 -margin_bottom = 348.0 -window_title = "Open a File" -resizable = true -mode = 0 +title = "Open File(s)" +size = Vector2i(558, 400) +exclusive = false +ok_button_text = "Open" +file_mode = 1 access = 2 -filters = PoolStringArray( "*.pxo ; Pixelorama Project", "*.png ; PNG Image", "*.bmp ; BMP Image", "*.hdr ; Radiance HDR Image", "*.jpg,*.jpeg ; JPEG Image", "*.svg ; SVG Image", "*.tga ; TGA Image", "*.webp ; WebP Image", "*.tres; Pixelorama palette", "*.gpl; GIMP palette", "*pal; Palette" ) +filters = PackedStringArray("*.pxo ; Pixelorama Project", "*.png ; PNG Image", "*.bmp ; BMP Image", "*.hdr ; Radiance HDR Image", "*.jpg,*.jpeg ; JPEG Image", "*.svg ; SVG Image", "*.tga ; TGA Image", "*.webp ; WebP Image", "*.tres; Pixelorama palette", "*.gpl; GIMP palette", "*pal; Palette") diff --git a/src/UI/Dialogs/PreviewDialog.gd b/src/UI/Dialogs/PreviewDialog.gd index 2b15fe463ac..2410fb43bd5 100644 --- a/src/UI/Dialogs/PreviewDialog.gd +++ b/src/UI/Dialogs/PreviewDialog.gd @@ -1,3 +1,4 @@ +class_name PreviewDialog extends ConfirmationDialog enum ImageImportOptions { @@ -16,38 +17,36 @@ enum BrushTypes { FILE, PROJECT, RANDOM } var path: String var image: Image -var current_import_option: int = ImageImportOptions.NEW_TAB -var smart_slice = false -var recycle_last_slice_result = false # should we recycle the current sliced_rects -var sliced_rects: Dictionary +var current_import_option := ImageImportOptions.NEW_TAB +var smart_slice := false +var recycle_last_slice_result := false # Should we recycle the current sliced_rects +var sliced_rects: RegionUnpacker.RectData var spritesheet_horizontal := 1 var spritesheet_vertical := 1 -var brush_type: int = BrushTypes.FILE -var opened_once = false -var is_master: bool = false -var hiding: bool = false -var _content_offset = rect_size - get_child(0).rect_size # A workaround for a pixelorama bug - -onready var texture_rect: TextureRect = $VBoxContainer/CenterContainer/TextureRect -onready var image_size_label: Label = $VBoxContainer/SizeContainer/ImageSizeLabel -onready var frame_size_label: Label = $VBoxContainer/SizeContainer/FrameSizeLabel -onready var smart_slice_checkbox = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartSlice -onready var merge_threshold = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart/Threshold -# gdlint: ignore=max-line-length -onready var merge_dist: TextureProgress = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart/MergeDist -# gdlint: ignore=max-line-length -onready var spritesheet_manual_tab_options = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual -onready var spritesheet_smart_tab_options = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart -onready var spritesheet_tab_options = spritesheet_smart_tab_options.get_parent() -onready var spritesheet_lay_opt = $VBoxContainer/HBoxContainer/SpritesheetLayerOptions -onready var new_frame_options = $VBoxContainer/HBoxContainer/NewFrameOptions -onready var replace_cel_options = $VBoxContainer/HBoxContainer/ReplaceCelOptions -onready var new_layer_options = $VBoxContainer/HBoxContainer/NewLayerOptions -onready var new_brush_options = $VBoxContainer/HBoxContainer/NewBrushOptions -onready var new_brush_name = $VBoxContainer/HBoxContainer/NewBrushOptions/BrushName - -onready var import_options: OptionButton = $VBoxContainer/HBoxContainer/ImportOption -onready var apply_all: CheckBox = $VBoxContainer/ApplyAll +var brush_type := BrushTypes.FILE +var opened_once := false +var is_main := false +var hiding := false + +@onready var texture_rect: TextureRect = $VBoxContainer/AspectRatioContainer/TextureRect +@onready var image_size_label: Label = $VBoxContainer/SizeContainer/ImageSizeLabel +@onready var frame_size_label: Label = $VBoxContainer/SizeContainer/FrameSizeLabel +@onready var smart_slice_checkbox := %SmartSliceButton as CheckBox +@onready var merge_threshold := %SmartOptions/Threshold as ValueSlider +@onready var merge_dist := %SmartOptions/MergeDist as ValueSlider +@onready +var spritesheet_manual_tab_options = $VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual +@onready var spritesheet_smart_tab_options := %SmartOptions as HBoxContainer +@onready var spritesheet_tab_options = $VBoxContainer/HBoxContainer/SpritesheetTabOptions +@onready var spritesheet_lay_opt = $VBoxContainer/HBoxContainer/SpritesheetLayerOptions +@onready var new_frame_options = $VBoxContainer/HBoxContainer/NewFrameOptions +@onready var replace_cel_options = $VBoxContainer/HBoxContainer/ReplaceCelOptions +@onready var new_layer_options = $VBoxContainer/HBoxContainer/NewLayerOptions +@onready var new_brush_options = $VBoxContainer/HBoxContainer/NewBrushOptions +@onready var new_brush_name = $VBoxContainer/HBoxContainer/NewBrushOptions/BrushName + +@onready var import_options: OptionButton = $VBoxContainer/HBoxContainer/ImportOption +@onready var apply_all: CheckBox = $VBoxContainer/ApplyAll func _on_PreviewDialog_about_to_show() -> void: @@ -68,10 +67,9 @@ func _on_PreviewDialog_about_to_show() -> void: # Select the option that the preview dialog before it had selected import_options.select(OpenSave.last_dialog_option) - import_options.emit_signal("item_selected", OpenSave.last_dialog_option) + import_options.item_selected.emit(OpenSave.last_dialog_option) - var img_texture := ImageTexture.new() - img_texture.create_from_image(image, 0) + var img_texture := ImageTexture.create_from_image(image) texture_rect.texture = img_texture spritesheet_manual_tab_options.get_node("HorizontalFrames").max_value = min( spritesheet_manual_tab_options.get_node("HorizontalFrames").max_value, image.get_size().x @@ -80,29 +78,23 @@ func _on_PreviewDialog_about_to_show() -> void: spritesheet_manual_tab_options.get_node("VerticalFrames").max_value, image.get_size().y ) image_size_label.text = ( - tr("Image Size") - + ": " - + str(image.get_size().x) - + "ร—" - + str(image.get_size().y) + tr("Image Size") + ": " + str(image.get_size().x) + "ร—" + str(image.get_size().y) ) frame_size_label.text = ( - tr("Frame Size") - + ": " - + str(image.get_size().x) - + "ร—" - + str(image.get_size().y) + tr("Frame Size") + ": " + str(image.get_size().x) + "ร—" + str(image.get_size().y) ) if OpenSave.preview_dialogs.size() > 1: apply_all.visible = true -func _on_PreviewDialog_popup_hide() -> void: - if hiding: # if the popup is hiding because of master +func _on_visibility_changed() -> void: + if visible: return - elif is_master: # if the master is closed then close others too + if hiding: # if the popup is hiding because of main + return + elif is_main: # if the main dialog is closed then close others too for child in Global.control.get_children(): - if "PreviewDialog" in child.name: + if child is PreviewDialog: OpenSave.preview_dialogs.erase(child) child.queue_free() else: # dialogs being closed separately @@ -115,12 +107,12 @@ func _on_PreviewDialog_popup_hide() -> void: func _on_PreviewDialog_confirmed() -> void: - if is_master: # if the master is confirmed then confirm others too - is_master = false + if is_main: # if the main dialog is confirmed then confirm others too + is_main = false synchronize() for child in Global.control.get_children(): - if "PreviewDialog" in child.name: - child.emit_signal("confirmed") + if child is PreviewDialog: + child.confirmed.emit() else: if current_import_option == ImageImportOptions.NEW_TAB: OpenSave.open_image_as_new_tab(path, image) @@ -130,7 +122,7 @@ func _on_PreviewDialog_confirmed() -> void: if !recycle_last_slice_result: obtain_sliced_data() OpenSave.open_image_as_spritesheet_tab_smart( - path, image, sliced_rects["rects"], sliced_rects["frame_size"] + path, image, sliced_rects.rects, sliced_rects.frame_size ) else: OpenSave.open_image_as_spritesheet_tab( @@ -174,7 +166,7 @@ func _on_PreviewDialog_confirmed() -> void: OpenSave.open_image_as_new_layer(image, path.get_basename().get_file(), frame_index) elif current_import_option == ImageImportOptions.NEW_REFERENCE_IMAGE: - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": OpenSave.import_reference_image_from_image(image) else: OpenSave.import_reference_image_from_path(path) @@ -193,20 +185,20 @@ func _on_PreviewDialog_confirmed() -> void: Global.patterns_popup.add(image, file_name) # Copy the image file into the "pixelorama/Patterns" directory - var location := "Patterns".plus_file(file_name_ext) - var dir = Directory.new() - dir.copy(path, Global.directory_module.xdg_data_home.plus_file(location)) + var location := "Patterns".path_join(file_name_ext) + var dir := DirAccess.open(path) + dir.copy(path, Global.home_data_directory.path_join(location)) -func _on_ApplyAll_toggled(pressed) -> void: - is_master = pressed +func _on_ApplyAll_toggled(pressed: bool) -> void: + is_main = pressed # below 4 (and the last) line is needed for correct popup placement - var old_rect = get_rect() - disconnect("popup_hide", self, "_on_PreviewDialog_popup_hide") + var old_rect := Rect2i(position, size) + visibility_changed.disconnect(_on_visibility_changed) hide() - connect("popup_hide", self, "_on_PreviewDialog_popup_hide") + visibility_changed.connect(_on_visibility_changed) for child in Global.control.get_children(): - if child != self and "PreviewDialog" in child.name: + if child != self and child is PreviewDialog: child.hiding = pressed if pressed: child.hide() @@ -218,12 +210,12 @@ func _on_ApplyAll_toggled(pressed) -> void: func synchronize() -> void: for child in Global.control.get_children(): - if child != self and "PreviewDialog" in child.name: - var dialog = child + if child != self and child is PreviewDialog: + var dialog := child as PreviewDialog #sync modes - var id = current_import_option + var id := current_import_option dialog.import_options.select(id) - dialog.import_options.emit_signal("item_selected", id) + dialog.import_options.item_selected.emit(id) #sync properties (if any) if ( @@ -239,40 +231,38 @@ func synchronize() -> void: image.get_size().y ) if id == ImageImportOptions.SPRITESHEET_LAYER: - dialog.spritesheet_lay_opt.get_node("AtFrameSpinbox").value = (spritesheet_lay_opt.get_node( - "AtFrameSpinbox" - ).value) + dialog.spritesheet_lay_opt.get_node("AtFrameSpinbox").value = ( + spritesheet_lay_opt.get_node("AtFrameSpinbox").value + ) elif id == ImageImportOptions.NEW_FRAME: - dialog.new_frame_options.get_node("AtLayerOption").selected = (new_frame_options.get_node( - "AtLayerOption" - ).selected) + dialog.new_frame_options.get_node("AtLayerOption").selected = ( + new_frame_options.get_node("AtLayerOption").selected + ) elif id == ImageImportOptions.REPLACE_CEL: - dialog.replace_cel_options.get_node("AtLayerOption").selected = (replace_cel_options.get_node( - "AtLayerOption" - ).selected) - dialog.replace_cel_options.get_node("AtFrameSpinbox").value = (replace_cel_options.get_node( - "AtFrameSpinbox" - ).value) + dialog.replace_cel_options.get_node("AtLayerOption").selected = ( + replace_cel_options.get_node("AtLayerOption").selected + ) + dialog.replace_cel_options.get_node("AtFrameSpinbox").value = ( + replace_cel_options.get_node("AtFrameSpinbox").value + ) elif id == ImageImportOptions.NEW_LAYER: - dialog.new_layer_options.get_node("AtFrameSpinbox").value = (new_layer_options.get_node( - "AtFrameSpinbox" - ).value) + dialog.new_layer_options.get_node("AtFrameSpinbox").value = ( + new_layer_options.get_node("AtFrameSpinbox").value + ) elif id == ImageImportOptions.BRUSH: var type = new_brush_options.get_node("BrushTypeOption").selected dialog.new_brush_options.get_node("BrushTypeOption").select(type) - dialog.new_brush_options.get_node("BrushTypeOption").emit_signal( - "item_selected", type - ) + dialog.new_brush_options.get_node("BrushTypeOption").item_selected.emit(type) -func _on_ImportOption_item_selected(id: int) -> void: +func _on_ImportOption_item_selected(id: ImageImportOptions) -> void: current_import_option = id OpenSave.last_dialog_option = current_import_option - smart_slice_checkbox.pressed = false + smart_slice_checkbox.button_pressed = false apply_all.disabled = false smart_slice = false smart_slice_checkbox.visible = false @@ -306,7 +296,7 @@ func _on_ImportOption_item_selected(id: int) -> void: var at_layer_option: OptionButton = new_frame_options.get_node("AtLayerOption") at_layer_option.clear() var layers := Global.current_project.layers.duplicate() - layers.invert() + layers.reverse() var i := 0 for l in layers: if not l is PixelLayer: @@ -321,7 +311,7 @@ func _on_ImportOption_item_selected(id: int) -> void: var at_layer_option: OptionButton = replace_cel_options.get_node("AtLayerOption") at_layer_option.clear() var layers := Global.current_project.layers.duplicate() - layers.invert() + layers.reverse() var i := 0 for l in layers: if not l is PixelLayer: @@ -335,56 +325,56 @@ func _on_ImportOption_item_selected(id: int) -> void: elif id == ImageImportOptions.NEW_LAYER: new_layer_options.visible = true - new_layer_options.get_node("AtFrameSpinbox").max_value = Global.current_project.frames.size() + new_layer_options.get_node("AtFrameSpinbox").max_value = ( + Global.current_project.frames.size() + ) elif id == ImageImportOptions.BRUSH: new_brush_options.visible = true + _call_queue_redraw() - rect_size = get_child(0).rect_size + _content_offset - update() - -func _on_SmartSlice_toggled(button_pressed: bool) -> void: +func _on_smart_slice_toggled(button_pressed: bool) -> void: setup_smart_slice(button_pressed) func setup_smart_slice(enabled: bool) -> void: spritesheet_smart_tab_options.visible = enabled spritesheet_manual_tab_options.visible = !enabled - if is_master: # disable apply all (the algorithm is not fast enough for this) - apply_all.pressed = false + if is_main: # Disable apply all (the algorithm is not fast enough for this) + apply_all.button_pressed = false apply_all.disabled = enabled smart_slice = enabled if !recycle_last_slice_result and enabled: slice_preview() - update() + _call_queue_redraw() func obtain_sliced_data() -> void: var unpak := RegionUnpacker.new(merge_threshold.value, merge_dist.value) - sliced_rects = unpak.get_used_rects(texture_rect.texture.get_data()) + sliced_rects = unpak.get_used_rects(texture_rect.texture.get_image()) func slice_preview(): - sliced_rects.clear() + sliced_rects = null obtain_sliced_data() recycle_last_slice_result = true - var size = sliced_rects["frame_size"] - frame_size_label.text = tr("Frame Size") + ": " + str(size.x) + "ร—" + str(size.y) + var frame_size := sliced_rects.frame_size + frame_size_label.text = tr("Frame Size") + ": " + str(frame_size.x) + "ร—" + str(frame_size.y) -func _on_Threshold_value_changed(_value: float) -> void: +func _on_threshold_value_changed(_value: float) -> void: recycle_last_slice_result = false -func _on_MergeDist_value_changed(_value: float) -> void: +func _on_merge_dist_value_changed(_value: float) -> void: recycle_last_slice_result = false -func _on_Slice_pressed() -> void: +func _on_slice_pressed() -> void: if !recycle_last_slice_result: slice_preview() - update() + _call_queue_redraw() func _on_HorizontalFrames_value_changed(value: int) -> void: @@ -398,13 +388,13 @@ func _on_VerticalFrames_value_changed(value: int) -> void: func spritesheet_frame_value_changed() -> void: - var frame_width = floor(image.get_size().x / spritesheet_horizontal) - var frame_height = floor(image.get_size().y / spritesheet_vertical) + var frame_width := floori(image.get_size().x / spritesheet_horizontal) + var frame_height := floori(image.get_size().y / spritesheet_vertical) frame_size_label.text = tr("Frame Size") + ": " + str(frame_width) + "ร—" + str(frame_height) - update() + _call_queue_redraw() -func _on_BrushTypeOption_item_selected(index: int) -> void: +func _on_BrushTypeOption_item_selected(index: BrushTypes) -> void: brush_type = index new_brush_name.visible = false if brush_type == BrushTypes.RANDOM: @@ -421,9 +411,9 @@ func add_brush() -> void: Brushes.add_file_brush([image], file_name) # Copy the image file into the "pixelorama/Brushes" directory - var location := "Brushes".plus_file(file_name_ext) - var dir = Directory.new() - dir.copy(path, Global.directory_module.xdg_data_home.plus_file(location)) + var location := "Brushes".path_join(file_name_ext) + var dir := DirAccess.open(path) + dir.copy(path, Global.home_data_directory.path_join(location)) elif brush_type == BrushTypes.PROJECT: var file_name: String = path.get_file().get_basename() @@ -434,12 +424,11 @@ func add_brush() -> void: var brush_name = new_brush_name.get_node("BrushNameLineEdit").text.to_lower() if !brush_name.is_valid_filename(): return - var dir := Directory.new() - dir.open(Global.directory_module.xdg_data_home.plus_file("Brushes")) + var dir := DirAccess.open(Global.home_data_directory.path_join("Brushes")) if !dir.dir_exists(brush_name): dir.make_dir(brush_name) - dir.open(Global.directory_module.xdg_data_home.plus_file("Brushes").plus_file(brush_name)) + dir = DirAccess.open(Global.home_data_directory.path_join("Brushes").path_join(brush_name)) var random_brushes := [] dir.list_dir_begin() var curr_file := dir.get_next() @@ -449,43 +438,43 @@ func add_brush() -> void: curr_file = dir.get_next() dir.list_dir_end() - var file_ext: String = path.get_file().get_extension() - var index: int = random_brushes.size() + 1 + var file_ext := path.get_file().get_extension() + var index := random_brushes.size() + 1 var file_name = "~" + brush_name + str(index) + "." + file_ext - var location := "Brushes".plus_file(brush_name).plus_file(file_name) - dir.copy(path, Global.directory_module.xdg_data_home.plus_file(location)) + var location := "Brushes".path_join(brush_name).path_join(file_name) + dir.copy(path, Global.home_data_directory.path_join(location)) -# Checks if the file already exists -# If it does, add a number to its name, for example -# "Brush_Name" will become "Brush_Name (2)", "Brush_Name (3)", etc. -func file_name_replace(name: String, folder: String) -> String: +## Checks if the file already exists +## If it does, add a number to its name, for example +## "Brush_Name" will become "Brush_Name (2)", "Brush_Name (3)", etc. +func file_name_replace(file_name: String, folder: String) -> String: var i := 1 - var file_ext = name.get_extension() - var temp_name := name - var dir := Directory.new() - dir.open(Global.directory_module.xdg_data_home.plus_file(folder)) + var file_ext := file_name.get_extension() + var temp_name := file_name + var dir := DirAccess.open(Global.home_data_directory.path_join(folder)) while dir.file_exists(temp_name): i += 1 - temp_name = name.get_basename() + " (%s)" % i + temp_name = file_name.get_basename() + " (%s)" % i temp_name += "." + file_ext - name = temp_name - return name - - -func _on_PreviewDialog_item_rect_changed() -> void: - update() + file_name = temp_name + return file_name -func _draw() -> void: - $"%SmartSlice".show_preview([]) +func _call_queue_redraw() -> void: + var empty_array: Array[Rect2i] = [] + $"%SmartSlice".show_preview(empty_array) $"%RowColumnLines".show_preview(1, 1) if ( current_import_option == ImageImportOptions.SPRITESHEET_TAB or current_import_option == ImageImportOptions.SPRITESHEET_LAYER ): if smart_slice: - if "rects" in sliced_rects.keys(): - $"%SmartSlice".show_preview(sliced_rects["rects"]) + if is_instance_valid(sliced_rects) and not sliced_rects.rects.is_empty(): + $"%SmartSlice".show_preview(sliced_rects.rects) else: $"%RowColumnLines".show_preview(spritesheet_vertical, spritesheet_horizontal) + + +func _on_size_changed() -> void: + _call_queue_redraw() diff --git a/src/UI/Dialogs/PreviewDialog.tscn b/src/UI/Dialogs/PreviewDialog.tscn index 2f900ea16d9..6c2979960f0 100644 --- a/src/UI/Dialogs/PreviewDialog.tscn +++ b/src/UI/Dialogs/PreviewDialog.tscn @@ -1,265 +1,219 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=5 format=3 uid="uid://nba3nryom3ud"] -[ext_resource path="res://src/UI/Dialogs/PreviewDialog.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd" type="Script" id=3] -[ext_resource path="res://src/UI/Dialogs/HelperScripts/RowColumnLines.gd" type="Script" id=4] +[ext_resource type="Script" path="res://src/UI/Dialogs/PreviewDialog.gd" id="1"] +[ext_resource type="Script" path="res://src/UI/Dialogs/HelperScripts/RowColumnLines.gd" id="2_fni44"] +[ext_resource type="Script" path="res://src/UI/Dialogs/HelperScripts/SmartSlicePreview.gd" id="3_lsglt"] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="4_e0gk1"] [node name="PreviewDialog" type="ConfirmationDialog"] -margin_right = 629.0 -margin_bottom = 513.0 -rect_min_size = Vector2( 550, 70 ) -popup_exclusive = true -window_title = "Import Options" -resizable = true -script = ExtResource( 1 ) +size = Vector2i(316, 417) +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 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="CenterContainer" type="AspectRatioContainer" parent="VBoxContainer"] -margin_right = 613.0 -margin_bottom = 395.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -49.0 + +[node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"] +layout_mode = 2 size_flags_vertical = 3 -[node name="TextureRect" type="TextureRect" parent="VBoxContainer/CenterContainer"] -margin_left = 109.0 -margin_right = 504.0 -margin_bottom = 395.0 -rect_min_size = Vector2( 300, 300 ) -expand = true -stretch_mode = 6 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="RowColumnLines" type="Control" parent="VBoxContainer/CenterContainer/TextureRect"] +[node name="TextureRect" type="TextureRect" parent="VBoxContainer/AspectRatioContainer"] +custom_minimum_size = Vector2(300, 300) +layout_mode = 2 +expand_mode = 1 +stretch_mode = 5 + +[node name="RowColumnLines" type="Control" parent="VBoxContainer/AspectRatioContainer/TextureRect"] unique_name_in_owner = true -script = ExtResource( 4 ) +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 40.0 +script = ExtResource("2_fni44") -[node name="SmartSlice" type="Control" parent="VBoxContainer/CenterContainer/TextureRect"] +[node name="SmartSlice" type="Control" parent="VBoxContainer/AspectRatioContainer/TextureRect"] unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -script = ExtResource( 3 ) +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("3_lsglt") [node name="ApplyAll" type="CheckBox" parent="VBoxContainer"] visible = false -margin_top = 304.0 -margin_right = 534.0 -margin_bottom = 324.0 +layout_mode = 2 text = "Apply to all" [node name="SizeContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 399.0 -margin_right = 613.0 -margin_bottom = 413.0 -custom_constants/separation = 32 +layout_mode = 2 +theme_override_constants/separation = 32 [node name="ImageSizeLabel" type="Label" parent="VBoxContainer/SizeContainer"] -margin_right = 118.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Image Size: 64ร—64" [node name="FrameSizeLabel" type="Label" parent="VBoxContainer/SizeContainer"] visible = false -margin_left = 149.0 -margin_right = 266.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Frame size: 64ร—64" [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 417.0 -margin_right = 613.0 -margin_bottom = 469.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] -margin_right = 66.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_vertical = 0 text = "Import as:" [node name="ImportOption" type="OptionButton" parent="VBoxContainer/HBoxContainer"] -margin_left = 70.0 -margin_right = 151.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_vertical = 0 -text = "New tab" +mouse_default_cursor_shape = 2 [node name="SpritesheetTabOptions" type="GridContainer" parent="VBoxContainer/HBoxContainer"] -margin_left = 155.0 -margin_right = 613.0 -margin_bottom = 52.0 -rect_min_size = Vector2( 380, 0 ) +visible = false +layout_mode = 2 size_flags_horizontal = 3 [node name="Manual" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions"] -margin_right = 378.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual"] -margin_top = 5.0 -margin_right = 118.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Horizontal frames:" [node name="HorizontalFrames" type="SpinBox" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual"] -margin_left = 122.0 -margin_right = 196.0 -margin_bottom = 24.0 +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = 1.0 value = 1.0 [node name="Label2" type="Label" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual"] -margin_left = 200.0 -margin_top = 5.0 -margin_right = 300.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Vertical frames:" [node name="VerticalFrames" type="SpinBox" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual"] -margin_left = 304.0 -margin_right = 378.0 -margin_bottom = 24.0 +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = 1.0 value = 1.0 -[node name="Smart" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions"] +[node name="SmartOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions"] +unique_name_in_owner = true visible = false -margin_top = 28.0 -margin_right = 458.0 -margin_bottom = 52.0 +layout_mode = 2 size_flags_horizontal = 3 -[node name="Threshold" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart" instance=ExtResource( 2 )] -margin_right = 195.0 -hint_tooltip = "Images that have any one side smaller than this value will cross the threshold" -min_value = 1.0 +[node name="Threshold" type="TextureProgressBar" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions"] +layout_mode = 2 +size_flags_horizontal = 3 +tooltip_text = "Images that have any one side smaller than this value will cross the threshold" +focus_mode = 2 +theme_type_variation = &"ValueSlider" value = 10.0 allow_greater = true +nine_patch_stretch = true +stretch_margin_left = 3 +stretch_margin_top = 3 +stretch_margin_right = 3 +stretch_margin_bottom = 3 +script = ExtResource("4_e0gk1") prefix = "Threshold:" suffix = "px" -[node name="MergeDist" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart" instance=ExtResource( 2 )] -margin_left = 199.0 -margin_right = 394.0 -hint_tooltip = "Images which crossed the threshold will get merged into a larger image, if they are within this distance" +[node name="MergeDist" type="TextureProgressBar" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions"] +layout_mode = 2 +size_flags_horizontal = 3 +tooltip_text = "Images which crossed the threshold will get merged into a larger image, if they are within this distance" +focus_mode = 2 +theme_type_variation = &"ValueSlider" value = 3.0 +nine_patch_stretch = true +stretch_margin_left = 3 +stretch_margin_top = 3 +stretch_margin_right = 3 +stretch_margin_bottom = 3 +script = ExtResource("4_e0gk1") prefix = "Merge distance:" suffix = "px" -[node name="Slice" type="Button" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart"] -margin_left = 398.0 -margin_right = 458.0 -margin_bottom = 24.0 +[node name="Slice" type="Button" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions"] +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Refresh" -[node name="SmartSlice" type="CheckBox" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions"] -margin_top = 28.0 -margin_right = 378.0 -margin_bottom = 52.0 +[node name="SmartSliceButton" type="CheckBox" parent="VBoxContainer/HBoxContainer/SpritesheetTabOptions"] +unique_name_in_owner = true +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Smart Slice" [node name="SpritesheetLayerOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"] visible = false -margin_left = 155.0 -margin_right = 307.0 -margin_bottom = 24.0 -size_flags_vertical = 0 +layout_mode = 2 [node name="Label3" type="Label" parent="VBoxContainer/HBoxContainer/SpritesheetLayerOptions"] -margin_top = 5.0 -margin_right = 74.0 -margin_bottom = 19.0 +layout_mode = 2 +size_flags_vertical = 0 text = "Start frame:" [node name="AtFrameSpinbox" type="SpinBox" parent="VBoxContainer/HBoxContainer/SpritesheetLayerOptions"] -margin_left = 78.0 -margin_right = 152.0 -margin_bottom = 24.0 +layout_mode = 2 +size_flags_vertical = 0 min_value = 1.0 value = 1.0 [node name="NewFrameOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"] visible = false -margin_left = 155.0 -margin_right = 286.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/NewFrameOptions"] -margin_top = 5.0 -margin_right = 53.0 -margin_bottom = 19.0 +layout_mode = 2 text = "At layer:" [node name="AtLayerOption" type="OptionButton" parent="VBoxContainer/HBoxContainer/NewFrameOptions"] -margin_left = 57.0 -margin_right = 86.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -align = 2 [node name="ReplaceCelOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"] visible = false -margin_left = 155.0 -margin_right = 427.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/ReplaceCelOptions"] -margin_top = 5.0 -margin_right = 53.0 -margin_bottom = 19.0 +layout_mode = 2 text = "At layer:" [node name="AtLayerOption" type="OptionButton" parent="VBoxContainer/HBoxContainer/ReplaceCelOptions"] -margin_left = 57.0 -margin_right = 86.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -align = 2 [node name="Label2" type="Label" parent="VBoxContainer/HBoxContainer/ReplaceCelOptions"] -margin_left = 135.0 -margin_top = 5.0 -margin_right = 194.0 -margin_bottom = 19.0 +layout_mode = 2 text = "At frame:" [node name="AtFrameSpinbox" type="SpinBox" parent="VBoxContainer/HBoxContainer/ReplaceCelOptions"] -margin_left = 198.0 -margin_right = 272.0 -margin_bottom = 24.0 +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = 1.0 -max_value = 0.0 +max_value = 1.0 value = 1.0 [node name="NewLayerOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"] visible = false -margin_left = 155.0 -margin_right = 292.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/NewLayerOptions"] -margin_top = 5.0 -margin_right = 59.0 -margin_bottom = 19.0 +layout_mode = 2 text = "At frame:" [node name="AtFrameSpinbox" type="SpinBox" parent="VBoxContainer/HBoxContainer/NewLayerOptions"] -margin_left = 63.0 -margin_right = 137.0 -margin_bottom = 24.0 +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 1.0 @@ -267,52 +221,45 @@ value = 1.0 [node name="NewBrushOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"] visible = false -margin_left = 155.0 -margin_right = 324.0 -margin_bottom = 20.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/NewBrushOptions"] -margin_top = 3.0 -margin_right = 73.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Brush type:" [node name="BrushTypeOption" type="OptionButton" parent="VBoxContainer/HBoxContainer/NewBrushOptions"] -margin_left = 77.0 -margin_right = 169.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "File brush" -items = [ "File brush", null, false, 0, null, "Project brush", null, false, 1, null, "Random brush", null, false, 2, null ] +item_count = 3 selected = 0 +popup/item_0/text = "File brush" +popup/item_0/id = 0 +popup/item_1/text = "Project brush" +popup/item_1/id = 1 +popup/item_2/text = "Random brush" +popup/item_2/id = 2 [node name="BrushName" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/NewBrushOptions"] visible = false -margin_left = 173.0 -margin_right = 316.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/NewBrushOptions/BrushName"] -margin_top = 5.0 -margin_right = 81.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Brush name:" [node name="BrushNameLineEdit" type="LineEdit" parent="VBoxContainer/HBoxContainer/NewBrushOptions/BrushName"] -margin_left = 85.0 -margin_right = 143.0 -margin_bottom = 24.0 +layout_mode = 2 -[connection signal="about_to_show" from="." to="." method="_on_PreviewDialog_about_to_show"] +[connection signal="about_to_popup" from="." to="." method="_on_PreviewDialog_about_to_show"] [connection signal="confirmed" from="." to="." method="_on_PreviewDialog_confirmed"] -[connection signal="item_rect_changed" from="." to="." method="_on_PreviewDialog_item_rect_changed"] -[connection signal="popup_hide" from="." to="." method="_on_PreviewDialog_popup_hide"] +[connection signal="size_changed" from="." to="." method="_on_size_changed"] +[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"] [connection signal="toggled" from="VBoxContainer/ApplyAll" to="." method="_on_ApplyAll_toggled"] [connection signal="item_selected" from="VBoxContainer/HBoxContainer/ImportOption" to="." method="_on_ImportOption_item_selected"] [connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual/HorizontalFrames" to="." method="_on_HorizontalFrames_value_changed"] [connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Manual/VerticalFrames" to="." method="_on_VerticalFrames_value_changed"] -[connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart/Threshold" to="." method="_on_Threshold_value_changed"] -[connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart/MergeDist" to="." method="_on_MergeDist_value_changed"] -[connection signal="pressed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/Smart/Slice" to="." method="_on_Slice_pressed"] -[connection signal="toggled" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartSlice" to="." method="_on_SmartSlice_toggled"] +[connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions/Threshold" to="." method="_on_threshold_value_changed"] +[connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions/MergeDist" to="." method="_on_merge_dist_value_changed"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartOptions/Slice" to="." method="_on_slice_pressed"] +[connection signal="toggled" from="VBoxContainer/HBoxContainer/SpritesheetTabOptions/SmartSliceButton" to="." method="_on_smart_slice_toggled"] [connection signal="item_selected" from="VBoxContainer/HBoxContainer/NewBrushOptions/BrushTypeOption" to="." method="_on_BrushTypeOption_item_selected"] diff --git a/src/UI/Dialogs/SaveSprite.tscn b/src/UI/Dialogs/SaveSprite.tscn index 7e8486ae5c6..a50dbeb5d84 100644 --- a/src/UI/Dialogs/SaveSprite.tscn +++ b/src/UI/Dialogs/SaveSprite.tscn @@ -1,17 +1,7 @@ -[gd_scene format=2] +[gd_scene format=3 uid="uid://d4euwo633u33b"] [node name="SaveSprite" type="FileDialog"] -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -margin_left = -512.0 -margin_top = -300.0 -margin_right = 3.0 -margin_bottom = 48.0 -resizable = true +size = Vector2i(675, 400) +exclusive = false access = 2 -filters = PoolStringArray( "*.pxo ; Pixelorama Project" ) -current_dir = "/Users" -current_file = "untitled" -current_path = "/Users/untitled" +filters = PackedStringArray("*.pxo ; Pixelorama Project") diff --git a/src/UI/Dialogs/SaveSpriteHTML5.tscn b/src/UI/Dialogs/SaveSpriteHTML5.tscn index fd97340c49c..da89a9c1503 100644 --- a/src/UI/Dialogs/SaveSpriteHTML5.tscn +++ b/src/UI/Dialogs/SaveSpriteHTML5.tscn @@ -1,36 +1,22 @@ -[gd_scene format=2] +[gd_scene format=3 uid="uid://cltlo2whtiejd"] [node name="SaveSpriteHTML5" type="ConfirmationDialog"] -margin_right = 200.0 -margin_bottom = 70.0 +exclusive = false [node name="FileNameContainer" type="HBoxContainer" parent="."] +anchors_preset = 10 anchor_right = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = 34.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = 34.0 [node name="FileNameLabel" type="Label" parent="FileNameContainer"] -margin_top = 6.0 -margin_right = 69.0 -margin_bottom = 20.0 +layout_mode = 2 text = "File Name:" -__meta__ = { -"_edit_use_anchors_": false -} [node name="FileNameLineEdit" type="LineEdit" parent="FileNameContainer"] -margin_left = 73.0 -margin_top = 1.0 -margin_right = 184.0 -margin_bottom = 25.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 4 text = "untitled" -__meta__ = { -"_edit_use_anchors_": false -} diff --git a/src/UI/Dialogs/SplashDialog.gd b/src/UI/Dialogs/SplashDialog.gd index 0ab8937f439..015d9ce658b 100644 --- a/src/UI/Dialogs/SplashDialog.gd +++ b/src/UI/Dialogs/SplashDialog.gd @@ -5,52 +5,50 @@ var artworks := [ "Roroto Sic", preload("res://assets/graphics/splash_screen/artworks/roroto.png"), "https://linktr.ee/Roroto_Sic", - Color.white + Color.WHITE ], [ # Licensed under CC BY-NC-SA 4.0, https://creativecommons.org/licenses/by-nc-sa/4.0/ "Exuvita", preload("res://assets/graphics/splash_screen/artworks/exuvita.png"), "", - Color.black + Color.BLACK ], [ # Licensed under CC BY-NC-SA 4.0, https://creativecommons.org/licenses/by-nc-sa/4.0/ "Uch", preload("res://assets/graphics/splash_screen/artworks/uch.png"), "https://www.instagram.com/vs.pxl/", - Color.black + Color.BLACK ], [ # Licensed under CC BY-NC-SA 4.0, https://creativecommons.org/licenses/by-nc-sa/4.0/ "Wishdream", preload("res://assets/graphics/splash_screen/artworks/wishdream.png"), "https://twitter.com/WishdreamStar", - Color.black + Color.BLACK ], ] var chosen_artwork: int -var splash_art_texturerect: TextureRect -var art_by_label: Button - -onready var version_text: TextureRect = find_node("VersionText") +@onready var art_by_label := %ArtistName as Button +@onready var splash_art_texturerect := %SplashArt as TextureRect +@onready var version_text := %VersionText as TextureRect func _ready() -> void: - get_ok().visible = false + get_ok_button().visible = false func _on_SplashDialog_about_to_show() -> void: - splash_art_texturerect = find_node("SplashArt") - art_by_label = find_node("ArtistName") - var show_on_startup_button: CheckBox = find_node("ShowOnStartup") - + var show_on_startup_button: CheckBox = find_child("ShowOnStartup") if Global.config_cache.has_section_key("preferences", "startup"): - show_on_startup_button.pressed = !Global.config_cache.get_value("preferences", "startup") - window_title = "Pixelorama" + " " + Global.current_version + show_on_startup_button.button_pressed = !Global.config_cache.get_value( + "preferences", "startup" + ) + title = "Pixelorama" + " " + Global.current_version chosen_artwork = randi() % artworks.size() change_artwork(0) - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": $Contents/ButtonsPatronsLogos/Buttons/OpenLastBtn.visible = false @@ -63,7 +61,7 @@ func change_artwork(direction: int) -> void: splash_art_texturerect.texture = artworks[chosen_artwork][1] art_by_label.text = tr("Art by: %s") % artworks[chosen_artwork][0] - art_by_label.hint_tooltip = artworks[chosen_artwork][2] + art_by_label.tooltip_text = artworks[chosen_artwork][2] version_text.modulate = artworks[chosen_artwork][3] diff --git a/src/UI/Dialogs/SplashDialog.tscn b/src/UI/Dialogs/SplashDialog.tscn index c1a436ad139..3341115a483 100644 --- a/src/UI/Dialogs/SplashDialog.tscn +++ b/src/UI/Dialogs/SplashDialog.tscn @@ -1,329 +1,264 @@ -[gd_scene load_steps=14 format=2] +[gd_scene load_steps=14 format=3 uid="uid://bnpb1aip3wdvw"] -[ext_resource path="res://src/UI/Dialogs/SplashDialog.gd" type="Script" id=1] -[ext_resource path="res://assets/graphics/splash_screen/artworks/wishdream.png" type="Texture" id=2] -[ext_resource path="res://assets/graphics/timeline/move_arrow.png" type="Texture" id=3] -[ext_resource path="res://assets/graphics/icons/icon.png" type="Texture" id=4] -[ext_resource path="res://assets/graphics/splash_screen/version.png" type="Texture" id=5] -[ext_resource path="res://assets/fonts/Roboto-Small.tres" type="DynamicFont" id=7] -[ext_resource path="res://assets/graphics/splash_screen/discord.png" type="Texture" id=9] -[ext_resource path="res://assets/graphics/splash_screen/github_32px.png" type="Texture" id=10] -[ext_resource path="res://assets/graphics/splash_screen/patreon_mark_white.png" type="Texture" id=11] +[ext_resource type="Script" path="res://src/UI/Dialogs/SplashDialog.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://b5adjms3vxj13" path="res://assets/graphics/splash_screen/artworks/wishdream.png" id="2"] +[ext_resource type="Texture2D" uid="uid://d1oxrkwndy5fi" path="res://assets/graphics/timeline/move_arrow.png" id="3"] +[ext_resource type="Texture2D" uid="uid://b47r0c6auaqk6" path="res://assets/graphics/icons/icon.png" id="4"] +[ext_resource type="Texture2D" uid="uid://dywk5yd41twch" path="res://assets/graphics/splash_screen/version.png" id="5"] +[ext_resource type="Texture2D" uid="uid://du0tqirgve32c" path="res://assets/graphics/splash_screen/discord.png" id="9"] +[ext_resource type="Texture2D" uid="uid://bnhuqq1ucdlw2" path="res://assets/graphics/splash_screen/github_32px.png" id="10"] +[ext_resource type="Texture2D" uid="uid://c587jfnyu84ro" path="res://assets/graphics/splash_screen/patreon_mark_white.png" id="11"] -[sub_resource type="StyleBoxFlat" id=4] -bg_color = Color( 0.6, 0.6, 0.6, 0 ) +[sub_resource type="StyleBoxFlat" id="2"] +bg_color = Color(1, 1, 1, 0) -[sub_resource type="StyleBoxFlat" id=5] -bg_color = Color( 0.6, 0.6, 0.6, 0 ) +[sub_resource type="StyleBoxFlat" id="4"] +bg_color = Color(0.6, 0.6, 0.6, 0) -[sub_resource type="StyleBoxFlat" id=2] -bg_color = Color( 1, 1, 1, 0 ) +[sub_resource type="StyleBoxFlat" id="5"] +bg_color = Color(0.6, 0.6, 0.6, 0) -[sub_resource type="StyleBoxFlat" id=3] -bg_color = Color( 0.6, 0.6, 0.6, 0 ) +[sub_resource type="StyleBoxFlat" id="3"] +bg_color = Color(0.6, 0.6, 0.6, 0) + +[sub_resource type="LabelSettings" id="LabelSettings_32icc"] +font_size = 12 [node name="SplashDialog" type="AcceptDialog"] -margin_right = 656.0 -margin_bottom = 611.0 -resizable = true -script = ExtResource( 1 ) +canvas_item_default_texture_filter = 0 +position = Vector2i(0, 36) +size = Vector2i(602, 650) +exclusive = false +script = ExtResource("1") [node name="Contents" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -36.0 -custom_constants/separation = 8 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -49.0 +theme_override_constants/separation = 8 [node name="SplashArt" type="TextureRect" parent="Contents"] -margin_right = 640.0 -margin_bottom = 406.0 +unique_name_in_owner = true +layout_mode = 2 size_flags_vertical = 3 -texture = ExtResource( 2 ) -expand = true -stretch_mode = 7 +texture = ExtResource("2") +expand_mode = 1 +stretch_mode = 5 [node name="ChangeArtBtnLeft" type="Button" parent="Contents/SplashArt" groups=["UIButtons"]] +layout_mode = 0 anchor_top = 0.5 anchor_bottom = 0.5 -margin_left = 5.0 -margin_top = -10.0 -margin_right = 30.0 -margin_bottom = 10.0 +offset_left = 5.0 +offset_top = -10.0 +offset_right = 30.0 +offset_bottom = 10.0 mouse_default_cursor_shape = 2 -custom_styles/hover = SubResource( 4 ) -custom_styles/pressed = SubResource( 5 ) -custom_styles/focus = SubResource( 5 ) -custom_styles/normal = SubResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} +theme_override_styles/normal = SubResource("2") +theme_override_styles/hover = SubResource("4") +theme_override_styles/pressed = SubResource("5") +theme_override_styles/focus = SubResource("5") [node name="TextureRect" type="TextureRect" parent="Contents/SplashArt/ChangeArtBtnLeft"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -10.0 -margin_top = -7.0 -margin_right = 10.0 -margin_bottom = 7.0 -texture = ExtResource( 3 ) -expand = true +offset_left = -10.0 +offset_top = -7.0 +offset_right = 10.0 +offset_bottom = 7.0 +texture = ExtResource("3") +expand_mode = 1 flip_h = true -__meta__ = { -"_edit_use_anchors_": false -} [node name="ChangeArtBtnRight" type="Button" parent="Contents/SplashArt" groups=["UIButtons"]] +layout_mode = 0 anchor_left = 1.0 anchor_top = 0.5 anchor_right = 1.0 anchor_bottom = 0.5 -margin_left = -30.0 -margin_top = -10.0 -margin_right = -5.0 -margin_bottom = 10.0 +offset_left = -30.0 +offset_top = -10.0 +offset_right = -5.0 +offset_bottom = 10.0 mouse_default_cursor_shape = 2 -custom_styles/hover = SubResource( 5 ) -custom_styles/pressed = SubResource( 5 ) -custom_styles/focus = SubResource( 5 ) -custom_styles/normal = SubResource( 3 ) -__meta__ = { -"_edit_use_anchors_": false -} +theme_override_styles/normal = SubResource("3") +theme_override_styles/hover = SubResource("5") +theme_override_styles/pressed = SubResource("5") +theme_override_styles/focus = SubResource("5") [node name="TextureRect" type="TextureRect" parent="Contents/SplashArt/ChangeArtBtnRight"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -10.0 -margin_top = -7.0 -margin_right = 10.0 -margin_bottom = 7.0 -texture = ExtResource( 3 ) -expand = true -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -10.0 +offset_top = -7.0 +offset_right = 10.0 +offset_bottom = 7.0 +texture = ExtResource("3") +expand_mode = 1 [node name="Overlay" type="HBoxContainer" parent="Contents/SplashArt"] -margin_left = 16.0 -margin_top = 16.0 -margin_right = 128.0 -margin_bottom = 40.0 +layout_mode = 0 +offset_left = 16.0 +offset_top = 16.0 +offset_right = 128.0 +offset_bottom = 40.0 [node name="PixeloramaIcon" type="TextureRect" parent="Contents/SplashArt/Overlay"] -margin_right = 24.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 24, 24 ) +custom_minimum_size = Vector2(24, 24) +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 4 ) -expand = true +texture = ExtResource("4") +expand_mode = 1 [node name="VersionText" type="TextureRect" parent="Contents/SplashArt/Overlay"] -margin_left = 28.0 -margin_top = 6.0 -margin_right = 112.0 -margin_bottom = 18.0 -rect_min_size = Vector2( 84, 12 ) +unique_name_in_owner = true +custom_minimum_size = Vector2(84, 12) +layout_mode = 2 size_flags_vertical = 4 -texture = ExtResource( 5 ) -expand = true +texture = ExtResource("5") +expand_mode = 1 [node name="ArtBy" type="HBoxContainer" parent="Contents"] -margin_top = 414.0 -margin_right = 640.0 -margin_bottom = 434.0 -grow_horizontal = 0 -custom_constants/separation = 0 -__meta__ = { -"_edit_use_anchors_": false -} +layout_mode = 2 +theme_override_constants/separation = 0 [node name="SpacerControl" type="Control" parent="Contents/ArtBy"] -margin_right = 4.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 4, 0 ) +custom_minimum_size = Vector2(4, 0) +layout_mode = 2 [node name="ArtistName" type="Button" parent="Contents/ArtBy"] -margin_left = 4.0 -margin_right = 81.0 -margin_bottom = 20.0 -hint_tooltip = "https://twitter.com/WishdreamStar" +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "https://twitter.com/WishdreamStar" mouse_default_cursor_shape = 2 text = "Art by: %s" flat = true [node name="ButtonsPatronsLogos" type="HBoxContainer" parent="Contents"] -margin_top = 442.0 -margin_right = 640.0 -margin_bottom = 546.0 +layout_mode = 2 [node name="SpacerControl" type="Control" parent="Contents/ButtonsPatronsLogos"] -margin_right = 4.0 -margin_bottom = 104.0 -rect_min_size = Vector2( 4, 0 ) +custom_minimum_size = Vector2(4, 0) +layout_mode = 2 [node name="Buttons" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos"] -margin_left = 8.0 -margin_right = 298.0 -margin_bottom = 80.0 -rect_min_size = Vector2( 290, 0 ) +custom_minimum_size = Vector2(290, 0) +layout_mode = 2 size_flags_vertical = 0 -custom_constants/separation = 10 +theme_override_constants/separation = 10 [node name="NewBtn" type="Button" parent="Contents/ButtonsPatronsLogos/Buttons"] -margin_right = 290.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "New" [node name="OpenBtn" type="Button" parent="Contents/ButtonsPatronsLogos/Buttons"] -margin_top = 30.0 -margin_right = 290.0 -margin_bottom = 50.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Open" [node name="OpenLastBtn" type="Button" parent="Contents/ButtonsPatronsLogos/Buttons"] -margin_top = 60.0 -margin_right = 290.0 -margin_bottom = 80.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Open Last Project" [node name="Info" type="HBoxContainer" parent="Contents/ButtonsPatronsLogos"] -margin_left = 302.0 -margin_right = 640.0 -margin_bottom = 104.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -__meta__ = { -"_edit_use_anchors_": false -} [node name="SpacerControl" type="Control" parent="Contents/ButtonsPatronsLogos/Info"] -margin_right = 6.0 -margin_bottom = 104.0 -rect_min_size = Vector2( 6, 0 ) -__meta__ = { -"_edit_use_anchors_": false -} +custom_minimum_size = Vector2(6, 0) +layout_mode = 2 [node name="PatronContainer" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos/Info"] -margin_left = 10.0 -margin_right = 294.0 -margin_bottom = 104.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="PatronsLabel" type="Label" parent="Contents/ButtonsPatronsLogos/Info/PatronContainer"] -margin_right = 284.0 -margin_bottom = 14.0 -rect_min_size = Vector2( 230, 0 ) +custom_minimum_size = Vector2(230, 0) +layout_mode = 2 size_flags_vertical = 8 text = "Patrons:" -autowrap = true [node name="PatronsLabel2" type="Label" parent="Contents/ButtonsPatronsLogos/Info/PatronContainer"] -margin_top = 18.0 -margin_right = 284.0 -margin_bottom = 100.0 -rect_min_size = Vector2( 230, 0 ) +custom_minimum_size = Vector2(230, 0) +layout_mode = 2 size_flags_vertical = 8 text = "ShikadiGum Hugo Locurcio Sean Allen Tassos Kyriakopoulos David Snopek" -autowrap = true [node name="VBoxContainer" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos/Info"] -margin_left = 298.0 -margin_right = 330.0 -margin_bottom = 104.0 +layout_mode = 2 size_flags_vertical = 3 -custom_constants/separation = 5 +theme_override_constants/separation = 5 alignment = 2 [node name="Branding" type="HBoxContainer" parent="Contents/ButtonsPatronsLogos/Info/VBoxContainer"] -margin_right = 32.0 -margin_bottom = 104.0 +layout_mode = 2 size_flags_vertical = 3 alignment = 2 [node name="Links" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding"] -margin_right = 32.0 -margin_bottom = 104.0 +layout_mode = 2 [node name="GithubButton" type="TextureButton" parent="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding/Links"] -margin_right = 32.0 -margin_bottom = 32.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -texture_normal = ExtResource( 10 ) +texture_normal = ExtResource("10") [node name="DiscordButton" type="TextureButton" parent="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding/Links"] -margin_top = 36.0 -margin_right = 32.0 -margin_bottom = 68.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -texture_normal = ExtResource( 9 ) +texture_normal = ExtResource("9") [node name="PatreonButton" type="TextureButton" parent="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding/Links"] -margin_top = 72.0 -margin_right = 32.0 -margin_bottom = 104.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -texture_normal = ExtResource( 11 ) +texture_normal = ExtResource("11") [node name="EmptySpacer" type="Control" parent="Contents/ButtonsPatronsLogos/Info"] -margin_left = 334.0 -margin_right = 338.0 -margin_bottom = 104.0 -rect_min_size = Vector2( 4, 0 ) +custom_minimum_size = Vector2(4, 0) +layout_mode = 2 [node name="CopyrightLabel" type="Label" parent="Contents"] -margin_top = 554.0 -margin_right = 640.0 -margin_bottom = 567.0 +layout_mode = 2 size_flags_horizontal = 3 -custom_fonts/font = ExtResource( 7 ) text = "ยฉ2019-present by Orama Interactive and contributors" -align = 1 +label_settings = SubResource("LabelSettings_32icc") [node name="HBoxContainer" type="HBoxContainer" parent="Contents/CopyrightLabel"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_top = -6.0 -margin_right = -2.0 -margin_bottom = 5.0 +offset_top = -6.0 +offset_right = -2.0 +offset_bottom = 5.0 size_flags_vertical = 0 -custom_constants/separation = 0 +theme_override_constants/separation = 0 alignment = 2 -__meta__ = { -"_edit_use_anchors_": false -} [node name="ShowOnStartup" type="CheckBox" parent="Contents/CopyrightLabel/HBoxContainer"] -margin_left = 533.0 -margin_right = 638.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_vertical = 0 -custom_fonts/font = ExtResource( 7 ) +mouse_default_cursor_shape = 2 text = "Don't show again" -__meta__ = { -"_edit_use_anchors_": false -} -[connection signal="about_to_show" from="." to="." method="_on_SplashDialog_about_to_show"] +[connection signal="about_to_popup" from="." to="." method="_on_SplashDialog_about_to_show"] [connection signal="pressed" from="Contents/SplashArt/ChangeArtBtnLeft" to="." method="_on_ChangeArtBtnLeft_pressed"] [connection signal="pressed" from="Contents/SplashArt/ChangeArtBtnRight" to="." method="_on_ChangeArtBtnRight_pressed"] [connection signal="pressed" from="Contents/ArtBy/ArtistName" to="." method="_on_ArtCredits_pressed"] diff --git a/src/UI/Dialogs/TileModeOffsetsDialog.gd b/src/UI/Dialogs/TileModeOffsetsDialog.gd index 9e5afe9def0..70df4b5ebe9 100644 --- a/src/UI/Dialogs/TileModeOffsetsDialog.gd +++ b/src/UI/Dialogs/TileModeOffsetsDialog.gd @@ -1,16 +1,17 @@ extends ConfirmationDialog -onready var x_basis_x_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/XBasisX -onready var x_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/XBasisY -onready var y_basis_x_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/YBasisX -onready var y_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/YBasisY -onready var preview_rect: Control = $VBoxContainer/AspectRatioContainer/Preview -onready var tile_mode: Node2D = $VBoxContainer/AspectRatioContainer/Preview/TileMode +@onready var x_basis_x_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/XBasisX +@onready var x_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/XBasisY +@onready var y_basis_x_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/YBasisX +@onready var y_basis_y_spinbox: SpinBox = $VBoxContainer/HBoxContainer/OptionsContainer/YBasisY +@onready var preview_rect: Control = $VBoxContainer/AspectRatioContainer/Preview +@onready var tile_mode: Node2D = $VBoxContainer/AspectRatioContainer/Preview/TileMode func _ready() -> void: - Global.connect("cel_changed", self, "change_mask") - yield(get_tree(), "idle_frame") + Global.project_changed.connect(change_mask) + Global.cel_changed.connect(change_mask) + await get_tree().process_frame change_mask() @@ -58,7 +59,7 @@ func _show_options(): func _on_TileModeOffsetsDialog_confirmed() -> void: Global.current_project.tiles.x_basis = tile_mode.tiles.x_basis Global.current_project.tiles.y_basis = tile_mode.tiles.y_basis - Global.canvas.tile_mode.update() + Global.canvas.tile_mode.queue_redraw() Global.transparent_checker.update_rect() @@ -85,51 +86,49 @@ func _on_YBasisY_value_changed(value: int) -> void: func update_preview() -> void: var bounding_rect: Rect2 = tile_mode.tiles.get_bounding_rect() var offset := -bounding_rect.position - var axis_scale := preview_rect.rect_size / bounding_rect.size - var min_scale: Vector2 = preview_rect.rect_size / (tile_mode.tiles.tile_size * 3.0) + var axis_scale := preview_rect.size / bounding_rect.size + var min_scale: Vector2 = preview_rect.size / (tile_mode.tiles.tile_size * 3.0) var scale: float = [axis_scale.x, axis_scale.y, min_scale.x, min_scale.y].min() var t := Transform2D.IDENTITY.translated(offset).scaled(Vector2(scale, scale)) - var transformed_bounding_rect: Rect2 = t.xform(bounding_rect) - var centering_offset := (preview_rect.rect_size - transformed_bounding_rect.size) / 2.0 + var transformed_bounding_rect: Rect2 = t * (bounding_rect) + var centering_offset := (preview_rect.size - transformed_bounding_rect.size) / 2.0 t = t.translated(centering_offset / scale) tile_mode.transform = t - tile_mode.update() - preview_rect.get_node("TransparentChecker").rect_size = preview_rect.rect_size + tile_mode.queue_redraw() + preview_rect.get_node("TransparentChecker").size = preview_rect.size -func _on_TileModeOffsetsDialog_popup_hide() -> void: +func _on_TileModeOffsetsDialog_visibility_changed() -> void: Global.dialog_open(false) -func _on_TileModeOffsetsDialog_item_rect_changed(): +func _on_TileModeOffsetsDialog_size_changed(): if tile_mode: update_preview() func _on_Reset_pressed(): - var size = Global.current_project.size - tile_mode.tiles.x_basis = Vector2(size.x, 0) - tile_mode.tiles.y_basis = Vector2(0, size.y) - x_basis_x_spinbox.value = size.x + tile_mode.tiles.x_basis = Vector2i(Global.current_project.size.x, 0) + tile_mode.tiles.y_basis = Vector2i(0, Global.current_project.size.y) + x_basis_x_spinbox.value = Global.current_project.size.x x_basis_y_spinbox.value = 0 y_basis_x_spinbox.value = 0 - y_basis_y_spinbox.value = size.y + y_basis_y_spinbox.value = Global.current_project.size.y update_preview() func change_mask(): if Global.current_project.tiles.mode == Tiles.MODE.NONE: return - var frame_idx = Global.current_project.current_frame - var current_frame = Global.current_project.frames[frame_idx] - var tiles = Global.current_project.tiles - var size = tiles.tile_size - var image := Image.new() - image.create(size.x, size.y, false, Image.FORMAT_RGBA8) + var frame_idx := Global.current_project.current_frame + var current_frame := Global.current_project.frames[frame_idx] + var tiles := Global.current_project.tiles + var tiles_size := tiles.tile_size + var image := Image.create(tiles_size.x, tiles_size.y, false, Image.FORMAT_RGBA8) Export.blend_all_layers(image, current_frame) if ( - image.get_used_rect().size == Vector2.ZERO - or not $VBoxContainer/HBoxContainer/Masking.pressed + image.get_used_rect().size == Vector2i.ZERO + or not $VBoxContainer/HBoxContainer/Masking.button_pressed ): tiles.reset_mask() else: diff --git a/src/UI/Dialogs/TileModeOffsetsDialog.tscn b/src/UI/Dialogs/TileModeOffsetsDialog.tscn index 391c38a95d9..28b35df837a 100644 --- a/src/UI/Dialogs/TileModeOffsetsDialog.tscn +++ b/src/UI/Dialogs/TileModeOffsetsDialog.tscn @@ -1,152 +1,117 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=5 format=3 uid="uid://c0nuukjakmai2"] -[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Canvas/TileMode.gd" type="Script" id=2] -[ext_resource path="res://src/UI/Dialogs/TileModeOffsetsDialog.gd" type="Script" id=3] +[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="1"] +[ext_resource type="Script" path="res://src/UI/Canvas/TileMode.gd" id="2"] +[ext_resource type="Script" path="res://src/UI/Dialogs/TileModeOffsetsDialog.gd" id="3"] -[sub_resource type="CanvasItemMaterial" id=1] +[sub_resource type="CanvasItemMaterial" id="1"] blend_mode = 4 [node name="TileModeOffsetsDialog" type="ConfirmationDialog"] -margin_right = 301.0 -margin_bottom = 422.0 -rect_min_size = Vector2( 172, 422 ) -window_title = "Tile Mode Offsets" -resizable = true -script = ExtResource( 3 ) +canvas_item_default_texture_filter = 0 +title = "Tile Mode Offsets" +exclusive = false +script = ExtResource("3") [node name="VBoxContainer" type="VBoxContainer" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 293.0 -margin_bottom = 386.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 293.0 +offset_bottom = 386.0 [node name="TileModeOffsets" type="Label" parent="VBoxContainer"] -margin_right = 285.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Tile Mode Offsets" [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 18.0 -margin_right = 285.0 -margin_bottom = 150.0 +layout_mode = 2 [node name="OptionsContainer" type="GridContainer" parent="VBoxContainer/HBoxContainer"] -margin_right = 137.0 -margin_bottom = 132.0 -custom_constants/vseparation = 4 -custom_constants/hseparation = 2 +layout_mode = 2 +theme_override_constants/h_separation = 2 +theme_override_constants/v_separation = 4 columns = 2 [node name="XBasisXLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"] -margin_top = 5.0 -margin_right = 61.0 -margin_bottom = 19.0 +layout_mode = 2 text = "X-basis x:" [node name="XBasisX" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"] -margin_left = 63.0 -margin_right = 137.0 -margin_bottom = 24.0 +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = -16384.0 max_value = 16384.0 suffix = "px" [node name="XBasisYLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"] -margin_top = 33.0 -margin_right = 61.0 -margin_bottom = 47.0 +layout_mode = 2 text = "X-basis y:" [node name="XBasisY" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"] -margin_left = 63.0 -margin_top = 28.0 -margin_right = 137.0 -margin_bottom = 52.0 +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = -16384.0 max_value = 16384.0 suffix = "px" [node name="YBasisXLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"] -margin_top = 61.0 -margin_right = 61.0 -margin_bottom = 75.0 +layout_mode = 2 text = "Y-basis x:" [node name="YBasisX" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"] -margin_left = 63.0 -margin_top = 56.0 -margin_right = 137.0 -margin_bottom = 80.0 +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = -16384.0 max_value = 16384.0 suffix = "px" [node name="YBasisYLabel" type="Label" parent="VBoxContainer/HBoxContainer/OptionsContainer"] -margin_top = 89.0 -margin_right = 61.0 -margin_bottom = 103.0 +layout_mode = 2 text = "Y-basis y:" [node name="YBasisY" type="SpinBox" parent="VBoxContainer/HBoxContainer/OptionsContainer"] -margin_left = 63.0 -margin_top = 84.0 -margin_right = 137.0 -margin_bottom = 108.0 +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = -16384.0 max_value = 16384.0 suffix = "px" [node name="Reset" type="Button" parent="VBoxContainer/HBoxContainer/OptionsContainer"] -margin_top = 112.0 -margin_right = 61.0 -margin_bottom = 132.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Reset" [node name="VSeparator" type="VSeparator" parent="VBoxContainer/HBoxContainer"] -margin_left = 141.0 -margin_right = 145.0 -margin_bottom = 132.0 +layout_mode = 2 [node name="Masking" type="CheckButton" parent="VBoxContainer/HBoxContainer"] -margin_left = 149.0 -margin_right = 281.0 -margin_bottom = 40.0 +layout_mode = 2 size_flags_vertical = 0 text = "Masking" [node name="AspectRatioContainer" type="AspectRatioContainer" parent="VBoxContainer"] -margin_top = 154.0 -margin_right = 285.0 -margin_bottom = 378.0 +layout_mode = 2 size_flags_vertical = 3 [node name="Preview" type="Control" parent="VBoxContainer/AspectRatioContainer"] -margin_left = 30.5 -margin_right = 254.5 -margin_bottom = 224.0 -rect_min_size = Vector2( 200, 200 ) +custom_minimum_size = Vector2(200, 200) +layout_mode = 2 [node name="TileMode" type="Node2D" parent="VBoxContainer/AspectRatioContainer/Preview"] -material = SubResource( 1 ) -script = ExtResource( 2 ) +material = SubResource("1") +script = ExtResource("2") -[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource( 1 )] +[node name="TransparentChecker" parent="VBoxContainer/AspectRatioContainer/Preview" instance=ExtResource("1")] show_behind_parent = true +layout_mode = 0 +anchors_preset = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = 0.0 -margin_bottom = 0.0 -[connection signal="about_to_show" from="." to="." method="_on_TileModeOffsetsDialog_about_to_show"] +[connection signal="about_to_popup" from="." to="." method="_on_TileModeOffsetsDialog_about_to_show"] [connection signal="confirmed" from="." to="." method="_on_TileModeOffsetsDialog_confirmed"] -[connection signal="item_rect_changed" from="." to="." method="_on_TileModeOffsetsDialog_item_rect_changed"] -[connection signal="popup_hide" from="." to="." method="_on_TileModeOffsetsDialog_popup_hide"] +[connection signal="size_changed" from="." to="." method="_on_TileModeOffsetsDialog_size_changed"] +[connection signal="visibility_changed" from="." to="." method="_on_TileModeOffsetsDialog_visibility_changed"] [connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/XBasisX" to="." method="_on_XBasisX_value_changed"] [connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/XBasisY" to="." method="_on_XBasisY_value_changed"] [connection signal="value_changed" from="VBoxContainer/HBoxContainer/OptionsContainer/YBasisX" to="." method="_on_YBasisX_value_changed"] diff --git a/src/UI/Dialogs/WindowOpacityDialog.gd b/src/UI/Dialogs/WindowOpacityDialog.gd index d4be081e3a2..b2d088a1eb9 100644 --- a/src/UI/Dialogs/WindowOpacityDialog.gd +++ b/src/UI/Dialogs/WindowOpacityDialog.gd @@ -1,18 +1,22 @@ extends AcceptDialog -onready var slider: ValueSlider = $VBoxContainer/ValueSlider -onready var fullscreen_warning: Label = $VBoxContainer/FullscreenWarning -onready var main_canvas = Global.control.find_node("Main Canvas") +@onready var slider: ValueSlider = $VBoxContainer/ValueSlider +@onready var fullscreen_warning: Label = $VBoxContainer/FullscreenWarning +@onready var main_canvas = Global.control.find_child("Main Canvas") func _ready() -> void: - yield(get_tree(), "idle_frame") - Global.control.ui.connect("sort_children", self, "_recalculate_opacity") + await get_tree().process_frame + Global.control.ui.sort_children.connect(_recalculate_opacity) func _on_WindowOpacityDialog_about_to_show() -> void: - OS.window_per_pixel_transparency_enabled = true - slider.editable = !OS.window_fullscreen + get_tree().root.transparent = true + get_tree().root.transparent_bg = true + slider.editable = !( + (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN) + or (get_window().mode == Window.MODE_FULLSCREEN) + ) fullscreen_warning.visible = !slider.editable @@ -21,7 +25,10 @@ func _recalculate_opacity() -> void: func set_window_opacity(value: float) -> void: - if OS.window_fullscreen: + if ( + (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN) + or (get_window().mode == Window.MODE_FULLSCREEN) + ): value = 100.0 slider.value = value @@ -36,5 +43,5 @@ func set_window_opacity(value: float) -> void: Global.transparent_checker.update_transparency(value) -func _on_WindowOpacityDialog_popup_hide() -> void: +func _on_visibility_changed() -> void: Global.dialog_open(false) diff --git a/src/UI/Dialogs/WindowOpacityDialog.tscn b/src/UI/Dialogs/WindowOpacityDialog.tscn index ec71804d60e..3599379dcf2 100644 --- a/src/UI/Dialogs/WindowOpacityDialog.tscn +++ b/src/UI/Dialogs/WindowOpacityDialog.tscn @@ -1,39 +1,31 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://bcdt0pa7rojy5"] -[ext_resource path="res://src/UI/Dialogs/WindowOpacityDialog.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=2] +[ext_resource type="Script" path="res://src/UI/Dialogs/WindowOpacityDialog.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="2"] [node name="WindowOpacityDialog" type="AcceptDialog"] -margin_right = 204.0 -margin_bottom = 68.0 -rect_min_size = Vector2( 240, 0 ) -window_title = "Window Opacity" -resizable = true -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +title = "Window Opacity" +exclusive = false +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -36.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -36.0 -[node name="ValueSlider" parent="VBoxContainer" instance=ExtResource( 2 )] -margin_right = 327.0 -margin_bottom = 24.0 +[node name="ValueSlider" parent="VBoxContainer" instance=ExtResource("2")] +layout_mode = 2 value = 100.0 [node name="FullscreenWarning" type="Label" parent="VBoxContainer"] -margin_top = 28.0 -margin_right = 327.0 -margin_bottom = 42.0 -custom_colors/font_color = Color( 1, 0.364706, 0.364706, 1 ) +layout_mode = 2 +theme_override_colors/font_color = Color(1, 0.364706, 0.364706, 1) text = "Window opacity does not work on fullscreen mode." -[connection signal="about_to_show" from="." to="." method="_on_WindowOpacityDialog_about_to_show"] -[connection signal="popup_hide" from="." to="." method="_on_WindowOpacityDialog_popup_hide"] +[connection signal="about_to_popup" from="." to="." method="_on_WindowOpacityDialog_about_to_show"] +[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"] [connection signal="value_changed" from="VBoxContainer/ValueSlider" to="." method="set_window_opacity"] diff --git a/src/UI/GlobalToolOptions/GlobalToolOptions.gd b/src/UI/GlobalToolOptions/GlobalToolOptions.gd index 88ba8b7db88..3d6766122ed 100644 --- a/src/UI/GlobalToolOptions/GlobalToolOptions.gd +++ b/src/UI/GlobalToolOptions/GlobalToolOptions.gd @@ -4,56 +4,41 @@ signal dynamics_changed enum { ALPHA, SIZE } -var alpha_last_pressed: BaseButton = null -var size_last_pressed: BaseButton = null - -onready var grid_container: GridContainer = find_node("GridContainer") -onready var horizontal_mirror: BaseButton = grid_container.get_node("Horizontal") -onready var vertical_mirror: BaseButton = grid_container.get_node("Vertical") -onready var pixel_perfect: BaseButton = grid_container.get_node("PixelPerfect") -onready var dynamics: Button = $"%Dynamics" - -onready var dynamics_panel: PopupPanel = $DynamicsPanel -onready var alpha_pressure_button: Button = $"%AlphaPressureButton" -onready var alpha_velocity_button: Button = $"%AlphaVelocityButton" -onready var size_pressure_button: Button = $"%SizePressureButton" -onready var size_velocity_button: Button = $"%SizeVelocityButton" -onready var pressure_preview: ProgressBar = $"%PressurePreview" -onready var velocity_preview: ProgressBar = $"%VelocityPreview" -onready var alpha_group: ButtonGroup = alpha_pressure_button.group -onready var size_group: ButtonGroup = size_pressure_button.group +@onready var grid_container: GridContainer = find_child("GridContainer") +@onready var horizontal_mirror: BaseButton = grid_container.get_node("Horizontal") +@onready var vertical_mirror: BaseButton = grid_container.get_node("Vertical") +@onready var pixel_perfect: BaseButton = grid_container.get_node("PixelPerfect") +@onready var dynamics: Button = $"%Dynamics" + +@onready var dynamics_panel: PopupPanel = $DynamicsPanel +@onready var alpha_pressure_button: Button = $"%AlphaPressureButton" +@onready var alpha_velocity_button: Button = $"%AlphaVelocityButton" +@onready var size_pressure_button: Button = $"%SizePressureButton" +@onready var size_velocity_button: Button = $"%SizeVelocityButton" +@onready var pressure_preview: ProgressBar = $"%PressurePreview" +@onready var velocity_preview: ProgressBar = $"%VelocityPreview" +@onready var alpha_group := alpha_pressure_button.button_group +@onready var size_group := size_pressure_button.button_group func _ready() -> void: # Resize tools panel when window gets resized - get_tree().get_root().connect("size_changed", self, "_on_resized") - horizontal_mirror.pressed = Tools.horizontal_mirror - vertical_mirror.pressed = Tools.vertical_mirror - pixel_perfect.pressed = Tools.pixel_perfect - - alpha_pressure_button.connect( - "toggled", - self, - "_on_Dynamics_toggled", - [alpha_pressure_button, ALPHA, Tools.Dynamics.PRESSURE] + get_tree().get_root().size_changed.connect(_on_resized) + horizontal_mirror.button_pressed = Tools.horizontal_mirror + vertical_mirror.button_pressed = Tools.vertical_mirror + pixel_perfect.button_pressed = Tools.pixel_perfect + + alpha_pressure_button.toggled.connect( + _on_Dynamics_toggled.bind(alpha_pressure_button, ALPHA, Tools.Dynamics.PRESSURE) ) - alpha_velocity_button.connect( - "toggled", - self, - "_on_Dynamics_toggled", - [alpha_velocity_button, ALPHA, Tools.Dynamics.VELOCITY] + alpha_velocity_button.toggled.connect( + _on_Dynamics_toggled.bind(alpha_velocity_button, ALPHA, Tools.Dynamics.VELOCITY) ) - size_pressure_button.connect( - "toggled", - self, - "_on_Dynamics_toggled", - [size_pressure_button, SIZE, Tools.Dynamics.PRESSURE] + size_pressure_button.toggled.connect( + _on_Dynamics_toggled.bind(size_pressure_button, SIZE, Tools.Dynamics.PRESSURE) ) - size_velocity_button.connect( - "toggled", - self, - "_on_Dynamics_toggled", - [size_velocity_button, SIZE, Tools.Dynamics.VELOCITY] + size_velocity_button.toggled.connect( + _on_Dynamics_toggled.bind(size_velocity_button, SIZE, Tools.Dynamics.VELOCITY) ) @@ -62,11 +47,11 @@ func _input(event: InputEvent) -> void: velocity_preview.value = 0 if event is InputEventMouseMotion: pressure_preview.value = event.pressure - velocity_preview.value = event.speed.length() / Tools.mouse_velocity_max + velocity_preview.value = event.velocity.length() / Tools.mouse_velocity_max func _on_resized() -> void: - var tool_panel_size := rect_size + var tool_panel_size := size var column_n := tool_panel_size.x / 36.5 if column_n < 1: @@ -79,8 +64,7 @@ func _on_Horizontal_toggled(button_pressed: bool) -> void: Global.config_cache.set_value("preferences", "horizontal_mirror", button_pressed) Global.show_y_symmetry_axis = button_pressed Global.current_project.y_symmetry_axis.visible = ( - Global.show_y_symmetry_axis - and Global.show_guides + Global.show_y_symmetry_axis and Global.show_guides ) var texture_button: TextureRect = horizontal_mirror.get_node("TextureRect") @@ -96,8 +80,7 @@ func _on_Vertical_toggled(button_pressed: bool) -> void: Global.show_x_symmetry_axis = button_pressed # If the button is not pressed but another button is, keep the symmetry guide visible Global.current_project.x_symmetry_axis.visible = ( - Global.show_x_symmetry_axis - and Global.show_guides + Global.show_x_symmetry_axis and Global.show_guides ) var texture_button: TextureRect = vertical_mirror.get_node("TextureRect") @@ -118,34 +101,15 @@ func _on_PixelPerfect_toggled(button_pressed: bool) -> void: func _on_Dynamics_pressed() -> void: - var pos := dynamics.rect_global_position + Vector2(0, 32) - dynamics_panel.popup(Rect2(pos, dynamics_panel.rect_size)) + var pos := dynamics.global_position + Vector2(0, 32) + dynamics_panel.popup(Rect2(pos, dynamics_panel.size)) func _on_Dynamics_toggled( button_pressed: bool, button: BaseButton, property: int, dynamic: int ) -> void: - if button_pressed: - var last_pressed: BaseButton - # The button calling this method is the one that was just selected -# var pressed_button: BaseButton - match property: - ALPHA: - last_pressed = alpha_last_pressed -# pressed_button = alpha_group.get_pressed_button() - SIZE: - last_pressed = size_last_pressed -# pressed_button = size_group.get_pressed_button() - if last_pressed == button: - # The button calling the method was the last one that was selected (we clicked it twice in a row) - # Toggle it off and set last_pressed to null so we can click it a third time to toggle it back on - button.pressed = false - _set_last_pressed_button(property, null) - # Update the last button pressed if we clicked something different - else: - _set_last_pressed_button(property, button) var final_dynamic := dynamic - if not button.pressed: + if not button.button_pressed: final_dynamic = Tools.Dynamics.NONE match property: ALPHA: @@ -155,45 +119,37 @@ func _on_Dynamics_toggled( var texture_button: TextureRect = button.get_node("TextureRect") var file_name := "check.png" - if !button.pressed: + if !button.button_pressed: file_name = "uncheck.png" Global.change_button_texturerect(texture_button, file_name) - emit_signal("dynamics_changed") - - -func _set_last_pressed_button(prop: int, value: BaseButton) -> void: - match prop: - ALPHA: - alpha_last_pressed = value - SIZE: - size_last_pressed = value + dynamics_changed.emit() -func _on_ThresholdPressure_updated(value_1, value_2) -> void: - Tools.pen_pressure_min = min(value_1, value_2) - Tools.pen_pressure_max = max(value_1, value_2) +func _on_ThresholdPressure_updated(value_1: float, value_2: float) -> void: + Tools.pen_pressure_min = minf(value_1, value_2) + Tools.pen_pressure_max = maxf(value_1, value_2) -func _on_ThresholdVelocity_updated(value_1, value_2) -> void: - Tools.mouse_velocity_min_thres = min(value_1, value_2) - Tools.mouse_velocity_max_thres = max(value_1, value_2) +func _on_ThresholdVelocity_updated(value_1: float, value_2: float) -> void: + Tools.mouse_velocity_min_thres = minf(value_1, value_2) + Tools.mouse_velocity_max_thres = maxf(value_1, value_2) func _on_AlphaMin_value_changed(value: float) -> void: Tools.alpha_min = value - emit_signal("dynamics_changed") + dynamics_changed.emit() func _on_AlphaMax_value_changed(value: float) -> void: Tools.alpha_max = value - emit_signal("dynamics_changed") + dynamics_changed.emit() func _on_SizeMin_value_changed(value: float) -> void: Tools.brush_size_min = int(value) - emit_signal("dynamics_changed") + dynamics_changed.emit() func _on_SizeMax_value_changed(value: float) -> void: Tools.brush_size_max = int(value) - emit_signal("dynamics_changed") + dynamics_changed.emit() diff --git a/src/UI/GlobalToolOptions/GlobalToolOptions.tscn b/src/UI/GlobalToolOptions/GlobalToolOptions.tscn index 9f2db69b12b..35a4fb6946d 100644 --- a/src/UI/GlobalToolOptions/GlobalToolOptions.tscn +++ b/src/UI/GlobalToolOptions/GlobalToolOptions.tscn @@ -1,296 +1,271 @@ -[gd_scene load_steps=14 format=2] +[gd_scene load_steps=20 format=3 uid="uid://wo0hqxkst808"] -[ext_resource path="res://assets/graphics/misc/horizontal_mirror_off.png" type="Texture" id=1] -[ext_resource path="res://assets/graphics/misc/vertical_mirror_off.png" type="Texture" id=2] -[ext_resource path="res://src/UI/GlobalToolOptions/GlobalToolOptions.gd" type="Script" id=3] -[ext_resource path="res://assets/graphics/misc/pixel_perfect_off.png" type="Texture" id=4] -[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=5] -[ext_resource path="res://assets/graphics/misc/dynamics.png" type="Texture" id=6] -[ext_resource path="res://assets/graphics/misc/uncheck.png" type="Texture" id=7] -[ext_resource path="res://src/UI/Nodes/MaxMinEdit.tscn" type="PackedScene" id=8] +[ext_resource type="Texture2D" uid="uid://cjrokejjsp5dm" path="res://assets/graphics/misc/horizontal_mirror_off.png" id="1"] +[ext_resource type="Texture2D" uid="uid://hiduvaa73fr6" path="res://assets/graphics/misc/vertical_mirror_off.png" id="2"] +[ext_resource type="Script" path="res://src/UI/GlobalToolOptions/GlobalToolOptions.gd" id="3"] +[ext_resource type="Texture2D" uid="uid://22h12g8p3jtd" path="res://assets/graphics/misc/pixel_perfect_off.png" id="4"] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="5"] +[ext_resource type="Texture2D" uid="uid://dg3dumyfj1682" path="res://assets/graphics/misc/dynamics.png" id="6"] +[ext_resource type="Texture2D" uid="uid://di8au2u87jgv5" path="res://assets/graphics/misc/uncheck.png" id="7"] +[ext_resource type="PackedScene" uid="uid://bmsc0s03pwji4" path="res://src/UI/Nodes/MaxMinEdit.tscn" id="8"] -[sub_resource type="ButtonGroup" id=1] +[sub_resource type="InputEventAction" id="InputEventAction_4k08w"] +action = &"horizontal_mirror" -[sub_resource type="ButtonGroup" id=2] +[sub_resource type="Shortcut" id="Shortcut_eld87"] +events = [SubResource("InputEventAction_4k08w")] -[sub_resource type="Gradient" id=3] +[sub_resource type="InputEventAction" id="InputEventAction_24etr"] +action = &"vertical_mirror" + +[sub_resource type="Shortcut" id="Shortcut_ai7qc"] +events = [SubResource("InputEventAction_24etr")] + +[sub_resource type="InputEventAction" id="InputEventAction_ebgk6"] +action = &"pixel_perfect" + +[sub_resource type="Shortcut" id="Shortcut_vcyug"] +events = [SubResource("InputEventAction_ebgk6")] + +[sub_resource type="ButtonGroup" id="ButtonGroup_ahrcw"] +allow_unpress = true + +[sub_resource type="ButtonGroup" id="ButtonGroup_t01h7"] +allow_unpress = true + +[sub_resource type="Gradient" id="3"] interpolation_mode = 1 -offsets = PoolRealArray( 0, 0, 1 ) -colors = PoolColorArray( 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 ) +offsets = PackedFloat32Array(0, 0, 1) +colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1) -[sub_resource type="GradientTexture" id=4] -gradient = SubResource( 3 ) +[sub_resource type="GradientTexture2D" id="4"] +gradient = SubResource("3") -[sub_resource type="GradientTexture" id=5] -gradient = SubResource( 3 ) +[sub_resource type="GradientTexture2D" id="5"] +gradient = SubResource("3") [node name="Global Tool Options" type="PanelContainer"] -margin_left = 1.0 -margin_right = 195.0 -margin_bottom = 50.0 -rect_min_size = Vector2( 0, 36 ) -script = ExtResource( 3 ) +custom_minimum_size = Vector2(0, 36) +offset_left = 1.0 +offset_right = 195.0 +offset_bottom = 50.0 +script = ExtResource("3") [node name="ScrollContainer" type="ScrollContainer" parent="."] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 187.0 -margin_bottom = 43.0 -rect_min_size = Vector2( 36, 36 ) +custom_minimum_size = Vector2(36, 36) +layout_mode = 2 [node name="CenterContainer" type="CenterContainer" parent="ScrollContainer"] -margin_right = 180.0 -margin_bottom = 36.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="GridContainer" type="GridContainer" parent="ScrollContainer/CenterContainer"] -margin_left = 20.0 -margin_top = 2.0 -margin_right = 160.0 -margin_bottom = 34.0 +layout_mode = 2 size_flags_vertical = 0 columns = 4 [node name="Horizontal" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]] -margin_right = 32.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -hint_tooltip = "Enable horizontal mirrored drawing" +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Enable horizontal mirrored drawing" mouse_default_cursor_shape = 2 toggle_mode = true +shortcut = SubResource("Shortcut_eld87") [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Horizontal"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -10.0 -margin_top = -10.5 -margin_right = 10.0 -margin_bottom = 10.5 -texture = ExtResource( 1 ) +offset_left = -10.0 +offset_top = -10.5 +offset_right = 10.0 +offset_bottom = 10.5 +texture = ExtResource("1") [node name="Vertical" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]] -margin_left = 36.0 -margin_right = 68.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -hint_tooltip = "Enable vertical mirrored drawing" +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Enable vertical mirrored drawing" mouse_default_cursor_shape = 2 toggle_mode = true +shortcut = SubResource("Shortcut_ai7qc") [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Vertical"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -10.0 -margin_top = -10.0 -margin_right = 10.0 -margin_bottom = 10.0 -texture = ExtResource( 2 ) +offset_left = -10.0 +offset_top = -10.0 +offset_right = 10.0 +offset_bottom = 10.0 +texture = ExtResource("2") [node name="PixelPerfect" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]] -margin_left = 72.0 -margin_right = 104.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -hint_tooltip = "Pixel Perfect +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Pixel Perfect Makes lines smooth by removing the extra pixels on the edges" mouse_default_cursor_shape = 2 toggle_mode = true +shortcut = SubResource("Shortcut_vcyug") [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/PixelPerfect"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -10.0 -margin_right = 11.0 -margin_bottom = 10.0 -texture = ExtResource( 4 ) +offset_left = -11.0 +offset_top = -10.0 +offset_right = 11.0 +offset_bottom = 10.0 +texture = ExtResource("4") [node name="Dynamics" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]] unique_name_in_owner = true -margin_left = 108.0 -margin_right = 140.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -hint_tooltip = "Dynamics" +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Dynamics" mouse_default_cursor_shape = 2 -__meta__ = { -"_editor_description_": "" -} [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Dynamics"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -10.0 -margin_right = 11.0 -margin_bottom = 10.0 -texture = ExtResource( 6 ) +offset_left = -11.0 +offset_top = -10.0 +offset_right = 11.0 +offset_bottom = 10.0 +texture = ExtResource("6") [node name="DynamicsPanel" type="PopupPanel" parent="."] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 267.0 -margin_bottom = 267.0 -rect_min_size = Vector2( 260, 260 ) +canvas_item_default_texture_filter = 0 [node name="VBoxContainer" type="VBoxContainer" parent="DynamicsPanel"] -margin_left = 4.0 -margin_top = 4.0 -margin_right = 256.0 -margin_bottom = 256.0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = 186.0 +offset_bottom = 288.0 [node name="DynamicsOptions" type="GridContainer" parent="DynamicsPanel/VBoxContainer"] -margin_right = 252.0 -margin_bottom = 68.0 +layout_mode = 2 columns = 3 [node name="Control" type="Control" parent="DynamicsPanel/VBoxContainer/DynamicsOptions"] -margin_right = 82.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 20, 20 ) +custom_minimum_size = Vector2(20, 20) +layout_mode = 2 size_flags_horizontal = 3 [node name="PressureLabel" type="Label" parent="DynamicsPanel/VBoxContainer/DynamicsOptions"] -margin_left = 86.0 -margin_top = 3.0 -margin_right = 167.0 -margin_bottom = 17.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Pressure" -align = 1 [node name="VelocityLabel" type="Label" parent="DynamicsPanel/VBoxContainer/DynamicsOptions"] -margin_left = 171.0 -margin_top = 3.0 -margin_right = 252.0 -margin_bottom = 17.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Velocity" -align = 1 [node name="AlphaLabel" type="Label" parent="DynamicsPanel/VBoxContainer/DynamicsOptions"] -margin_top = 27.0 -margin_right = 82.0 -margin_bottom = 41.0 +layout_mode = 2 text = "Alpha" [node name="AlphaPressureButton" type="Button" parent="DynamicsPanel/VBoxContainer/DynamicsOptions" groups=["UIButtons"]] unique_name_in_owner = true -margin_left = 86.0 -margin_top = 24.0 -margin_right = 167.0 -margin_bottom = 44.0 +layout_mode = 2 mouse_default_cursor_shape = 2 toggle_mode = true -group = SubResource( 1 ) -icon_align = 1 +button_group = SubResource("ButtonGroup_ahrcw") +icon_alignment = 1 expand_icon = true [node name="TextureRect" type="TextureRect" parent="DynamicsPanel/VBoxContainer/DynamicsOptions/AlphaPressureButton"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -texture = ExtResource( 7 ) -expand = true +texture = ExtResource("7") +expand_mode = 1 [node name="AlphaVelocityButton" type="Button" parent="DynamicsPanel/VBoxContainer/DynamicsOptions" groups=["UIButtons"]] unique_name_in_owner = true -margin_left = 171.0 -margin_top = 24.0 -margin_right = 252.0 -margin_bottom = 44.0 +layout_mode = 2 mouse_default_cursor_shape = 2 toggle_mode = true -group = SubResource( 1 ) +button_group = SubResource("ButtonGroup_ahrcw") [node name="TextureRect" type="TextureRect" parent="DynamicsPanel/VBoxContainer/DynamicsOptions/AlphaVelocityButton"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -texture = ExtResource( 7 ) -expand = true +texture = ExtResource("7") +expand_mode = 1 [node name="SizeLabel" type="Label" parent="DynamicsPanel/VBoxContainer/DynamicsOptions"] -margin_top = 51.0 -margin_right = 82.0 -margin_bottom = 65.0 +layout_mode = 2 text = "Size" [node name="SizePressureButton" type="Button" parent="DynamicsPanel/VBoxContainer/DynamicsOptions" groups=["UIButtons"]] unique_name_in_owner = true -margin_left = 86.0 -margin_top = 48.0 -margin_right = 167.0 -margin_bottom = 68.0 +layout_mode = 2 mouse_default_cursor_shape = 2 toggle_mode = true -group = SubResource( 2 ) +button_group = SubResource("ButtonGroup_t01h7") [node name="TextureRect" type="TextureRect" parent="DynamicsPanel/VBoxContainer/DynamicsOptions/SizePressureButton"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -texture = ExtResource( 7 ) -expand = true +texture = ExtResource("7") +expand_mode = 1 [node name="SizeVelocityButton" type="Button" parent="DynamicsPanel/VBoxContainer/DynamicsOptions" groups=["UIButtons"]] unique_name_in_owner = true -margin_left = 171.0 -margin_top = 48.0 -margin_right = 252.0 -margin_bottom = 68.0 +layout_mode = 2 mouse_default_cursor_shape = 2 toggle_mode = true -group = SubResource( 2 ) +button_group = SubResource("ButtonGroup_t01h7") [node name="TextureRect" type="TextureRect" parent="DynamicsPanel/VBoxContainer/DynamicsOptions/SizeVelocityButton"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -texture = ExtResource( 7 ) -expand = true +texture = ExtResource("7") +expand_mode = 1 [node name="LimitsHeader" type="HBoxContainer" parent="DynamicsPanel/VBoxContainer"] -margin_top = 72.0 -margin_right = 252.0 -margin_bottom = 86.0 +layout_mode = 2 [node name="Label" type="Label" parent="DynamicsPanel/VBoxContainer/LimitsHeader"] -margin_right = 76.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Value limits" [node name="HSeparator" type="HSeparator" parent="DynamicsPanel/VBoxContainer/LimitsHeader"] -margin_left = 80.0 -margin_right = 252.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="LimitContainer" type="GridContainer" parent="DynamicsPanel/VBoxContainer"] -margin_top = 90.0 -margin_right = 252.0 -margin_bottom = 122.0 +layout_mode = 2 columns = 3 [node name="AlphaLabel" type="Label" parent="DynamicsPanel/VBoxContainer/LimitContainer"] -margin_right = 82.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Alpha" -[node name="AlphaMin" type="TextureProgress" parent="DynamicsPanel/VBoxContainer/LimitContainer"] -margin_left = 86.0 -margin_right = 167.0 -margin_bottom = 14.0 -mouse_default_cursor_shape = 2 +[node name="AlphaMin" type="TextureProgressBar" parent="DynamicsPanel/VBoxContainer/LimitContainer"] +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" max_value = 1.0 step = 0.01 value = 0.1 @@ -299,17 +274,16 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") prefix = "Start" snap_step = 0.1 -[node name="AlphaMax" type="TextureProgress" parent="DynamicsPanel/VBoxContainer/LimitContainer"] -margin_left = 171.0 -margin_right = 252.0 -margin_bottom = 14.0 -mouse_default_cursor_shape = 2 +[node name="AlphaMax" type="TextureProgressBar" parent="DynamicsPanel/VBoxContainer/LimitContainer"] +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" max_value = 1.0 step = 0.01 value = 1.0 @@ -318,25 +292,21 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") prefix = "End" snap_step = 0.1 [node name="SizeLabel" type="Label" parent="DynamicsPanel/VBoxContainer/LimitContainer"] -margin_top = 18.0 -margin_right = 82.0 -margin_bottom = 32.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Size" -[node name="SizeMin" type="TextureProgress" parent="DynamicsPanel/VBoxContainer/LimitContainer"] -margin_left = 86.0 -margin_top = 18.0 -margin_right = 167.0 -margin_bottom = 32.0 -mouse_default_cursor_shape = 2 +[node name="SizeMin" type="TextureProgressBar" parent="DynamicsPanel/VBoxContainer/LimitContainer"] +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" max_value = 25.0 value = 1.0 allow_greater = true @@ -345,17 +315,15 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") prefix = "Start" -[node name="SizeMax" type="TextureProgress" parent="DynamicsPanel/VBoxContainer/LimitContainer"] -margin_left = 171.0 -margin_top = 18.0 -margin_right = 252.0 -margin_bottom = 32.0 -mouse_default_cursor_shape = 2 +[node name="SizeMax" type="TextureProgressBar" parent="DynamicsPanel/VBoxContainer/LimitContainer"] +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" max_value = 25.0 value = 4.0 allow_greater = true @@ -364,92 +332,80 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 5 ) +script = ExtResource("5") prefix = "End" [node name="ThresholdsHeader" type="HBoxContainer" parent="DynamicsPanel/VBoxContainer"] -margin_top = 126.0 -margin_right = 252.0 -margin_bottom = 140.0 +layout_mode = 2 [node name="Label" type="Label" parent="DynamicsPanel/VBoxContainer/ThresholdsHeader"] -margin_right = 70.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Thresholds" [node name="HSeparator" type="HSeparator" parent="DynamicsPanel/VBoxContainer/ThresholdsHeader"] -margin_left = 74.0 -margin_right = 252.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="ThresholdContainer" type="GridContainer" parent="DynamicsPanel/VBoxContainer"] -margin_top = 144.0 -margin_right = 252.0 -margin_bottom = 208.0 +layout_mode = 2 columns = 2 [node name="ThresholdPressureLabel" type="Label" parent="DynamicsPanel/VBoxContainer/ThresholdContainer"] -margin_top = 8.0 -margin_right = 56.0 -margin_bottom = 22.0 +layout_mode = 2 text = "Pressure" -[node name="ThresholdPressure" parent="DynamicsPanel/VBoxContainer/ThresholdContainer" instance=ExtResource( 8 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_left = 60.0 -margin_right = 252.0 -margin_bottom = 30.0 +[node name="ThresholdPressure" parent="DynamicsPanel/VBoxContainer/ThresholdContainer" instance=ExtResource("8")] +layout_mode = 2 size_flags_horizontal = 3 start = 0.2 end = 0.8 [node name="TextureRect" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdPressure" index="0"] -margin_right = 192.0 -margin_bottom = 30.0 -texture = SubResource( 4 ) +texture = SubResource("4") [node name="PressurePreview" type="ProgressBar" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdPressure/TextureRect" index="0"] unique_name_in_owner = true -modulate = Color( 1, 1, 1, 0.294118 ) +modulate = Color(1, 1, 1, 0.294118) +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 max_value = 1.0 step = 0.001 value = 0.497 -percent_visible = false + +[node name="Value" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdPressure/TextureRect" index="1"] +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_right = 1.0 +offset_bottom = 23.0 [node name="ThresholdVelocityLabel" type="Label" parent="DynamicsPanel/VBoxContainer/ThresholdContainer"] -margin_top = 42.0 -margin_right = 56.0 -margin_bottom = 56.0 +layout_mode = 2 text = "Velocity" -[node name="ThresholdVelocity" parent="DynamicsPanel/VBoxContainer/ThresholdContainer" instance=ExtResource( 8 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_left = 60.0 -margin_top = 34.0 -margin_right = 252.0 -margin_bottom = 64.0 +[node name="ThresholdVelocity" parent="DynamicsPanel/VBoxContainer/ThresholdContainer" instance=ExtResource("8")] +layout_mode = 2 start = 0.2 end = 0.8 [node name="TextureRect" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdVelocity" index="0"] -margin_right = 192.0 -margin_bottom = 30.0 -texture = SubResource( 5 ) +texture = SubResource("5") [node name="VelocityPreview" type="ProgressBar" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdVelocity/TextureRect" index="0"] unique_name_in_owner = true -modulate = Color( 1, 1, 1, 0.294118 ) +modulate = Color(1, 1, 1, 0.294118) +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 max_value = 1.0 step = 0.001 -percent_visible = false + +[node name="Value" parent="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdVelocity/TextureRect" index="1"] +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_right = 1.0 +offset_bottom = 23.0 [connection signal="resized" from="." to="." method="_on_resized"] [connection signal="toggled" from="ScrollContainer/CenterContainer/GridContainer/Horizontal" to="." method="_on_Horizontal_toggled"] diff --git a/src/UI/Nodes/AnimatePanel.gd b/src/UI/Nodes/AnimatePanel.gd index c0f9eed1f4c..5a39958e684 100644 --- a/src/UI/Nodes/AnimatePanel.gd +++ b/src/UI/Nodes/AnimatePanel.gd @@ -2,16 +2,16 @@ class_name AnimatePanel extends PanelContainer var image_effect_node: ConfirmationDialog -var frames := [] # Set this value before calling "get_animated_value" -var properties := [] # Contains dictionary of properties -var resetter_values := [] # Contains the Original properties without any change -var _current_id := 0 # The property currently selected in "property_list" +var frames := [] ## Set this value before calling "get_animated_value" +var properties := [] ## Contains dictionary of properties +var resetter_values := [] ## Contains the Original properties without any change +var _current_id := 0 ## The property currently selected in "property_list" -onready var can_animate_button: CheckBox = $"%CanAnimate" -onready var property_list: ItemList = $"%PropertyList" -onready var initial_value: ValueSlider = $"%Initial" -onready var final_value: ValueSlider = $"%Final" -onready var preview_slider: TextureProgress = $"%PreviewSlider" +@onready var can_animate_button: CheckBox = $"%CanAnimate" +@onready var property_list: ItemList = $"%PropertyList" +@onready var initial_value: ValueSlider = $"%Initial" +@onready var final_value: ValueSlider = $"%Final" +@onready var preview_slider: TextureProgressBar = $"%PreviewSlider" func _ready() -> void: @@ -39,11 +39,10 @@ func add_float_property(prop_name: String, property_node: Range): properties.append(info) resetter_values.append(property_node.value) property_list.add_item(prop_name) - property_node.connect("value_changed", self, "_on_range_node_value_changed") + property_node.value_changed.connect(_on_range_node_value_changed) func get_animated_value(frame_idx: int, property_idx := 0) -> float: - var tween := SceneTreeTween.new() if property_idx <= 0 or property_idx < properties.size(): if frame_idx in frames: if properties[property_idx]["can_animate"] and frames.size() > 1: @@ -53,9 +52,10 @@ func get_animated_value(frame_idx: int, property_idx := 0) -> float: var delta = properties[property_idx]["range_node"].value - initial var transition_type = properties[property_idx]["transition_type"] var ease_type = properties[property_idx]["ease_type"] - return tween.interpolate_value( + var value = Tween.interpolate_value( initial, delta, elapsed, duration, transition_type, ease_type ) + return value else: return properties[property_idx]["range_node"].value else: @@ -78,10 +78,10 @@ func _on_Final_value_changed(value: float) -> void: func _on_range_node_value_changed(_value) -> void: # Value is changed from outside the Animate Panel if properties[_current_id]["range_node"].value != final_value.value: - if final_value.is_connected("value_changed", self, "_on_Final_value_changed"): - final_value.disconnect("value_changed", self, "_on_Final_value_changed") + if final_value.value_changed.is_connected(_on_Final_value_changed): + final_value.value_changed.disconnect(_on_Final_value_changed) final_value.value = properties[_current_id]["range_node"].value - final_value.connect("value_changed", self, "_on_Final_value_changed") + final_value.value_changed.connect(_on_Final_value_changed) func _on_CanAnimate_toggled(button_pressed: bool) -> void: @@ -102,10 +102,10 @@ func _on_PropertyList_item_selected(index: int) -> void: func _refresh_properties(idx: int): - if initial_value.is_connected("value_changed", self, "_on_Initial_value_changed"): - initial_value.disconnect("value_changed", self, "_on_Initial_value_changed") - if final_value.is_connected("value_changed", self, "_on_Final_value_changed"): - final_value.disconnect("value_changed", self, "_on_Final_value_changed") + if initial_value.value_changed.is_connected(_on_Initial_value_changed): + initial_value.value_changed.disconnect(_on_Initial_value_changed) + if final_value.value_changed.is_connected(_on_Final_value_changed): + final_value.value_changed.disconnect(_on_Final_value_changed) # Nodes setup var property_node: Range = properties[idx]["range_node"] @@ -124,7 +124,7 @@ func _refresh_properties(idx: int): initial_value.step = property_node.step # Update values - can_animate_button.pressed = properties[idx]["can_animate"] + can_animate_button.button_pressed = properties[idx]["can_animate"] initial_value.value = properties[idx]["initial_value"] if properties[idx]["range_node"].value != final_value.value: final_value.value = properties[idx]["range_node"].value @@ -132,8 +132,8 @@ func _refresh_properties(idx: int): $"%EaseType".select($"%EaseType".get_item_index(properties[idx]["ease_type"])) $"%TransitionType".select($"%TransitionType".get_item_index(properties[idx]["transition_type"])) - initial_value.connect("value_changed", self, "_on_Initial_value_changed") - final_value.connect("value_changed", self, "_on_Final_value_changed") + initial_value.value_changed.connect(_on_Initial_value_changed) + final_value.value_changed.connect(_on_Final_value_changed) func _populate_ease_type(): @@ -155,6 +155,7 @@ func _populate_transition_type(): $"%TransitionType".add_item("Wiggling around the edges", Tween.TRANS_ELASTIC) $"%TransitionType".add_item("Bouncing at the end", Tween.TRANS_BOUNCE) $"%TransitionType".add_item("Backing out at ends", Tween.TRANS_BACK) + $"%TransitionType".add_item("Spring towards the end", Tween.TRANS_SPRING) func _on_EaseType_item_selected(index: int) -> void: diff --git a/src/UI/Nodes/AnimatePanel.tscn b/src/UI/Nodes/AnimatePanel.tscn index 3723270f3ea..541c1764695 100644 --- a/src/UI/Nodes/AnimatePanel.tscn +++ b/src/UI/Nodes/AnimatePanel.tscn @@ -1,152 +1,110 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://dmlgx1jgau8a5"] -[ext_resource path="res://src/UI/Nodes/AnimatePanel.gd" type="Script" id=1] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=2] +[ext_resource type="Script" path="res://src/UI/Nodes/AnimatePanel.gd" id="1"] +[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="2"] [node name="AnimatePanel" type="PanelContainer"] -margin_right = 360.0 -margin_bottom = 226.0 -script = ExtResource( 1 ) +offset_right = 360.0 +offset_bottom = 226.0 +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 353.0 -margin_bottom = 219.0 +layout_mode = 2 [node name="TopOptions" type="HBoxContainer" parent="VBoxContainer"] -margin_right = 346.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="Label" type="Label" parent="VBoxContainer/TopOptions"] -margin_top = 5.0 -margin_right = 143.0 -margin_bottom = 19.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Animatable Properties" -[node name="PreviewSlider" parent="VBoxContainer/TopOptions" instance=ExtResource( 2 )] +[node name="PreviewSlider" parent="VBoxContainer/TopOptions" instance=ExtResource("2")] unique_name_in_owner = true -margin_left = 147.0 -margin_right = 346.0 +layout_mode = 2 min_value = 1.0 max_value = 1.0 value = 1.0 prefix = "Preview frame:" [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 28.0 -margin_right = 346.0 -margin_bottom = 212.0 +layout_mode = 2 size_flags_vertical = 3 [node name="PropertyList" type="ItemList" parent="VBoxContainer/HBoxContainer"] unique_name_in_owner = true -margin_right = 100.0 -margin_bottom = 184.0 -rect_min_size = Vector2( 100, 0 ) +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 [node name="Options" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"] unique_name_in_owner = true visible = false -margin_left = 104.0 -margin_right = 346.0 -margin_bottom = 184.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer/Options"] -margin_right = 242.0 -margin_bottom = 14.0 +layout_mode = 2 [node name="Name" type="Label" parent="VBoxContainer/HBoxContainer/Options/HBoxContainer"] unique_name_in_owner = true -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" [node name="HSeparator" type="HSeparator" parent="VBoxContainer/HBoxContainer/Options/HBoxContainer"] -margin_left = 4.0 -margin_right = 242.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="CanAnimate" type="CheckBox" parent="VBoxContainer/HBoxContainer/Options"] unique_name_in_owner = true -margin_left = 160.0 -margin_top = 18.0 -margin_right = 242.0 -margin_bottom = 42.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 8 +mouse_default_cursor_shape = 2 text = "Animate" [node name="Values" type="GridContainer" parent="VBoxContainer/HBoxContainer/Options"] -margin_top = 46.0 -margin_right = 242.0 -margin_bottom = 146.0 +layout_mode = 2 columns = 2 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/Options/Values"] -margin_top = 5.0 -margin_right = 87.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Initial value:" -align = 2 -[node name="Initial" parent="VBoxContainer/HBoxContainer/Options/Values" instance=ExtResource( 2 )] +[node name="Initial" parent="VBoxContainer/HBoxContainer/Options/Values" instance=ExtResource("2")] unique_name_in_owner = true -margin_left = 91.0 -margin_right = 242.0 +layout_mode = 2 editable = false [node name="Label2" type="Label" parent="VBoxContainer/HBoxContainer/Options/Values"] -margin_top = 33.0 -margin_right = 87.0 -margin_bottom = 47.0 +layout_mode = 2 text = "Final value:" -align = 2 -[node name="Final" parent="VBoxContainer/HBoxContainer/Options/Values" instance=ExtResource( 2 )] +[node name="Final" parent="VBoxContainer/HBoxContainer/Options/Values" instance=ExtResource("2")] unique_name_in_owner = true -margin_left = 91.0 -margin_top = 28.0 -margin_right = 242.0 -margin_bottom = 52.0 +layout_mode = 2 editable = false [node name="Label4" type="Label" parent="VBoxContainer/HBoxContainer/Options/Values"] -margin_top = 59.0 -margin_right = 87.0 -margin_bottom = 73.0 +layout_mode = 2 text = "Ease type:" -align = 2 [node name="EaseType" type="OptionButton" parent="VBoxContainer/HBoxContainer/Options/Values"] unique_name_in_owner = true -margin_left = 91.0 -margin_top = 56.0 -margin_right = 242.0 -margin_bottom = 76.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_vertical = 4 +mouse_default_cursor_shape = 2 disabled = true clip_text = true [node name="Label5" type="Label" parent="VBoxContainer/HBoxContainer/Options/Values"] -margin_top = 83.0 -margin_right = 87.0 -margin_bottom = 97.0 +layout_mode = 2 text = "Interpolation:" -align = 2 [node name="TransitionType" type="OptionButton" parent="VBoxContainer/HBoxContainer/Options/Values"] unique_name_in_owner = true -margin_left = 91.0 -margin_top = 80.0 -margin_right = 242.0 -margin_bottom = 100.0 -hint_tooltip = "How the value changes while moving from initial to final value" -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_vertical = 4 +tooltip_text = "How the value changes while moving from initial to final value" +mouse_default_cursor_shape = 2 disabled = true clip_text = true diff --git a/src/UI/Nodes/CollapsibleContainer.gd b/src/UI/Nodes/CollapsibleContainer.gd index 9fe05c911b9..862a258845c 100644 --- a/src/UI/Nodes/CollapsibleContainer.gd +++ b/src/UI/Nodes/CollapsibleContainer.gd @@ -1,9 +1,16 @@ -tool +@tool class_name CollapsibleContainer extends VBoxContainer +## A button that, when clicked, expands into a VBoxContainer. -export var text := "" setget _set_text -export var visible_content := false setget _set_visible_content +@export var text := "": + set(value): + text = value + _label.text = value +@export var visible_content := false: + set(value): + visible_content = value + _button.button_pressed = value var _button := Button.new() var _texture_rect := TextureRect.new() @@ -17,43 +24,33 @@ func _init() -> void: func _ready() -> void: _button.toggle_mode = true _button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND - _button.connect("toggled", self, "_on_Button_toggled") - add_child(_button) - move_child(_button, 0) + _button.toggled.connect(_on_Button_toggled) + add_child(_button, false, Node.INTERNAL_MODE_FRONT) _texture_rect.anchor_top = 0.5 _texture_rect.anchor_bottom = 0.5 - _texture_rect.margin_left = 2 - _texture_rect.margin_top = -6 - _texture_rect.margin_right = 14 - _texture_rect.margin_bottom = 6 - _texture_rect.rect_rotation = -90 - _texture_rect.rect_pivot_offset = Vector2(6, 6) + _texture_rect.offset_left = 2 + _texture_rect.offset_top = -6 + _texture_rect.offset_right = 14 + _texture_rect.offset_bottom = 6 + _texture_rect.rotation_degrees = -90 + _texture_rect.pivot_offset = Vector2(6, 6) _texture_rect.add_to_group("UIButtons") _button.add_child(_texture_rect) - _label.valign = Label.VALIGN_CENTER - _label.rect_position = Vector2(14, 0) + _label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER + _label.position = Vector2(14, 0) _label.size_flags_vertical = Control.SIZE_SHRINK_CENTER _button.add_child(_label) - _button.pressed = visible_content + _button.custom_minimum_size = _label.size + _button.button_pressed = visible_content for child in get_children(): if not child is CanvasItem or child == _button: continue - child.connect("visibility_changed", self, "_child_visibility_changed", [child]) + child.visibility_changed.connect(_child_visibility_changed.bind(child)) func _notification(what: int) -> void: if what == NOTIFICATION_THEME_CHANGED: - _texture_rect.texture = get_icon("arrow_normal", "CollapsibleContainer") - - -func _set_text(value: String) -> void: - text = value - _label.text = value - - -func _set_visible_content(value: bool) -> void: - visible_content = value - _button.pressed = value + _texture_rect.texture = get_theme_icon("arrow_normal", "CollapsibleContainer") func _on_Button_toggled(button_pressed: bool) -> void: @@ -62,16 +59,15 @@ func _on_Button_toggled(button_pressed: bool) -> void: func _set_visible(pressed: bool) -> void: var angle := 0.0 if pressed else -90.0 - var tween := create_tween() - tween.tween_property(_texture_rect, "rect_rotation", angle, 0.05) + create_tween().tween_property(_texture_rect, "rotation_degrees", angle, 0.05) for child in get_children(): if not child is CanvasItem or child == _button: continue child.visible = pressed -# Checks if a child becomes visible from another sure and ensures -# it remains invisible if the button is not pressed +## Checks if a child becomes visible from another sure and ensures +## it remains invisible if the button is not pressed func _child_visibility_changed(child: CanvasItem) -> void: if not _button.pressed: child.visible = false diff --git a/src/UI/Nodes/CollapsibleContainer.tscn b/src/UI/Nodes/CollapsibleContainer.tscn index 71cc81cb59d..b1968e012a2 100644 --- a/src/UI/Nodes/CollapsibleContainer.tscn +++ b/src/UI/Nodes/CollapsibleContainer.tscn @@ -1,9 +1,9 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://cii2hpylme60s"] -[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.gd" type="Script" id=2] +[ext_resource type="Script" path="res://src/UI/Nodes/CollapsibleContainer.gd" id="2"] [node name="CollapsibleContainer" type="VBoxContainer"] -margin_right = 40.0 -margin_bottom = 20.0 -theme_type_variation = "CollapsibleContainer" -script = ExtResource( 2 ) +offset_right = 40.0 +offset_bottom = 20.0 +theme_type_variation = &"CollapsibleContainer" +script = ExtResource("2") diff --git a/src/UI/Nodes/GradientEdit.gd b/src/UI/Nodes/GradientEdit.gd index 963af519f78..da1ab9d8ad3 100644 --- a/src/UI/Nodes/GradientEdit.gd +++ b/src/UI/Nodes/GradientEdit.gd @@ -7,16 +7,16 @@ extends Control signal updated(gradient, cc) var continuous_change := true -var active_cursor: GradientCursor # Showing a color picker popup to change a cursor's color +var active_cursor: GradientCursor ## Showing a color picker popup to change a cursor's color -onready var x_offset: float = rect_size.x - GradientCursor.WIDTH -onready var texture_rect: TextureRect = $TextureRect -onready var texture: Texture = $TextureRect.texture -onready var gradient: Gradient = texture.gradient -onready var color_picker: ColorPicker = $Popup.get_node("ColorPicker") -onready var divide_dialog: ConfirmationDialog = $DivideConfirmationDialog -onready var number_of_parts_spin_box: SpinBox = $"%NumberOfPartsSpinBox" -onready var add_point_end_check_box: CheckBox = $"%AddPointEndCheckBox" +@onready var x_offset: float = size.x - GradientCursor.WIDTH +@onready var texture_rect: TextureRect = $TextureRect as TextureRect +@onready var texture := texture_rect.texture as GradientTexture2D +@onready var gradient := texture.gradient +@onready var color_picker := $Popup.get_node("ColorPicker") as ColorPicker +@onready var divide_dialog := $DivideConfirmationDialog as ConfirmationDialog +@onready var number_of_parts_spin_box := $"%NumberOfPartsSpinBox" as SpinBox +@onready var add_point_end_check_box := $"%AddPointEndCheckBox" as CheckBox class GradientCursor: @@ -26,20 +26,19 @@ class GradientCursor: var color: Color var sliding := false - onready var parent: TextureRect = get_parent() - onready var grand_parent: Container = parent.get_parent() - onready var label: Label = parent.get_node("Value") + @onready var parent: TextureRect = get_parent() + @onready var grand_parent: Container = parent.get_parent() + @onready var label: Label = parent.get_node("Value") func _ready() -> void: - rect_position = Vector2(0, 15) - rect_size = Vector2(WIDTH, 15) + position = Vector2(0, 15) + size = Vector2(WIDTH, 15) func _draw() -> void: -# warning-ignore:integer_division - var polygon := PoolVector2Array( + var polygon := PackedVector2Array( [ Vector2(0, 5), - Vector2(WIDTH / 2, 0), + Vector2(WIDTH / 2.0, 0), Vector2(WIDTH, 5), Vector2(WIDTH, 15), Vector2(0, 15), @@ -53,49 +52,49 @@ class GradientCursor: func _gui_input(ev: InputEvent) -> void: if ev is InputEventMouseButton: - if ev.button_index == BUTTON_LEFT: - if ev.doubleclick: + if ev.button_index == MOUSE_BUTTON_LEFT: + if ev.double_click: grand_parent.select_color(self, ev.global_position) elif ev.pressed: grand_parent.continuous_change = false sliding = true label.visible = true - label.text = "%.03f" % get_cursor_position() + label.text = "%.03f" % get_caret_column() else: sliding = false label.visible = false - elif ev.button_index == BUTTON_RIGHT and grand_parent.get_sorted_cursors().size() > 2: + elif ( + ev.button_index == MOUSE_BUTTON_RIGHT + and grand_parent.get_sorted_cursors().size() > 2 + ): parent.remove_child(self) grand_parent.continuous_change = false grand_parent.update_from_value() queue_free() - elif ev is InputEventMouseMotion and (ev.button_mask & BUTTON_MASK_LEFT) != 0 and sliding: - rect_position.x += get_local_mouse_position().x - if ev.control: - rect_position.x = ( - round(get_cursor_position() * 20.0) - * 0.05 - * (parent.rect_size.x - WIDTH) - ) - rect_position.x = min(max(0, rect_position.x), parent.rect_size.x - rect_size.x) + elif ( + ev is InputEventMouseMotion + and (ev.button_mask & MOUSE_BUTTON_MASK_LEFT) != 0 + and sliding + ): + position.x += get_local_mouse_position().x + if ev.ctrl_pressed: + position.x = (roundi(get_caret_column() * 20.0) * 0.05 * (parent.size.x - WIDTH)) + position.x = mini(maxi(0, position.x), parent.size.x - size.x) grand_parent.update_from_value() - label.text = "%.03f" % get_cursor_position() + label.text = "%.03f" % get_caret_column() - func get_cursor_position() -> float: - return rect_position.x / (parent.rect_size.x - WIDTH) + func get_caret_column() -> float: + return position.x / (parent.size.x - WIDTH) func set_color(c: Color) -> void: color = c grand_parent.update_from_value() - update() + queue_redraw() - static func sort(a, b) -> bool: - return a.get_position() < b.get_position() - - func can_drop_data(_position, data) -> bool: + func _can_drop_data(_position, data) -> bool: return typeof(data) == TYPE_COLOR - func drop_data(_position, data) -> void: + func _drop_data(_position, data) -> void: set_color(data) @@ -115,7 +114,7 @@ func _create_cursors() -> void: func _gui_input(ev: InputEvent) -> void: if ev.is_action_pressed("left_mouse"): - var p = clamp(ev.position.x, 0, x_offset) + var p := clampf(ev.position.x, 0, x_offset) add_cursor(p, get_gradient_color(p)) continuous_change = false update_from_value() @@ -125,41 +124,43 @@ func update_from_value() -> void: gradient.offsets = [] for c in texture_rect.get_children(): if c is GradientCursor: - var point: float = c.rect_position.x / x_offset + var point: float = c.position.x / x_offset gradient.add_point(point, c.color) - emit_signal("updated", gradient, continuous_change) + updated.emit(gradient, continuous_change) continuous_change = true func add_cursor(x: float, color: Color) -> void: var cursor := GradientCursor.new() texture_rect.add_child(cursor) - cursor.rect_position.x = x + cursor.position.x = x cursor.color = color -func select_color(cursor: GradientCursor, position: Vector2) -> void: +func select_color(cursor: GradientCursor, pos: Vector2) -> void: active_cursor = cursor color_picker.color = cursor.color - if position.x > rect_global_position.x + (rect_size.x / 2.0): - position.x = rect_global_position.x + rect_size.x + if pos.x > global_position.x + (size.x / 2.0): + pos.x = global_position.x + size.x else: - position.x = rect_global_position.x - $Popup.rect_size.x - $Popup.rect_position = position + pos.x = global_position.x - $Popup.size.x + $Popup.position = pos $Popup.popup() func get_sorted_cursors() -> Array: - var array := [] + var array: Array[GradientCursor] = [] for c in texture_rect.get_children(): if c is GradientCursor: array.append(c) - array.sort_custom(GradientCursor, "sort") + array.sort_custom( + func(a: GradientCursor, b: GradientCursor): return a.get_position() < b.get_position() + ) return array func get_gradient_color(x: float) -> Color: - return gradient.interpolate(x / x_offset) + return gradient.sample(x / x_offset) func _on_ColorPicker_color_changed(color: Color) -> void: @@ -169,11 +170,11 @@ func _on_ColorPicker_color_changed(color: Color) -> void: func _on_GradientEdit_resized() -> void: if not gradient: return - x_offset = rect_size.x - GradientCursor.WIDTH + x_offset = size.x - GradientCursor.WIDTH _create_cursors() -func _on_InterpolationOptionButton_item_selected(index: int) -> void: +func _on_InterpolationOptionButton_item_selected(index: Gradient.InterpolationMode) -> void: gradient.interpolation_mode = index @@ -182,19 +183,19 @@ func _on_DivideButton_pressed() -> void: func _on_DivideConfirmationDialog_confirmed() -> void: - var add_point_to_end := add_point_end_check_box.pressed + var add_point_to_end := add_point_end_check_box.button_pressed var parts := number_of_parts_spin_box.value - var colors := [] - var end_point = 1 if add_point_to_end else 0 + var colors: PackedColorArray = [] + var end_point := 1 if add_point_to_end else 0 parts -= end_point if not add_point_to_end: # Move the final color one part behind, useful for it to be in constant interpolation - gradient.add_point((parts - 1) / parts, gradient.interpolate(1)) + gradient.add_point((parts - 1) / parts, gradient.sample(1)) for i in parts + end_point: - colors.append(gradient.interpolate(i / parts)) + colors.append(gradient.sample(i / parts)) gradient.offsets = [] for i in parts + end_point: gradient.add_point(i / parts, colors[i]) _create_cursors() - emit_signal("updated", gradient, continuous_change) + updated.emit(gradient, continuous_change) diff --git a/src/UI/Nodes/GradientEdit.tscn b/src/UI/Nodes/GradientEdit.tscn index 33576c204e6..fd05faef8c2 100644 --- a/src/UI/Nodes/GradientEdit.tscn +++ b/src/UI/Nodes/GradientEdit.tscn @@ -1,116 +1,101 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://bn4aw27dj7pwi"] -[ext_resource path="res://src/UI/Nodes/GradientEdit.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/UI/Nodes/GradientEdit.gd" id="1"] -[sub_resource type="Gradient" id=1] +[sub_resource type="Gradient" id="1"] -[sub_resource type="GradientTexture" id=2] -gradient = SubResource( 1 ) +[sub_resource type="GradientTexture2D" id="2"] +gradient = SubResource("1") [node name="GradientEdit" type="VBoxContainer"] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -script = ExtResource( 1 ) +script = ExtResource("1") [node name="TextureRect" type="TextureRect" parent="."] -margin_right = 1280.0 -margin_bottom = 672.0 -rect_min_size = Vector2( 0, 30 ) +custom_minimum_size = Vector2(0, 30) +layout_mode = 2 size_flags_vertical = 3 -texture = SubResource( 2 ) -expand = true +texture = SubResource("2") +expand_mode = 1 [node name="Value" type="Label" parent="TextureRect"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -20.0 -margin_top = -7.0 -margin_right = 20.0 -margin_bottom = 7.0 +offset_left = -20.0 +offset_top = -7.0 +offset_right = 20.0 +offset_bottom = 7.0 [node name="Popup" type="PopupPanel" parent="."] -margin_right = 316.0 -margin_bottom = 470.0 [node name="ColorPicker" type="ColorPicker" parent="Popup"] -margin_left = 4.0 -margin_top = 4.0 -margin_right = 312.0 -margin_bottom = 466.0 +offset_left = 4.0 +offset_top = 4.0 +offset_right = 294.0 +offset_bottom = 572.0 [node name="InterpolationContainer" type="HBoxContainer" parent="."] -margin_top = 676.0 -margin_right = 1280.0 -margin_bottom = 696.0 +layout_mode = 2 [node name="Label" type="Label" parent="InterpolationContainer"] -margin_top = 3.0 -margin_right = 638.0 -margin_bottom = 17.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Interpolation:" [node name="InterpolationOptionButton" type="OptionButton" parent="InterpolationContainer"] -margin_left = 642.0 -margin_right = 1280.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Linear" -items = [ "Linear", null, false, 0, null, "Constant", null, false, 1, null, "Cubic", null, false, 2, null ] +mouse_default_cursor_shape = 2 +item_count = 3 selected = 0 +popup/item_0/text = "Linear" +popup/item_0/id = 0 +popup/item_1/text = "Constant" +popup/item_1/id = 1 +popup/item_2/text = "Cubic" +popup/item_2/id = 2 [node name="DivideButton" type="Button" parent="."] -margin_top = 700.0 -margin_right = 1280.0 -margin_bottom = 720.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Divide into equal parts" [node name="DivideConfirmationDialog" type="ConfirmationDialog" parent="."] -margin_top = 650.0 -margin_right = 200.0 -margin_bottom = 746.0 -rect_min_size = Vector2( 180, 63 ) -resizable = true [node name="VBoxContainer" type="VBoxContainer" parent="DivideConfirmationDialog"] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -36.0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -36.0 [node name="HBoxContainer" type="HBoxContainer" parent="DivideConfirmationDialog/VBoxContainer"] -margin_right = 1280.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="Label" type="Label" parent="DivideConfirmationDialog/VBoxContainer/HBoxContainer"] -margin_top = 5.0 -margin_right = 36.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Parts:" [node name="NumberOfPartsSpinBox" type="SpinBox" parent="DivideConfirmationDialog/VBoxContainer/HBoxContainer"] unique_name_in_owner = true -margin_left = 40.0 -margin_right = 1280.0 -margin_bottom = 24.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 2.0 value = 3.0 allow_greater = true [node name="AddPointEndCheckBox" type="CheckBox" parent="DivideConfirmationDialog/VBoxContainer"] unique_name_in_owner = true -margin_top = 28.0 -margin_right = 1280.0 -margin_bottom = 52.0 -hint_tooltip = "If this is enabled, the last point gets added at the end of the gradient. +layout_mode = 2 +tooltip_text = "If this is enabled, the last point gets added at the end of the gradient. Disable this if you wish to convert the gradient to have constant interpolation, so that the last color will be taken into account." mouse_default_cursor_shape = 2 text = "Add point at the end" diff --git a/src/UI/Nodes/MaxMinEdit.gd b/src/UI/Nodes/MaxMinEdit.gd index ba99b15b204..636cf065539 100644 --- a/src/UI/Nodes/MaxMinEdit.gd +++ b/src/UI/Nodes/MaxMinEdit.gd @@ -6,17 +6,17 @@ extends Control signal updated(zone) -export(float) var start = 0.0 -export(float) var end = 1.0 -export(Color) var zone_col = Color.black -export(Color) var background_col = Color.gray +@export var start := 0.0 +@export var end := 1.0 +@export var zone_col := Color.BLACK +@export var background_col := Color.GRAY var active_cursor: GradientCursor # Showing a color picker popup to change a cursor's color -onready var x_offset: float = rect_size.x - GradientCursor.WIDTH -onready var texture_rect: TextureRect = $TextureRect -onready var texture: Texture = $TextureRect.texture -onready var gradient: Gradient = texture.gradient +@onready var x_offset: float = size.x - GradientCursor.WIDTH +@onready var texture_rect := $TextureRect as TextureRect +@onready var texture := texture_rect.texture as GradientTexture2D +@onready var gradient := texture.gradient as Gradient class GradientCursor: @@ -26,20 +26,19 @@ class GradientCursor: var color: Color var sliding := false - onready var parent: TextureRect = get_parent() - onready var grand_parent: Container = parent.get_parent() - onready var label: Label = parent.get_node("Value") + @onready var parent: TextureRect = get_parent() + @onready var grand_parent: Container = parent.get_parent() + @onready var label: Label = parent.get_node("Value") func _ready() -> void: - rect_position = Vector2(0, 15) - rect_size = Vector2(WIDTH, 15) + position = Vector2(0, 15) + size = Vector2(WIDTH, 15) func _draw() -> void: -# warning-ignore:integer_division - var polygon := PoolVector2Array( + var polygon := PackedVector2Array( [ Vector2(0, 5), - Vector2(WIDTH / 2, 0), + Vector2(WIDTH / 2.0, 0), Vector2(WIDTH, 5), Vector2(WIDTH, 15), Vector2(0, 15), @@ -53,28 +52,28 @@ class GradientCursor: func _gui_input(ev: InputEvent) -> void: if ev is InputEventMouseButton: - if ev.button_index == BUTTON_LEFT: + if ev.button_index == MOUSE_BUTTON_LEFT: if ev.pressed: sliding = true label.visible = true - label.text = "%.03f" % get_cursor_position() + label.text = "%.03f" % get_caret_column() else: sliding = false label.visible = false - elif ev is InputEventMouseMotion and (ev.button_mask & BUTTON_MASK_LEFT) != 0 and sliding: - rect_position.x += get_local_mouse_position().x - if ev.control: - rect_position.x = ( - round(get_cursor_position() * 20.0) - * 0.05 - * (parent.rect_size.x - WIDTH) - ) - rect_position.x = min(max(0, rect_position.x), parent.rect_size.x - rect_size.x) + elif ( + ev is InputEventMouseMotion + and (ev.button_mask & MOUSE_BUTTON_MASK_LEFT) != 0 + and sliding + ): + position.x += get_local_mouse_position().x + if ev.ctrl_pressed: + position.x = (roundi(get_caret_column() * 20.0) * 0.05 * (parent.size.x - WIDTH)) + position.x = mini(maxi(0, position.x), parent.size.x - size.x) grand_parent.update_from_value() - label.text = "%.03f" % get_cursor_position() + label.text = "%.03f" % get_caret_column() - func get_cursor_position() -> float: - return rect_position.x / (parent.rect_size.x - WIDTH) + func get_caret_column() -> float: + return position.x / (parent.size.x - WIDTH) func _ready() -> void: @@ -104,30 +103,30 @@ func _create_cursors() -> void: func update_from_value() -> void: gradient.offsets = [0.0] - var cursors = [] + var cursors: Array[GradientCursor] = [] for c in texture_rect.get_children(): if c is GradientCursor: cursors.append(c) - var point_1: float = cursors[0].rect_position.x / x_offset - var point_2: float = cursors[1].rect_position.x / x_offset - if cursors[1].get_cursor_position() > cursors[0].get_cursor_position(): + var point_1: float = cursors[0].position.x / x_offset + var point_2: float = cursors[1].position.x / x_offset + if cursors[1].get_caret_column() > cursors[0].get_caret_column(): gradient.add_point(point_1, zone_col) gradient.add_point(point_2, background_col) else: gradient.add_point(point_1, background_col) gradient.add_point(point_2, zone_col) - emit_signal("updated", gradient.offsets[1], gradient.offsets[2]) + updated.emit(gradient.offsets[1], gradient.offsets[2]) func add_cursor(x: float) -> void: var cursor := GradientCursor.new() texture_rect.add_child(cursor) - cursor.rect_position.x = x + cursor.position.x = x cursor.color = zone_col func _on_GradientEdit_resized() -> void: if not gradient: return - x_offset = rect_size.x - GradientCursor.WIDTH + x_offset = size.x - GradientCursor.WIDTH _create_cursors() diff --git a/src/UI/Nodes/MaxMinEdit.tscn b/src/UI/Nodes/MaxMinEdit.tscn index bad0bb7fca9..979695ad75c 100644 --- a/src/UI/Nodes/MaxMinEdit.tscn +++ b/src/UI/Nodes/MaxMinEdit.tscn @@ -1,37 +1,36 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=6 format=3 uid="uid://bmsc0s03pwji4"] -[ext_resource path="res://src/UI/Nodes/MaxMinEdit.gd" type="Script" id=1] -[ext_resource path="res://src/Shaders/AutoInvertColors.shader" type="Shader" id=2] +[ext_resource type="Script" path="res://src/UI/Nodes/MaxMinEdit.gd" id="1"] +[ext_resource type="Shader" path="res://src/Shaders/AutoInvertColors.gdshader" id="2"] -[sub_resource type="Gradient" id=3] +[sub_resource type="Gradient" id="3"] interpolation_mode = 1 -offsets = PoolRealArray( 0, 0, 1 ) -colors = PoolColorArray( 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1 ) +offsets = PackedFloat32Array(0, 0, 1) +colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1) -[sub_resource type="GradientTexture" id=6] -gradient = SubResource( 3 ) +[sub_resource type="GradientTexture2D" id="6"] +gradient = SubResource("3") -[sub_resource type="ShaderMaterial" id=5] -shader = ExtResource( 2 ) +[sub_resource type="ShaderMaterial" id="5"] +shader = ExtResource("2") [node name="MaxMinEdit" type="VBoxContainer"] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -script = ExtResource( 1 ) +script = ExtResource("1") [node name="TextureRect" type="TextureRect" parent="."] -margin_right = 1280.0 -margin_bottom = 720.0 -rect_min_size = Vector2( 0, 30 ) +custom_minimum_size = Vector2(0, 30) +layout_mode = 2 size_flags_vertical = 3 -texture = SubResource( 6 ) -expand = true +texture = SubResource("6") +expand_mode = 1 [node name="Value" type="Label" parent="TextureRect"] -material = SubResource( 5 ) +material = SubResource("5") +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -align = 1 -valign = 1 [connection signal="resized" from="." to="." method="_on_GradientEdit_resized"] diff --git a/src/UI/Nodes/NotificationLabel.gd b/src/UI/Nodes/NotificationLabel.gd index b14935dfc04..49b0ef463aa 100644 --- a/src/UI/Nodes/NotificationLabel.gd +++ b/src/UI/Nodes/NotificationLabel.gd @@ -4,9 +4,9 @@ extends Label func _ready() -> void: var tw := create_tween().set_parallel().set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_OUT) - tw.tween_property(self, "rect_position", Vector2(rect_position.x, rect_position.y - 100), 1) + tw.tween_property(self, "position", Vector2(position.x, position.y - 100), 1) tw.tween_property(self, "modulate", Color(modulate.r, modulate.g, modulate.b, 0), 1) - tw.connect("finished", self, "_on_tween_finished") + tw.finished.connect(_on_tween_finished) func _on_tween_finished() -> void: diff --git a/src/UI/Nodes/TransparentChecker.gd b/src/UI/Nodes/TransparentChecker.gd index c9264deeade..658ea136709 100644 --- a/src/UI/Nodes/TransparentChecker.gd +++ b/src/UI/Nodes/TransparentChecker.gd @@ -6,30 +6,39 @@ func _ready() -> void: func update_rect() -> void: - rect_size = Global.current_project.size + if not get_parent() is Control: + # Set the size to be the same as the project size if the parent is a SubViewport + set_bounds(Global.current_project.size) if self == Global.transparent_checker: fit_rect(Global.current_project.tiles.get_bounding_rect()) - Global.second_viewport.get_node("Viewport/TransparentChecker").update_rect() - Global.small_preview_viewport.get_node("Viewport/TransparentChecker").update_rect() - material.set_shader_param("size", Global.checker_size) - material.set_shader_param("color1", Global.checker_color_1) - material.set_shader_param("color2", Global.checker_color_2) - material.set_shader_param("follow_movement", Global.checker_follow_movement) - material.set_shader_param("follow_scale", Global.checker_follow_scale) + Global.second_viewport.get_node("SubViewport/TransparentChecker").update_rect() + Global.small_preview_viewport.get_node("SubViewport/TransparentChecker").update_rect() + material.set_shader_parameter("size", Global.checker_size) + material.set_shader_parameter("color1", Global.checker_color_1) + material.set_shader_parameter("color2", Global.checker_color_2) + material.set_shader_parameter("follow_movement", Global.checker_follow_movement) + material.set_shader_parameter("follow_scale", Global.checker_follow_scale) -func update_offset(offset: Vector2, scale: Vector2) -> void: - material.set_shader_param("offset", offset) - material.set_shader_param("scale", scale) +func update_offset(offset: Vector2, canvas_scale: Vector2) -> void: + material.set_shader_parameter("offset", offset) + material.set_shader_parameter("scale", canvas_scale) func _on_TransparentChecker_resized() -> void: - material.set_shader_param("rect_size", rect_size) + material.set_shader_parameter("rect_size", size) + + +func set_bounds(bounds: Vector2) -> void: + offset_right = bounds.x + offset_bottom = bounds.y func fit_rect(rect: Rect2) -> void: - rect_position = rect.position - rect_size = rect.size + offset_left = rect.position.x + offset_right = rect.position.x + rect.size.x + offset_top = rect.position.y + offset_bottom = rect.position.y + rect.size.y func update_transparency(value: float) -> void: @@ -42,4 +51,4 @@ func update_transparency(value: float) -> void: get_tree().get_root().transparent_bg = true # Set a minimum amount for the fade so the canvas won't disappear - material.set("shader_param/alpha", clamp(value, 0.1, 1)) + material.set_shader_parameter("alpha", clampf(value, 0.1, 1)) diff --git a/src/UI/Nodes/TransparentChecker.tscn b/src/UI/Nodes/TransparentChecker.tscn index 242eb84f0d8..45b26ea30ce 100644 --- a/src/UI/Nodes/TransparentChecker.tscn +++ b/src/UI/Nodes/TransparentChecker.tscn @@ -1,26 +1,25 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://3pmb60gpst7b"] -[ext_resource path="res://src/Shaders/TransparentChecker.shader" type="Shader" id=1] -[ext_resource path="res://src/UI/Nodes/TransparentChecker.gd" type="Script" id=2] +[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="1"] +[ext_resource type="Script" path="res://src/UI/Nodes/TransparentChecker.gd" id="2"] -[sub_resource type="ShaderMaterial" id=1] -shader = ExtResource( 1 ) -shader_param/size = 10.0 -shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 ) -shader_param/color2 = Color( 1, 1, 1, 1 ) -shader_param/offset = Vector2( 0, 0 ) -shader_param/scale = Vector2( 0, 0 ) -shader_param/rect_size = Vector2( 0, 0 ) -shader_param/follow_movement = false -shader_param/follow_scale = false +[sub_resource type="ShaderMaterial" id="1"] +shader = ExtResource("1") +shader_parameter/size = 10.0 +shader_parameter/alpha = 1.0 +shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1) +shader_parameter/color2 = Color(1, 1, 1, 1) +shader_parameter/offset = Vector2(0, 0) +shader_parameter/scale = Vector2(0, 0) +shader_parameter/rect_size = Vector2(0, 0) +shader_parameter/follow_movement = false +shader_parameter/follow_scale = false [node name="TransparentChecker" type="ColorRect"] -material = SubResource( 1 ) -margin_right = 40.0 -margin_bottom = 40.0 +material = SubResource("1") +anchors_preset = -1 mouse_filter = 2 -script = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} +script = ExtResource("2") +metadata/_edit_use_anchors_ = true + [connection signal="resized" from="." to="." method="_on_TransparentChecker_resized"] diff --git a/src/UI/Nodes/ValueSlider.gd b/src/UI/Nodes/ValueSlider.gd index 3e9e6ce23b0..1c47ef3f90f 100644 --- a/src/UI/Nodes/ValueSlider.gd +++ b/src/UI/Nodes/ValueSlider.gd @@ -1,33 +1,44 @@ -# Initial version made by MrTriPie, has been modified by Overloaded. -tool +@tool class_name ValueSlider -extends TextureProgress +extends TextureProgressBar +## Custom node that combines the behavior of a Slider and a SpinBox. +## Initial version made by MrTriPie, has been modified by Overloaded. enum { NORMAL, HELD, SLIDING, TYPING } -export var editable := true -export var prefix: String setget _prefix_changed -export var suffix: String setget _suffix_changed -# Size of additional snapping (applied in addition to Range's step). -# This should always be larger than step. -export var snap_step := 1.0 -# If snap_by_default is true, snapping is enabled when Control is NOT held (used for sliding in -# larger steps by default, and smaller steps when holding Control). -# If false, snapping is enabled when Control IS held (used for sliding in smaller steps by -# default, and larger steps when holding Control). -export var snap_by_default := false -# If show_progress is true it will show the colored progress bar, good for values with a specific -# range. False will hide it, which is good for values that can be any number. -export var show_progress := true -export var show_arrows := true setget _show_arrows_changed -export var echo_arrow_time := 0.075 -# This will be replaced with input action strings in Godot 4.x -# Right now this is only used for changing the brush size with Control + Wheel -# In Godot 4.x, the shortcut will be editable -export var is_global := false +@export var editable := true +@export var prefix: String: + set(v): + prefix = v + _reset_display() +@export var suffix: String: + set(v): + suffix = v + _reset_display() +## Size of additional snapping (applied in addition to Range's step). +## This should always be larger than step. +@export var snap_step := 1.0 +## If snap_by_default is true, snapping is enabled when Control is NOT held (used for sliding in +## larger steps by default, and smaller steps when holding Control). +## If false, snapping is enabled when Control IS held (used for sliding in smaller steps by +## default, and larger steps when holding Control). +@export var snap_by_default := false +## If show_progress is true it will show the colored progress bar, good for values with a specific +## range. False will hide it, which is good for values that can be any number. +@export var show_progress := true +@export var show_arrows := true: + set(v): + show_arrows = v + if not _line_edit: + return + _value_up_button.visible = v + _value_down_button.visible = v +@export var echo_arrow_time := 0.075 +@export var global_increment_action := "" ## Global shortcut to increment +@export var global_decrement_action := "" ## Global shortcut to decrement var state := NORMAL -var arrow_is_held := 0 # Used for arrow button echo behavior. Is 1 for ValueUp, -1 for ValueDown. +var arrow_is_held := 0 ## Used for arrow button echo behavior. Is 1 for ValueUp, -1 for ValueDown. var _line_edit := LineEdit.new() var _value_up_button := TextureButton.new() @@ -45,13 +56,13 @@ func _init() -> void: func _ready() -> void: - connect("value_changed", self, "_on_value_changed") - _setup_nodes() - set_process_input(is_global) + value_changed.connect(_on_value_changed) + set_process_input(!global_increment_action.is_empty() and !global_decrement_action.is_empty()) _reset_display(true) - if not Engine.editor_hint: # Pixelorama specific code + if not Engine.is_editor_hint(): # Pixelorama specific code _value_up_button.modulate = Global.modulate_icon_color _value_down_button.modulate = Global.modulate_icon_color + _setup_nodes() func _notification(what: int) -> void: @@ -64,24 +75,16 @@ func _notification(what: int) -> void: func _input(event: InputEvent) -> void: if not editable or not is_visible_in_tree(): return - # Hardcode Control + Wheel as a global shortcut, if is_global is true - # In Godot 4.x this will change into two is_action() checks for incrementing and decrementing - if not event is InputEventMouseButton: - return - if not event.pressed: - return - if not event.control: - return - if event.button_index == BUTTON_WHEEL_UP: + if event.is_action_pressed(global_increment_action, true): if snap_by_default: - value += step if event.control else snap_step + value += step if event.ctrl_pressed else snap_step else: - value += snap_step if event.control else step - elif event.button_index == BUTTON_WHEEL_DOWN: + value += snap_step if event.ctrl_pressed else step + elif event.is_action_pressed(global_decrement_action, true): if snap_by_default: - value -= step if event.control else snap_step + value -= step if event.ctrl_pressed else snap_step else: - value -= snap_step if event.control else step + value -= snap_step if event.ctrl_pressed else step func _gui_input(event: InputEvent) -> void: @@ -89,19 +92,19 @@ func _gui_input(event: InputEvent) -> void: return if state == NORMAL: if event is InputEventMouseButton and event.pressed: - if event.button_index == BUTTON_LEFT: + if event.button_index == MOUSE_BUTTON_LEFT: state = HELD set_meta("mouse_start_position", get_local_mouse_position()) - elif event.button_index == BUTTON_WHEEL_UP: + elif event.button_index == MOUSE_BUTTON_WHEEL_UP: if snap_by_default: - value += step if event.control else snap_step + value += step if event.ctrl_pressed else snap_step else: - value += snap_step if event.control else step - elif event.button_index == BUTTON_WHEEL_DOWN: + value += snap_step if event.ctrl_pressed else step + elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN: if snap_by_default: - value -= step if event.control else snap_step + value -= step if event.ctrl_pressed else snap_step else: - value -= snap_step if event.control else step + value -= snap_step if event.ctrl_pressed else step elif state == HELD: if event.is_action_released("left_mouse"): state = TYPING @@ -110,12 +113,12 @@ func _gui_input(event: InputEvent) -> void: _line_edit.grab_focus() _line_edit.selecting_enabled = true _line_edit.select_all() - _line_edit.caret_position = _line_edit.text.length() - tint_progress = Color.transparent + _line_edit.caret_column = _line_edit.text.length() + tint_progress = Color.TRANSPARENT elif event is InputEventMouseMotion: if get_meta("mouse_start_position").distance_to(get_local_mouse_position()) > 2: state = SLIDING - set_meta("shift_pressed", event.shift) + set_meta("shift_pressed", event.shift_pressed) set_meta("start_ratio", ratio) set_meta("start_value", value) elif state == SLIDING: @@ -127,90 +130,81 @@ func _gui_input(event: InputEvent) -> void: remove_meta("shift_pressed") if event is InputEventMouseMotion: # When pressing/releasing Shift, reset starting values to prevent slider jumping around - if get_meta("shift_pressed") != event.shift: + if get_meta("shift_pressed") != event.shift_pressed: set_meta("mouse_start_position", get_local_mouse_position()) set_meta("start_ratio", ratio) set_meta("start_value", value) - set_meta("shift_pressed", event.shift) + set_meta("shift_pressed", event.shift_pressed) var x_delta: float = get_local_mouse_position().x - get_meta("mouse_start_position").x # Slow down to allow for more precision - if event.shift: + if event.shift_pressed: x_delta *= 0.1 if show_progress: - ratio = get_meta("start_ratio") + x_delta / rect_size.x + ratio = get_meta("start_ratio") + x_delta / size.x else: value = get_meta("start_value") + x_delta * step # Snap when snap_by_default is true, do the opposite when Control is pressed if snap_by_default: - if not event.control: - value = round(value / snap_step) * snap_step + if not event.ctrl_pressed: + value = roundf(value / snap_step) * snap_step else: - if event.control: - value = round(value / snap_step) * snap_step + if event.ctrl_pressed: + value = roundf(value / snap_step) * snap_step -func _setup_nodes() -> void: # Only called once on _ready() - _line_edit.align = LineEdit.ALIGN_CENTER +func _setup_nodes() -> void: ## Only called once on _ready() + focus_mode = Control.FOCUS_ALL + _line_edit.alignment = HORIZONTAL_ALIGNMENT_CENTER _line_edit.anchor_right = 1 _line_edit.anchor_bottom = 1 _line_edit.mouse_filter = Control.MOUSE_FILTER_IGNORE - _line_edit.add_stylebox_override("read_only", StyleBoxEmpty.new()) - _line_edit.add_stylebox_override("normal", StyleBoxEmpty.new()) - _line_edit.connect("text_entered", self, "_on_LineEdit_text_entered") - _line_edit.connect("focus_exited", self, "_confirm_text") - _line_edit.connect("gui_input", self, "_on_LineEdit_gui_input") + _line_edit.add_theme_stylebox_override("read_only", StyleBoxEmpty.new()) + _line_edit.add_theme_stylebox_override("normal", StyleBoxEmpty.new()) + _line_edit.text_submitted.connect(_on_LineEdit_text_entered) + _line_edit.focus_exited.connect(_confirm_text) + _line_edit.gui_input.connect(_on_LineEdit_gui_input) add_child(_line_edit) - _value_up_button.rect_scale.y = -1 + var value_up_texture_size := Vector2.ONE + if is_instance_valid(_value_up_button.texture_normal): + value_up_texture_size = _value_up_button.texture_normal.get_size() + _value_up_button.scale.y = -1 _value_up_button.anchor_left = 1 _value_up_button.anchor_right = 1 - _value_up_button.margin_left = -15 - _value_up_button.margin_top = 12 - _value_up_button.margin_right = -3 - _value_up_button.margin_bottom = 24 + _value_up_button.offset_left = -value_up_texture_size.x - 3 + _value_up_button.offset_top = value_up_texture_size.y + _value_up_button.offset_right = -3 + _value_up_button.offset_bottom = value_up_texture_size.y * 2 + _value_up_button.focus_mode = Control.FOCUS_NONE _value_up_button.add_to_group("UIButtons") - _value_up_button.connect("button_down", self, "_on_Value_button_down", [1]) - _value_up_button.connect("button_up", self, "_on_Value_button_up") + _value_up_button.button_down.connect(_on_Value_button_down.bind(1)) + _value_up_button.button_up.connect(_on_Value_button_up) add_child(_value_up_button) + var value_down_texture_size := Vector2.ONE + if is_instance_valid(_value_down_button.texture_normal): + value_down_texture_size = _value_down_button.texture_normal.get_size() _value_down_button.anchor_left = 1 _value_down_button.anchor_top = 1 _value_down_button.anchor_right = 1 _value_down_button.anchor_bottom = 1 - _value_down_button.margin_left = -15 - _value_down_button.margin_top = -12 - _value_down_button.margin_right = -3 - _value_down_button.margin_bottom = 0 + _value_down_button.offset_left = -value_down_texture_size.x - 3 + _value_down_button.offset_top = -value_up_texture_size.y + _value_down_button.offset_right = -3 + _value_down_button.offset_bottom = 0 + _value_up_button.focus_mode = Control.FOCUS_NONE _value_down_button.add_to_group("UIButtons") - _value_down_button.connect("button_down", self, "_on_Value_button_down", [-1]) - _value_down_button.connect("button_up", self, "_on_Value_button_up") + _value_down_button.button_down.connect(_on_Value_button_down.bind(-1)) + _value_down_button.button_up.connect(_on_Value_button_up) add_child(_value_down_button) - _timer.connect("timeout", self, "_on_Timer_timeout") + _timer.timeout.connect(_on_Timer_timeout) add_child(_timer) -func _prefix_changed(v: String) -> void: - prefix = v - _reset_display() - - -func _suffix_changed(v: String) -> void: - suffix = v - _reset_display() - - -func _show_arrows_changed(v: bool) -> void: - show_arrows = v - if not _line_edit: - return - _value_up_button.visible = v - _value_down_button.visible = v - - func _on_LineEdit_gui_input(event: InputEvent) -> void: if state == TYPING: - if event is InputEventKey and event.scancode == KEY_ESCAPE: + if event is InputEventKey and event.keycode == KEY_ESCAPE: _confirm_text(false) # Cancel _line_edit.release_focus() @@ -219,13 +213,13 @@ func _on_value_changed(_value: float) -> void: _reset_display() +## When pressing enter, release focus, which will call _confirm_text on focus_exited signal func _on_LineEdit_text_entered(_new_text: String) -> void: - # When pressing enter, release focus, which will call _confirm_text on focus_exited signal _line_edit.release_focus() -# Called on LineEdit's focus_exited signal -# If confirm is false it will cancel setting value +## Called on LineEdit's focus_exited signal +## If confirm is false it will cancel setting value func _confirm_text(confirm := true) -> void: if state != TYPING: return @@ -244,43 +238,40 @@ func _confirm_text(confirm := true) -> void: _reset_display(true) -func _reset_display(theme_changed := false) -> void: +func _reset_display(theme_has_changed := false) -> void: _line_edit.selecting_enabled = false # Remove the selection _line_edit.editable = false - if theme_changed and not Engine.editor_hint: - texture_under = get_icon("texture_under", "ValueSlider") - texture_over = get_icon("texture_over", "ValueSlider") - texture_progress = get_icon("texture_progress", "ValueSlider") - _value_up_button.texture_normal = get_icon("arrow_normal", "ValueSlider") - _value_up_button.texture_pressed = get_icon("arrow_pressed", "ValueSlider") - _value_up_button.texture_hover = get_icon("arrow_hover", "ValueSlider") - - _value_down_button.texture_normal = get_icon("arrow_normal", "ValueSlider") - _value_down_button.texture_pressed = get_icon("arrow_pressed", "ValueSlider") - _value_down_button.texture_hover = get_icon("arrow_hover", "ValueSlider") - - tint_under = get_color("under_color", "ValueSlider") + if theme_has_changed and not Engine.is_editor_hint(): + texture_under = get_theme_icon("texture_under", "ValueSlider") +# texture_over = get_theme_icon("texture_over", "ValueSlider") + texture_progress = get_theme_icon("texture_progress", "ValueSlider") + _value_up_button.texture_normal = get_theme_icon("arrow_normal", "ValueSlider") + _value_up_button.texture_pressed = get_theme_icon("arrow_pressed", "ValueSlider") + _value_up_button.texture_hover = get_theme_icon("arrow_hover", "ValueSlider") + + _value_down_button.texture_normal = get_theme_icon("arrow_normal", "ValueSlider") + _value_down_button.texture_pressed = get_theme_icon("arrow_pressed", "ValueSlider") + _value_down_button.texture_hover = get_theme_icon("arrow_hover", "ValueSlider") + + var line_edit_color := _line_edit.get_theme_color("font_color") + var line_edit_disabled_col: Color = get_theme_color("read_only", "LineEdit") + if editable: + _line_edit.add_theme_color_override("font_color_uneditable", line_edit_color) + else: + _line_edit.add_theme_color_override("font_color_uneditable", line_edit_disabled_col) + tint_under = get_theme_color("under_color", "ValueSlider") if show_progress: - tint_progress = get_color("progress_color", "ValueSlider") + tint_progress = get_theme_color("progress_color", "ValueSlider") else: - tint_progress = Color.transparent + tint_progress = Color.TRANSPARENT _line_edit.text = str(tr(prefix), " ", value, " ", tr(suffix)).strip_edges() - var line_edit_color := _line_edit.get_color("font_color") - var line_edit_disabled_col := get_color("read_only", "LineEdit") - if editable: - _line_edit.add_color_override("font_color_uneditable", line_edit_color) - else: - _line_edit.add_color_override("font_color_uneditable", line_edit_disabled_col) func _on_Value_button_down(direction: int) -> void: if not editable: return # Direction is either 1 or -1 - if snap_by_default: - value += (step if Input.is_action_pressed("ctrl") else snap_step) * direction - else: - value += (snap_step if Input.is_action_pressed("ctrl") else step) * direction + value += (snap_step if Input.is_action_pressed("ctrl") else step) * direction arrow_is_held = direction _timer.wait_time = echo_arrow_time * 8 # 0.6 with the default value _timer.one_shot = true @@ -292,7 +283,7 @@ func _on_Value_button_up() -> void: _timer.stop() -# Echo behavior. If the user keeps pressing the button, the value keeps changing. +## Echo behavior. If the user keeps pressing the button, the value keeps changing. func _on_Timer_timeout() -> void: if arrow_is_held == 0: _timer.stop() diff --git a/src/UI/Nodes/ValueSlider.tscn b/src/UI/Nodes/ValueSlider.tscn index 512d44c9e00..4c745cfa3df 100644 --- a/src/UI/Nodes/ValueSlider.tscn +++ b/src/UI/Nodes/ValueSlider.tscn @@ -1,23 +1,24 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://yjhp0ssng2mp"] -[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=1] -[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=2] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://c7u0yofrpm50a" path="res://assets/graphics/misc/value_slider.png" id="2"] -[node name="ValueSlider" type="TextureProgress"] -margin_right = 24.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 32, 24 ) +[node name="ValueSlider" type="TextureProgressBar"] +custom_minimum_size = Vector2(32, 24) +offset_right = 24.0 +offset_bottom = 24.0 +size_flags_horizontal = 3 +focus_mode = 2 mouse_filter = 0 mouse_default_cursor_shape = 2 -size_flags_horizontal = 3 -theme_type_variation = "ValueSlider" -texture_under = ExtResource( 2 ) -texture_progress = ExtResource( 2 ) -tint_under = Color( 0, 0, 0, 1 ) -tint_progress = Color( 0, 0, 0, 1 ) +theme_type_variation = &"ValueSlider" nine_patch_stretch = true stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 1 ) +texture_under = ExtResource("2") +texture_progress = ExtResource("2") +tint_under = Color(0, 0, 0, 1) +tint_progress = Color(0, 0, 0, 1) +script = ExtResource("1") diff --git a/src/UI/Nodes/ValueSliderV2.gd b/src/UI/Nodes/ValueSliderV2.gd index da483296ed1..9ad990b580b 100644 --- a/src/UI/Nodes/ValueSliderV2.gd +++ b/src/UI/Nodes/ValueSliderV2.gd @@ -1,26 +1,89 @@ -tool +@tool class_name ValueSliderV2 extends HBoxContainer +## A class that combines two ValueSlider nodes, for easy usage with Vector2 values. +## Also supports aspect ratio locking. signal value_changed(value) signal ratio_toggled(button_pressed) -export var editable := true setget _set_editable -export var value := Vector2.ZERO setget _set_value -export var min_value := Vector2.ZERO setget _set_min_value -export var max_value := Vector2(100.0, 100.0) setget _set_max_value -export var step := 1.0 setget _set_step -export var allow_greater := false setget _set_allow_greater -export var allow_lesser := false setget _set_allow_lesser -export var show_ratio := false setget _set_show_ratio -export(int, 1, 2) var grid_columns := 1 setget _set_grid_columns -export var slider_min_size := Vector2(32, 24) setget _set_slider_min_size -export var snap_step := 1.0 setget _set_snap_step -export var snap_by_default := false setget _set_snap_by_default -export var prefix_x := "X:" setget _set_prefix_x -export var prefix_y := "Y:" setget _set_prefix_y -export var suffix_x := "" setget _set_suffix_x -export var suffix_y := "" setget _set_suffix_y +@export var editable := true: + set(val): + editable = val + for slider in get_sliders(): + slider.editable = val + $"%RatioButton".disabled = not val +@export var value := Vector2.ZERO: + set(val): + value = val + _can_emit_signal = false + $GridContainer/X.value = value.x + $GridContainer/Y.value = value.y + _can_emit_signal = true +@export var min_value := Vector2.ZERO: + set(val): + min_value = val + $GridContainer/X.min_value = val.x + $GridContainer/Y.min_value = val.y +@export var max_value := Vector2(100.0, 100.0): + set(val): + max_value = val + $GridContainer/X.max_value = val.x + $GridContainer/Y.max_value = val.y +@export var step := 1.0: + set(val): + step = val + for slider in get_sliders(): + slider.step = val +@export var allow_greater := false: + set(val): + allow_greater = val + for slider in get_sliders(): + slider.allow_greater = val +@export var allow_lesser := false: + set(val): + allow_lesser = val + for slider in get_sliders(): + slider.allow_lesser = val +@export var show_ratio := false: + set(val): + show_ratio = val + $Ratio.visible = val +@export var grid_columns := 1: + set(val): + grid_columns = val + $GridContainer.columns = val +@export var slider_min_size := Vector2(32, 24): + set(val): + slider_min_size = val + for slider in get_sliders(): + slider.custom_minimum_size = val +@export var snap_step := 1.0: + set(val): + snap_step = val + for slider in get_sliders(): + slider.snap_step = val +@export var snap_by_default := false: + set(val): + snap_by_default = val + for slider in get_sliders(): + slider.snap_by_default = val +@export var prefix_x := "X:": + set(val): + prefix_x = val + $GridContainer/X.prefix = val +@export var prefix_y := "Y:": + set(val): + prefix_y = val + $GridContainer/Y.prefix = val +@export var suffix_x := "": + set(val): + suffix_x = val + $GridContainer/X.suffix = val +@export var suffix_y := "": + set(val): + suffix_y = val + $GridContainer/Y.suffix = val var ratio := Vector2.ONE var _locked_ratio := false @@ -28,19 +91,19 @@ var _can_emit_signal := true func _ready() -> void: - if not Engine.editor_hint: # Pixelorama specific code + if not Engine.is_editor_hint(): # Pixelorama specific code $Ratio.modulate = Global.modulate_icon_color -func get_sliders() -> Array: +func get_sliders() -> Array[ValueSlider]: return [$GridContainer/X, $GridContainer/Y] func press_ratio_button(pressed: bool) -> void: - $"%RatioButton".pressed = pressed + $"%RatioButton".button_pressed = pressed -# Greatest common divisor +## Greatest common divisor func _gcd(a: int, b: int) -> int: return a if b == 0 else _gcd(b, a % b) @@ -48,17 +111,17 @@ func _gcd(a: int, b: int) -> int: func _on_X_value_changed(val: float) -> void: value.x = val if _locked_ratio: - self.value.y = max(min_value.y, (value.x / ratio.x) * ratio.y) + value.y = maxf(min_value.y, (value.x / ratio.x) * ratio.y) if _can_emit_signal: - emit_signal("value_changed", value) + value_changed.emit(value) func _on_Y_value_changed(val: float) -> void: value.y = val if _locked_ratio: - self.value.x = max(min_value.x, (value.y / ratio.y) * ratio.x) + value.x = maxf(min_value.x, (value.y / ratio.y) * ratio.x) if _can_emit_signal: - emit_signal("value_changed", value) + value_changed.emit(value) func _on_RatioButton_toggled(button_pressed: bool) -> void: @@ -68,100 +131,4 @@ func _on_RatioButton_toggled(button_pressed: bool) -> void: ratio = Vector2.ONE else: ratio = value / divisor - emit_signal("ratio_toggled", button_pressed) - - -# Setters - - -func _set_editable(val: bool) -> void: - editable = val - for slider in get_sliders(): - slider.editable = val - $"%RatioButton".disabled = not val - - -func _set_value(val: Vector2) -> void: - value = val - _can_emit_signal = false - $GridContainer/X.value = value.x - $GridContainer/Y.value = value.y - _can_emit_signal = true - - -func _set_min_value(val: Vector2) -> void: - min_value = val - $GridContainer/X.min_value = val.x - $GridContainer/Y.min_value = val.y - - -func _set_max_value(val: Vector2) -> void: - max_value = val - $GridContainer/X.max_value = val.x - $GridContainer/Y.max_value = val.y - - -func _set_step(val: float) -> void: - step = val - for slider in get_sliders(): - slider.step = val - - -func _set_allow_greater(val: bool) -> void: - allow_greater = val - for slider in get_sliders(): - slider.allow_greater = val - - -func _set_allow_lesser(val: bool) -> void: - allow_lesser = val - for slider in get_sliders(): - slider.allow_lesser = val - - -func _set_show_ratio(val: bool) -> void: - show_ratio = val - $Ratio.visible = val - - -func _set_grid_columns(val: int) -> void: - grid_columns = val - $GridContainer.columns = val - - -func _set_slider_min_size(val: Vector2) -> void: - slider_min_size = val - for slider in get_sliders(): - slider.rect_min_size = val - - -func _set_snap_step(val: float) -> void: - snap_step = val - for slider in get_sliders(): - slider.snap_step = val - - -func _set_snap_by_default(val: bool) -> void: - snap_by_default = val - for slider in get_sliders(): - slider.snap_by_default = val - - -func _set_prefix_x(val: String) -> void: - prefix_x = val - $GridContainer/X.prefix = val - - -func _set_prefix_y(val: String) -> void: - prefix_y = val - $GridContainer/Y.prefix = val - - -func _set_suffix_x(val: String) -> void: - suffix_x = val - $GridContainer/X.suffix = val - - -func _set_suffix_y(val: String) -> void: - suffix_y = val - $GridContainer/Y.suffix = val + ratio_toggled.emit(button_pressed) diff --git a/src/UI/Nodes/ValueSliderV2.tscn b/src/UI/Nodes/ValueSliderV2.tscn index c84d8f6def3..6ebfef5dacb 100644 --- a/src/UI/Nodes/ValueSliderV2.tscn +++ b/src/UI/Nodes/ValueSliderV2.tscn @@ -2,24 +2,24 @@ [ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=1] [ext_resource path="res://src/UI/Nodes/ValueSliderV2.gd" type="Script" id=2] -[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture" id=3] -[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture" id=4] -[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture" id=5] +[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture2D" id=3] +[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture2D" id=4] +[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture2D" id=5] [node name="ValueSliderV2" type="HBoxContainer"] -margin_right = 45.0 -margin_bottom = 52.0 +offset_right = 45.0 +offset_bottom = 52.0 script = ExtResource( 2 ) [node name="GridContainer" type="GridContainer" parent="."] -margin_right = 45.0 -margin_bottom = 52.0 +offset_right = 45.0 +offset_bottom = 52.0 size_flags_horizontal = 3 -[node name="X" type="TextureProgress" parent="GridContainer"] -margin_right = 45.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 32, 24 ) +[node name="X" type="TextureProgressBar" parent="GridContainer"] +offset_right = 45.0 +offset_bottom = 24.0 +custom_minimum_size = Vector2( 32, 24 ) mouse_default_cursor_shape = 2 size_flags_horizontal = 3 theme_type_variation = "ValueSlider" @@ -31,11 +31,11 @@ stretch_margin_bottom = 3 script = ExtResource( 1 ) prefix = "X:" -[node name="Y" type="TextureProgress" parent="GridContainer"] -margin_top = 28.0 -margin_right = 45.0 -margin_bottom = 52.0 -rect_min_size = Vector2( 32, 24 ) +[node name="Y" type="TextureProgressBar" parent="GridContainer"] +offset_top = 28.0 +offset_right = 45.0 +offset_bottom = 52.0 +custom_minimum_size = Vector2( 32, 24 ) mouse_default_cursor_shape = 2 size_flags_horizontal = 3 theme_type_variation = "ValueSlider" @@ -49,15 +49,15 @@ prefix = "Y:" [node name="Ratio" type="Control" parent="."] visible = false -margin_left = 36.0 -margin_right = 52.0 -margin_bottom = 52.0 -rect_min_size = Vector2( 16, 0 ) +offset_left = 36.0 +offset_right = 52.0 +offset_bottom = 52.0 +custom_minimum_size = Vector2( 16, 0 ) [node name="RatioGuides" type="NinePatchRect" parent="Ratio" groups=["UIButtons"]] anchor_bottom = 1.0 -margin_right = 9.0 -rect_min_size = Vector2( 9, 0 ) +offset_right = 9.0 +custom_minimum_size = Vector2( 9, 0 ) texture = ExtResource( 4 ) region_rect = Rect2( 0, 0, 9, 44 ) patch_margin_top = 15 @@ -69,11 +69,11 @@ anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -8.0 -margin_top = -8.0 -margin_right = 8.0 -margin_bottom = 8.0 -hint_tooltip = "Lock aspect ratio" +offset_left = -8.0 +offset_top = -8.0 +offset_right = 8.0 +offset_bottom = 8.0 +tooltip_text = "Lock aspect ratio" mouse_default_cursor_shape = 2 toggle_mode = true texture_normal = ExtResource( 3 ) diff --git a/src/UI/Nodes/ValueSliderV3.gd b/src/UI/Nodes/ValueSliderV3.gd index 4e23b03fd73..0c9f448743d 100644 --- a/src/UI/Nodes/ValueSliderV3.gd +++ b/src/UI/Nodes/ValueSliderV3.gd @@ -1,28 +1,100 @@ -tool +@tool class_name ValueSliderV3 extends HBoxContainer +## A class that combines three ValueSlider nodes, for easy usage with Vector3 values. +## Also supports aspect ratio locking. signal value_changed(value) signal ratio_toggled(button_pressed) -export var editable := true setget _set_editable -export var value := Vector3.ZERO setget _set_value -export var min_value := Vector3.ZERO setget _set_min_value -export var max_value := Vector3(100.0, 100.0, 100.0) setget _set_max_value -export var step := 1.0 setget _set_step -export var allow_greater := false setget _set_allow_greater -export var allow_lesser := false setget _set_allow_lesser -export var show_ratio := false setget _set_show_ratio -export(int, 1, 2) var grid_columns := 1 setget _set_grid_columns -export var slider_min_size := Vector2(32, 24) setget _set_slider_min_size -export var snap_step := 1.0 setget _set_snap_step -export var snap_by_default := false setget _set_snap_by_default -export var prefix_x := "X:" setget _set_prefix_x -export var prefix_y := "Y:" setget _set_prefix_y -export var prefix_z := "Z:" setget _set_prefix_z -export var suffix_x := "" setget _set_suffix_x -export var suffix_y := "" setget _set_suffix_y -export var suffix_z := "" setget _set_suffix_z +@export var editable := true: + set(val): + editable = val + for slider in get_sliders(): + slider.editable = val + $"%RatioButton".disabled = not val +@export var value := Vector3.ZERO: + set(val): + value = val + _can_emit_signal = false + $GridContainer/X.value = value.x + $GridContainer/Y.value = value.y + $GridContainer/Z.value = value.z + _can_emit_signal = true +@export var min_value := Vector3.ZERO: + set(val): + min_value = val + $GridContainer/X.min_value = val.x + $GridContainer/Y.min_value = val.y + $GridContainer/Z.min_value = val.z +@export var max_value := Vector3(100.0, 100.0, 100.0): + set(val): + max_value = val + $GridContainer/X.max_value = val.x + $GridContainer/Y.max_value = val.y + $GridContainer/Z.max_value = val.z +@export var step := 1.0: + set(val): + step = val + for slider in get_sliders(): + slider.step = val +@export var allow_greater := false: + set(val): + allow_greater = val + for slider in get_sliders(): + slider.allow_greater = val +@export var allow_lesser := false: + set(val): + allow_lesser = val + for slider in get_sliders(): + slider.allow_lesser = val +@export var show_ratio := false: + set(val): + show_ratio = val + $Ratio.visible = val +@export var grid_columns := 1: + set(val): + show_ratio = val + $Ratio.visible = val +@export var slider_min_size := Vector2(32, 24): + set(val): + slider_min_size = val + for slider in get_sliders(): + slider.custom_minimum_size = val +@export var snap_step := 1.0: + set(val): + snap_step = val + for slider in get_sliders(): + slider.snap_step = val +@export var snap_by_default := false: + set(val): + snap_by_default = val + for slider in get_sliders(): + slider.snap_by_default = val +@export var prefix_x := "X:": + set(val): + prefix_x = val + $GridContainer/X.prefix = val +@export var prefix_y := "Y:": + set(val): + prefix_y = val + $GridContainer/Y.prefix = val +@export var prefix_z := "Z:": + set(val): + prefix_z = val + $GridContainer/Z.prefix = val +@export var suffix_x := "": + set(val): + suffix_x = val + $GridContainer/X.suffix = val +@export var suffix_y := "": + set(val): + suffix_y = val + $GridContainer/Y.suffix = val +@export var suffix_z := "": + set(val): + suffix_z = val + $GridContainer/Z.suffix = val var ratio := Vector3.ONE var _locked_ratio := false @@ -30,19 +102,19 @@ var _can_emit_signal := true func _ready() -> void: - if not Engine.editor_hint: # Pixelorama specific code + if not Engine.is_editor_hint(): # Pixelorama specific code $Ratio.modulate = Global.modulate_icon_color -func get_sliders() -> Array: +func get_sliders() -> Array[ValueSlider]: return [$GridContainer/X, $GridContainer/Y, $GridContainer/Z] func press_ratio_button(pressed: bool) -> void: - $"%RatioButton".pressed = pressed + $"%RatioButton".button_pressed = pressed -# Greatest common divisor +## Greatest common divisor func _gcd(a: int, b: int) -> int: return a if b == 0 else _gcd(b, a % b) @@ -50,28 +122,28 @@ func _gcd(a: int, b: int) -> int: func _on_X_value_changed(val: float) -> void: value.x = val if _locked_ratio: - self.value.y = max(min_value.y, (value.x / ratio.x) * ratio.y) - self.value.z = max(min_value.z, (value.x / ratio.x) * ratio.z) + value.y = maxf(min_value.y, (value.x / ratio.x) * ratio.y) + value.z = maxf(min_value.z, (value.x / ratio.x) * ratio.z) if _can_emit_signal: - emit_signal("value_changed", value) + value_changed.emit(value) func _on_Y_value_changed(val: float) -> void: value.y = val if _locked_ratio: - self.value.x = max(min_value.x, (value.y / ratio.y) * ratio.x) - self.value.z = max(min_value.z, (value.y / ratio.y) * ratio.z) + value.x = maxf(min_value.x, (value.y / ratio.y) * ratio.x) + value.z = maxf(min_value.z, (value.y / ratio.y) * ratio.z) if _can_emit_signal: - emit_signal("value_changed", value) + value_changed.emit(value) func _on_Z_value_changed(val: float) -> void: value.z = val if _locked_ratio: - self.value.x = max(min_value.x, (value.z / ratio.z) * ratio.x) - self.value.y = max(min_value.y, (value.z / ratio.z) * ratio.y) + value.x = maxf(min_value.x, (value.z / ratio.z) * ratio.x) + value.y = maxf(min_value.y, (value.z / ratio.z) * ratio.y) if _can_emit_signal: - emit_signal("value_changed", value) + value_changed.emit(value) func _on_RatioButton_toggled(button_pressed: bool) -> void: @@ -81,113 +153,4 @@ func _on_RatioButton_toggled(button_pressed: bool) -> void: ratio = Vector3.ONE else: ratio = value / divisor - emit_signal("ratio_toggled", button_pressed) - - -# Setters - - -func _set_editable(val: bool) -> void: - editable = val - for slider in get_sliders(): - slider.editable = val - $"%RatioButton".disabled = not val - - -func _set_value(val: Vector3) -> void: - value = val - _can_emit_signal = false - $GridContainer/X.value = value.x - $GridContainer/Y.value = value.y - $GridContainer/Z.value = value.z - _can_emit_signal = true - - -func _set_min_value(val: Vector3) -> void: - min_value = val - $GridContainer/X.min_value = val.x - $GridContainer/Y.min_value = val.y - $GridContainer/Z.min_value = val.z - - -func _set_max_value(val: Vector3) -> void: - max_value = val - $GridContainer/X.max_value = val.x - $GridContainer/Y.max_value = val.y - $GridContainer/Z.max_value = val.z - - -func _set_step(val: float) -> void: - step = val - for slider in get_sliders(): - slider.step = val - - -func _set_allow_greater(val: bool) -> void: - allow_greater = val - for slider in get_sliders(): - slider.allow_greater = val - - -func _set_allow_lesser(val: bool) -> void: - allow_lesser = val - for slider in get_sliders(): - slider.allow_lesser = val - - -func _set_show_ratio(val: bool) -> void: - show_ratio = val - $Ratio.visible = val - - -func _set_grid_columns(val: int) -> void: - grid_columns = val - $GridContainer.columns = val - - -func _set_slider_min_size(val: Vector2) -> void: - slider_min_size = val - for slider in get_sliders(): - slider.rect_min_size = val - - -func _set_snap_step(val: float) -> void: - snap_step = val - for slider in get_sliders(): - slider.snap_step = val - - -func _set_snap_by_default(val: bool) -> void: - snap_by_default = val - for slider in get_sliders(): - slider.snap_by_default = val - - -func _set_prefix_x(val: String) -> void: - prefix_x = val - $GridContainer/X.prefix = val - - -func _set_prefix_y(val: String) -> void: - prefix_y = val - $GridContainer/Y.prefix = val - - -func _set_prefix_z(val: String) -> void: - prefix_z = val - $GridContainer/Z.prefix = val - - -func _set_suffix_x(val: String) -> void: - suffix_x = val - $GridContainer/X.suffix = val - - -func _set_suffix_y(val: String) -> void: - suffix_y = val - $GridContainer/Y.suffix = val - - -func _set_suffix_z(val: String) -> void: - suffix_z = val - $GridContainer/Z.suffix = val + ratio_toggled.emit(button_pressed) diff --git a/src/UI/Nodes/ValueSliderV3.tscn b/src/UI/Nodes/ValueSliderV3.tscn index 4b28f8f7c19..9c96cd74dbc 100644 --- a/src/UI/Nodes/ValueSliderV3.tscn +++ b/src/UI/Nodes/ValueSliderV3.tscn @@ -2,24 +2,24 @@ [ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=1] [ext_resource path="res://src/UI/Nodes/ValueSliderV3.gd" type="Script" id=2] -[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture" id=3] -[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture" id=4] -[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture" id=5] +[ext_resource path="res://assets/graphics/misc/lock_aspect_2.png" type="Texture2D" id=3] +[ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture2D" id=4] +[ext_resource path="res://assets/graphics/misc/lock_aspect.png" type="Texture2D" id=5] [node name="ValueSliderV3" type="HBoxContainer"] -margin_right = 45.0 -margin_bottom = 52.0 +offset_right = 45.0 +offset_bottom = 52.0 script = ExtResource( 2 ) [node name="GridContainer" type="GridContainer" parent="."] -margin_right = 45.0 -margin_bottom = 80.0 +offset_right = 45.0 +offset_bottom = 80.0 size_flags_horizontal = 3 -[node name="X" type="TextureProgress" parent="GridContainer"] -margin_right = 45.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 32, 24 ) +[node name="X" type="TextureProgressBar" parent="GridContainer"] +offset_right = 45.0 +offset_bottom = 24.0 +custom_minimum_size = Vector2( 32, 24 ) mouse_default_cursor_shape = 2 size_flags_horizontal = 3 theme_type_variation = "ValueSlider" @@ -31,11 +31,11 @@ stretch_margin_bottom = 3 script = ExtResource( 1 ) prefix = "X:" -[node name="Y" type="TextureProgress" parent="GridContainer"] -margin_top = 28.0 -margin_right = 45.0 -margin_bottom = 52.0 -rect_min_size = Vector2( 32, 24 ) +[node name="Y" type="TextureProgressBar" parent="GridContainer"] +offset_top = 28.0 +offset_right = 45.0 +offset_bottom = 52.0 +custom_minimum_size = Vector2( 32, 24 ) mouse_default_cursor_shape = 2 size_flags_horizontal = 3 theme_type_variation = "ValueSlider" @@ -47,11 +47,11 @@ stretch_margin_bottom = 3 script = ExtResource( 1 ) prefix = "Y:" -[node name="Z" type="TextureProgress" parent="GridContainer"] -margin_top = 56.0 -margin_right = 45.0 -margin_bottom = 80.0 -rect_min_size = Vector2( 32, 24 ) +[node name="Z" type="TextureProgressBar" parent="GridContainer"] +offset_top = 56.0 +offset_right = 45.0 +offset_bottom = 80.0 +custom_minimum_size = Vector2( 32, 24 ) mouse_default_cursor_shape = 2 size_flags_horizontal = 3 theme_type_variation = "ValueSlider" @@ -65,15 +65,15 @@ prefix = "Z:" [node name="Ratio" type="Control" parent="."] visible = false -margin_left = 36.0 -margin_right = 52.0 -margin_bottom = 80.0 -rect_min_size = Vector2( 16, 0 ) +offset_left = 36.0 +offset_right = 52.0 +offset_bottom = 80.0 +custom_minimum_size = Vector2( 16, 0 ) [node name="RatioGuides" type="NinePatchRect" parent="Ratio" groups=["UIButtons"]] anchor_bottom = 1.0 -margin_right = 9.0 -rect_min_size = Vector2( 9, 0 ) +offset_right = 9.0 +custom_minimum_size = Vector2( 9, 0 ) texture = ExtResource( 4 ) region_rect = Rect2( 0, 0, 9, 44 ) patch_margin_top = 15 @@ -85,11 +85,11 @@ anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -8.0 -margin_top = -8.0 -margin_right = 8.0 -margin_bottom = 8.0 -hint_tooltip = "Lock aspect ratio" +offset_left = -8.0 +offset_top = -8.0 +offset_right = 8.0 +offset_bottom = 8.0 +tooltip_text = "Lock aspect ratio" mouse_default_cursor_shape = 2 toggle_mode = true texture_normal = ExtResource( 3 ) diff --git a/src/UI/PerspectiveEditor/LineButton.tscn b/src/UI/PerspectiveEditor/LineButton.tscn index 9da19d7e5ec..929c98df468 100644 --- a/src/UI/PerspectiveEditor/LineButton.tscn +++ b/src/UI/PerspectiveEditor/LineButton.tscn @@ -4,35 +4,35 @@ [ext_resource path="res://src/UI/Nodes/CollapsibleContainer.gd" type="Script" id=3] [node name="LineButton" type="VBoxContainer"] -margin_right = 159.0 -margin_bottom = 20.0 +offset_right = 159.0 +offset_bottom = 20.0 theme_type_variation = "CollapsibleContainer" script = ExtResource( 3 ) [node name="HBoxContainer" type="HBoxContainer" parent="."] visible = false -margin_top = 24.0 -margin_right = 159.0 -margin_bottom = 76.0 +offset_top = 24.0 +offset_right = 159.0 +offset_bottom = 76.0 [node name="Spacer" type="Control" parent="HBoxContainer"] -margin_right = 20.0 -margin_bottom = 52.0 -rect_min_size = Vector2( 20, 0 ) +offset_right = 20.0 +offset_bottom = 52.0 +custom_minimum_size = Vector2( 20, 0 ) [node name="VSeparator" type="VSeparator" parent="HBoxContainer"] -margin_left = 24.0 -margin_right = 28.0 -margin_bottom = 52.0 +offset_left = 24.0 +offset_right = 28.0 +offset_bottom = 52.0 [node name="Properties" type="VBoxContainer" parent="HBoxContainer"] -margin_left = 32.0 -margin_right = 83.0 -margin_bottom = 52.0 +offset_left = 32.0 +offset_right = 83.0 +offset_bottom = 52.0 size_flags_horizontal = 3 [node name="AngleSlider" parent="HBoxContainer/Properties" instance=ExtResource( 1 )] -margin_right = 51.0 +offset_right = 51.0 max_value = 359.999 step = 0.001 allow_greater = true @@ -41,9 +41,9 @@ suffix = "ยฐ" [node name="LengthSlider" parent="HBoxContainer/Properties" instance=ExtResource( 1 )] unique_name_in_owner = true -margin_top = 28.0 -margin_right = 51.0 -margin_bottom = 52.0 +offset_top = 28.0 +offset_right = 51.0 +offset_bottom = 52.0 min_value = 1.0 max_value = 19999.0 value = 19999.0 @@ -52,12 +52,12 @@ prefix = "Length:" suffix = "px" [node name="Delete" type="Button" parent="HBoxContainer"] -margin_left = 87.0 -margin_right = 151.0 -margin_bottom = 52.0 +offset_left = 87.0 +offset_right = 151.0 +offset_bottom = 52.0 text = "Remove" [node name="VSeparator2" type="VSeparator" parent="HBoxContainer"] -margin_left = 155.0 -margin_right = 159.0 -margin_bottom = 52.0 +offset_left = 155.0 +offset_right = 159.0 +offset_bottom = 52.0 diff --git a/src/UI/PerspectiveEditor/PerspectiveEditor.gd b/src/UI/PerspectiveEditor/PerspectiveEditor.gd index 4e5859ef492..72898d36ae0 100644 --- a/src/UI/PerspectiveEditor/PerspectiveEditor.gd +++ b/src/UI/PerspectiveEditor/PerspectiveEditor.gd @@ -1,32 +1,32 @@ extends Control var axes: Node2D -var do_pool = [] # A pool that stores data of points removed by undo -var delete_pool = [] # A pool that containing deleted data and their index +var do_pool := [] ## A pool that stores data of points removed by undo +var delete_pool := [] ## A pool that containing deleted data and their index var vanishing_point_res := preload("res://src/UI/PerspectiveEditor/VanishingPoint.tscn") var tracker_disabled := false -onready var vanishing_point_container = $"%VanishingPointContainer" +@onready var vanishing_point_container = $"%VanishingPointContainer" func _on_AddPoint_pressed() -> void: do_pool.clear() # Reset (clears Redo history of vanishing points) - var project = Global.current_project + var project := Global.current_project project.undos += 1 project.undo_redo.create_action("Add Vanishing Point") - project.undo_redo.add_do_method(self, "add_vanishing_point", true) - project.undo_redo.add_undo_method(self, "undo_add_vanishing_point") + project.undo_redo.add_do_method(add_vanishing_point.bind(true)) + project.undo_redo.add_undo_method(undo_add_vanishing_point) project.undo_redo.commit_action() -func _on_TrackerLines_toggled(button_pressed): +func _on_TrackerLines_toggled(button_pressed: bool): for point in vanishing_point_container.get_children(): tracker_disabled = !button_pressed func add_vanishing_point(is_redo := false): - var vanishing_point := vanishing_point_res.instance() + var vanishing_point := vanishing_point_res.instantiate() vanishing_point_container.add_child(vanishing_point) - if is_redo and !do_pool.empty(): + if is_redo and !do_pool.is_empty(): # if it's a redo then initialize it with the redo data vanishing_point.initiate(do_pool.pop_back()) vanishing_point.update_data_to_project() @@ -41,23 +41,23 @@ func undo_add_vanishing_point(): point.update_data_to_project(true) -func delete_point(idx): - var project = Global.current_project +func delete_point(idx: int): + var project := Global.current_project project.undos += 1 project.undo_redo.create_action("Delete Vanishing Point") - project.undo_redo.add_do_method(self, "do_delete_point", idx) - project.undo_redo.add_undo_method(self, "undo_delete_point", idx) + project.undo_redo.add_do_method(do_delete_point.bind(idx)) + project.undo_redo.add_undo_method(undo_delete_point.bind(idx)) project.undo_redo.commit_action() -func do_delete_point(idx): +func do_delete_point(idx: int): var point = vanishing_point_container.get_child(idx) delete_pool.append(point.serialize()) point.queue_free() point.update_data_to_project(true) -func undo_delete_point(idx): +func undo_delete_point(idx: int): var point = delete_pool.pop_back() Global.current_project.vanishing_points.insert(idx, point) update_points() @@ -70,7 +70,7 @@ func update_points(): # Add the "updated" vanising points from the current_project for idx in Global.current_project.vanishing_points.size(): # Create the point - var vanishing_point := vanishing_point_res.instance() + var vanishing_point := vanishing_point_res.instantiate() vanishing_point_container.add_child(vanishing_point) # Initialize it var point_data = Global.current_project.vanishing_points[idx] diff --git a/src/UI/PerspectiveEditor/PerspectiveEditor.tscn b/src/UI/PerspectiveEditor/PerspectiveEditor.tscn index bb4bb9bfaf8..53067d3222f 100644 --- a/src/UI/PerspectiveEditor/PerspectiveEditor.tscn +++ b/src/UI/PerspectiveEditor/PerspectiveEditor.tscn @@ -1,80 +1,63 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://cap1bhavhi33g"] -[ext_resource path="res://src/UI/PerspectiveEditor/PerspectiveEditor.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/UI/PerspectiveEditor/PerspectiveEditor.gd" id="1"] [node name="PerspectiveEditor" type="Control"] +custom_minimum_size = Vector2(270, 10) +layout_mode = 3 +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = -1013.0 -margin_bottom = -510.0 -rect_min_size = Vector2( 270, 10 ) -script = ExtResource( 1 ) +offset_right = -1013.0 +offset_bottom = -510.0 +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] -self_modulate = Color( 0.698039, 0.698039, 0.698039, 0.698039 ) +self_modulate = Color(0.698039, 0.698039, 0.698039, 0.698039) +clip_contents = true +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 4.0 -margin_right = -4.0 -rect_clip_content = true +offset_left = 4.0 +offset_right = -4.0 size_flags_vertical = 3 -__meta__ = { -"_editor_description_": "" -} [node name="Header" type="HBoxContainer" parent="VBoxContainer"] -margin_right = 262.0 -margin_bottom = 30.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="VBoxContainer/Header"] -margin_top = 8.0 -margin_right = 232.0 -margin_bottom = 22.0 +layout_mode = 2 size_flags_horizontal = 3 -theme_type_variation = "Header" +theme_type_variation = &"HeaderSmall" text = "Perspective Editor" -align = 1 -valign = 1 [node name="AddPoint" type="Button" parent="VBoxContainer/Header"] -margin_left = 232.0 -margin_right = 262.0 -margin_bottom = 30.0 -rect_min_size = Vector2( 30, 30 ) +custom_minimum_size = Vector2(30, 30) +layout_mode = 2 text = "+" clip_text = true [node name="TrackerLines" type="CheckButton" parent="VBoxContainer"] -margin_top = 34.0 -margin_right = 262.0 -margin_bottom = 74.0 -pressed = true +layout_mode = 2 text = "Tracker Lines" [node name="HSeparator" type="HSeparator" parent="VBoxContainer"] -margin_top = 78.0 -margin_right = 262.0 -margin_bottom = 82.0 +layout_mode = 2 [node name="HSeparator2" type="HSeparator" parent="VBoxContainer"] -margin_top = 86.0 -margin_right = 262.0 -margin_bottom = 90.0 +layout_mode = 2 [node name="Content" type="ScrollContainer" parent="VBoxContainer"] -margin_top = 94.0 -margin_right = 262.0 -margin_bottom = 210.0 +layout_mode = 2 size_flags_vertical = 3 [node name="VanishingPointContainer" type="VBoxContainer" parent="VBoxContainer/Content"] unique_name_in_owner = true -margin_right = 262.0 -margin_bottom = 116.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -custom_constants/separation = 5 +theme_override_constants/separation = 5 [connection signal="pressed" from="VBoxContainer/Header/AddPoint" to="." method="_on_AddPoint_pressed"] [connection signal="toggled" from="VBoxContainer/TrackerLines" to="." method="_on_TrackerLines_toggled"] diff --git a/src/UI/PerspectiveEditor/PerspectiveLine.gd b/src/UI/PerspectiveEditor/PerspectiveLine.gd index 476b889a940..a77cd97da25 100644 --- a/src/UI/PerspectiveEditor/PerspectiveLine.gd +++ b/src/UI/PerspectiveEditor/PerspectiveLine.gd @@ -7,7 +7,7 @@ const CIRCLE_RAD := 4 var angle := 0 var length := 19999 -var hidden = false +var is_hidden = false var has_focus := false var track_mouse := false var change_length = false @@ -17,8 +17,7 @@ var _vanishing_point: Node func serialize() -> Dictionary: - var data = {"angle": angle, "length": length} - return data + return {"angle": angle, "length": length} func deserialize(data: Dictionary): @@ -30,7 +29,7 @@ func deserialize(data: Dictionary): func initiate(data: Dictionary, vanishing_point: Node): _vanishing_point = vanishing_point - width = Global.camera.zoom.x * LINE_WIDTH + width = LINE_WIDTH / Global.camera.zoom.x Global.canvas.add_child(self) deserialize(data) refresh() @@ -42,24 +41,26 @@ func refresh(): func draw_perspective_line(): - var start = Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value) + var start := Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value) points[0] = start - if hidden: + if is_hidden: points[1] = start else: - points[1] = (start + Vector2(length * cos(deg2rad(angle)), length * sin(deg2rad(angle)))) + points[1] = ( + start + Vector2(length * cos(deg_to_rad(angle)), length * sin(deg_to_rad(angle))) + ) func hide_perspective_line(): - var start = Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value) + var start := Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value) points[1] = start - hidden = true + is_hidden = true func _input(event: InputEvent) -> void: if event is InputEventMouse: - var mouse_point = Global.canvas.current_pixel - var project_size = Global.current_project.size + var mouse_point := Global.canvas.current_pixel + var project_size := Global.current_project.size if track_mouse: if !Global.can_draw or !Global.has_focus or Global.perspective_editor.tracker_disabled: @@ -67,68 +68,68 @@ func _input(event: InputEvent) -> void: return default_color.a = 0.5 if Rect2(Vector2.ZERO, project_size).has_point(mouse_point): - var start = Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value) - hidden = false + var start := Vector2(_vanishing_point.pos_x.value, _vanishing_point.pos_y.value) + is_hidden = false draw_perspective_line() - angle = rad2deg(mouse_point.angle_to_point(points[0])) + angle = rad_to_deg(points[0].angle_to_point(mouse_point)) if angle < 0: angle += 360 points[1] = ( start - + Vector2(length * cos(deg2rad(angle)), length * sin(deg2rad(angle))) + + Vector2(length * cos(deg_to_rad(angle)), length * sin(deg_to_rad(angle))) ) else: hide_perspective_line() else: try_rotate_scale() - update() + queue_redraw() func try_rotate_scale(): - var mouse_point = Global.canvas.current_pixel - var project_size = Global.current_project.size - var test_line := (points[1] - points[0]).rotated(deg2rad(90)).normalized() - var from_a = mouse_point - test_line * Global.camera.zoom.x * LINE_WIDTH * 2 - var from_b = mouse_point + test_line * Global.camera.zoom.x * LINE_WIDTH * 2 + var mouse_point := Global.canvas.current_pixel + var project_size := Global.current_project.size + var test_line := (points[1] - points[0]).rotated(deg_to_rad(90)).normalized() + var from_a := mouse_point - test_line * CIRCLE_RAD * 2 / Global.camera.zoom.x + var from_b := mouse_point + test_line * CIRCLE_RAD * 2 / Global.camera.zoom.x if Input.is_action_just_pressed("left_mouse") and Global.can_draw and Global.has_focus: if ( - Geometry.segment_intersects_segment_2d(from_a, from_b, points[0], points[1]) - or mouse_point.distance_to(points[1]) < Global.camera.zoom.x * CIRCLE_RAD * 2 + Geometry2D.segment_intersects_segment(from_a, from_b, points[0], points[1]) + or mouse_point.distance_to(points[1]) < CIRCLE_RAD * 2 / Global.camera.zoom.x ): if ( !Rect2(Vector2.ZERO, project_size).has_point(mouse_point) or Global.move_guides_on_canvas ): - if mouse_point.distance_to(points[1]) < Global.camera.zoom.x * CIRCLE_RAD * 2: + if mouse_point.distance_to(points[1]) < CIRCLE_RAD * 2 / Global.camera.zoom.x: change_length = true has_focus = true - Global.has_focus = false - update() + Global.can_draw = false + queue_redraw() if has_focus: if Input.is_action_pressed("left_mouse"): # rotation code here if line_button: - var new_angle = rad2deg(mouse_point.angle_to_point(points[0])) + var new_angle := rad_to_deg(points[0].angle_to_point(mouse_point)) if new_angle < 0: new_angle += 360 _vanishing_point.angle_changed(new_angle, line_button) if change_length: - var new_length = mouse_point.distance_to(points[0]) + var new_length := mouse_point.distance_to(points[0]) _vanishing_point.length_changed(new_length, line_button) elif Input.is_action_just_released("left_mouse"): - Global.has_focus = true + Global.can_draw = true has_focus = false change_length = false - update() + queue_redraw() func _draw() -> void: - var mouse_point = Global.canvas.current_pixel - var arc_points = [] - draw_circle(points[0], Global.camera.zoom.x * CIRCLE_RAD, default_color) # Starting circle - if !track_mouse and mouse_point.distance_to(points[0]) < Global.camera.zoom.x * CIRCLE_RAD * 2: + var mouse_point := Global.canvas.current_pixel + var arc_points := PackedVector2Array() + draw_circle(points[0], CIRCLE_RAD / Global.camera.zoom.x, default_color) # Starting circle + if !track_mouse and mouse_point.distance_to(points[0]) < CIRCLE_RAD * 2 / Global.camera.zoom.x: if ( !Rect2(Vector2.ZERO, Global.current_project.size).has_point(mouse_point) or Global.move_guides_on_canvas @@ -136,7 +137,7 @@ func _draw() -> void: ): arc_points.append(points[0]) if ( - mouse_point.distance_to(points[1]) < Global.camera.zoom.x * CIRCLE_RAD * 2 + mouse_point.distance_to(points[1]) < CIRCLE_RAD * 2 / Global.camera.zoom.x or (has_focus and Input.is_action_pressed("left_mouse")) ): if ( @@ -149,8 +150,8 @@ func _draw() -> void: arc_points.append(points[1]) for point in arc_points: - draw_arc(point, Global.camera.zoom.x * CIRCLE_RAD * 2, 0, 360, 360, default_color, 0.5) + draw_arc(point, CIRCLE_RAD * 2 / Global.camera.zoom.x, 0, 360, 360, default_color, 0.5) - width = Global.camera.zoom.x * LINE_WIDTH - if hidden: # Hidden line + width = LINE_WIDTH / Global.camera.zoom.x + if is_hidden: # Hidden line return diff --git a/src/UI/PerspectiveEditor/PerspectiveLine.tscn b/src/UI/PerspectiveEditor/PerspectiveLine.tscn index 3cf1a1c3b98..1e41e8c17fc 100644 --- a/src/UI/PerspectiveEditor/PerspectiveLine.tscn +++ b/src/UI/PerspectiveEditor/PerspectiveLine.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://bft8ul5o3c75v"] -[ext_resource path="res://src/UI/PerspectiveEditor/PerspectiveLine.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/UI/PerspectiveEditor/PerspectiveLine.gd" id="1"] [node name="PerspectiveLine" type="Line2D"] -points = PoolVector2Array( 0, 0, 64, 0 ) -script = ExtResource( 1 ) +points = PackedVector2Array(0, 0, 64, 0) +script = ExtResource("1") diff --git a/src/UI/PerspectiveEditor/PointCollapseContainer.gd b/src/UI/PerspectiveEditor/PointCollapseContainer.gd index 0e6642340b5..1d281d29f71 100644 --- a/src/UI/PerspectiveEditor/PointCollapseContainer.gd +++ b/src/UI/PerspectiveEditor/PointCollapseContainer.gd @@ -1,41 +1,38 @@ extends Button -# This is NOT related to the CollapsibleContainer class (though it behaves similarly) -# i did it like this because the "Content" is part of a different node -export var point_text := "" setget _set_text -export var visible_content := false setget _set_visible_content -onready var content = $"%Content" +## This is NOT related to the CollapsibleContainer class (though it behaves similarly) +## It was done like this because the "Content" is part of a different node - -func _ready() -> void: - _set_visible(pressed) - content.connect("visibility_changed", self, "_child_visibility_changed") - - -func _set_text(value: String) -> void: - $Label.text = value - rect_min_size = $Label.rect_size +@export var point_text := "": + set(value): + $Label.text = value + custom_minimum_size = $Label.size +@export var visible_content := false: + set(value): + visible_content = value + button_pressed = value +@onready var content := $"%Content" -func _set_visible_content(value: bool) -> void: - visible_content = value - pressed = value +func _ready() -> void: + _set_visible(button_pressed) + content.visibility_changed.connect(_child_visibility_changed) -func _on_Button_toggled(button_pressed: bool) -> void: - _set_visible(button_pressed) +func _on_Button_toggled(press: bool) -> void: + _set_visible(press) -func _set_visible(pressed: bool) -> void: - if pressed: - $TextureRect.rect_rotation = 0 +func _set_visible(press: bool) -> void: + if press: + $TextureRect.rotation = 0 else: - $TextureRect.rect_rotation = -90 - content.visible = pressed + $TextureRect.rotation = -90 + content.visible = press -# Checks if a child becomes visible from another source and ensures -# it remains invisible if the button is not pressed +## Checks if a child becomes visible from another source and ensures +## it remains invisible if the button is not pressed func _child_visibility_changed() -> void: - if not pressed: + if not button_pressed: content.visible = false diff --git a/src/UI/PerspectiveEditor/VanishingPoint.gd b/src/UI/PerspectiveEditor/VanishingPoint.gd index d2a94db3d4c..8d63e5fe314 100644 --- a/src/UI/PerspectiveEditor/VanishingPoint.gd +++ b/src/UI/PerspectiveEditor/VanishingPoint.gd @@ -1,18 +1,18 @@ extends VBoxContainer -var has_focus := false -var perspective_lines = [] +var is_focused := false +var perspective_lines := [] var color := Color(randf(), randf(), randf(), 1) var tracker_line: PerspectiveLine -onready var color_picker_button = $"%ColorPickerButton" -onready var title := $"%PointCollapseContainer" -onready var pos_x := $"%X" -onready var pos_y := $"%Y" -onready var line_buttons_container := $"%LinesContainer" -onready var boundary_l := $Content/BoundaryL -onready var boundary_r := $Content/BoundaryR -onready var boundary_b := $Content/VBoxContainer/BoundaryB +@onready var color_picker_button = $"%ColorPickerButton" +@onready var title := $"%PointCollapseContainer" +@onready var pos_x := $"%X" +@onready var pos_y := $"%Y" +@onready var line_buttons_container := $"%LinesContainer" +@onready var boundary_l := $Content/BoundaryL +@onready var boundary_r := $Content/BoundaryR +@onready var boundary_b := $Content/VBoxContainer/BoundaryB func serialize() -> Dictionary: @@ -55,20 +55,20 @@ func initiate(start_data: Dictionary = {}, idx = -1) -> void: else: title.point_text = str("Point: ", get_parent().get_child_count()) # connect signals - color_picker_button.connect("color_changed", self, "_on_color_changed") - pos_x.connect("value_changed", self, "_on_pos_value_changed") - pos_y.connect("value_changed", self, "_on_pos_value_changed") + color_picker_button.color_changed.connect(_on_color_changed) + pos_x.value_changed.connect(_on_pos_value_changed) + pos_y.value_changed.connect(_on_pos_value_changed) func update_boundary_color(): - var luminance = (0.2126 * color.r) + (0.7152 * color.g) + (0.0722 * color.b) + var luminance := (0.2126 * color.r) + (0.7152 * color.g) + (0.0722 * color.b) color.a = 0.9 - luminance * 0.4 # Interpolates between 0.5 to 0.9 boundary_l.color = color boundary_r.color = color boundary_b.color = color -func _input(_event): +func _input(_event: InputEvent): var mouse_point = Global.canvas.current_pixel var project_size = Global.current_project.size var start = Vector2(pos_x.value, pos_y.value) @@ -82,17 +82,17 @@ func _input(_event): !Rect2(Vector2.ZERO, project_size).has_point(Global.canvas.current_pixel) or Global.move_guides_on_canvas ): - has_focus = true - Global.has_focus = false - if has_focus: + is_focused = true + Global.can_draw = false + if is_focused: if Input.is_action_pressed("left_mouse"): # rotation code here pos_x.value = mouse_point.x pos_y.value = mouse_point.y elif Input.is_action_just_released("left_mouse"): - Global.has_focus = true - has_focus = false + Global.can_draw = true + is_focused = false # Signals @@ -119,7 +119,7 @@ func _on_pos_value_changed(_value: float) -> void: func angle_changed(value: float, line_button): # check if the properties are changing the line or is the line changing properties - var angle_slider = line_button.find_node("AngleSlider") + var angle_slider = line_button.find_child("AngleSlider") if angle_slider.value != value: # the line is changing the properties angle_slider.value = value else: @@ -131,7 +131,7 @@ func angle_changed(value: float, line_button): func length_changed(value: float, line_button): # check if the properties are changing the line or is the line changing properties - var length_slider = line_button.find_node("LengthSlider") + var length_slider = line_button.find_child("LengthSlider") if length_slider.value != value: # the line is changing the properties length_slider.value = value else: @@ -161,10 +161,10 @@ func generate_line_data(initial_data: Dictionary = {}) -> Dictionary: func add_line(loaded_line_data := {}, is_tracker := false): - var p_size = Global.current_project.size # for use later in function + var p_size := Global.current_project.size # for use later in function # Note: line_data will automatically get default values if loaded_line_data = {} - var line_data = generate_line_data(loaded_line_data) + var line_data := generate_line_data(loaded_line_data) # This code in if block is purely for beautification if pos_x.value > p_size.x / 2 and !loaded_line_data: @@ -180,7 +180,7 @@ func add_line(loaded_line_data := {}, is_tracker := false): line_data.length = p_size.x # Create the visual line - var line = preload("res://src/UI/PerspectiveEditor/PerspectiveLine.tscn").instance() + var line := preload("res://src/UI/PerspectiveEditor/PerspectiveLine.tscn").instantiate() line.initiate(line_data, self) # Set its mode accordingly @@ -189,45 +189,43 @@ func add_line(loaded_line_data := {}, is_tracker := false): tracker_line = line tracker_line.hide_perspective_line() else: # Settings for Normal mode - var line_button = preload("res://src/UI/PerspectiveEditor/LineButton.tscn").instance() + var line_button := preload("res://src/UI/PerspectiveEditor/LineButton.tscn").instantiate() line_buttons_container.add_child(line_button) var index = line_button.get_parent().get_child_count() - 2 line_button.get_parent().move_child(line_button, index) - var line_name = str( - "Line", line_button.get_index() + 1, " (", int(abs(line_data.angle)), "ยฐ)" - ) + var line_name := str("Line", line_button.get_index() + 1, " (", absi(line_data.angle), "ยฐ)") line_button.text = line_name - var remove_button = line_button.find_node("Delete") - var angle_slider = line_button.find_node("AngleSlider") - var length_slider = line_button.find_node("LengthSlider") + var remove_button := line_button.find_child("Delete") + var angle_slider := line_button.find_child("AngleSlider") + var length_slider := line_button.find_child("LengthSlider") - angle_slider.value = abs(line_data.angle) + angle_slider.value = absf(line_data.angle) length_slider.value = line_data.length line.line_button = line_button # In case we need to change properties from line - angle_slider.connect("value_changed", self, "angle_changed", [line_button]) - length_slider.connect("value_changed", self, "length_changed", [line_button]) - remove_button.connect("pressed", self, "_remove_line_pressed", [line_button]) + angle_slider.value_changed.connect(angle_changed.bind(line_button)) + length_slider.value_changed.connect(length_changed.bind(line_button)) + remove_button.pressed.connect(_remove_line_pressed.bind(line_button)) perspective_lines.append(line) func remove_line(line_index): var line_to_remove = perspective_lines[line_index] - perspective_lines.remove(line_index) + perspective_lines.remove_at(line_index) line_to_remove.queue_free() func update_data_to_project(removal := false): - var project = Global.current_project - var idx = get_index() + var project := Global.current_project + var idx := get_index() # If deletion is requested if removal: - project.vanishing_points.remove(idx) + project.vanishing_points.remove_at(idx) return # If project knows about this vanishing point then update it - var data = serialize() + var data := serialize() if idx < project.vanishing_points.size(): project.vanishing_points[idx] = data # If project doesn't know about this vanishing point then NOW it knows @@ -248,7 +246,7 @@ func refresh(index: int): func refresh_line(index: int): var line_button = line_buttons_container.get_child(index) var line_data = perspective_lines[index].serialize() - var line_name = str("Line", line_button.get_index() + 1, " (", int(abs(line_data.angle)), "ยฐ)") + var line_name := str("Line", line_button.get_index() + 1, " (", absi(line_data.angle), "ยฐ)") line_button.text = line_name perspective_lines[index].refresh() diff --git a/src/UI/PerspectiveEditor/VanishingPoint.tscn b/src/UI/PerspectiveEditor/VanishingPoint.tscn index 4bede9cbb47..3df1ffbed86 100644 --- a/src/UI/PerspectiveEditor/VanishingPoint.tscn +++ b/src/UI/PerspectiveEditor/VanishingPoint.tscn @@ -3,22 +3,22 @@ [ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=1] [ext_resource path="res://src/UI/PerspectiveEditor/VanishingPoint.gd" type="Script" id=2] [ext_resource path="res://src/UI/Nodes/CollapsibleContainer.tscn" type="PackedScene" id=3] -[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=4] +[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture2D" id=4] [ext_resource path="res://src/UI/PerspectiveEditor/PointCollapseContainer.gd" type="Script" id=5] [node name="VanishingPoint" type="VBoxContainer" groups=["Entry"]] -margin_right = 261.0 -margin_bottom = 145.0 +offset_right = 261.0 +offset_bottom = 145.0 script = ExtResource( 2 ) [node name="TitleContainer" type="HBoxContainer" parent="."] -margin_right = 261.0 -margin_bottom = 20.0 +offset_right = 261.0 +offset_bottom = 20.0 [node name="PointCollapseContainer" type="Button" parent="TitleContainer"] unique_name_in_owner = true -margin_right = 207.0 -margin_bottom = 20.0 +offset_right = 207.0 +offset_bottom = 20.0 mouse_default_cursor_shape = 2 size_flags_horizontal = 3 theme_type_variation = "CollapsibleCheckBox" @@ -28,70 +28,70 @@ script = ExtResource( 5 ) [node name="TextureRect" type="TextureRect" parent="TitleContainer/PointCollapseContainer" groups=["UIButtons"]] anchor_top = 0.5 anchor_bottom = 0.5 -margin_left = 2.0 -margin_top = -6.0 -margin_right = 14.0 -margin_bottom = 6.0 -rect_rotation = -90.0 -rect_pivot_offset = Vector2( 6, 6 ) +offset_left = 2.0 +offset_top = -6.0 +offset_right = 14.0 +offset_bottom = 6.0 +rotation = -90.0 +pivot_offset = Vector2( 6, 6 ) texture = ExtResource( 4 ) [node name="Label" type="Label" parent="TitleContainer/PointCollapseContainer"] anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 14.0 -theme_type_variation = "Header" +offset_left = 14.0 +theme_type_variation = &"HeaderSmall" valign = 1 [node name="ColorPickerButton" type="ColorPickerButton" parent="TitleContainer"] unique_name_in_owner = true -margin_left = 211.0 -margin_right = 261.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 50, 0 ) +offset_left = 211.0 +offset_right = 261.0 +offset_bottom = 20.0 +custom_minimum_size = Vector2( 50, 0 ) [node name="Content" type="HBoxContainer" parent="."] unique_name_in_owner = true -margin_top = 24.0 -margin_right = 261.0 -margin_bottom = 130.0 +offset_top = 24.0 +offset_right = 261.0 +offset_bottom = 130.0 [node name="Spacer" type="Control" parent="Content"] -margin_right = 5.0 -margin_bottom = 106.0 -rect_min_size = Vector2( 5, 0 ) +offset_right = 5.0 +offset_bottom = 106.0 +custom_minimum_size = Vector2( 5, 0 ) [node name="BoundaryL" type="ColorRect" parent="Content"] -margin_left = 9.0 -margin_right = 11.0 -margin_bottom = 106.0 -rect_min_size = Vector2( 2, 0 ) +offset_left = 9.0 +offset_right = 11.0 +offset_bottom = 106.0 +custom_minimum_size = Vector2( 2, 0 ) [node name="VBoxContainer" type="VBoxContainer" parent="Content"] -margin_left = 15.0 -margin_right = 255.0 -margin_bottom = 106.0 +offset_left = 15.0 +offset_right = 255.0 +offset_bottom = 106.0 size_flags_horizontal = 3 [node name="PointInfo" type="HBoxContainer" parent="Content/VBoxContainer"] -margin_right = 240.0 -margin_bottom = 52.0 +offset_right = 240.0 +offset_bottom = 52.0 [node name="Label" type="Label" parent="Content/VBoxContainer/PointInfo"] -margin_right = 56.0 -margin_bottom = 52.0 +offset_right = 56.0 +offset_bottom = 52.0 size_flags_vertical = 5 text = "Position:" [node name="Position" type="VBoxContainer" parent="Content/VBoxContainer/PointInfo"] -margin_left = 60.0 -margin_right = 240.0 -margin_bottom = 52.0 +offset_left = 60.0 +offset_right = 240.0 +offset_bottom = 52.0 size_flags_horizontal = 3 [node name="X" parent="Content/VBoxContainer/PointInfo/Position" instance=ExtResource( 1 )] unique_name_in_owner = true -margin_right = 180.0 +offset_right = 180.0 step = 0.5 allow_greater = true allow_lesser = true @@ -99,72 +99,72 @@ prefix = "X :" [node name="Y" parent="Content/VBoxContainer/PointInfo/Position" instance=ExtResource( 1 )] unique_name_in_owner = true -margin_top = 28.0 -margin_right = 180.0 -margin_bottom = 52.0 +offset_top = 28.0 +offset_right = 180.0 +offset_bottom = 52.0 step = 0.5 allow_greater = true allow_lesser = true prefix = "Y :" [node name="CollapsibleContainer" parent="Content/VBoxContainer" instance=ExtResource( 3 )] -margin_top = 56.0 -margin_right = 240.0 -margin_bottom = 76.0 +offset_top = 56.0 +offset_right = 240.0 +offset_bottom = 76.0 text = "Lines" [node name="HBoxContainer" type="HBoxContainer" parent="Content/VBoxContainer/CollapsibleContainer"] visible = false -margin_top = 24.0 -margin_right = 261.0 -margin_bottom = 44.0 +offset_top = 24.0 +offset_right = 261.0 +offset_bottom = 44.0 [node name="Spacer" type="Control" parent="Content/VBoxContainer/CollapsibleContainer/HBoxContainer"] -margin_right = 20.0 -margin_bottom = 20.0 -rect_min_size = Vector2( 20, 0 ) +offset_right = 20.0 +offset_bottom = 20.0 +custom_minimum_size = Vector2( 20, 0 ) [node name="VSeparator" type="VSeparator" parent="Content/VBoxContainer/CollapsibleContainer/HBoxContainer"] -margin_right = 4.0 -margin_bottom = 40.0 +offset_right = 4.0 +offset_bottom = 40.0 [node name="LinesContainer" type="VBoxContainer" parent="Content/VBoxContainer/CollapsibleContainer/HBoxContainer"] unique_name_in_owner = true -margin_left = 24.0 -margin_right = 261.0 -margin_bottom = 20.0 +offset_left = 24.0 +offset_right = 261.0 +offset_bottom = 20.0 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="AddLine" type="Button" parent="Content/VBoxContainer/CollapsibleContainer/HBoxContainer/LinesContainer"] -margin_right = 237.0 -margin_bottom = 20.0 +offset_right = 237.0 +offset_bottom = 20.0 text = "Add Line" [node name="Delete" type="Button" parent="Content/VBoxContainer"] -margin_top = 80.0 -margin_right = 240.0 -margin_bottom = 100.0 -rect_min_size = Vector2( 40, 0 ) +offset_top = 80.0 +offset_right = 240.0 +offset_bottom = 100.0 +custom_minimum_size = Vector2( 40, 0 ) text = "Delete Point" [node name="BoundaryB" type="ColorRect" parent="Content/VBoxContainer"] -margin_top = 104.0 -margin_right = 240.0 -margin_bottom = 106.0 -rect_min_size = Vector2( 0, 2 ) +offset_top = 104.0 +offset_right = 240.0 +offset_bottom = 106.0 +custom_minimum_size = Vector2( 0, 2 ) [node name="BoundaryR" type="ColorRect" parent="Content"] -margin_left = 259.0 -margin_right = 261.0 -margin_bottom = 106.0 -rect_min_size = Vector2( 2, 0 ) +offset_left = 259.0 +offset_right = 261.0 +offset_bottom = 106.0 +custom_minimum_size = Vector2( 2, 0 ) [node name="HSeparator" type="HSeparator" parent="."] -margin_top = 134.0 -margin_right = 261.0 -margin_bottom = 144.0 -custom_constants/separation = 10 +offset_top = 134.0 +offset_right = 261.0 +offset_bottom = 144.0 +theme_override_constants/separation = 10 [connection signal="toggled" from="TitleContainer/PointCollapseContainer" to="TitleContainer/PointCollapseContainer" method="_on_Button_toggled"] [connection signal="pressed" from="Content/VBoxContainer/CollapsibleContainer/HBoxContainer/LinesContainer/AddLine" to="." method="_on_AddLine_pressed"] diff --git a/src/UI/Recorder/Recorder.gd b/src/UI/Recorder/Recorder.gd index 139ebbdbd39..3adc72e574a 100644 --- a/src/UI/Recorder/Recorder.gd +++ b/src/UI/Recorder/Recorder.gd @@ -4,32 +4,31 @@ signal frame_saved enum Mode { CANVAS, PIXELORAMA } -var mode: int = Mode.CANVAS +var mode := Mode.CANVAS var chosen_dir := "" var save_dir := "" var project: Project -var cache := [] # Array of images stored during recording -var frame_captured := 0 # A variable used to visualize frames captured -var skip_amount := 1 # No of "do" actions after which a frame can be captured -var current_frame_no := 0 # used to compare with skip_amount to see if it can be captured +var cache: Array[Image] = [] ## Images stored during recording +var frame_captured := 0 ## Used to visualize frames captured +var skip_amount := 1 ## Number of "do" actions after which a frame can be captured +var current_frame_no := 0 ## Used to compare with skip_amount to see if it can be captured var resize := 100 -onready var project_list := $"%TargetProjectOption" as OptionButton -onready var folder_button := $"%Folder" as Button -onready var start_button := $"%Start" as Button -onready var size_label := $"%Size" as Label -onready var path_field := $"%Path" as LineEdit +@onready var project_list := $"%TargetProjectOption" as OptionButton +@onready var folder_button := $"%Folder" as Button +@onready var start_button := $"%Start" as Button +@onready var size_label := $"%Size" as Label +@onready var path_field := $"%Path" as LineEdit func _ready() -> void: refresh_projects_list() project = Global.current_project - connect("frame_saved", self, "_on_frame_saved") + frame_saved.connect(_on_frame_saved) # Make a recordings folder if there isn't one - var dir := Directory.new() - chosen_dir = Global.directory_module.xdg_data_home.plus_file("Recordings") - dir.make_dir_recursive(chosen_dir) + chosen_dir = Global.home_data_directory.path_join("Recordings") + DirAccess.make_dir_recursive_absolute(chosen_dir) path_field.text = chosen_dir size_label.text = str("(", project.size.x, "ร—", project.size.y, ")") @@ -54,13 +53,10 @@ func initialize_recording() -> void: save_dir[-1] = "" # Create a new directory based on time - var folder = str( - project.name, OS.get_time().hour, "_", OS.get_time().minute, "_", OS.get_time().second - ) - save_dir = save_dir.plus_file(folder) - var dir := Directory.new() - -# warning-ignore:return_value_discarded + var time_dict := Time.get_time_dict_from_system() + var folder := str(project.name, time_dict.hour, "_", time_dict.minute, "_", time_dict.second) + var dir := DirAccess.open(save_dir) + save_dir = save_dir.path_join(folder) dir.make_dir_recursive(save_dir) capture_frame() # capture first frame @@ -72,19 +68,21 @@ func capture_frame() -> void: if current_frame_no != skip_amount: return current_frame_no = 0 - var image := Image.new() + var image: Image if mode == Mode.PIXELORAMA: - image = get_tree().root.get_viewport().get_texture().get_data() - image.flip_y() + image = get_tree().root.get_viewport().get_texture().get_image() else: - var frame = project.frames[project.current_frame] - image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) - Export.blend_all_layers(image, frame, Vector2(0, 0), project) + var frame := project.frames[project.current_frame] + image = Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) + Export.blend_all_layers(image, frame, Vector2i.ZERO, project) if mode == Mode.CANVAS: if resize != 100: - image.unlock() - image.resize(image.get_size().x * resize / 100, image.get_size().y * resize / 100, 0) + image.resize( + image.get_size().x * resize / 100, + image.get_size().y * resize / 100, + Image.INTERPOLATE_NEAREST + ) cache.append(image) @@ -93,13 +91,13 @@ func _on_Timer_timeout() -> void: # Saves frames little by little during recording if cache.size() > 0: save_frame(cache[0]) - cache.remove(0) + cache.remove_at(0) func save_frame(img: Image) -> void: - var save_file = str(project.name, "_", frame_captured, ".png") - img.save_png(save_dir.plus_file(save_file)) - emit_signal("frame_saved") + var save_file := str(project.name, "_", frame_captured, ".png") + img.save_png(save_dir.path_join(save_file)) + frame_saved.emit() func _on_frame_saved() -> void: @@ -123,11 +121,11 @@ func finalize_recording() -> void: func disconnect_undo() -> void: - project.undo_redo.disconnect("version_changed", self, "capture_frame") + project.undo_redo.version_changed.disconnect(capture_frame) func connect_undo() -> void: - project.undo_redo.connect("version_changed", self, "capture_frame") + project.undo_redo.version_changed.connect(capture_frame) func _on_TargetProjectOption_item_selected(index: int) -> void: @@ -154,9 +152,9 @@ func _on_Start_toggled(button_pressed: bool) -> void: func _on_Settings_pressed() -> void: - var settings := $Dialogs/Options as WindowDialog - var pos := rect_position - settings.popup(Rect2(pos, settings.rect_size)) + var settings := $Dialogs/Options as Window + var pos := position + settings.popup(Rect2(pos, settings.size)) func _on_SkipAmount_value_changed(value: float) -> void: @@ -195,5 +193,9 @@ func _on_Path_dir_selected(dir: String) -> void: func _on_Fps_value_changed(value: float) -> void: var dur_label := $Dialogs/Options/PanelContainer/VBoxContainer/Fps/Duration as Label - var duration := stepify(1.0 / value, 0.0001) + var duration := snappedf(1.0 / value, 0.0001) dur_label.text = str("= ", duration, " sec") + + +func _on_options_close_requested() -> void: + $Dialogs/Options.hide() diff --git a/src/UI/Recorder/Recorder.tscn b/src/UI/Recorder/Recorder.tscn index f794e1dadbb..5b36e6f271a 100644 --- a/src/UI/Recorder/Recorder.tscn +++ b/src/UI/Recorder/Recorder.tscn @@ -1,358 +1,264 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=5 format=3 uid="uid://dl6ook010q86o"] -[ext_resource path="res://assets/graphics/recorder/start.png" type="Texture" id=1] -[ext_resource path="res://src/UI/Recorder/Recorder.gd" type="Script" id=2] -[ext_resource path="res://assets/graphics/timeline/expandable.png" type="Texture" id=3] -[ext_resource path="res://addons/keychain/assets/folder.svg" type="Texture" id=4] +[ext_resource type="Texture2D" uid="uid://bgfqvkmstecr5" path="res://assets/graphics/recorder/start.png" id="1"] +[ext_resource type="Script" path="res://src/UI/Recorder/Recorder.gd" id="2"] +[ext_resource type="Texture2D" uid="uid://dinubfua8gqhw" path="res://assets/graphics/timeline/expandable.png" id="3"] +[ext_resource type="Texture2D" uid="uid://b0gbmkb8xwksb" path="res://addons/keychain/assets/folder.svg" id="4"] [node name="Recorder" type="PanelContainer"] -margin_left = 1.0 -margin_right = 195.0 -margin_bottom = 50.0 -rect_min_size = Vector2( 0, 36 ) -script = ExtResource( 2 ) +custom_minimum_size = Vector2(0, 36) +offset_left = 1.0 +offset_right = 195.0 +offset_bottom = 50.0 +script = ExtResource("2") [node name="ScrollContainer" type="ScrollContainer" parent="."] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 187.0 -margin_bottom = 43.0 -rect_min_size = Vector2( 36, 36 ) +custom_minimum_size = Vector2(36, 36) +layout_mode = 2 [node name="CenterContainer" type="CenterContainer" parent="ScrollContainer"] -margin_right = 180.0 -margin_bottom = 36.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="GridContainer" type="GridContainer" parent="ScrollContainer/CenterContainer"] -margin_left = 4.0 -margin_top = 2.0 -margin_right = 176.0 -margin_bottom = 34.0 +layout_mode = 2 size_flags_vertical = 0 columns = 4 [node name="Captured" type="Label" parent="ScrollContainer/CenterContainer/GridContainer"] visible = false -margin_top = 9.0 -margin_right = 32.0 -margin_bottom = 23.0 +layout_mode = 2 [node name="TargetProjectOption" type="OptionButton" parent="ScrollContainer/CenterContainer/GridContainer"] unique_name_in_owner = true -margin_right = 100.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 100, 0 ) -hint_tooltip = "Choose project" +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +tooltip_text = "Choose project" clip_text = true [node name="Start" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]] unique_name_in_owner = true -margin_left = 104.0 -margin_right = 136.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -hint_tooltip = "Capture .png frames" +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Capture .png frames" mouse_default_cursor_shape = 2 toggle_mode = true [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Start"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -10.0 -margin_top = -10.5 -margin_right = 10.0 -margin_bottom = 10.5 -texture = ExtResource( 1 ) -expand = true +offset_left = -10.0 +offset_top = -10.5 +offset_right = 10.0 +offset_bottom = 10.5 +texture = ExtResource("1") +expand_mode = 1 stretch_mode = 6 [node name="Settings" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]] unique_name_in_owner = true -margin_left = 140.0 -margin_right = 172.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -hint_tooltip = "Settings" +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Settings" mouse_default_cursor_shape = 2 toggle_mode = true [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Settings"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -10.0 -margin_top = -10.5 -margin_right = 10.0 -margin_bottom = 10.5 -texture = ExtResource( 3 ) +offset_left = -10.0 +offset_top = -10.5 +offset_right = 10.0 +offset_bottom = 10.5 +texture = ExtResource("3") stretch_mode = 6 [node name="Folder" type="Button" parent="ScrollContainer/CenterContainer/GridContainer"] unique_name_in_owner = true visible = false -margin_left = 176.0 -margin_right = 208.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 32, 32 ) -hint_tooltip = "Open Folder" +custom_minimum_size = Vector2(32, 32) +layout_mode = 2 +tooltip_text = "Open Folder" mouse_default_cursor_shape = 2 toggle_mode = true -__meta__ = { -"_editor_description_": "" -} [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Folder"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 3.0 -margin_top = 3.0 -margin_right = -3.0 -margin_bottom = -3.0 -texture = ExtResource( 4 ) +offset_left = 3.0 +offset_top = 3.0 +offset_right = -3.0 +offset_bottom = -3.0 +texture = ExtResource("4") stretch_mode = 6 [node name="Dialogs" type="Control" parent="."] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 187.0 -margin_bottom = 43.0 +layout_mode = 2 mouse_filter = 2 -[node name="Options" type="WindowDialog" parent="Dialogs"] -margin_right = 293.0 -margin_bottom = 259.0 -rect_min_size = Vector2( 295, 260 ) -window_title = "Options" +[node name="Options" type="Window" parent="Dialogs"] +size = Vector2i(400, 300) +visible = false [node name="PanelContainer" type="PanelContainer" parent="Dialogs/Options"] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 9.0 -margin_top = 9.0 -margin_right = -9.0 -margin_bottom = -9.0 +offset_left = 9.0 +offset_top = 9.0 +offset_right = -9.0 +offset_bottom = -9.0 [node name="VBoxContainer" type="VBoxContainer" parent="Dialogs/Options/PanelContainer"] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 270.0 -margin_bottom = 235.0 +layout_mode = 2 [node name="IntervalHeader" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"] -margin_right = 263.0 -margin_bottom = 14.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/IntervalHeader"] -margin_right = 49.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Interval" [node name="HSeparator" type="HSeparator" parent="Dialogs/Options/PanelContainer/VBoxContainer/IntervalHeader"] -margin_left = 49.0 -margin_right = 263.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="ActionGap" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"] -margin_top = 18.0 -margin_right = 263.0 -margin_bottom = 42.0 +layout_mode = 2 alignment = 1 [node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ActionGap"] -margin_left = 2.0 -margin_top = 5.0 -margin_right = 131.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Capture frame every" [node name="SkipAmount" type="SpinBox" parent="Dialogs/Options/PanelContainer/VBoxContainer/ActionGap"] -margin_left = 135.0 -margin_right = 209.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="Label2" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ActionGap"] -margin_left = 213.0 -margin_top = 5.0 -margin_right = 261.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Actions" [node name="Fps" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"] -margin_top = 46.0 -margin_right = 263.0 -margin_bottom = 70.0 +layout_mode = 2 alignment = 1 [node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/Fps"] -margin_left = 36.0 -margin_top = 5.0 -margin_right = 62.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Fps:" [node name="Fps" type="SpinBox" parent="Dialogs/Options/PanelContainer/VBoxContainer/Fps"] -margin_left = 66.0 -margin_right = 140.0 -margin_bottom = 24.0 +layout_mode = 2 min_value = 1.0 value = 30.0 allow_greater = true [node name="Duration" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/Fps"] -margin_left = 144.0 -margin_top = 5.0 -margin_right = 226.0 -margin_bottom = 19.0 +layout_mode = 2 text = "= 0.0333 sec" [node name="ModeHeader" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer" groups=["visible during recording"]] -margin_top = 74.0 -margin_right = 263.0 -margin_bottom = 88.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ModeHeader"] -margin_right = 36.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Mode" [node name="HSeparator" type="HSeparator" parent="Dialogs/Options/PanelContainer/VBoxContainer/ModeHeader"] -margin_left = 36.0 -margin_right = 263.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="ModeType" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer" groups=["visible during recording"]] -margin_top = 92.0 -margin_right = 263.0 -margin_bottom = 132.0 +layout_mode = 2 alignment = 1 [node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ModeType"] -margin_left = 15.0 -margin_top = 13.0 -margin_right = 93.0 -margin_bottom = 27.0 +layout_mode = 2 text = "Canvas Only" [node name="Mode" type="CheckButton" parent="Dialogs/Options/PanelContainer/VBoxContainer/ModeType"] -margin_left = 97.0 -margin_right = 173.0 -margin_bottom = 40.0 -align = 1 +layout_mode = 2 [node name="Label2" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ModeType"] -margin_left = 177.0 -margin_top = 13.0 -margin_right = 248.0 -margin_bottom = 27.0 +layout_mode = 2 text = "Pixelorama" -[node name="ExportDimentions" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"] -margin_top = 136.0 -margin_right = 263.0 -margin_bottom = 160.0 +[node name="OutputScale" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"] +layout_mode = 2 alignment = 1 -[node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ExportDimentions"] -margin_left = 47.0 -margin_top = 5.0 -margin_right = 133.0 -margin_bottom = 19.0 -text = "Optput Scale:" -align = 1 +[node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/OutputScale"] +layout_mode = 2 +text = "Output Scale:" -[node name="Size" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/ExportDimentions"] +[node name="Size" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/OutputScale"] unique_name_in_owner = true -margin_left = 137.0 -margin_top = 5.0 -margin_right = 137.0 -margin_bottom = 19.0 - -[node name="Resize" type="SpinBox" parent="Dialogs/Options/PanelContainer/VBoxContainer/ExportDimentions"] -margin_left = 141.0 -margin_right = 215.0 -margin_bottom = 24.0 +layout_mode = 2 + +[node name="Resize" type="SpinBox" parent="Dialogs/Options/PanelContainer/VBoxContainer/OutputScale"] +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = 50.0 max_value = 1000.0 -step = 100.0 +step = 50.0 value = 100.0 allow_greater = true suffix = "%" -__meta__ = { -"_editor_description_": "" -} [node name="PathHeader" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"] -margin_top = 164.0 -margin_right = 263.0 -margin_bottom = 178.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="Label" type="Label" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathHeader"] -margin_right = 28.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Path" [node name="HSeparator" type="HSeparator" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathHeader"] -margin_left = 28.0 -margin_right = 263.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="PathContainer" type="HBoxContainer" parent="Dialogs/Options/PanelContainer/VBoxContainer"] -margin_top = 182.0 -margin_right = 263.0 -margin_bottom = 207.0 +layout_mode = 2 [node name="Path" type="LineEdit" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer"] unique_name_in_owner = true -margin_right = 171.0 -margin_bottom = 25.0 +layout_mode = 2 size_flags_horizontal = 3 -align = 1 -editable = false placeholder_text = "Choose Destination --->" +editable = false [node name="Open" type="Button" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer"] -margin_left = 175.0 -margin_right = 200.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) +custom_minimum_size = Vector2(25, 25) +layout_mode = 2 [node name="TextureRect" type="TextureRect" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer/Open"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 2.0 -margin_top = 2.0 -margin_right = -2.0 -margin_bottom = -2.0 -texture = ExtResource( 4 ) +offset_left = 2.0 +offset_top = 2.0 +offset_right = -2.0 +offset_bottom = -2.0 +texture = ExtResource("4") stretch_mode = 6 [node name="Choose" type="Button" parent="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer"] -margin_left = 204.0 -margin_right = 263.0 -margin_bottom = 25.0 +layout_mode = 2 text = "Choose" [node name="Path" type="FileDialog" parent="Dialogs"] -margin_right = 445.0 -margin_bottom = 290.0 -rect_min_size = Vector2( 315, 290 ) -window_title = "Open a Directory" -resizable = true mode = 2 access = 2 @@ -363,10 +269,11 @@ access = 2 [connection signal="toggled" from="ScrollContainer/CenterContainer/GridContainer/Start" to="." method="_on_Start_toggled"] [connection signal="pressed" from="ScrollContainer/CenterContainer/GridContainer/Settings" to="." method="_on_Settings_pressed"] [connection signal="pressed" from="ScrollContainer/CenterContainer/GridContainer/Folder" to="." method="_on_Open_pressed"] +[connection signal="close_requested" from="Dialogs/Options" to="." method="_on_options_close_requested"] [connection signal="value_changed" from="Dialogs/Options/PanelContainer/VBoxContainer/ActionGap/SkipAmount" to="." method="_on_SkipAmount_value_changed"] [connection signal="value_changed" from="Dialogs/Options/PanelContainer/VBoxContainer/Fps/Fps" to="." method="_on_Fps_value_changed"] [connection signal="toggled" from="Dialogs/Options/PanelContainer/VBoxContainer/ModeType/Mode" to="." method="_on_Mode_toggled"] -[connection signal="value_changed" from="Dialogs/Options/PanelContainer/VBoxContainer/ExportDimentions/Resize" to="." method="_on_SpinBox_value_changed"] +[connection signal="value_changed" from="Dialogs/Options/PanelContainer/VBoxContainer/OutputScale/Resize" to="." method="_on_SpinBox_value_changed"] [connection signal="pressed" from="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer/Open" to="." method="_on_Open_pressed"] [connection signal="pressed" from="Dialogs/Options/PanelContainer/VBoxContainer/PathContainer/Choose" to="." method="_on_Choose_pressed"] [connection signal="dir_selected" from="Dialogs/Path" to="." method="_on_Path_dir_selected"] diff --git a/src/UI/ReferenceImages/ReferenceImage.gd b/src/UI/ReferenceImages/ReferenceImage.gd index 307b53b07ce..60eec8fcd0c 100644 --- a/src/UI/ReferenceImages/ReferenceImage.gd +++ b/src/UI/ReferenceImages/ReferenceImage.gd @@ -1,16 +1,15 @@ class_name ReferenceImage -extends Sprite -# A class describing a reference image +extends Sprite2D +## A class describing a reference image signal properties_changed -var project = Global.current_project +var project := Global.current_project -var shader: Shader = preload("res://src/Shaders/SilhouetteShader.gdshader") +var shader := preload("res://src/Shaders/SilhouetteShader.gdshader") -var image_path: String = "" - -var filter = false +var image_path := "" +var filter := false var silhouette := false @@ -19,22 +18,25 @@ func _ready() -> void: func change_properties() -> void: - emit_signal("properties_changed") + properties_changed.emit() -# Resets the position and scale of the reference image. +## Resets the position and scale of the reference image. func position_reset() -> void: position = project.size / 2.0 if texture != null: scale = ( Vector2.ONE - * min(project.size.x / texture.get_width(), project.size.y / texture.get_height()) + * minf( + float(project.size.x) / texture.get_width(), + float(project.size.y) / texture.get_height() + ) ) else: scale = Vector2.ONE -# Serialize details of the reference image. +## Serialize details of the reference image. func serialize() -> Dictionary: return { "x": position.x, @@ -51,28 +53,25 @@ func serialize() -> Dictionary: } -# Load details of the reference image from a dictionary. -# Be aware that new ReferenceImages are created via deserialization. -# This is because deserialization sets up some nice defaults. +## Load details of the reference image from a dictionary. +## Be aware that new ReferenceImages are created via deserialization. +## This is because deserialization sets up some nice defaults. func deserialize(d: Dictionary) -> void: modulate = Color(1, 1, 1, 0.5) if d.has("image_path"): # Note that reference images are referred to by path. # These images may be rather big. - # Also image_path = d["image_path"] var img := Image.new() if img.load(image_path) == OK: - var itex := ImageTexture.new() - # don't do FLAG_REPEAT - it could cause visual issues - itex.create_from_image(img, Texture.FLAG_MIPMAPS) + var itex := ImageTexture.create_from_image(img) texture = itex # Apply the silhouette shader - var mat = ShaderMaterial.new() + var mat := ShaderMaterial.new() mat.shader = shader # TODO: Lsbt - Add a option in prefrences to customize the color # This color is almost black because it is less harsh - mat.set_shader_param("silhouette_color", Color(0.069, 0.069326, 0.074219)) + mat.set_shader_parameter("silhouette_color", Color(0.069, 0.069326, 0.074219)) set_material(mat) # Now that the image may have been established... @@ -96,14 +95,12 @@ func deserialize(d: Dictionary) -> void: if d.has("filter"): filter = d["filter"] if d.has("silhouette"): - get_material().set_shader_param("show_silhouette", d["silhouette"]) + get_material().set_shader_parameter("show_silhouette", d["silhouette"]) change_properties() -# Useful for HTML5 +## Useful for Web func create_from_image(image: Image) -> void: - var itex := ImageTexture.new() - # don't do FLAG_REPEAT - it could cause visual issues - itex.create_from_image(image, Texture.FLAG_MIPMAPS | Texture.FLAG_FILTER) + var itex := ImageTexture.create_from_image(image) texture = itex position_reset() diff --git a/src/UI/ReferenceImages/ReferenceImageButton.gd b/src/UI/ReferenceImages/ReferenceImageButton.gd index 8e44586e456..8b56cbb9d52 100644 --- a/src/UI/ReferenceImages/ReferenceImageButton.gd +++ b/src/UI/ReferenceImages/ReferenceImageButton.gd @@ -1,23 +1,23 @@ extends Container -# UI to handle reference image editing. +## UI to handle reference image editing. var element: ReferenceImage -var _ignore_spinbox_changes = false +var _ignore_spinbox_changes := false func _ready(): - if OS.get_name() == "HTML5": - $Interior/PathHeader/Path.visible = false + if OS.get_name() == "Web": + $Interior/PathHeader/Path3D.visible = false $Interior/PathHeader/PathHTML.text = element.image_path else: $Interior/PathHeader/PathHTML.visible = false - $Interior/PathHeader/Path.text = element.image_path + $Interior/PathHeader/Path3D.text = element.image_path if !element.texture: - $Interior/PreviewAndOptions/PreviewPanel/Warning.text = "Image Not Found!!!" + $Interior/PreviewAndOptions/PreviewPanel/Warning.text = "Image not found!" else: $Interior/PreviewAndOptions/PreviewPanel/Preview.texture = element.texture - element.connect("properties_changed", self, "_update_properties") + element.properties_changed.connect(_update_properties) _update_properties() @@ -31,7 +31,7 @@ func _update_properties(): $Interior/PreviewAndOptions/Options/Position/X.max_value = element.project.size.x $Interior/PreviewAndOptions/Options/Position/Y.max_value = element.project.size.y $Interior/PreviewAndOptions/Options/Opacity.value = element.modulate.a * 100 - $Interior/OtherOptions/ApplyFilter.pressed = element.filter + $Interior/OtherOptions/ApplyFilter.button_pressed = element.filter _ignore_spinbox_changes = false @@ -45,11 +45,11 @@ func _on_Remove_pressed(): if index != -1: queue_free() element.queue_free() - Global.current_project.reference_images.remove(index) + Global.current_project.reference_images.remove_at(index) Global.current_project.change_project() -func _on_Scale_value_changed(value): +func _on_Scale_value_changed(value: float): if _ignore_spinbox_changes: return element.scale.x = value / 100 @@ -57,21 +57,21 @@ func _on_Scale_value_changed(value): element.change_properties() -func _on_X_value_changed(value): +func _on_X_value_changed(value: float): if _ignore_spinbox_changes: return element.position.x = value element.change_properties() -func _on_Y_value_changed(value): +func _on_Y_value_changed(value: float): if _ignore_spinbox_changes: return element.position.y = value element.change_properties() -func _on_Opacity_value_changed(value): +func _on_Opacity_value_changed(value: float): if _ignore_spinbox_changes: return element.modulate.a = value / 100 @@ -79,20 +79,20 @@ func _on_Opacity_value_changed(value): func _on_Path_pressed() -> void: - OS.shell_open($Interior/PathHeader/Path.text.get_base_dir()) + OS.shell_open($Interior/PathHeader/Path3D.text.get_base_dir()) + + +func _on_Silhouette_toggled(button_pressed: bool) -> void: + element.silhouette = button_pressed + element.get_material().set_shader_parameter("show_silhouette", button_pressed) + element.change_properties() func _on_ApplyFilter_toggled(button_pressed: bool) -> void: element.filter = button_pressed if element.texture: if element.filter: - element.texture.flags = Texture.FLAG_MIPMAPS | Texture.FLAG_FILTER + element.texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR else: - element.texture.flags = Texture.FLAG_MIPMAPS - element.change_properties() - - -func _on_Silhouette_toggled(button_pressed: bool) -> void: - element.silhouette = button_pressed - element.get_material().set_shader_param("show_silhouette", button_pressed) + element.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST element.change_properties() diff --git a/src/UI/ReferenceImages/ReferenceImageButton.tscn b/src/UI/ReferenceImages/ReferenceImageButton.tscn index 43028e09579..f2336ab3371 100644 --- a/src/UI/ReferenceImages/ReferenceImageButton.tscn +++ b/src/UI/ReferenceImages/ReferenceImageButton.tscn @@ -1,167 +1,123 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://5quwfcfl5o1e"] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/ReferenceImages/ReferenceImageButton.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="1"] +[ext_resource type="Script" path="res://src/UI/ReferenceImages/ReferenceImageButton.gd" id="2"] [node name="ReferenceImageButton" type="PanelContainer"] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = -969.0 -margin_bottom = -581.0 +offset_right = -969.0 +offset_bottom = -581.0 size_flags_horizontal = 3 -script = ExtResource( 2 ) +script = ExtResource("2") [node name="Interior" type="VBoxContainer" parent="."] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 325.0 -margin_bottom = 133.0 +layout_mode = 2 [node name="PathHeader" type="HBoxContainer" parent="Interior"] -margin_right = 318.0 -margin_bottom = 14.0 -custom_constants/separation = 0 - -[node name="Path" type="LinkButton" parent="Interior/PathHeader"] -modulate = Color( 0.552941, 1, 0.298039, 1 ) -margin_right = 106.0 -margin_bottom = 14.0 +layout_mode = 2 +theme_override_constants/separation = 0 + +[node name="Path3D" type="LinkButton" parent="Interior/PathHeader"] +modulate = Color(0.552941, 1, 0.298039, 1) +layout_mode = 2 size_flags_horizontal = 3 underline = 1 [node name="PathHTML" type="Label" parent="Interior/PathHeader"] -self_modulate = Color( 0.552941, 1, 0.298039, 1 ) -margin_left = 106.0 -margin_right = 212.0 -margin_bottom = 14.0 +self_modulate = Color(0.552941, 1, 0.298039, 1) +layout_mode = 2 size_flags_horizontal = 3 [node name="HSeparator" type="HSeparator" parent="Interior/PathHeader"] -margin_left = 212.0 -margin_right = 318.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="PreviewAndOptions" type="HBoxContainer" parent="Interior"] -margin_top = 18.0 -margin_right = 318.0 -margin_bottom = 98.0 +layout_mode = 2 [node name="Options" type="GridContainer" parent="Interior/PreviewAndOptions"] -margin_right = 234.0 -margin_bottom = 80.0 +layout_mode = 2 size_flags_horizontal = 3 columns = 2 [node name="PosLabel" type="Label" parent="Interior/PreviewAndOptions/Options"] -margin_top = 5.0 -margin_right = 56.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Position:" -align = 2 [node name="Position" type="HBoxContainer" parent="Interior/PreviewAndOptions/Options"] -margin_left = 60.0 -margin_right = 234.0 -margin_bottom = 24.0 +layout_mode = 2 size_flags_horizontal = 3 -[node name="X" parent="Interior/PreviewAndOptions/Options/Position" instance=ExtResource( 1 )] -margin_right = 85.0 +[node name="X" parent="Interior/PreviewAndOptions/Options/Position" instance=ExtResource("1")] +layout_mode = 2 allow_greater = true allow_lesser = true -[node name="Y" parent="Interior/PreviewAndOptions/Options/Position" instance=ExtResource( 1 )] -margin_left = 89.0 -margin_right = 174.0 +[node name="Y" parent="Interior/PreviewAndOptions/Options/Position" instance=ExtResource("1")] +layout_mode = 2 allow_greater = true allow_lesser = true [node name="ScaleLabel" type="Label" parent="Interior/PreviewAndOptions/Options"] -margin_top = 33.0 -margin_right = 56.0 -margin_bottom = 47.0 +layout_mode = 2 text = "Scale:" -align = 2 -[node name="Scale" parent="Interior/PreviewAndOptions/Options" instance=ExtResource( 1 )] -margin_left = 60.0 -margin_top = 28.0 -margin_right = 234.0 -margin_bottom = 52.0 +[node name="Scale" parent="Interior/PreviewAndOptions/Options" instance=ExtResource("1")] +layout_mode = 2 allow_greater = true allow_lesser = true [node name="OpacityLabel" type="Label" parent="Interior/PreviewAndOptions/Options"] -margin_top = 61.0 -margin_right = 56.0 -margin_bottom = 75.0 +layout_mode = 2 text = "Opacity:" -align = 2 -[node name="Opacity" parent="Interior/PreviewAndOptions/Options" instance=ExtResource( 1 )] -margin_left = 60.0 -margin_top = 56.0 -margin_right = 234.0 -margin_bottom = 80.0 +[node name="Opacity" parent="Interior/PreviewAndOptions/Options" instance=ExtResource("1")] +layout_mode = 2 [node name="PreviewPanel" type="Panel" parent="Interior/PreviewAndOptions"] -margin_left = 238.0 -margin_right = 318.0 -margin_bottom = 80.0 -rect_min_size = Vector2( 80, 80 ) +custom_minimum_size = Vector2(80, 80) +layout_mode = 2 [node name="Warning" type="Label" parent="Interior/PreviewAndOptions/PreviewPanel"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -align = 1 -valign = 1 -autowrap = true [node name="Preview" type="TextureRect" parent="Interior/PreviewAndOptions/PreviewPanel"] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 2.0 -margin_top = 2.0 -margin_right = -2.0 -margin_bottom = -2.0 -expand = true +offset_left = 2.0 +offset_top = 2.0 +offset_right = -2.0 +offset_bottom = -2.0 +expand_mode = 1 [node name="OtherOptions" type="HBoxContainer" parent="Interior"] -margin_top = 102.0 -margin_right = 318.0 -margin_bottom = 126.0 +layout_mode = 2 alignment = 2 [node name="ApplyFilter" type="CheckBox" parent="Interior/OtherOptions"] -margin_right = 101.0 -margin_bottom = 24.0 -hint_tooltip = "Uses a magnifying filter, to enable smooth zooming in of the texture." +layout_mode = 2 +tooltip_text = "Uses a magnifying filter, to enable smooth zooming in of the texture." text = "Apply Filter" -align = 1 [node name="Silhouette" type="CheckBox" parent="Interior/OtherOptions"] -margin_left = 105.0 -margin_right = 198.0 -margin_bottom = 24.0 -hint_tooltip = "Blacks out the image and makes all opaque pixels a dark color." +layout_mode = 2 text = "Silhouette" [node name="Reset" type="Button" parent="Interior/OtherOptions"] -margin_left = 202.0 -margin_right = 250.0 -margin_bottom = 24.0 +layout_mode = 2 text = "Reset" -icon_align = 1 [node name="Remove" type="Button" parent="Interior/OtherOptions"] -margin_left = 254.0 -margin_right = 318.0 -margin_bottom = 24.0 -custom_colors/font_color = Color( 1, 0.266667, 0.266667, 1 ) +layout_mode = 2 +theme_override_colors/font_color = Color(1, 0.266667, 0.266667, 1) text = "Remove" -[connection signal="pressed" from="Interior/PathHeader/Path" to="." method="_on_Path_pressed"] +[connection signal="pressed" from="Interior/PathHeader/Path3D" to="." method="_on_Path_pressed"] [connection signal="value_changed" from="Interior/PreviewAndOptions/Options/Position/X" to="." method="_on_X_value_changed"] [connection signal="value_changed" from="Interior/PreviewAndOptions/Options/Position/Y" to="." method="_on_Y_value_changed"] [connection signal="value_changed" from="Interior/PreviewAndOptions/Options/Scale" to="." method="_on_Scale_value_changed"] diff --git a/src/UI/ReferenceImages/ReferencesPanel.gd b/src/UI/ReferenceImages/ReferencesPanel.gd index 78f1adf1b1b..53f83d2e4dd 100644 --- a/src/UI/ReferenceImages/ReferencesPanel.gd +++ b/src/UI/ReferenceImages/ReferencesPanel.gd @@ -1,8 +1,9 @@ class_name ReferencesPanel extends VBoxContainer -# Panel for reference image management +## Panel for reference image management -onready var list = $"Scroll/List" +var reference_image_button_tscn := preload("res://src/UI/ReferenceImages/ReferenceImageButton.tscn") +@onready var list = $"Scroll/List" func project_changed(): @@ -16,6 +17,6 @@ func project_changed(): # And update. for ref in Global.current_project.reference_images: ref.visible = true - var l = preload("res://src/UI/ReferenceImages/ReferenceImageButton.tscn").instance() + var l = reference_image_button_tscn.instantiate() l.element = ref list.add_child(l) diff --git a/src/UI/ReferenceImages/ReferencesPanel.tscn b/src/UI/ReferenceImages/ReferencesPanel.tscn index cfa373cd00d..05ccca9bc28 100644 --- a/src/UI/ReferenceImages/ReferencesPanel.tscn +++ b/src/UI/ReferenceImages/ReferencesPanel.tscn @@ -1,51 +1,40 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://b75xk2ix8xxml"] -[ext_resource path="res://src/UI/ReferenceImages/ReferencesPanel.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/UI/ReferenceImages/ReferencesPanel.gd" id="1"] [node name="Reference Images" type="VBoxContainer"] +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -script = ExtResource( 1 ) +script = ExtResource("1") [node name="Header" type="HBoxContainer" parent="."] -margin_right = 1280.0 -margin_bottom = 14.0 -custom_constants/separation = 0 +layout_mode = 2 +theme_override_constants/separation = 0 [node name="HSeparator2" type="HSeparator" parent="Header"] -margin_right = 582.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Label" type="Label" parent="Header"] -margin_left = 582.0 -margin_right = 697.0 -margin_bottom = 14.0 -theme_type_variation = "Header" +layout_mode = 2 +theme_type_variation = &"HeaderSmall" text = "Reference Images" [node name="HSeparator" type="HSeparator" parent="Header"] -margin_left = 697.0 -margin_right = 1280.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="Label" type="Label" parent="."] -margin_top = 18.0 -margin_right = 1280.0 -margin_bottom = 32.0 +layout_mode = 2 text = "When opening an image, it may be imported as a reference." -autowrap = true [node name="Scroll" type="ScrollContainer" parent="."] -margin_top = 36.0 -margin_right = 1280.0 -margin_bottom = 720.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="List" type="VBoxContainer" parent="Scroll"] -margin_right = 1280.0 -margin_bottom = 684.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 diff --git a/src/UI/Tabs.gd b/src/UI/Tabs.gd index f41622087b1..084fd8fbdc9 100644 --- a/src/UI/Tabs.gd +++ b/src/UI/Tabs.gd @@ -1,15 +1,15 @@ -extends Tabs +extends TabBar -onready var unsaved_changes_dialog: ConfirmationDialog = Global.control.find_node( - "UnsavedCanvasDialog" -) +@onready +var unsaved_changes_dialog: ConfirmationDialog = Global.control.find_child("UnsavedCanvasDialog") -# Thanks to https://github.com/godotengine/godot/issues/64498#issuecomment-1217992089 +## Handles closing tab with middle-click +## Thanks to https://github.com/godotengine/godot/issues/64498#issuecomment-1217992089 func _gui_input(event: InputEvent) -> void: if not event is InputEventMouseButton: return - if !event.pressed or event.button_index != BUTTON_MIDDLE: + if !event.pressed or event.button_index != MOUSE_BUTTON_MIDDLE: return var rect := get_rect() var w := rect.position.x @@ -21,7 +21,7 @@ func _gui_input(event: InputEvent) -> void: if w_limit < w: return if get_tab_rect(i).has_point(event.position): - _on_Tabs_tab_close(i) + _on_tab_close_pressed(i) return @@ -29,30 +29,30 @@ func _on_Tabs_tab_changed(tab: int) -> void: Global.current_project_index = tab -func _on_Tabs_tab_close(tab: int) -> void: +func _on_tab_close_pressed(tab: int) -> void: if Global.projects.size() == 1: return if Global.projects[tab].has_changed: - if !unsaved_changes_dialog.is_connected("confirmed", self, "delete_tab"): - unsaved_changes_dialog.connect("confirmed", self, "delete_tab", [tab]) + if !unsaved_changes_dialog.confirmed.is_connected(delete_tab): + unsaved_changes_dialog.confirmed.connect(delete_tab.bind(tab)) unsaved_changes_dialog.popup_centered() Global.dialog_open(true) else: delete_tab(tab) -func _on_Tabs_reposition_active_tab_request(idx_to: int) -> void: - var temp: Project = Global.projects[Global.current_project_index] +func _on_active_tab_rearranged(idx_to: int) -> void: + var temp := Global.projects[Global.current_project_index] Global.projects.erase(temp) Global.projects.insert(idx_to, temp) # Change save paths - var temp_save_path = OpenSave.current_save_paths[Global.current_project_index] - OpenSave.current_save_paths.remove(Global.current_project_index) + var temp_save_path := OpenSave.current_save_paths[Global.current_project_index] + OpenSave.current_save_paths.remove_at(Global.current_project_index) OpenSave.current_save_paths.insert(idx_to, temp_save_path) - var temp_backup_path = OpenSave.backup_save_paths[Global.current_project_index] - OpenSave.backup_save_paths.remove(Global.current_project_index) + var temp_backup_path := OpenSave.backup_save_paths[Global.current_project_index] + OpenSave.backup_save_paths.remove_at(Global.current_project_index) OpenSave.backup_save_paths.insert(idx_to, temp_backup_path) @@ -60,8 +60,8 @@ func delete_tab(tab: int) -> void: remove_tab(tab) Global.projects[tab].remove() OpenSave.remove_backup(tab) - OpenSave.current_save_paths.remove(tab) - OpenSave.backup_save_paths.remove(tab) + OpenSave.current_save_paths.remove_at(tab) + OpenSave.backup_save_paths.remove_at(tab) if Global.current_project_index == tab: if tab > 0: Global.current_project_index -= 1 @@ -70,5 +70,5 @@ func delete_tab(tab: int) -> void: else: if tab < Global.current_project_index: Global.current_project_index -= 1 - if unsaved_changes_dialog.is_connected("confirmed", self, "delete_tab"): - unsaved_changes_dialog.disconnect("confirmed", self, "delete_tab") + if unsaved_changes_dialog.confirmed.is_connected(delete_tab): + unsaved_changes_dialog.confirmed.disconnect(delete_tab) diff --git a/src/UI/Timeline/AnimationTagUI.tscn b/src/UI/Timeline/AnimationTagUI.tscn index b1b1504f41a..3a1f5e60bfd 100644 --- a/src/UI/Timeline/AnimationTagUI.tscn +++ b/src/UI/Timeline/AnimationTagUI.tscn @@ -3,22 +3,22 @@ [ext_resource path="res://src/UI/Timeline/AnimationTagUI.gd" type="Script" id=1] [node name="AnimationTagUI" type="VBoxContainer"] -margin_right = 39.0 -margin_bottom = 32.0 -rect_min_size = Vector2( 39, 32 ) +offset_right = 39.0 +offset_bottom = 32.0 +custom_minimum_size = Vector2( 39, 32 ) script = ExtResource( 1 ) __meta__ = { "_edit_use_anchors_": false } [node name="Line2D" type="Line2D" parent="."] -points = PoolVector2Array( 0, 32, 0, 0, 39, 0, 39, 32 ) +points = PackedVector2Array( 0, 32, 0, 0, 39, 0, 39, 32 ) width = 1.0 [node name="Label" type="Label" parent="."] -margin_left = 7.0 -margin_right = 32.0 -margin_bottom = 32.0 +offset_left = 7.0 +offset_right = 32.0 +offset_bottom = 32.0 size_flags_horizontal = 4 size_flags_vertical = 3 text = "Idle" diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd index cde038f2353..d8e150ed56b 100644 --- a/src/UI/Timeline/AnimationTimeline.gd +++ b/src/UI/Timeline/AnimationTimeline.gd @@ -1,43 +1,46 @@ extends Panel var is_animation_running := false -var animation_loop := 1 # 0 is no loop, 1 is cycle loop, 2 is ping-pong loop +var animation_loop := 1 ## 0 is no loop, 1 is cycle loop, 2 is ping-pong loop var animation_forward := true var first_frame := 0 var last_frame := 0 var is_mouse_hover := false -var cel_size := 36 setget cel_size_changed +var cel_size := 36: + set = _cel_size_changed var min_cel_size := 36 var max_cel_size := 144 var past_above_canvas := true var future_above_canvas := true -var frame_button_node = preload("res://src/UI/Timeline/FrameButton.tscn") +var frame_button_node := preload("res://src/UI/Timeline/FrameButton.tscn") -onready var old_scroll: int = 0 # The previous scroll state of $ScrollContainer -onready var tag_spacer = find_node("TagSpacer") -onready var start_spacer = find_node("StartSpacer") -onready var add_layer_list: MenuButton = $"%AddLayerList" +@onready var old_scroll := 0 ## The previous scroll state of $ScrollContainer +@onready var tag_spacer = find_child("TagSpacer") +@onready var start_spacer = find_child("StartSpacer") +@onready var add_layer_list: MenuButton = $"%AddLayerList" -onready var timeline_scroll: ScrollContainer = find_node("TimelineScroll") -onready var frame_scroll_container: Control = find_node("FrameScrollContainer") -onready var frame_scroll_bar: HScrollBar = find_node("FrameScrollBar") -onready var tag_scroll_container: ScrollContainer = find_node("TagScroll") -onready var layer_frame_h_split: HSplitContainer = find_node("LayerFrameHSplit") -onready var fps_spinbox: ValueSlider = find_node("FPSValue") -onready var onion_skinning_button: BaseButton = find_node("OnionSkinning") -onready var loop_animation_button: BaseButton = find_node("LoopAnim") -onready var drag_highlight: ColorRect = find_node("DragHighlight") +@onready var timeline_scroll: ScrollContainer = find_child("TimelineScroll") +@onready var frame_scroll_container: Control = find_child("FrameScrollContainer") +@onready var frame_scroll_bar: HScrollBar = find_child("FrameScrollBar") +@onready var tag_scroll_container: ScrollContainer = find_child("TagScroll") +@onready var layer_frame_h_split: HSplitContainer = find_child("LayerFrameHSplit") +@onready var fps_spinbox: ValueSlider = find_child("FPSValue") +@onready var onion_skinning_button: BaseButton = find_child("OnionSkinning") +@onready var loop_animation_button: BaseButton = find_child("LoopAnim") +@onready var drag_highlight: ColorRect = find_child("DragHighlight") func _ready() -> void: - add_layer_list.get_popup().connect("id_pressed", self, "add_layer") - frame_scroll_bar.connect("value_changed", self, "_frame_scroll_changed") + min_cel_size = get_tree().current_scene.theme.default_font_size + 24 + cel_size = min_cel_size + add_layer_list.get_popup().id_pressed.connect(add_layer) + frame_scroll_bar.value_changed.connect(_frame_scroll_changed) Global.animation_timer.wait_time = 1 / Global.current_project.fps fps_spinbox.value = Global.current_project.fps # config loading layer_frame_h_split.split_offset = Global.config_cache.get_value("timeline", "layer_size", 0) - self.cel_size = Global.config_cache.get_value("timeline", "cel_size", cel_size) # Call setter + cel_size = Global.config_cache.get_value("timeline", "cel_size", cel_size) # Call setter var past_rate = Global.config_cache.get_value( "timeline", "past_rate", Global.onion_skinning_past_rate ) @@ -55,14 +58,14 @@ func _ready() -> void: ) $"%PastOnionSkinning".value = past_rate $"%FutureOnionSkinning".value = future_rate - $"%BlueRedMode".pressed = blue_red + $"%BlueRedMode".button_pressed = blue_red $"%PastPlacement".select(0 if past_above else 1) $"%FuturePlacement".select(0 if future_above else 1) # emit signals that were supposed to be emitted (Check if it's still required in godot 4) - $"%PastPlacement".emit_signal("item_selected", 0 if past_above else 1) - $"%FuturePlacement".emit_signal("item_selected", 0 if future_above else 1) + $"%PastPlacement".item_selected.emit(0 if past_above else 1) + $"%FuturePlacement".item_selected.emit(0 if future_above else 1) # Makes sure that the frame and tag scroll bars are in the right place: - Global.layer_vbox.call_deferred("emit_signal", "resized") + Global.layer_vbox.emit_signal.call_deferred("resized") func _notification(what: int) -> void: @@ -72,19 +75,18 @@ func _notification(what: int) -> void: func _input(event: InputEvent) -> void: var mouse_pos := get_global_mouse_position() - var timeline_rect := Rect2(rect_global_position, rect_size) + var timeline_rect := Rect2(global_position, size) if timeline_rect.has_point(mouse_pos): - if Input.is_key_pressed(KEY_CONTROL): - self.cel_size += ( - 2 * int(event.is_action("zoom_in")) - - 2 * int(event.is_action("zoom_out")) - ) + if Input.is_key_pressed(KEY_CTRL): + cel_size += (2 * int(event.is_action("zoom_in")) - 2 * int(event.is_action("zoom_out"))) func _get_minimum_size() -> Vector2: # X targets enough to see layers, 1 frame, vertical scrollbar, and padding - # Y targets engough to see 1 layer - return Vector2(Global.layer_vbox.rect_size.x + cel_size + 26, cel_size + 105) + # Y targets enough to see 1 layer + if not is_instance_valid(Global.layer_vbox): + return Vector2.ZERO + return Vector2(Global.layer_vbox.size.x + cel_size + 26, cel_size + 105) func _frame_scroll_changed(_value: float) -> void: @@ -93,73 +95,78 @@ func _frame_scroll_changed(_value: float) -> void: func _on_LayerVBox_resized() -> void: - frame_scroll_bar.margin_left = frame_scroll_container.rect_position.x + frame_scroll_bar.offset_left = frame_scroll_container.position.x adjust_scroll_container() func adjust_scroll_container(): - tag_spacer.rect_min_size.x = ( - frame_scroll_container.rect_global_position.x - - tag_scroll_container.rect_global_position.x + tag_spacer.custom_minimum_size.x = ( + frame_scroll_container.global_position.x - tag_scroll_container.global_position.x ) - tag_scroll_container.get_child(0).rect_min_size.x = Global.frame_hbox.rect_size.x - Global.tag_container.rect_min_size = Global.frame_hbox.rect_size + tag_scroll_container.get_child(0).custom_minimum_size.x = Global.frame_hbox.size.x + Global.tag_container.custom_minimum_size = Global.frame_hbox.size tag_scroll_container.scroll_horizontal = frame_scroll_bar.value func _on_LayerFrameSplitContainer_gui_input(event: InputEvent) -> void: Global.config_cache.set_value("timeline", "layer_size", layer_frame_h_split.split_offset) - if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and not event.pressed: - minimum_size_changed() # After you're done resizing the layers, update min size + if ( + event is InputEventMouseButton + and event.button_index == MOUSE_BUTTON_LEFT + and not event.pressed + ): + update_minimum_size() # After you're done resizing the layers, update min size -func cel_size_changed(value: int) -> void: - cel_size = clamp(value, min_cel_size, max_cel_size) - minimum_size_changed() +func _cel_size_changed(value: int) -> void: + if cel_size == value: + return + cel_size = clampi(value, min_cel_size, max_cel_size) + update_minimum_size() Global.config_cache.set_value("timeline", "cel_size", cel_size) for layer_button in Global.layer_vbox.get_children(): - layer_button.rect_min_size.y = cel_size - layer_button.rect_size.y = cel_size + layer_button.custom_minimum_size.y = cel_size + layer_button.size.y = cel_size for cel_hbox in Global.cel_vbox.get_children(): for cel_button in cel_hbox.get_children(): - cel_button.rect_min_size.x = cel_size - cel_button.rect_min_size.y = cel_size - cel_button.rect_size.x = cel_size - cel_button.rect_size.y = cel_size + cel_button.custom_minimum_size.x = cel_size + cel_button.custom_minimum_size.y = cel_size + cel_button.size.x = cel_size + cel_button.size.y = cel_size for frame_id in Global.frame_hbox.get_children(): - frame_id.rect_min_size.x = cel_size - frame_id.rect_size.x = cel_size + frame_id.custom_minimum_size.x = cel_size + frame_id.size.x = cel_size for tag_c in Global.tag_container.get_children(): var tag_base_size = cel_size + 4 var tag: AnimationTag = tag_c.tag # Added 1 to answer to get starting position of next cel - tag_c.rect_position.x = (tag.from - 1) * tag_base_size + 1 - var tag_size: int = tag.to - tag.from + tag_c.position.x = (tag.from - 1) * tag_base_size + 1 + var tag_size := tag.to - tag.from # We dont need the 4 pixels at the end of last cel - tag_c.rect_min_size.x = (tag_size + 1) * tag_base_size - 4 + tag_c.custom_minimum_size.x = (tag_size + 1) * tag_base_size - 4 # We dont need the 4 pixels at the end of last cel - tag_c.rect_size.x = (tag_size + 1) * tag_base_size - 4 - tag_c.get_node("Line2D").points[2] = Vector2(tag_c.rect_min_size.x, 0) - tag_c.get_node("Line2D").points[3] = Vector2(tag_c.rect_min_size.x, 32) + tag_c.size.x = (tag_size + 1) * tag_base_size - 4 + tag_c.get_node("Line2D").points[2] = Vector2(tag_c.custom_minimum_size.x, 0) + tag_c.get_node("Line2D").points[3] = Vector2(tag_c.custom_minimum_size.x, 32) func add_frame() -> void: - var project: Project = Global.current_project + var project := Global.current_project var frame_add_index := project.current_frame + 1 - var frame: Frame = project.new_empty_frame() + var frame := project.new_empty_frame() project.undos += 1 project.undo_redo.create_action("Add Frame") for l in range(project.layers.size()): if project.layers[l].new_cels_linked: # If the link button is pressed - var prev_cel: BaseCel = project.frames[project.current_frame].cels[l] + var prev_cel := project.frames[project.current_frame].cels[l] if prev_cel.link_set == null: prev_cel.link_set = {} project.undo_redo.add_do_method( - project.layers[l], "link_cel", prev_cel, prev_cel.link_set + project.layers[l].link_cel.bind(prev_cel, prev_cel.link_set) ) - project.undo_redo.add_undo_method(project.layers[l], "link_cel", prev_cel, null) + project.undo_redo.add_undo_method(project.layers[l].link_cel.bind(prev_cel, null)) frame.cels[l].set_content(prev_cel.get_content(), prev_cel.image_texture) frame.cels[l].link_set = prev_cel.link_set @@ -182,18 +189,18 @@ func add_frame() -> void: tag.from += 1 tag.to += 1 - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(project, "add_frames", [frame], [frame_add_index]) - project.undo_redo.add_undo_method(project, "remove_frames", [frame_add_index]) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(project.add_frames.bind([frame], [frame_add_index])) + project.undo_redo.add_undo_method(project.remove_frames.bind([frame_add_index])) project.undo_redo.add_do_property(project, "animation_tags", new_animation_tags) project.undo_redo.add_undo_property(project, "animation_tags", project.animation_tags) - project.undo_redo.add_do_method(project, "change_cel", project.current_frame + 1) - project.undo_redo.add_undo_method(project, "change_cel", project.current_frame) + project.undo_redo.add_do_method(project.change_cel.bind(project.current_frame + 1)) + project.undo_redo.add_undo_method(project.change_cel.bind(project.current_frame)) project.undo_redo.commit_action() # it doesn't update properly without yields - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + await get_tree().process_frame + await get_tree().process_frame adjust_scroll_container() @@ -202,7 +209,7 @@ func _on_DeleteFrame_pressed() -> void: func delete_frames(indices := []) -> void: - var project: Project = Global.current_project + var project := Global.current_project if project.frames.size() == 1: return @@ -214,10 +221,10 @@ func delete_frames(indices := []) -> void: indices.sort() if indices.size() == project.frames.size(): - indices.remove(indices.size() - 1) # Ensure the project has at least 1 frame + indices.remove_at(indices.size() - 1) # Ensure the project has at least 1 frame - var current_frame: int = min(project.current_frame, project.frames.size() - indices.size() - 1) - var frames := [] + var current_frame := mini(project.current_frame, project.frames.size() - indices.size() - 1) + var frames: Array[Frame] = [] var frame_correction := 0 # Only needed for tag adjustment var new_animation_tags := project.animation_tags.duplicate() @@ -252,18 +259,18 @@ func delete_frames(indices := []) -> void: project.undos += 1 project.undo_redo.create_action("Remove Frame") - project.undo_redo.add_do_method(project, "remove_frames", indices) - project.undo_redo.add_undo_method(project, "add_frames", frames, indices) + project.undo_redo.add_do_method(project.remove_frames.bind(indices)) + project.undo_redo.add_undo_method(project.add_frames.bind(frames, indices)) project.undo_redo.add_do_property(project, "animation_tags", new_animation_tags) project.undo_redo.add_undo_property(project, "animation_tags", project.animation_tags) - project.undo_redo.add_do_method(project, "change_cel", current_frame) - project.undo_redo.add_undo_method(project, "change_cel", project.current_frame) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + project.undo_redo.add_do_method(project.change_cel.bind(current_frame)) + project.undo_redo.add_undo_method(project.change_cel.bind(project.current_frame)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) project.undo_redo.commit_action() # it doesn't update properly without yields - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + await get_tree().process_frame + await get_tree().process_frame adjust_scroll_container() @@ -272,7 +279,7 @@ func _on_CopyFrame_pressed() -> void: func copy_frames(indices := [], destination := -1) -> void: - var project: Project = Global.current_project + var project := Global.current_project if indices.size() == 0: for cel in Global.current_project.selected_cels: @@ -281,8 +288,8 @@ func copy_frames(indices := [], destination := -1) -> void: indices.append(f) indices.sort() - var copied_frames := [] - var copied_indices := [] # the indices of newly copied frames + var copied_frames: Array[Frame] = [] + var copied_indices := PackedInt32Array() # the indices of newly copied frames if destination != -1: copied_indices = range(destination + 1, (destination + 1) + indices.size()) @@ -301,17 +308,17 @@ func copy_frames(indices := [], destination := -1) -> void: project.undos += 1 project.undo_redo.create_action("Add Frame") for f in indices: - var src_frame: Frame = project.frames[f] + var src_frame := project.frames[f] var new_frame := Frame.new() copied_frames.append(new_frame) new_frame.duration = src_frame.duration for l in range(project.layers.size()): - var src_cel: BaseCel = project.frames[f].cels[l] # Cel we're copying from, the source + var src_cel := project.frames[f].cels[l] # Cel we're copying from, the source var new_cel: BaseCel var selected_id := -1 if src_cel is Cel3D: - new_cel = src_cel.get_script().new( + new_cel = Cel3D.new( src_cel.size, false, src_cel.object_properties, src_cel.scene_properties ) if src_cel.selected != null: @@ -323,9 +330,11 @@ func copy_frames(indices := [], destination := -1) -> void: if src_cel.link_set == null: src_cel.link_set = {} project.undo_redo.add_do_method( - project.layers[l], "link_cel", src_cel, src_cel.link_set + project.layers[l].link_cel.bind(src_cel, src_cel.link_set) + ) + project.undo_redo.add_undo_method( + project.layers[l].link_cel.bind(src_cel, null) ) - project.undo_redo.add_undo_method(project.layers[l], "link_cel", src_cel, null) new_cel.set_content(src_cel.get_content(), src_cel.image_texture) new_cel.link_set = src_cel.link_set else: @@ -344,20 +353,20 @@ func copy_frames(indices := [], destination := -1) -> void: elif copied_indices[0] < tag.from: tag.from += 1 tag.to += 1 - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(project, "add_frames", copied_frames, copied_indices) - project.undo_redo.add_undo_method(project, "remove_frames", copied_indices) - project.undo_redo.add_do_method(project, "change_cel", copied_indices[0]) - project.undo_redo.add_undo_method(project, "change_cel", project.current_frame) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(project.add_frames.bind(copied_frames, copied_indices)) + project.undo_redo.add_undo_method(project.remove_frames.bind(copied_indices)) + project.undo_redo.add_do_method(project.change_cel.bind(copied_indices[0])) + project.undo_redo.add_undo_method(project.change_cel.bind(project.current_frame)) project.undo_redo.add_do_property(project, "animation_tags", new_animation_tags) project.undo_redo.add_undo_property(project, "animation_tags", project.animation_tags) project.undo_redo.commit_action() # Select all the new frames so that it is easier to move/offset collectively if user wants # To ease animation workflow, new current frame is the first copied frame instead of the last - var range_start: int = copied_indices[-1] - var range_end = copied_indices[0] - var frame_diff_sign = sign(range_end - range_start) + var range_start := copied_indices[-1] + var range_end := copied_indices[0] + var frame_diff_sign := signi(range_end - range_start) if frame_diff_sign == 0: frame_diff_sign = 1 for i in range(range_start, range_end + frame_diff_sign, frame_diff_sign): @@ -366,36 +375,34 @@ func copy_frames(indices := [], destination := -1) -> void: if !Global.current_project.selected_cels.has(frame_layer): Global.current_project.selected_cels.append(frame_layer) Global.current_project.change_cel(range_end, -1) - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + await get_tree().process_frame + await get_tree().process_frame adjust_scroll_container() func _on_FrameTagButton_pressed() -> void: - find_node("FrameTagDialog").popup_centered() + find_child("FrameTagDialog").popup_centered() func _on_MoveLeft_pressed() -> void: - var frame: int = Global.current_project.current_frame - if frame == 0: + if Global.current_project.current_frame == 0: return - Global.frame_hbox.get_child(frame).change_frame_order(-1) + Global.frame_hbox.get_child(Global.current_project.current_frame).change_frame_order(-1) func _on_MoveRight_pressed() -> void: - var frame: int = Global.current_project.current_frame - if frame == Global.current_project.frames.size() - 1: # using last_frame caused problems + if Global.current_project.current_frame == Global.current_project.frames.size() - 1: return - Global.frame_hbox.get_child(frame).change_frame_order(1) + Global.frame_hbox.get_child(Global.current_project.current_frame).change_frame_order(1) func reverse_frames(indices := []) -> void: - var project = Global.current_project + var project := Global.current_project project.undo_redo.create_action("Change Frame Order") - project.undo_redo.add_do_method(project, "reverse_frames", indices) - project.undo_redo.add_undo_method(project, "reverse_frames", indices) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_do_method(project.reverse_frames.bind(indices)) + project.undo_redo.add_undo_method(project.reverse_frames.bind(indices)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) project.undo_redo.commit_action() @@ -412,8 +419,8 @@ func _on_OnionSkinning_pressed() -> void: func _on_OnionSkinningSettings_pressed() -> void: $OnionSkinningSettings.popup( Rect2( - onion_skinning_button.rect_global_position.x - $OnionSkinningSettings.rect_size.x - 16, - onion_skinning_button.rect_global_position.y - 106, + onion_skinning_button.global_position.x - $OnionSkinningSettings.size.x - 16, + onion_skinning_button.global_position.y - $OnionSkinningSettings.size.y + 32, 136, 126 ) @@ -426,15 +433,15 @@ func _on_LoopAnim_pressed() -> void: 0: # Make it loop animation_loop = 1 Global.change_button_texturerect(texture_button, "loop.png") - loop_animation_button.hint_tooltip = "Cycle loop" + loop_animation_button.tooltip_text = "Cycle loop" 1: # Make it ping-pong animation_loop = 2 Global.change_button_texturerect(texture_button, "loop_pingpong.png") - loop_animation_button.hint_tooltip = "Ping-pong loop" + loop_animation_button.tooltip_text = "Ping-pong loop" 2: # Make it stop animation_loop = 0 Global.change_button_texturerect(texture_button, "loop_none.png") - loop_animation_button.hint_tooltip = "No loop" + loop_animation_button.tooltip_text = "No loop" func _on_PlayForward_toggled(button_pressed: bool) -> void: @@ -456,36 +463,34 @@ func _on_PlayBackwards_toggled(button_pressed: bool) -> void: # Called on each frame of the animation func _on_AnimationTimer_timeout() -> void: if first_frame == last_frame: - Global.play_forward.pressed = false - Global.play_backwards.pressed = false + Global.play_forward.button_pressed = false + Global.play_backwards.button_pressed = false Global.animation_timer.stop() return Global.canvas.selection.transform_content_confirm() - var project: Project = Global.current_project + var project := Global.current_project var fps := project.fps if animation_forward: if project.current_frame < last_frame: project.selected_cels.clear() project.change_cel(project.current_frame + 1, -1) Global.animation_timer.wait_time = ( - project.frames[project.current_frame].duration - * (1 / fps) + project.frames[project.current_frame].duration * (1 / fps) ) Global.animation_timer.start() # Change the frame, change the wait time and start a cycle else: match animation_loop: 0: # No loop - Global.play_forward.pressed = false - Global.play_backwards.pressed = false + Global.play_forward.button_pressed = false + Global.play_backwards.button_pressed = false Global.animation_timer.stop() is_animation_running = false 1: # Cycle loop project.selected_cels.clear() project.change_cel(first_frame, -1) Global.animation_timer.wait_time = ( - project.frames[project.current_frame].duration - * (1 / fps) + project.frames[project.current_frame].duration * (1 / fps) ) Global.animation_timer.start() 2: # Ping pong loop @@ -497,23 +502,21 @@ func _on_AnimationTimer_timeout() -> void: project.selected_cels.clear() project.change_cel(project.current_frame - 1, -1) Global.animation_timer.wait_time = ( - project.frames[project.current_frame].duration - * (1 / fps) + project.frames[project.current_frame].duration * (1 / fps) ) Global.animation_timer.start() else: match animation_loop: 0: # No loop - Global.play_backwards.pressed = false - Global.play_forward.pressed = false + Global.play_backwards.button_pressed = false + Global.play_forward.button_pressed = false Global.animation_timer.stop() is_animation_running = false 1: # Cycle loop project.selected_cels.clear() project.change_cel(last_frame, -1) Global.animation_timer.wait_time = ( - project.frames[project.current_frame].duration - * (1 / fps) + project.frames[project.current_frame].duration * (1 / fps) ) Global.animation_timer.start() 2: # Ping pong loop @@ -534,31 +537,32 @@ func play_animation(play: bool, forward_dir: bool) -> void: && Global.current_project.current_frame + 1 <= tag.to ): first_frame = tag.from - 1 - last_frame = min(Global.current_project.frames.size() - 1, tag.to - 1) + last_frame = mini(Global.current_project.frames.size() - 1, tag.to - 1) if first_frame == last_frame: if forward_dir: - Global.play_forward.pressed = false + Global.play_forward.button_pressed = false else: - Global.play_backwards.pressed = false + Global.play_backwards.button_pressed = false return if forward_dir: - Global.play_backwards.disconnect("toggled", self, "_on_PlayBackwards_toggled") - Global.play_backwards.pressed = false + Global.play_backwards.toggled.disconnect(_on_PlayBackwards_toggled) + Global.play_backwards.button_pressed = false Global.change_button_texturerect(Global.play_backwards.get_child(0), "play_backwards.png") - Global.play_backwards.connect("toggled", self, "_on_PlayBackwards_toggled") + Global.play_backwards.toggled.connect(_on_PlayBackwards_toggled) else: - Global.play_forward.disconnect("toggled", self, "_on_PlayForward_toggled") - Global.play_forward.pressed = false + Global.play_forward.toggled.disconnect(_on_PlayForward_toggled) + Global.play_forward.button_pressed = false Global.change_button_texturerect(Global.play_forward.get_child(0), "play.png") - Global.play_forward.connect("toggled", self, "_on_PlayForward_toggled") + Global.play_forward.toggled.connect(_on_PlayForward_toggled) if play: Global.animation_timer.set_one_shot(true) # wait_time can't change correctly if it's playing - var duration: float = Global.current_project.frames[Global.current_project.current_frame].duration - var fps = Global.current_project.fps - Global.animation_timer.wait_time = duration * (1 / fps) + var duration: float = ( + Global.current_project.frames[Global.current_project.current_frame].duration + ) + Global.animation_timer.wait_time = duration * (1 / Global.current_project.fps) Global.animation_timer.start() animation_forward = forward_dir else: @@ -592,26 +596,26 @@ func _on_FirstFrame_pressed() -> void: func _on_FPSValue_value_changed(value: float) -> void: - Global.current_project.fps = float(value) + Global.current_project.fps = value Global.animation_timer.wait_time = 1 / Global.current_project.fps func _on_PastOnionSkinning_value_changed(value: float) -> void: Global.onion_skinning_past_rate = int(value) Global.config_cache.set_value("timeline", "past_rate", Global.onion_skinning_past_rate) - Global.canvas.update() + Global.canvas.queue_redraw() func _on_FutureOnionSkinning_value_changed(value: float) -> void: Global.onion_skinning_future_rate = int(value) Global.config_cache.set_value("timeline", "future_rate", Global.onion_skinning_future_rate) - Global.canvas.update() + Global.canvas.queue_redraw() func _on_BlueRedMode_toggled(button_pressed: bool) -> void: Global.onion_skinning_blue_red = button_pressed Global.config_cache.set_value("timeline", "blue_red", Global.onion_skinning_blue_red) - Global.canvas.update() + Global.canvas.queue_redraw() func _on_PastPlacement_item_selected(index: int) -> void: @@ -630,8 +634,8 @@ func _on_FuturePlacement_item_selected(index: int) -> void: func add_layer(type: int) -> void: - var project: Project = Global.current_project - var current_layer = project.layers[project.current_layer] + var project := Global.current_project + var current_layer := project.layers[project.current_layer] var l: BaseLayer match type: Global.LayerTypes.PIXEL: @@ -663,21 +667,21 @@ func add_layer(type: int) -> void: project.undos += 1 project.undo_redo.create_action("Add Layer") - project.undo_redo.add_do_method(project, "add_layers", [l], [new_layer_idx], [cels]) - project.undo_redo.add_undo_method(project, "remove_layers", [new_layer_idx]) - project.undo_redo.add_do_method(project, "change_cel", -1, new_layer_idx) - project.undo_redo.add_undo_method(project, "change_cel", -1, project.current_layer) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + project.undo_redo.add_do_method(project.add_layers.bind([l], [new_layer_idx], [cels])) + project.undo_redo.add_undo_method(project.remove_layers.bind([new_layer_idx])) + project.undo_redo.add_do_method(project.change_cel.bind(-1, new_layer_idx)) + project.undo_redo.add_undo_method(project.change_cel.bind(-1, project.current_layer)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) project.undo_redo.commit_action() func _on_CloneLayer_pressed() -> void: - var project: Project = Global.current_project - var source_layers: Array = project.layers[project.current_layer].get_children(true) + var project := Global.current_project + var source_layers := project.layers[project.current_layer].get_children(true) source_layers.append(project.layers[project.current_layer]) - var clones := [] # Array of Layers + var clones: Array[BaseLayer] = [] var cels := [] # 2D Array of Cels for src_layer in source_layers: var cl_layer: BaseLayer = src_layer.get_script().new(project) @@ -692,10 +696,10 @@ func _on_CloneLayer_pressed() -> void: cels.append([]) for frame in project.frames: - var src_cel: BaseCel = frame.cels[src_layer.index] + var src_cel := frame.cels[src_layer.index] var new_cel: BaseCel if src_cel is Cel3D: - new_cel = src_cel.get_script().new( + new_cel = Cel3D.new( src_cel.size, false, src_cel.object_properties, src_cel.scene_properties ) else: @@ -718,7 +722,7 @@ func _on_CloneLayer_pressed() -> void: cels[-1].append(new_cel) for cl_layer in clones: - var p = source_layers.find(cl_layer.parent) + var p := source_layers.find(cl_layer.parent) if p > -1: # Swap parent with clone if the parent is one of the source layers cl_layer.parent = clones[p] else: # Add (Copy) to the name if its not a child of another copied layer @@ -728,25 +732,25 @@ func _on_CloneLayer_pressed() -> void: project.undos += 1 project.undo_redo.create_action("Add Layer") - project.undo_redo.add_do_method(project, "add_layers", clones, indices, cels) - project.undo_redo.add_undo_method(project, "remove_layers", indices) + project.undo_redo.add_do_method(project.add_layers.bind(clones, indices, cels)) + project.undo_redo.add_undo_method(project.remove_layers.bind(indices)) project.undo_redo.add_do_method( - project, "change_cel", -1, project.current_layer + clones.size() + project.change_cel.bind(-1, project.current_layer + clones.size()) ) - project.undo_redo.add_undo_method(project, "change_cel", -1, project.current_layer) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + project.undo_redo.add_undo_method(project.change_cel.bind(-1, project.current_layer)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) project.undo_redo.commit_action() func _on_RemoveLayer_pressed() -> void: - var project: Project = Global.current_project + var project := Global.current_project if project.layers.size() == 1: return - var layers: Array = project.layers[project.current_layer].get_children(true) + var layers := project.layers[project.current_layer].get_children(true) layers.append(project.layers[project.current_layer]) - var indices := [] + var indices := PackedInt32Array() for l in layers: indices.append(l.index) @@ -758,21 +762,21 @@ func _on_RemoveLayer_pressed() -> void: project.undos += 1 project.undo_redo.create_action("Remove Layer") - project.undo_redo.add_do_method(project, "remove_layers", indices) - project.undo_redo.add_undo_method(project, "add_layers", layers, indices, cels) - project.undo_redo.add_do_method(project, "change_cel", -1, max(indices[0] - 1, 0)) - project.undo_redo.add_undo_method(project, "change_cel", -1, project.current_layer) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + project.undo_redo.add_do_method(project.remove_layers.bind(indices)) + project.undo_redo.add_undo_method(project.add_layers.bind(layers, indices, cels)) + project.undo_redo.add_do_method(project.change_cel.bind(-1, maxi(indices[0] - 1, 0))) + project.undo_redo.add_undo_method(project.change_cel.bind(-1, project.current_layer)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) project.undo_redo.commit_action() -# Move the layer up or down in layer order and/or reparent to be deeper/shallower in the -# layer hierarchy depending on its current index and parent +## Move the layer up or down in layer order and/or reparent to be deeper/shallower in the +## layer hierarchy depending on its current index and parent func change_layer_order(up: bool) -> void: - var project: Project = Global.current_project - var layer: BaseLayer = project.layers[project.current_layer] - var child_count = layer.get_child_count(true) + var project := Global.current_project + var layer := project.layers[project.current_layer] + var child_count := layer.get_child_count(true) var from_indices := range(layer.index - child_count, layer.index + 1) var from_parents := [] for l in from_indices: @@ -781,7 +785,7 @@ func change_layer_order(up: bool) -> void: var to_index = layer.index - child_count # the index where the LOWEST shifted layer should end up if up: - var above_layer: BaseLayer = project.layers[project.current_layer + 1] + var above_layer := project.layers[project.current_layer + 1] if layer.parent == above_layer: # Above is the parent, leave the parent and go up to_parents[-1] = above_layer.parent to_index = to_index + 1 @@ -801,7 +805,7 @@ func change_layer_order(up: bool) -> void: return to_parents[-1] = layer.parent.parent # Drop a level in the hierarchy else: - var below_layer: BaseLayer = project.layers[project.current_layer - 1 - child_count] + var below_layer := project.layers[project.current_layer - 1 - child_count] if layer.parent != below_layer.parent: # If there is a hierarchy change to_parents[-1] = layer.parent.parent # Drop a level in the hierarchy elif below_layer.accepts_child(layer): @@ -813,21 +817,23 @@ func change_layer_order(up: bool) -> void: var to_indices := range(to_index, to_index + child_count + 1) project.undo_redo.create_action("Change Layer Order") - project.undo_redo.add_do_method(project, "move_layers", from_indices, to_indices, to_parents) + project.undo_redo.add_do_method(project.move_layers.bind(from_indices, to_indices, to_parents)) project.undo_redo.add_undo_method( - project, "move_layers", to_indices, from_indices, from_parents + project.move_layers.bind(to_indices, from_indices, from_parents) ) - project.undo_redo.add_do_method(project, "change_cel", -1, to_index + child_count) - project.undo_redo.add_undo_method(project, "change_cel", -1, project.current_layer) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + project.undo_redo.add_do_method(project.change_cel.bind(-1, to_index + child_count)) + project.undo_redo.add_undo_method(project.change_cel.bind(-1, project.current_layer)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) project.undo_redo.commit_action() func _on_MergeDownLayer_pressed() -> void: - var project: Project = Global.current_project - var top_layer: BaseLayer = project.layers[project.current_layer] - var bottom_layer: PixelLayer = project.layers[project.current_layer - 1] + var project := Global.current_project + var top_layer := project.layers[project.current_layer] + var bottom_layer := project.layers[project.current_layer - 1] + if not bottom_layer is PixelLayer: + return var top_cels := [] project.undos += 1 @@ -839,29 +845,27 @@ func _on_MergeDownLayer_pressed() -> void: var top_image := Image.new() top_image.copy_from(frame.cels[top_layer.index].get_image()) - top_image.lock() if frame.cels[top_layer.index].opacity < 1: # If we have layer transparency for xx in top_image.get_size().x: for yy in top_image.get_size().y: - var pixel_color: Color = top_image.get_pixel(xx, yy) - var alpha: float = pixel_color.a * frame.cels[top_layer.index].opacity + var pixel_color := top_image.get_pixel(xx, yy) + var alpha := pixel_color.a * frame.cels[top_layer.index].opacity top_image.set_pixel( xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha) ) - top_image.unlock() - var bottom_cel: BaseCel = frame.cels[bottom_layer.index] + var bottom_cel := frame.cels[bottom_layer.index] var bottom_image := Image.new() - bottom_image.copy_from(bottom_cel.image) - bottom_image.blend_rect(top_image, Rect2(Vector2.ZERO, project.size), Vector2.ZERO) + bottom_image.copy_from(bottom_cel.get_image()) + bottom_image.blend_rect(top_image, Rect2i(Vector2i.ZERO, project.size), Vector2i.ZERO) if ( bottom_cel.link_set != null and bottom_cel.link_set.size() > 1 and not top_image.is_invisible() ): # Unlink cel: - project.undo_redo.add_do_method(bottom_layer, "link_cel", bottom_cel, null) + project.undo_redo.add_do_method(bottom_layer.link_cel.bind(bottom_cel, null)) project.undo_redo.add_undo_method( - bottom_layer, "link_cel", bottom_cel, bottom_cel.link_set + bottom_layer.link_cel.bind(bottom_cel, bottom_cel.link_set) ) project.undo_redo.add_do_property(bottom_cel, "image_texture", ImageTexture.new()) project.undo_redo.add_undo_property( @@ -873,38 +877,42 @@ func _on_MergeDownLayer_pressed() -> void: project.undo_redo.add_do_property(bottom_cel.image, "data", bottom_image.data) project.undo_redo.add_undo_property(bottom_cel.image, "data", bottom_cel.image.data) - project.undo_redo.add_do_method(project, "remove_layers", [top_layer.index]) + project.undo_redo.add_do_method(project.remove_layers.bind([top_layer.index])) project.undo_redo.add_undo_method( - project, "add_layers", [top_layer], [top_layer.index], [top_cels] + project.add_layers.bind([top_layer], [top_layer.index], [top_cels]) ) - project.undo_redo.add_do_method(project, "change_cel", -1, bottom_layer.index) - project.undo_redo.add_undo_method(project, "change_cel", -1, top_layer.index) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_do_method(project.change_cel.bind(-1, bottom_layer.index)) + project.undo_redo.add_undo_method(project.change_cel.bind(-1, top_layer.index)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) project.undo_redo.commit_action() func _on_OpacitySlider_value_changed(value: float) -> void: - var new_opacity := value / 100 + var new_opacity := value / 100.0 var current_layer_idx := Global.current_project.current_layer # Also update all selected frames. for idx_pair in Global.current_project.selected_cels: if idx_pair[1] == current_layer_idx: - var frame: Frame = Global.current_project.frames[idx_pair[0]] - var cel: BaseCel = frame.cels[current_layer_idx] + var frame := Global.current_project.frames[idx_pair[0]] + var cel := frame.cels[current_layer_idx] cel.opacity = new_opacity - Global.canvas.update() + Global.canvas.queue_redraw() -func _on_OnionSkinningSettings_popup_hide() -> void: - Global.can_draw = true +func _on_onion_skinning_settings_close_requested() -> void: + $OnionSkinningSettings.hide() + + +func _on_onion_skinning_settings_visibility_changed() -> void: + Global.can_draw = not $OnionSkinningSettings.visible # Methods to update the UI in response to changes in the current project func project_changed() -> void: - var project: Project = Global.current_project + var project := Global.current_project # These must be removed from tree immediately to not mess up the indices of # the new buttons, so use either free or queue_free + parent.remove_child for layer_button in Global.layer_vbox.get_children(): @@ -917,7 +925,7 @@ func project_changed() -> void: for i in project.layers.size(): project_layer_added(i) for f in project.frames.size(): - var button: Button = frame_button_node.instance() + var button := frame_button_node.instantiate() as Button button.frame = f Global.frame_hbox.add_child(button) @@ -927,31 +935,32 @@ func project_changed() -> void: var layer: int = cel_index[1] if frame < Global.frame_hbox.get_child_count(): var frame_button: BaseButton = Global.frame_hbox.get_child(frame) - frame_button.pressed = true + frame_button.button_pressed = true var vbox_child_count: int = Global.cel_vbox.get_child_count() if layer < vbox_child_count: var cel_hbox: HBoxContainer = Global.cel_vbox.get_child(vbox_child_count - 1 - layer) if frame < cel_hbox.get_child_count(): var cel_button = cel_hbox.get_child(frame) - cel_button.pressed = true + cel_button.button_pressed = true var layer_button = Global.layer_vbox.get_child(vbox_child_count - 1 - layer) - layer_button.pressed = true + layer_button.button_pressed = true func project_frame_added(frame: int) -> void: - var project: Project = Global.current_project - var button: Button = frame_button_node.instance() + var project := Global.current_project + var button := frame_button_node.instantiate() as Button button.frame = frame Global.frame_hbox.add_child(button) Global.frame_hbox.move_child(button, frame) - frame_scroll_container.call_deferred( # Make it visible, yes 3 call_deferreds are required + # Make it visible, yes 3 call_deferreds are required + frame_scroll_container.call_deferred( "call_deferred", "call_deferred", "ensure_control_visible", button ) var layer := Global.cel_vbox.get_child_count() - 1 for cel_hbox in Global.cel_vbox.get_children(): - var cel_button = project.frames[frame].cels[layer].instantiate_cel_button() + var cel_button := project.frames[frame].cels[layer].instantiate_cel_button() cel_button.frame = frame cel_button.layer = layer cel_hbox.add_child(cel_button) @@ -967,16 +976,16 @@ func project_frame_removed(frame: int) -> void: func project_layer_added(layer: int) -> void: - var project: Project = Global.current_project + var project := Global.current_project - var layer_button: LayerButton = project.layers[layer].instantiate_layer_button() + var layer_button := project.layers[layer].instantiate_layer_button() as LayerButton layer_button.layer = layer if project.layers[layer].name == "": project.layers[layer].set_name_to_default(Global.current_project.layers.size()) var cel_hbox := HBoxContainer.new() for f in project.frames.size(): - var cel_button = project.frames[f].cels[layer].instantiate_cel_button() + var cel_button := project.frames[f].cels[layer].instantiate_cel_button() cel_button.frame = f cel_button.layer = layer cel_hbox.add_child(cel_button) @@ -999,7 +1008,7 @@ func project_layer_removed(layer: int) -> void: func project_cel_added(frame: int, layer: int) -> void: var cel_hbox := Global.cel_vbox.get_child(Global.cel_vbox.get_child_count() - 1 - layer) - var cel_button = Global.current_project.frames[frame].cels[layer].instantiate_cel_button() + var cel_button := Global.current_project.frames[frame].cels[layer].instantiate_cel_button() cel_button.frame = frame cel_button.layer = layer cel_hbox.add_child(cel_button) diff --git a/src/UI/Timeline/AnimationTimeline.tscn b/src/UI/Timeline/AnimationTimeline.tscn index d0fdf48689a..a0e69f53976 100644 --- a/src/UI/Timeline/AnimationTimeline.tscn +++ b/src/UI/Timeline/AnimationTimeline.tscn @@ -1,887 +1,840 @@ -[gd_scene load_steps=45 format=2] +[gd_scene load_steps=75 format=3 uid="uid://dbr6mulku2qju"] -[ext_resource path="res://src/UI/Timeline/AnimationTimeline.gd" type="Script" id=1] -[ext_resource path="res://assets/graphics/layers/new.png" type="Texture" id=2] -[ext_resource path="res://assets/graphics/layers/move_down.png" type="Texture" id=3] -[ext_resource path="res://assets/graphics/layers/move_up.png" type="Texture" id=4] -[ext_resource path="res://assets/graphics/layers/merge_down.png" type="Texture" id=5] -[ext_resource path="res://assets/graphics/layers/delete.png" type="Texture" id=6] -[ext_resource path="res://assets/graphics/layers/clone.png" type="Texture" id=7] -[ext_resource path="res://assets/graphics/timeline/move_arrow.png" type="Texture" id=8] -[ext_resource path="res://src/UI/Nodes/ValueSlider.tscn" type="PackedScene" id=9] -[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=10] -[ext_resource path="res://src/UI/Timeline/FrameScrollContainer.gd" type="Script" id=11] -[ext_resource path="res://src/UI/Timeline/PasteTagPopup.gd" type="Script" id=12] -[ext_resource path="res://assets/graphics/timeline/new_frame.png" type="Texture" id=19] -[ext_resource path="res://assets/graphics/timeline/remove_frame.png" type="Texture" id=20] -[ext_resource path="res://assets/graphics/timeline/go_to_first_frame.png" type="Texture" id=21] -[ext_resource path="res://assets/graphics/timeline/play.png" type="Texture" id=22] -[ext_resource path="res://assets/graphics/timeline/previous_frame.png" type="Texture" id=23] -[ext_resource path="res://assets/graphics/timeline/play_backwards.png" type="Texture" id=24] -[ext_resource path="res://assets/graphics/timeline/go_to_last_frame.png" type="Texture" id=25] -[ext_resource path="res://assets/graphics/timeline/next_frame.png" type="Texture" id=26] -[ext_resource path="res://assets/graphics/timeline/copy_frame.png" type="Texture" id=27] -[ext_resource path="res://assets/graphics/timeline/tag.png" type="Texture" id=28] -[ext_resource path="res://assets/graphics/timeline/onion_skinning_off.png" type="Texture" id=29] -[ext_resource path="res://assets/graphics/timeline/expandable.png" type="Texture" id=30] -[ext_resource path="res://assets/graphics/timeline/loop.png" type="Texture" id=31] -[ext_resource path="res://src/UI/Timeline/FrameTagDialog.tscn" type="PackedScene" id=42] +[ext_resource type="Script" path="res://src/UI/Timeline/AnimationTimeline.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://d36mlbmq06q4e" path="res://assets/graphics/layers/new.png" id="2"] +[ext_resource type="Texture2D" uid="uid://dmhauk0dee42v" path="res://assets/graphics/layers/move_down.png" id="3"] +[ext_resource type="Texture2D" uid="uid://c7bha4a6x4bav" path="res://assets/graphics/layers/move_up.png" id="4"] +[ext_resource type="Texture2D" uid="uid://bx1xa5aacxfx4" path="res://assets/graphics/layers/merge_down.png" id="5"] +[ext_resource type="Texture2D" uid="uid://x2k652y15v04" path="res://assets/graphics/layers/delete.png" id="6"] +[ext_resource type="Texture2D" uid="uid://d3gx4phcox58s" path="res://assets/graphics/layers/clone.png" id="7"] +[ext_resource type="Texture2D" uid="uid://d1oxrkwndy5fi" path="res://assets/graphics/timeline/move_arrow.png" id="8"] +[ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="9"] +[ext_resource type="Texture2D" uid="uid://ct8wn8m6x4m54" path="res://assets/graphics/misc/value_arrow.svg" id="10"] +[ext_resource type="Script" path="res://src/UI/Timeline/FrameScrollContainer.gd" id="11"] +[ext_resource type="Script" path="res://src/UI/Timeline/PasteTagPopup.gd" id="12"] +[ext_resource type="Texture2D" uid="uid://d1urikaf1lxwl" path="res://assets/graphics/timeline/new_frame.png" id="19"] +[ext_resource type="Texture2D" uid="uid://bt72662c3gp2f" path="res://assets/graphics/timeline/remove_frame.png" id="20"] +[ext_resource type="Texture2D" uid="uid://bujrukk5ii3bi" path="res://assets/graphics/timeline/go_to_first_frame.png" id="21"] +[ext_resource type="Texture2D" uid="uid://c7smxwfa8826j" path="res://assets/graphics/timeline/play.png" id="22"] +[ext_resource type="Texture2D" uid="uid://cw7nn7360atot" path="res://assets/graphics/timeline/previous_frame.png" id="23"] +[ext_resource type="Texture2D" uid="uid://esistdjfbrc4" path="res://assets/graphics/timeline/play_backwards.png" id="24"] +[ext_resource type="Texture2D" uid="uid://l4jj86y1hukm" path="res://assets/graphics/timeline/go_to_last_frame.png" id="25"] +[ext_resource type="Texture2D" uid="uid://b2ndrc0cvy1m5" path="res://assets/graphics/timeline/next_frame.png" id="26"] +[ext_resource type="Texture2D" uid="uid://cerkv5yx4cqeh" path="res://assets/graphics/timeline/copy_frame.png" id="27"] +[ext_resource type="Texture2D" uid="uid://i13jhsg117kd" path="res://assets/graphics/timeline/tag.png" id="28"] +[ext_resource type="Texture2D" uid="uid://dukip7mvotxsp" path="res://assets/graphics/timeline/onion_skinning_off.png" id="29"] +[ext_resource type="Texture2D" uid="uid://dinubfua8gqhw" path="res://assets/graphics/timeline/expandable.png" id="30"] +[ext_resource type="Texture2D" uid="uid://fbwld5ofmocm" path="res://assets/graphics/timeline/loop.png" id="31"] +[ext_resource type="PackedScene" uid="uid://c6je8lgr850wf" path="res://src/UI/Timeline/FrameTagDialog.tscn" id="42"] -[sub_resource type="InputEventAction" id=21] -action = "go_to_first_frame" +[sub_resource type="InputEventAction" id="InputEventAction_r3l7p"] +action = &"new_layer" -[sub_resource type="ShortCut" id=4] -shortcut = SubResource( 21 ) +[sub_resource type="Shortcut" id="Shortcut_tpvn2"] +events = [SubResource("InputEventAction_r3l7p")] -[sub_resource type="InputEventAction" id=23] -action = "go_to_previous_frame" +[sub_resource type="InputEventAction" id="InputEventAction_n6pnq"] +action = &"remove_layer" -[sub_resource type="ShortCut" id=6] -shortcut = SubResource( 23 ) +[sub_resource type="Shortcut" id="Shortcut_xar00"] +events = [SubResource("InputEventAction_n6pnq")] -[sub_resource type="InputEventAction" id=24] -action = "play_backwards" +[sub_resource type="InputEventAction" id="InputEventAction_xm3sl"] +action = &"move_layer_up" -[sub_resource type="ShortCut" id=8] -shortcut = SubResource( 24 ) +[sub_resource type="Shortcut" id="Shortcut_r300c"] +events = [SubResource("InputEventAction_xm3sl")] -[sub_resource type="InputEventAction" id=25] -action = "play_forward" +[sub_resource type="InputEventAction" id="InputEventAction_wqdok"] +action = &"move_layer_down" -[sub_resource type="ShortCut" id=10] -shortcut = SubResource( 25 ) +[sub_resource type="Shortcut" id="Shortcut_763li"] +events = [SubResource("InputEventAction_wqdok")] -[sub_resource type="InputEventAction" id=26] -action = "go_to_next_frame" +[sub_resource type="InputEventAction" id="InputEventAction_4vegv"] +action = &"clone_layer" -[sub_resource type="ShortCut" id=12] -shortcut = SubResource( 26 ) +[sub_resource type="Shortcut" id="Shortcut_0o4ap"] +events = [SubResource("InputEventAction_4vegv")] -[sub_resource type="InputEventAction" id=22] -action = "go_to_last_frame" +[sub_resource type="InputEventAction" id="InputEventAction_ihf65"] +action = &"merge_down_layer" -[sub_resource type="ShortCut" id=14] -shortcut = SubResource( 22 ) +[sub_resource type="Shortcut" id="Shortcut_wbf7k"] +events = [SubResource("InputEventAction_ihf65")] -[sub_resource type="StyleBoxEmpty" id=15] +[sub_resource type="InputEventAction" id="InputEventAction_sduor"] +action = &"add_frame" -[sub_resource type="StyleBoxEmpty" id=16] +[sub_resource type="Shortcut" id="Shortcut_mvoxm"] +events = [SubResource("InputEventAction_sduor")] -[sub_resource type="StyleBoxEmpty" id=17] +[sub_resource type="InputEventAction" id="InputEventAction_ajjsq"] +action = &"remove_frame" -[sub_resource type="StyleBoxEmpty" id=18] +[sub_resource type="Shortcut" id="Shortcut_o40ql"] +events = [SubResource("InputEventAction_ajjsq")] -[sub_resource type="StyleBoxEmpty" id=19] +[sub_resource type="InputEventAction" id="InputEventAction_yptjb"] +action = &"clone_frame" -[sub_resource type="Theme" id=20] +[sub_resource type="Shortcut" id="Shortcut_5g7t7"] +events = [SubResource("InputEventAction_yptjb")] + +[sub_resource type="InputEventAction" id="InputEventAction_jp76a"] +action = &"manage_frame_tags" + +[sub_resource type="Shortcut" id="Shortcut_renbb"] +events = [SubResource("InputEventAction_jp76a")] + +[sub_resource type="InputEventAction" id="InputEventAction_ar42u"] +action = &"move_frame_left" + +[sub_resource type="Shortcut" id="Shortcut_kwn1u"] +events = [SubResource("InputEventAction_ar42u")] + +[sub_resource type="InputEventAction" id="InputEventAction_unp5j"] +action = &"move_frame_right" + +[sub_resource type="Shortcut" id="Shortcut_m2mvi"] +events = [SubResource("InputEventAction_unp5j")] + +[sub_resource type="InputEventAction" id="InputEventAction_078hg"] +action = &"go_to_first_frame" + +[sub_resource type="Shortcut" id="4"] +events = [SubResource("InputEventAction_078hg")] + +[sub_resource type="InputEventAction" id="InputEventAction_xpmmg"] +action = &"go_to_previous_frame" + +[sub_resource type="Shortcut" id="6"] +events = [SubResource("InputEventAction_xpmmg")] + +[sub_resource type="InputEventAction" id="InputEventAction_vyfqb"] +action = &"play_backwards" + +[sub_resource type="Shortcut" id="8"] +events = [SubResource("InputEventAction_vyfqb")] + +[sub_resource type="InputEventAction" id="InputEventAction_twfg8"] +action = &"play_forward" + +[sub_resource type="Shortcut" id="10"] +events = [SubResource("InputEventAction_twfg8")] + +[sub_resource type="InputEventAction" id="InputEventAction_xvqer"] +action = &"go_to_next_frame" + +[sub_resource type="Shortcut" id="12"] +events = [SubResource("InputEventAction_xvqer")] + +[sub_resource type="InputEventAction" id="InputEventAction_fcr04"] +action = &"go_to_last_frame" + +[sub_resource type="Shortcut" id="14"] +events = [SubResource("InputEventAction_fcr04")] + +[sub_resource type="InputEventAction" id="InputEventAction_1xym1"] +action = &"onion_skinning_settings" + +[sub_resource type="Shortcut" id="Shortcut_tke6v"] +events = [SubResource("InputEventAction_1xym1")] + +[sub_resource type="InputEventAction" id="InputEventAction_iu7kc"] +action = &"onion_skinning_toggle" + +[sub_resource type="Shortcut" id="Shortcut_pouu1"] +events = [SubResource("InputEventAction_iu7kc")] + +[sub_resource type="InputEventAction" id="InputEventAction_dmtwd"] +action = &"loop_toggle" + +[sub_resource type="Shortcut" id="Shortcut_1onr8"] +events = [SubResource("InputEventAction_dmtwd")] + +[sub_resource type="StyleBoxEmpty" id="15"] + +[sub_resource type="StyleBoxEmpty" id="16"] + +[sub_resource type="StyleBoxEmpty" id="17"] + +[sub_resource type="StyleBoxEmpty" id="18"] + +[sub_resource type="StyleBoxEmpty" id="19"] + +[sub_resource type="Theme" id="20"] HScrollBar/icons/decrement = null HScrollBar/icons/decrement_highlight = null HScrollBar/icons/increment = null HScrollBar/icons/increment_highlight = null -HScrollBar/styles/grabber = SubResource( 15 ) -HScrollBar/styles/grabber_highlight = SubResource( 16 ) -HScrollBar/styles/grabber_pressed = SubResource( 17 ) -HScrollBar/styles/scroll = SubResource( 18 ) -HScrollBar/styles/scroll_focus = SubResource( 19 ) +HScrollBar/styles/grabber = SubResource("15") +HScrollBar/styles/grabber_highlight = SubResource("16") +HScrollBar/styles/grabber_pressed = SubResource("17") +HScrollBar/styles/scroll = SubResource("18") +HScrollBar/styles/scroll_focus = SubResource("19") [node name="AnimationTimeline" type="Panel"] -margin_right = 902.0 -margin_bottom = 160.0 -rect_clip_content = true -script = ExtResource( 1 ) +clip_contents = true +offset_right = 902.0 +offset_bottom = 160.0 +script = ExtResource("1") [node name="TimelineContainer" type="VBoxContainer" parent="."] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 [node name="TimelineButtons" type="HBoxContainer" parent="TimelineContainer"] -margin_right = 902.0 -margin_bottom = 74.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="LayerTools" type="PanelContainer" parent="TimelineContainer/TimelineButtons"] -margin_right = 221.0 -margin_bottom = 74.0 +layout_mode = 2 [node name="VBoxContainer" type="VBoxContainer" parent="TimelineContainer/TimelineButtons/LayerTools"] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 214.0 -margin_bottom = 67.0 +layout_mode = 2 [node name="LayerButtons" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer"] -margin_right = 207.0 -margin_bottom = 22.0 -size_flags_vertical = 0 -custom_constants/separation = 9 +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/separation = 9 [node name="AddLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]] -margin_right = 44.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 44, 22 ) -hint_tooltip = "Create a new layer" +custom_minimum_size = Vector2(44, 22) +layout_mode = 2 +size_flags_vertical = 4 +tooltip_text = "Create a new layer" focus_mode = 0 mouse_default_cursor_shape = 2 +shortcut = SubResource("Shortcut_tpvn2") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/AddLayer"] +layout_mode = 0 anchor_top = 0.5 anchor_bottom = 0.5 -margin_top = -11.0 -margin_right = 22.0 -margin_bottom = 11.0 +offset_top = -11.0 +offset_right = 22.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 2 ) +texture = ExtResource("2") [node name="AddLayerList" type="MenuButton" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/AddLayer"] unique_name_in_owner = true +custom_minimum_size = Vector2(22, 0) +layout_mode = 0 anchor_left = 1.0 anchor_top = 0.5 anchor_right = 1.0 anchor_bottom = 0.5 -margin_left = -22.0 -margin_top = -10.0 -margin_bottom = 10.0 -rect_min_size = Vector2( 22, 0 ) +offset_left = -22.0 +offset_top = -10.0 +offset_bottom = 10.0 mouse_default_cursor_shape = 2 -items = [ "Add Pixel Layer", null, 0, false, false, 0, 0, null, "", false, "Add Group Layer", null, 0, false, false, 1, 0, null, "", false, "Add 3D Layer", null, 0, false, false, 2, 0, null, "", false ] +item_count = 3 +popup/item_0/text = "Add Pixel Layer" +popup/item_0/id = 0 +popup/item_1/text = "Add Group Layer" +popup/item_1/id = 1 +popup/item_2/text = "Add 3D Layer" +popup/item_2/id = 2 [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/AddLayer/AddLayerList"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -6.0 -margin_top = -6.0 -margin_right = 6.0 -margin_bottom = 6.0 -texture = ExtResource( 10 ) +offset_left = -6.0 +offset_top = -6.0 +offset_right = 6.0 +offset_bottom = 6.0 +texture = ExtResource("10") [node name="RemoveLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]] -margin_left = 53.0 -margin_right = 75.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Remove current layer" +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 +size_flags_vertical = 4 +tooltip_text = "Remove current layer" focus_mode = 0 mouse_default_cursor_shape = 8 disabled = true +shortcut = SubResource("Shortcut_xar00") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/RemoveLayer"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -7.0 -margin_top = -7.0 -margin_right = 7.0 -margin_bottom = 7.0 +offset_left = -7.0 +offset_top = -7.0 +offset_right = 7.0 +offset_bottom = 7.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 6 ) -__meta__ = { -"_edit_use_anchors_": false -} +texture = ExtResource("6") [node name="MoveUpLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]] -margin_left = 84.0 -margin_right = 106.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Move up the current layer" +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 +size_flags_vertical = 4 +tooltip_text = "Move up the current layer" focus_mode = 0 mouse_default_cursor_shape = 8 disabled = true +shortcut = SubResource("Shortcut_r300c") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveUpLayer"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 4 ) -__meta__ = { -"_edit_use_anchors_": false -} +texture = ExtResource("4") [node name="MoveDownLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]] -margin_left = 115.0 -margin_right = 137.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Move down the current layer" +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 +size_flags_vertical = 4 +tooltip_text = "Move down the current layer" focus_mode = 0 mouse_default_cursor_shape = 8 disabled = true +shortcut = SubResource("Shortcut_763li") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveDownLayer"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 3 ) -__meta__ = { -"_edit_use_anchors_": false -} +texture = ExtResource("3") [node name="CloneLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]] -margin_left = 146.0 -margin_right = 168.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Clone current layer" +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 +size_flags_vertical = 4 +tooltip_text = "Clone current layer" focus_mode = 0 mouse_default_cursor_shape = 2 +shortcut = SubResource("Shortcut_0o4ap") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/CloneLayer"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 7 ) -__meta__ = { -"_edit_use_anchors_": false -} +texture = ExtResource("7") [node name="MergeDownLayer" type="Button" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons" groups=["UIButtons"]] -margin_left = 177.0 -margin_right = 199.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Merge current layer with the one below" +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 +size_flags_vertical = 4 +tooltip_text = "Merge current layer with the one below" focus_mode = 0 mouse_default_cursor_shape = 8 disabled = true +shortcut = SubResource("Shortcut_wbf7k") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MergeDownLayer"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 5 ) -__meta__ = { -"_edit_use_anchors_": false -} +texture = ExtResource("5") [node name="BlendingHBox" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer"] -margin_top = 36.0 -margin_right = 207.0 -margin_bottom = 60.0 +layout_mode = 2 size_flags_vertical = 10 -[node name="OpacitySlider" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/BlendingHBox" instance=ExtResource( 9 )] -margin_right = 207.0 -rect_min_size = Vector2( 207, 24 ) +[node name="OpacitySlider" parent="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/BlendingHBox" instance=ExtResource("9")] +custom_minimum_size = Vector2(207, 24) +layout_mode = 2 size_flags_horizontal = 1 size_flags_vertical = 0 value = 100.0 prefix = "Opacity:" [node name="VBoxContainer" type="VBoxContainer" parent="TimelineContainer/TimelineButtons"] -margin_left = 225.0 -margin_right = 902.0 -margin_bottom = 74.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="AnimationToolsScrollContainer" type="ScrollContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer"] -margin_right = 677.0 -margin_bottom = 38.0 +layout_mode = 2 size_flags_horizontal = 3 -scroll_vertical_enabled = false +vertical_scroll_mode = 0 [node name="AnimationTools" type="PanelContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer"] -margin_left = 159.0 -margin_right = 677.0 -margin_bottom = 38.0 +layout_mode = 2 size_flags_horizontal = 10 [node name="AnimationButtons" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools"] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 511.0 -margin_bottom = 31.0 -rect_min_size = Vector2( 0, 24 ) +custom_minimum_size = Vector2(0, 24) +layout_mode = 2 size_flags_horizontal = 3 -custom_constants/separation = 40 +theme_override_constants/separation = 40 alignment = 2 -__meta__ = { -"_edit_use_anchors_": false -} [node name="FrameButtons" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons"] -margin_right = 140.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="AddFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]] -margin_top = 2.0 -margin_right = 20.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Add a new frame" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "Add a new frame" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 +shortcut = SubResource("Shortcut_mvoxm") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/AddFrame"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -6.0 -margin_top = -6.0 -margin_right = 6.0 -margin_bottom = 6.0 -texture = ExtResource( 19 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -6.0 +offset_top = -6.0 +offset_right = 6.0 +offset_bottom = 6.0 +texture = ExtResource("19") [node name="DeleteFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]] -margin_left = 24.0 -margin_top = 2.0 -margin_right = 44.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Remove Frame" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "Remove Frame" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 +shortcut = SubResource("Shortcut_o40ql") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/DeleteFrame"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -6.0 -margin_top = -1.0 -margin_right = 6.0 -margin_bottom = 1.0 +offset_left = -6.0 +offset_top = -1.0 +offset_right = 6.0 +offset_bottom = 1.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 20 ) -__meta__ = { -"_edit_use_anchors_": false -} +texture = ExtResource("20") [node name="CopyFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]] -margin_left = 48.0 -margin_top = 2.0 -margin_right = 68.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Clone Frame" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "Clone Frame" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 +shortcut = SubResource("Shortcut_5g7t7") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/CopyFrame"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -5.0 -margin_top = -7.0 -margin_right = 5.0 -margin_bottom = 7.0 -texture = ExtResource( 27 ) +offset_left = -5.0 +offset_top = -7.0 +offset_right = 5.0 +offset_bottom = 7.0 +texture = ExtResource("27") [node name="FrameTagButton" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]] -margin_left = 72.0 -margin_top = 2.0 -margin_right = 92.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Manage frame tags" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "Manage frame tags" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 +shortcut = SubResource("Shortcut_renbb") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/FrameTagButton"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -7.0 -margin_top = -7.0 -margin_right = 7.0 -margin_bottom = 7.0 -texture = ExtResource( 28 ) +offset_left = -7.0 +offset_top = -7.0 +offset_right = 7.0 +offset_bottom = 7.0 +texture = ExtResource("28") [node name="MoveLeft" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]] -margin_left = 96.0 -margin_top = 2.0 -margin_right = 116.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Move the selected frame to the left." +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "Move the selected frame to the left." focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 +shortcut = SubResource("Shortcut_kwn1u") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/MoveLeft"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -7.5 -margin_top = -5.5 -margin_right = 7.5 -margin_bottom = 5.5 -texture = ExtResource( 8 ) +offset_left = -7.5 +offset_top = -5.5 +offset_right = 7.5 +offset_bottom = 5.5 +texture = ExtResource("8") flip_h = true -__meta__ = { -"_edit_use_anchors_": false -} [node name="MoveRight" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons" groups=["UIButtons"]] -margin_left = 120.0 -margin_top = 2.0 -margin_right = 140.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Move the selected frame to the right." +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "Move the selected frame to the right." focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 +shortcut = SubResource("Shortcut_m2mvi") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/FrameButtons/MoveRight"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -7.5 -margin_top = -5.5 -margin_right = 7.5 -margin_bottom = 5.5 -texture = ExtResource( 8 ) +offset_left = -7.5 +offset_top = -5.5 +offset_right = 7.5 +offset_bottom = 5.5 +texture = ExtResource("8") [node name="PlaybackButtons" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons"] -margin_left = 180.0 -margin_right = 320.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="FirstFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]] -margin_top = 2.0 -margin_right = 20.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Jump to the first frame -(%s)" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +tooltip_text = "Jump to the first frame" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_vertical = 4 -shortcut_in_tooltip = false -shortcut = SubResource( 4 ) +shortcut = SubResource("4") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/FirstFrame"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -5.5 -margin_top = -6.0 -margin_right = 5.5 -margin_bottom = 6.0 -texture = ExtResource( 21 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -5.5 +offset_top = -6.0 +offset_right = 5.5 +offset_bottom = 6.0 +texture = ExtResource("21") [node name="PreviousFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]] -margin_left = 24.0 -margin_top = 2.0 -margin_right = 44.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Go to the previous frame -(%s)" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +tooltip_text = "Go to the previous frame" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_vertical = 4 -shortcut_in_tooltip = false -shortcut = SubResource( 6 ) +shortcut = SubResource("6") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/PreviousFrame"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -5.5 -margin_top = -6.0 -margin_right = 5.5 -margin_bottom = 6.0 -texture = ExtResource( 23 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -5.5 +offset_top = -6.0 +offset_right = 5.5 +offset_bottom = 6.0 +texture = ExtResource("23") [node name="PlayBackwards" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]] -margin_left = 48.0 -margin_top = 2.0 -margin_right = 68.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Play the animation backwards (from end to beginning) -(%s)" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +tooltip_text = "Play the animation backwards (from end to beginning)" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_vertical = 4 toggle_mode = true -shortcut_in_tooltip = false -shortcut = SubResource( 8 ) +shortcut = SubResource("8") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/PlayBackwards"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -4.0 -margin_top = -6.0 -margin_right = 3.0 -margin_bottom = 6.0 -texture = ExtResource( 24 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -4.0 +offset_top = -6.0 +offset_right = 3.0 +offset_bottom = 6.0 +texture = ExtResource("24") [node name="PlayForward" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]] -margin_left = 72.0 -margin_top = 2.0 -margin_right = 92.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Play the animation forward (from beginning to end) -(%s)" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "Play the animation forward (from beginning to end)" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 toggle_mode = true -shortcut_in_tooltip = false -shortcut = SubResource( 10 ) +shortcut = SubResource("10") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/PlayForward"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -3.5 -margin_top = -6.0 -margin_right = 3.5 -margin_bottom = 6.0 -texture = ExtResource( 22 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -3.5 +offset_top = -6.0 +offset_right = 3.5 +offset_bottom = 6.0 +texture = ExtResource("22") [node name="NextFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]] -margin_left = 96.0 -margin_top = 2.0 -margin_right = 116.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Go to the next frame -(%s)" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +tooltip_text = "Go to the next frame" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_vertical = 4 -shortcut_in_tooltip = false -shortcut = SubResource( 12 ) +shortcut = SubResource("12") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/NextFrame"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -5.5 -margin_top = -6.0 -margin_right = 5.5 -margin_bottom = 6.0 -texture = ExtResource( 26 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -5.5 +offset_top = -6.0 +offset_right = 5.5 +offset_bottom = 6.0 +texture = ExtResource("26") [node name="LastFrame" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons" groups=["UIButtons"]] -margin_left = 120.0 -margin_top = 2.0 -margin_right = 140.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Jump to the last frame -(%s)" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +tooltip_text = "Jump to the last frame" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_vertical = 4 -shortcut_in_tooltip = false -shortcut = SubResource( 14 ) +shortcut = SubResource("14") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/PlaybackButtons/LastFrame"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -5.5 -margin_top = -6.0 -margin_right = 5.5 -margin_bottom = 6.0 -texture = ExtResource( 25 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -5.5 +offset_top = -6.0 +offset_right = 5.5 +offset_bottom = 6.0 +texture = ExtResource("25") [node name="LoopButtons" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons"] -margin_left = 360.0 -margin_right = 504.0 -margin_bottom = 24.0 +layout_mode = 2 [node name="OnionSkinningSettings" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons" groups=["UIButtons"]] -margin_top = 2.0 -margin_right = 20.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Onion Skinning settings" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "Onion Skinning settings" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 +shortcut = SubResource("Shortcut_tke6v") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/OnionSkinningSettings"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -7.0 -margin_top = -7.0 -margin_right = 7.0 -margin_bottom = 7.0 +offset_left = -7.0 +offset_top = -7.0 +offset_right = 7.0 +offset_bottom = 7.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 30 ) -__meta__ = { -"_editor_description_": "" -} +texture = ExtResource("30") [node name="OnionSkinning" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons" groups=["UIButtons"]] -margin_left = 24.0 -margin_top = 2.0 -margin_right = 44.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Enable/disable Onion Skinning" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +tooltip_text = "Enable/disable Onion Skinning" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_vertical = 4 +shortcut = SubResource("Shortcut_pouu1") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/OnionSkinning"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -7.0 -margin_top = -7.0 -margin_right = 7.0 -margin_bottom = 7.0 +offset_left = -7.0 +offset_top = -7.0 +offset_right = 7.0 +offset_bottom = 7.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 29 ) +texture = ExtResource("29") [node name="LoopAnim" type="Button" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons" groups=["UIButtons"]] -margin_left = 48.0 -margin_top = 2.0 -margin_right = 68.0 -margin_bottom = 22.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Cycle loop" +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 +tooltip_text = "Cycle loop" focus_mode = 0 mouse_default_cursor_shape = 2 -size_flags_vertical = 4 +shortcut = SubResource("Shortcut_1onr8") [node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/LoopAnim"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -7.0 -margin_top = -7.0 -margin_right = 7.0 -margin_bottom = 7.0 -texture = ExtResource( 31 ) - -[node name="FPSValue" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons" instance=ExtResource( 9 )] -margin_left = 72.0 -margin_right = 144.0 -rect_min_size = Vector2( 72, 24 ) -hint_tooltip = "How many frames per second should the animation preview be? -The more FPS, the faster the animation plays." +offset_left = -7.0 +offset_top = -7.0 +offset_right = 7.0 +offset_bottom = 7.0 +texture = ExtResource("31") + +[node name="FPSValue" parent="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons" instance=ExtResource("9")] +custom_minimum_size = Vector2(72, 24) +layout_mode = 2 size_flags_horizontal = 1 -size_flags_vertical = 4 +tooltip_text = "How many frames per second should the animation preview be? +The more FPS, the faster the animation plays." min_value = 0.1 step = 0.1 value = 6.0 suffix = "FPS" [node name="TagScroll" type="ScrollContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer"] -margin_top = 42.0 -margin_right = 677.0 -margin_bottom = 74.0 -rect_min_size = Vector2( 0, 32 ) -mouse_filter = 2 +custom_minimum_size = Vector2(0, 32) +layout_mode = 2 size_flags_horizontal = 3 -theme = SubResource( 20 ) -scroll_vertical_enabled = false +mouse_filter = 2 +theme = SubResource("20") [node name="HBoxContainer" type="HBoxContainer" parent="TimelineContainer/TimelineButtons/VBoxContainer/TagScroll"] -margin_right = 677.0 -margin_bottom = 32.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -custom_constants/separation = 0 +theme_override_constants/separation = 0 [node name="TagSpacer" type="Control" parent="TimelineContainer/TimelineButtons/VBoxContainer/TagScroll/HBoxContainer"] -margin_bottom = 32.0 +layout_mode = 2 [node name="TagContainer" type="Control" parent="TimelineContainer/TimelineButtons/VBoxContainer/TagScroll/HBoxContainer"] -margin_right = 677.0 -margin_bottom = 32.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="PanelContainer" type="PanelContainer" parent="TimelineContainer"] -margin_top = 78.0 -margin_right = 902.0 -margin_bottom = 160.0 +layout_mode = 2 size_flags_vertical = 3 [node name="VBoxContainer" type="VBoxContainer" parent="TimelineContainer/PanelContainer"] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 895.0 -margin_bottom = 75.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="TimelineScroll" type="ScrollContainer" parent="TimelineContainer/PanelContainer/VBoxContainer"] -margin_right = 888.0 -margin_bottom = 64.0 +layout_mode = 2 size_flags_vertical = 3 -scroll_horizontal_enabled = false [node name="LayerFrameHSplit" type="HSplitContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll"] -margin_right = 888.0 -margin_bottom = 64.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="VBoxContainer" type="VBoxContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit"] -margin_right = 41.0 -margin_bottom = 64.0 +layout_mode = 2 [node name="LayerLabel" type="Label" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/VBoxContainer"] -margin_right = 41.0 -margin_bottom = 16.0 -rect_min_size = Vector2( 0, 16 ) +layout_mode = 2 text = "Layers" -align = 1 -valign = 1 [node name="LayerVBox" type="VBoxContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/VBoxContainer"] -margin_top = 20.0 -margin_right = 41.0 -margin_bottom = 20.0 +layout_mode = 2 size_flags_horizontal = 3 [node name="FrameScrollContainer" type="Container" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit"] -margin_left = 53.0 -margin_right = 888.0 -margin_bottom = 64.0 -script = ExtResource( 11 ) +layout_mode = 2 +script = ExtResource("11") h_scroll_bar_node_path = NodePath("../../../BreakFreeFromContainer/FrameScrollBar") [node name="FrameAndCelBox" type="VBoxContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/FrameScrollContainer"] -margin_bottom = 20.0 +layout_mode = 2 [node name="FrameHBox" type="HBoxContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/FrameScrollContainer/FrameAndCelBox"] -margin_bottom = 16.0 -rect_min_size = Vector2( 0, 16 ) +custom_minimum_size = Vector2(0, 30) +layout_mode = 2 [node name="CelVBox" type="VBoxContainer" parent="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/FrameScrollContainer/FrameAndCelBox"] -margin_top = 20.0 -margin_bottom = 20.0 +layout_mode = 2 [node name="BreakFreeFromContainer" type="Control" parent="TimelineContainer/PanelContainer/VBoxContainer"] -margin_top = 68.0 -margin_right = 888.0 -margin_bottom = 68.0 -__meta__ = { -"_editor_description_": "" -} +layout_mode = 2 [node name="FrameScrollBar" type="HScrollBar" parent="TimelineContainer/PanelContainer/VBoxContainer/BreakFreeFromContainer"] +layout_mode = 0 anchor_right = 1.0 -margin_left = 41.0 -margin_top = -12.0 +offset_left = 41.0 +offset_top = -12.0 size_flags_horizontal = 3 [node name="AnimationTimer" type="Timer" parent="."] -[node name="OnionSkinningSettings" type="WindowDialog" parent="."] -margin_right = 300.0 -margin_bottom = 240.0 -rect_min_size = Vector2( 300, 240 ) -resizable = true -__meta__ = { -"_edit_use_anchors_": false -} +[node name="OnionSkinningSettings" type="Popup" parent="."] +position = Vector2i(0, 36) +size = Vector2i(315, 299) +unresizable = false +borderless = false [node name="OnionSkinningButtons" type="VBoxContainer" parent="OnionSkinningSettings"] -anchor_top = 0.5 +anchors_preset = 15 anchor_right = 1.0 -anchor_bottom = 0.5 -margin_left = 4.0 -margin_top = -113.0 -margin_right = -4.0 -margin_bottom = 86.0 -__meta__ = { -"_edit_use_anchors_": false -} +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 [node name="OnionSkinningPast" type="Label" parent="OnionSkinningSettings/OnionSkinningButtons"] -margin_right = 292.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Past Frames" -[node name="PastOnionSkinning" parent="OnionSkinningSettings/OnionSkinningButtons" instance=ExtResource( 9 )] +[node name="PastOnionSkinning" parent="OnionSkinningSettings/OnionSkinningButtons" instance=ExtResource("9")] unique_name_in_owner = true -margin_left = 819.0 -margin_right = 891.0 +layout_mode = 2 size_flags_horizontal = 1 max_value = 10.0 value = 1.0 @@ -889,15 +842,12 @@ allow_greater = true suffix = "Frames" [node name="OnionSkinningFuture" type="Label" parent="OnionSkinningSettings/OnionSkinningButtons"] -margin_top = 46.0 -margin_right = 292.0 -margin_bottom = 60.0 +layout_mode = 2 text = "Future Frames" -[node name="FutureOnionSkinning" parent="OnionSkinningSettings/OnionSkinningButtons" instance=ExtResource( 9 )] +[node name="FutureOnionSkinning" parent="OnionSkinningSettings/OnionSkinningButtons" instance=ExtResource("9")] unique_name_in_owner = true -margin_left = 819.0 -margin_right = 891.0 +layout_mode = 2 size_flags_horizontal = 1 max_value = 10.0 value = 1.0 @@ -906,87 +856,68 @@ suffix = "Frames" [node name="BlueRedMode" type="CheckBox" parent="OnionSkinningSettings/OnionSkinningButtons"] unique_name_in_owner = true -margin_top = 92.0 -margin_right = 126.0 -margin_bottom = 116.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 0 +mouse_default_cursor_shape = 2 text = "Color mode" [node name="GridContainer" type="GridContainer" parent="OnionSkinningSettings/OnionSkinningButtons"] -margin_top = 120.0 -margin_right = 292.0 -margin_bottom = 164.0 -custom_constants/hseparation = 8 +layout_mode = 2 +theme_override_constants/h_separation = 8 columns = 2 [node name="PastPlacementLabel" type="Label" parent="OnionSkinningSettings/OnionSkinningButtons/GridContainer"] -margin_top = 3.0 -margin_right = 127.0 -margin_bottom = 17.0 +layout_mode = 2 text = "Show past frames:" -valign = 1 [node name="PastPlacement" type="OptionButton" parent="OnionSkinningSettings/OnionSkinningButtons/GridContainer"] unique_name_in_owner = true -margin_left = 135.0 -margin_right = 292.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 -text = "Above canvas" -items = [ "Above canvas", null, false, 0, null, "Below canvas", null, false, 1, null ] -selected = 0 -__meta__ = { -"_editor_description_": "" -} +mouse_default_cursor_shape = 2 +item_count = 2 +popup/item_0/text = "Above canvas" +popup/item_0/id = 0 +popup/item_1/text = "Below canvas" +popup/item_1/id = 1 [node name="FuturePlacementLabel" type="Label" parent="OnionSkinningSettings/OnionSkinningButtons/GridContainer"] -margin_top = 27.0 -margin_right = 127.0 -margin_bottom = 41.0 +layout_mode = 2 text = "Show future frames:" -align = 2 -valign = 1 [node name="FuturePlacement" type="OptionButton" parent="OnionSkinningSettings/OnionSkinningButtons/GridContainer"] unique_name_in_owner = true -margin_left = 135.0 -margin_top = 24.0 -margin_right = 292.0 -margin_bottom = 44.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -text = "Above canvas" -items = [ "Above canvas", null, false, 0, null, "Below canvas", null, false, 1, null ] -selected = 0 +item_count = 2 +popup/item_0/text = "Above canvas" +popup/item_0/id = 0 +popup/item_1/text = "Below canvas" +popup/item_1/id = 1 [node name="Label" type="Label" parent="OnionSkinningSettings/OnionSkinningButtons"] -margin_top = 168.0 -margin_right = 292.0 -margin_bottom = 199.0 -custom_colors/font_color = Color( 0.333333, 0.901961, 0.462745, 1 ) +layout_mode = 2 +theme_override_colors/font_color = Color(0.333333, 0.901961, 0.462745, 1) text = "If you want a layer to ignore onion skinning simply add the \"_io\" suffix in its name." -valign = 1 -autowrap = true +autowrap_mode = 3 -[node name="FrameTagDialog" parent="." instance=ExtResource( 42 )] +[node name="FrameTagDialog" parent="." instance=ExtResource("42")] [node name="DragHighlight" type="ColorRect" parent="."] visible = false -margin_right = 40.0 -margin_bottom = 40.0 +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 40.0 mouse_filter = 2 -color = Color( 0, 0.741176, 1, 0.501961 ) +color = Color(0, 0.741176, 1, 0.501961) [node name="PasteTagPopup" type="PopupMenu" parent="."] -margin_right = 20.0 -margin_bottom = 20.0 -script = ExtResource( 12 ) +script = ExtResource("12") -[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/AddLayer" to="." method="add_layer" binds= [ 0 ]] +[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/AddLayer" to="." method="add_layer" binds= [0]] [connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/RemoveLayer" to="." method="_on_RemoveLayer_pressed"] -[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveUpLayer" to="." method="change_layer_order" binds= [ true ]] -[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveDownLayer" to="." method="change_layer_order" binds= [ false ]] +[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveUpLayer" to="." method="change_layer_order" binds= [true]] +[connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MoveDownLayer" to="." method="change_layer_order" binds= [false]] [connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/CloneLayer" to="." method="_on_CloneLayer_pressed"] [connection signal="pressed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/LayerButtons/MergeDownLayer" to="." method="_on_MergeDownLayer_pressed"] [connection signal="value_changed" from="TimelineContainer/TimelineButtons/LayerTools/VBoxContainer/BlendingHBox/OpacitySlider" to="." method="_on_OpacitySlider_value_changed"] @@ -1009,7 +940,8 @@ script = ExtResource( 12 ) [connection signal="gui_input" from="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit" to="." method="_on_LayerFrameSplitContainer_gui_input"] [connection signal="resized" from="TimelineContainer/PanelContainer/VBoxContainer/TimelineScroll/LayerFrameHSplit/VBoxContainer/LayerVBox" to="." method="_on_LayerVBox_resized"] [connection signal="timeout" from="AnimationTimer" to="." method="_on_AnimationTimer_timeout"] -[connection signal="popup_hide" from="OnionSkinningSettings" to="." method="_on_OnionSkinningSettings_popup_hide"] +[connection signal="close_requested" from="OnionSkinningSettings" to="." method="_on_onion_skinning_settings_close_requested"] +[connection signal="visibility_changed" from="OnionSkinningSettings" to="." method="_on_onion_skinning_settings_visibility_changed"] [connection signal="value_changed" from="OnionSkinningSettings/OnionSkinningButtons/PastOnionSkinning" to="." method="_on_PastOnionSkinning_value_changed"] [connection signal="value_changed" from="OnionSkinningSettings/OnionSkinningButtons/FutureOnionSkinning" to="." method="_on_FutureOnionSkinning_value_changed"] [connection signal="toggled" from="OnionSkinningSettings/OnionSkinningButtons/BlueRedMode" to="." method="_on_BlueRedMode_toggled"] diff --git a/src/UI/Timeline/BaseCelButton.tscn b/src/UI/Timeline/BaseCelButton.tscn index 1c8142b74b0..acb791d9dbe 100644 --- a/src/UI/Timeline/BaseCelButton.tscn +++ b/src/UI/Timeline/BaseCelButton.tscn @@ -1,57 +1,53 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://byhnvhs6av108"] -[ext_resource path="res://src/Shaders/TransparentChecker.shader" type="Shader" id=1] -[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=2] +[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="1"] +[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="2"] -[sub_resource type="ShaderMaterial" id=1] -shader = ExtResource( 1 ) -shader_param/size = 10.0 -shader_param/alpha = 1.0 -shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 ) -shader_param/color2 = Color( 1, 1, 1, 1 ) -shader_param/offset = Vector2( 0, 0 ) -shader_param/scale = Vector2( 0, 0 ) -shader_param/rect_size = Vector2( 0, 0 ) -shader_param/follow_movement = false -shader_param/follow_scale = false +[sub_resource type="ShaderMaterial" id="1"] +shader = ExtResource("1") +shader_parameter/size = 10.0 +shader_parameter/alpha = 1.0 +shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1) +shader_parameter/color2 = Color(1, 1, 1, 1) +shader_parameter/offset = Vector2(0, 0) +shader_parameter/scale = Vector2(0, 0) +shader_parameter/rect_size = Vector2(0, 0) +shader_parameter/follow_movement = false +shader_parameter/follow_scale = false [node name="BaseCelButton" type="Button"] -margin_top = 18.0 -margin_right = 36.0 -margin_bottom = 54.0 -rect_min_size = Vector2( 36, 36 ) -focus_mode = 0 -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(36, 36) +offset_top = 18.0 +offset_right = 36.0 +offset_bottom = 54.0 size_flags_horizontal = 0 size_flags_vertical = 0 +focus_mode = 0 +mouse_default_cursor_shape = 2 toggle_mode = true button_mask = 7 -enabled_focus_mode = 0 -__meta__ = { -"_edit_use_anchors_": false -} [node name="CelTexture" type="TextureRect" parent="."] -margin_left = 2.0 -margin_top = 1.78536 -margin_right = 34.0 -margin_bottom = 33.7854 -rect_min_size = Vector2( 32, 32 ) +custom_minimum_size = Vector2(32, 32) +layout_mode = 0 +offset_left = 2.0 +offset_top = 1.78536 +offset_right = 34.0 +offset_bottom = 33.7854 size_flags_horizontal = 0 size_flags_vertical = 0 -expand = true +expand_mode = 1 stretch_mode = 6 -__meta__ = { -"_edit_use_anchors_": false -} -[node name="TransparentChecker" parent="CelTexture" instance=ExtResource( 2 )] +[node name="TransparentChecker" parent="CelTexture" instance=ExtResource("2")] show_behind_parent = true -material = SubResource( 1 ) +material = SubResource("1") +layout_mode = 1 +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = 0.0 -margin_bottom = 0.0 +grow_horizontal = 2 +grow_vertical = 2 [connection signal="pressed" from="." to="." method="_on_CelButton_pressed"] [connection signal="resized" from="." to="." method="_on_CelButton_resized"] diff --git a/src/UI/Timeline/BaseLayerButton.tscn b/src/UI/Timeline/BaseLayerButton.tscn index 4d178964603..41c33cc8fa9 100644 --- a/src/UI/Timeline/BaseLayerButton.tscn +++ b/src/UI/Timeline/BaseLayerButton.tscn @@ -1,159 +1,132 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=4 format=3 uid="uid://bai814sqvk68f"] -[ext_resource path="res://src/UI/Timeline/LayerButton.gd" type="Script" id=1] -[ext_resource path="res://assets/graphics/layers/layer_visible.png" type="Texture" id=2] -[ext_resource path="res://assets/graphics/layers/unlock.png" type="Texture" id=3] +[ext_resource type="Script" path="res://src/UI/Timeline/LayerButton.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://c2b3htff5yox8" path="res://assets/graphics/layers/layer_visible.png" id="2"] +[ext_resource type="Texture2D" uid="uid://dhc0pnnqojd2m" path="res://assets/graphics/layers/unlock.png" id="3"] [node name="BaseLayerButton" type="Button"] -margin_right = 200.0 -margin_bottom = 36.0 -rect_min_size = Vector2( 205, 36 ) +custom_minimum_size = Vector2(205, 36) +offset_right = 200.0 +offset_bottom = 36.0 focus_mode = 0 mouse_default_cursor_shape = 2 toggle_mode = true action_mode = 0 -enabled_focus_mode = 0 -script = ExtResource( 1 ) -__meta__ = { -"_edit_horizontal_guides_": [ ] -} +script = ExtResource("1") [node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 size_flags_horizontal = 0 [node name="EmptySpacer" type="Control" parent="HBoxContainer"] -margin_bottom = 36.0 +layout_mode = 2 mouse_filter = 2 [node name="LayerButtons" type="HBoxContainer" parent="HBoxContainer"] -margin_left = 4.0 -margin_right = 122.0 -margin_bottom = 36.0 -rect_min_size = Vector2( 118, 0 ) -custom_constants/separation = 10 - -[node name="ExpandButton" type="ToolButton" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]] -margin_top = 7.0 -margin_right = 22.0 -margin_bottom = 29.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Expand/collapse group" -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(118, 0) +layout_mode = 2 +theme_override_constants/separation = 10 + +[node name="ExpandButton" type="Button" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]] +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 4 +tooltip_text = "Expand/collapse group" +mouse_default_cursor_shape = 2 [node name="TextureRect" type="TextureRect" parent="HBoxContainer/LayerButtons/ExpandButton"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="VisibilityButton" type="ToolButton" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]] -margin_left = 32.0 -margin_top = 7.0 -margin_right = 54.0 -margin_bottom = 29.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Toggle layer's visibility" -focus_mode = 0 -mouse_default_cursor_shape = 2 + +[node name="VisibilityButton" type="Button" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]] +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 4 +tooltip_text = "Toggle layer's visibility" +focus_mode = 0 +mouse_default_cursor_shape = 2 [node name="TextureRect" type="TextureRect" parent="HBoxContainer/LayerButtons/VisibilityButton"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="LockButton" type="ToolButton" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]] -margin_left = 64.0 -margin_top = 7.0 -margin_right = 86.0 -margin_bottom = 29.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Lock/unlock layer" -focus_mode = 0 -mouse_default_cursor_shape = 2 +texture = ExtResource("2") + +[node name="LockButton" type="Button" parent="HBoxContainer/LayerButtons" groups=["UIButtons"]] +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 4 +tooltip_text = "Lock/unlock layer" +focus_mode = 0 +mouse_default_cursor_shape = 2 [node name="TextureRect" type="TextureRect" parent="HBoxContainer/LayerButtons/LockButton"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 3 ) +texture = ExtResource("3") [node name="LayerName" type="HBoxContainer" parent="HBoxContainer"] -margin_left = 126.0 -margin_right = 205.0 -margin_bottom = 36.0 -rect_pivot_offset = Vector2( -187, -9 ) -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 alignment = 1 -__meta__ = { -"_edit_use_anchors_": false -} [node name="HierarchySpacer" type="Control" parent="HBoxContainer/LayerName"] -margin_bottom = 36.0 +layout_mode = 2 mouse_filter = 2 [node name="Label" type="Label" parent="HBoxContainer/LayerName"] -margin_left = 4.0 -margin_top = 11.0 -margin_right = 75.0 -margin_bottom = 25.0 +layout_mode = 2 size_flags_horizontal = 3 text = "Layer 0" clip_text = true [node name="LineEdit" type="LineEdit" parent="HBoxContainer/LayerName"] visible = false -margin_left = 30.0 -margin_top = 2.0 -margin_right = 110.0 -margin_bottom = 34.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 4 text = "Layer 0" editable = false caret_blink = true -caret_blink_speed = 0.5 +caret_blink_interval = 0.5 [node name="EmptySpacer" type="Control" parent="HBoxContainer/LayerName"] -margin_left = 79.0 -margin_right = 79.0 -margin_bottom = 36.0 +layout_mode = 2 mouse_filter = 2 [connection signal="gui_input" from="." to="." method="_on_LayerContainer_gui_input"] diff --git a/src/UI/Timeline/Cel3DButton.tscn b/src/UI/Timeline/Cel3DButton.tscn index f716467bf41..9e3f7ecbb6e 100644 --- a/src/UI/Timeline/Cel3DButton.tscn +++ b/src/UI/Timeline/Cel3DButton.tscn @@ -1,14 +1,14 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://cqpi2e7amvsau"] -[ext_resource path="res://src/UI/Timeline/BaseCelButton.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Timeline/CelButton.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://byhnvhs6av108" path="res://src/UI/Timeline/BaseCelButton.tscn" id="1"] +[ext_resource type="Script" path="res://src/UI/Timeline/CelButton.gd" id="2"] -[node name="PixelCelButton" instance=ExtResource( 1 )] -rect_pivot_offset = Vector2( -18, 6 ) -script = ExtResource( 2 ) +[node name="PixelCelButton" instance=ExtResource("1")] +pivot_offset = Vector2(-18, 6) +script = ExtResource("2") [node name="LinkedIndicator" type="Polygon2D" parent="." index="1"] -color = Color( 0, 1, 0, 1 ) -invert_enable = true +color = Color(0, 1, 0, 1) +invert_enabled = true invert_border = 1.0 -polygon = PoolVector2Array( 0, 0, 36, 0, 36, 36, 0, 36 ) +polygon = PackedVector2Array(0, 0, 36, 0, 36, 36, 0, 36) diff --git a/src/UI/Timeline/CelButton.gd b/src/UI/Timeline/CelButton.gd index 4e7a7715512..341318ab0db 100644 --- a/src/UI/Timeline/CelButton.gd +++ b/src/UI/Timeline/CelButton.gd @@ -6,48 +6,45 @@ var frame := 0 var layer := 0 var cel: BaseCel -onready var popup_menu: PopupMenu = get_node_or_null("PopupMenu") -onready var linked_indicator: Polygon2D = get_node_or_null("LinkedIndicator") -onready var cel_texture: TextureRect = $CelTexture -onready var transparent_checker: ColorRect = $CelTexture/TransparentChecker +@onready var popup_menu: PopupMenu = get_node_or_null("PopupMenu") +@onready var linked_indicator: Polygon2D = get_node_or_null("LinkedIndicator") +@onready var cel_texture: TextureRect = $CelTexture +@onready var transparent_checker: ColorRect = $CelTexture/TransparentChecker func _ready() -> void: cel = Global.current_project.frames[frame].cels[layer] button_setup() _dim_checker() - cel.connect("texture_changed", self, "_dim_checker") + cel.texture_changed.connect(_dim_checker) func button_setup() -> void: - rect_min_size.x = Global.animation_timeline.cel_size - rect_min_size.y = Global.animation_timeline.cel_size + custom_minimum_size.x = Global.animation_timeline.cel_size + custom_minimum_size.y = Global.animation_timeline.cel_size - var base_layer: BaseLayer = Global.current_project.layers[layer] - hint_tooltip = tr("Frame: %s, Layer: %s") % [frame + 1, base_layer.name] + var base_layer := Global.current_project.layers[layer] + tooltip_text = tr("Frame: %s, Layer: %s") % [frame + 1, base_layer.name] cel_texture.texture = cel.image_texture if is_instance_valid(linked_indicator): linked_indicator.visible = cel.link_set != null if cel.link_set != null: linked_indicator.color.h = cel.link_set["hue"] - # Reset the checkers size because it assumes you want the same size as the canvas - transparent_checker.rect_size = transparent_checker.get_parent().rect_size - func _on_CelButton_resized() -> void: - cel_texture.rect_min_size.x = rect_min_size.x - 4 - cel_texture.rect_min_size.y = rect_min_size.y - 4 + cel_texture.custom_minimum_size.x = custom_minimum_size.x - 4 + cel_texture.custom_minimum_size.y = custom_minimum_size.y - 4 if is_instance_valid(linked_indicator): - linked_indicator.polygon[1].x = rect_min_size.x - linked_indicator.polygon[2].x = rect_min_size.x - linked_indicator.polygon[2].y = rect_min_size.y - linked_indicator.polygon[3].y = rect_min_size.y + linked_indicator.polygon[1].x = custom_minimum_size.x + linked_indicator.polygon[2].x = custom_minimum_size.x + linked_indicator.polygon[2].y = custom_minimum_size.y + linked_indicator.polygon[3].y = custom_minimum_size.y func _on_CelButton_pressed() -> void: - var project = Global.current_project + var project := Global.current_project if Input.is_action_just_released("left_mouse"): Global.canvas.selection.transform_content_confirm() var change_cel := true @@ -55,10 +52,10 @@ func _on_CelButton_pressed() -> void: var prev_curr_layer: int = project.current_layer if Input.is_action_pressed("shift"): - var frame_diff_sign = sign(frame - prev_curr_frame) + var frame_diff_sign := signi(frame - prev_curr_frame) if frame_diff_sign == 0: frame_diff_sign = 1 - var layer_diff_sign = sign(layer - prev_curr_layer) + var layer_diff_sign := signi(layer - prev_curr_layer) if layer_diff_sign == 0: layer_diff_sign = 1 for i in range(prev_curr_frame, frame + frame_diff_sign, frame_diff_sign): @@ -89,12 +86,12 @@ func _on_CelButton_pressed() -> void: elif Input.is_action_just_released("right_mouse"): if is_instance_valid(popup_menu): popup_menu.popup(Rect2(get_global_mouse_position(), Vector2.ONE)) - pressed = !pressed + button_pressed = !button_pressed elif Input.is_action_just_released("middle_mouse"): - pressed = !pressed + button_pressed = !button_pressed _delete_cel_content() else: # An example of this would be Space - pressed = !pressed + button_pressed = !button_pressed func _on_PopupMenu_id_pressed(id: int) -> void: @@ -103,28 +100,30 @@ func _on_PopupMenu_id_pressed(id: int) -> void: _delete_cel_content() MenuOptions.LINK, MenuOptions.UNLINK: - var project: Project = Global.current_project + var project := Global.current_project if id == MenuOptions.UNLINK: project.undo_redo.create_action("Unlink Cel") - var selected_cels = project.selected_cels.duplicate() + var selected_cels := project.selected_cels.duplicate() if not selected_cels.has([frame, layer]): selected_cels.append([frame, layer]) # Include this cel with the selected ones for cel_index in selected_cels: if layer != cel_index[1]: # Skip selected cels not on the same layer continue - var s_cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]] + var s_cel := project.frames[cel_index[0]].cels[cel_index[1]] if s_cel.link_set == null: # Skip cels that aren't linked continue - project.undo_redo.add_do_method(project.layers[layer], "link_cel", s_cel, null) + project.undo_redo.add_do_method( + project.layers[layer].link_cel.bind(s_cel, null) + ) project.undo_redo.add_undo_method( - project.layers[layer], "link_cel", s_cel, s_cel.link_set + project.layers[layer].link_cel.bind(s_cel, s_cel.link_set) ) if s_cel.link_set.size() > 1: # Skip copying content if not linked to another project.undo_redo.add_do_method( - s_cel, "set_content", s_cel.copy_content(), ImageTexture.new() + s_cel.set_content.bind(s_cel.copy_content(), ImageTexture.new()) ) project.undo_redo.add_undo_method( - s_cel, "set_content", s_cel.get_content(), s_cel.image_texture + s_cel.set_content.bind(s_cel.get_content(), s_cel.image_texture) ) elif id == MenuOptions.LINK: @@ -132,29 +131,31 @@ func _on_PopupMenu_id_pressed(id: int) -> void: var link_set: Dictionary = {} if cel.link_set == null else cel.link_set if cel.link_set == null: project.undo_redo.add_do_method( - project.layers[layer], "link_cel", cel, link_set + project.layers[layer].link_cel.bind(cel, link_set) + ) + project.undo_redo.add_undo_method( + project.layers[layer].link_cel.bind(cel, null) ) - project.undo_redo.add_undo_method(project.layers[layer], "link_cel", cel, null) for cel_index in project.selected_cels: if layer != cel_index[1]: # Skip selected cels not on the same layer continue - var s_cel: BaseCel = project.frames[cel_index[0]].cels[cel_index[1]] + var s_cel := project.frames[cel_index[0]].cels[cel_index[1]] if cel == s_cel: # Don't need to link cel to itself continue if s_cel.link_set == link_set: # Skip cels that were already linked continue project.undo_redo.add_do_method( - project.layers[layer], "link_cel", s_cel, link_set + project.layers[layer].link_cel.bind(s_cel, link_set) ) project.undo_redo.add_undo_method( - project.layers[layer], "link_cel", s_cel, s_cel.link_set + project.layers[layer].link_cel.bind(s_cel, s_cel.link_set) ) project.undo_redo.add_do_method( - s_cel, "set_content", cel.get_content(), cel.image_texture + s_cel.set_content.bind(cel.get_content(), cel.image_texture) ) project.undo_redo.add_undo_method( - s_cel, "set_content", s_cel.get_content(), s_cel.image_texture + s_cel.set_content.bind(s_cel.get_content(), s_cel.image_texture) ) # Remove and add a new cel button to update appearance (can't use button_setup @@ -162,38 +163,38 @@ func _on_PopupMenu_id_pressed(id: int) -> void: # May be able to use button_setup with a lambda to find correct cel button in Godot 4 for f in project.frames.size(): project.undo_redo.add_do_method( - Global.animation_timeline, "project_cel_removed", f, layer + Global.animation_timeline.project_cel_removed.bind(f, layer) ) project.undo_redo.add_undo_method( - Global.animation_timeline, "project_cel_removed", f, layer + Global.animation_timeline.project_cel_removed.bind(f, layer) ) project.undo_redo.add_do_method( - Global.animation_timeline, "project_cel_added", f, layer + Global.animation_timeline.project_cel_added.bind(f, layer) ) project.undo_redo.add_undo_method( - Global.animation_timeline, "project_cel_added", f, layer + Global.animation_timeline.project_cel_added.bind(f, layer) ) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) project.undo_redo.commit_action() func _delete_cel_content() -> void: - var project: Project = Global.current_project + var project := Global.current_project var empty_content = cel.create_empty_content() var old_content = cel.get_content() project.undos += 1 project.undo_redo.create_action("Draw") if cel.link_set == null: - project.undo_redo.add_do_method(cel, "set_content", empty_content) - project.undo_redo.add_undo_method(cel, "set_content", old_content) + project.undo_redo.add_do_method(cel.set_content.bind(empty_content)) + project.undo_redo.add_undo_method(cel.set_content.bind(old_content)) else: for linked_cel in cel.link_set["cels"]: - project.undo_redo.add_do_method(linked_cel, "set_content", empty_content) - project.undo_redo.add_undo_method(linked_cel, "set_content", old_content) - project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer, project) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer, project) + project.undo_redo.add_do_method(linked_cel.set_content.bind(empty_content)) + project.undo_redo.add_undo_method(linked_cel.set_content.bind(old_content)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false, frame, layer, project)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true, frame, layer, project)) project.undo_redo.commit_action() @@ -207,13 +208,13 @@ func _dim_checker() -> void: transparent_checker.self_modulate.a = 1.0 -func get_drag_data(_position: Vector2) -> Array: +func _get_drag_data(_position: Vector2) -> Variant: var button := Button.new() - button.rect_size = rect_size + button.size = size button.theme = Global.control.theme var texture_rect := TextureRect.new() - texture_rect.rect_size = cel_texture.rect_size - texture_rect.rect_position = cel_texture.rect_position + texture_rect.size = cel_texture.size + texture_rect.position = cel_texture.position texture_rect.expand = true texture_rect.texture = cel_texture.texture button.add_child(texture_rect) @@ -222,8 +223,8 @@ func get_drag_data(_position: Vector2) -> Array: return ["Cel", frame, layer] -func can_drop_data(_pos: Vector2, data) -> bool: - var project: Project = Global.current_project +func _can_drop_data(_pos: Vector2, data) -> bool: + var project := Global.current_project if typeof(data) == TYPE_ARRAY and data[0] == "Cel": var drag_frame = data[1] var drag_layer = data[2] @@ -246,8 +247,8 @@ func can_drop_data(_pos: Vector2, data) -> bool: else: # Right region = _get_region_rect(0.875, 1.125) region.position.x += 2 # Container spacing - Global.animation_timeline.drag_highlight.rect_global_position = region.position - Global.animation_timeline.drag_highlight.rect_size = region.size + Global.animation_timeline.drag_highlight.global_position = region.position + Global.animation_timeline.drag_highlight.size = region.size Global.animation_timeline.drag_highlight.visible = true return true @@ -255,15 +256,17 @@ func can_drop_data(_pos: Vector2, data) -> bool: return false -func drop_data(_pos: Vector2, data) -> void: - var drop_frame = data[1] - var drop_layer = data[2] - var project = Global.current_project +func _drop_data(_pos: Vector2, data) -> void: + var drop_frame: int = data[1] + var drop_layer: int = data[2] + var project := Global.current_project project.undo_redo.create_action("Move Cels") if Input.is_action_pressed("ctrl") or layer != drop_layer: # Swap cels - project.undo_redo.add_do_method(project, "swap_cel", frame, layer, drop_frame, drop_layer) - project.undo_redo.add_undo_method(project, "swap_cel", frame, layer, drop_frame, drop_layer) + project.undo_redo.add_do_method(project.swap_cel.bind(frame, layer, drop_frame, drop_layer)) + project.undo_redo.add_undo_method( + project.swap_cel.bind(frame, layer, drop_frame, drop_layer) + ) else: # Move cels var to_frame: int if _get_region_rect(0, 0.5).has_point(get_global_mouse_position()): # Left @@ -272,15 +275,15 @@ func drop_data(_pos: Vector2, data) -> void: to_frame = frame + 1 if drop_frame < frame: to_frame -= 1 - project.undo_redo.add_do_method(project, "move_cel", drop_frame, to_frame, layer) - project.undo_redo.add_undo_method(project, "move_cel", to_frame, drop_frame, layer) + project.undo_redo.add_do_method(project.move_cel.bind(drop_frame, to_frame, layer)) + project.undo_redo.add_undo_method(project.move_cel.bind(to_frame, drop_frame, layer)) - project.undo_redo.add_do_method(project, "change_cel", frame, layer) + project.undo_redo.add_do_method(project.change_cel.bind(frame, layer)) project.undo_redo.add_undo_method( - project, "change_cel", project.current_frame, project.current_layer + project.change_cel.bind(project.current_frame, project.current_layer) ) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) project.undo_redo.commit_action() diff --git a/src/UI/Timeline/FrameButton.gd b/src/UI/Timeline/FrameButton.gd index 3115bf63672..fe3f68074d8 100644 --- a/src/UI/Timeline/FrameButton.gd +++ b/src/UI/Timeline/FrameButton.gd @@ -4,24 +4,24 @@ enum { REMOVE, CLONE, MOVE_LEFT, MOVE_RIGHT, PROPERTIES, REVERSE, CENTER } var frame := 0 -onready var popup_menu: PopupMenu = $PopupMenu -onready var frame_properties: ConfirmationDialog = Global.control.find_node("FrameProperties") +@onready var popup_menu: PopupMenu = $PopupMenu +@onready var frame_properties: ConfirmationDialog = Global.control.find_child("FrameProperties") func _ready() -> void: - rect_min_size.x = Global.animation_timeline.cel_size + custom_minimum_size.x = Global.animation_timeline.cel_size text = str(frame + 1) - connect("pressed", self, "_button_pressed") - connect("mouse_entered", self, "_update_tooltip") + pressed.connect(_button_pressed) + mouse_entered.connect(_update_tooltip) func _update_tooltip() -> void: - var duration: float = Global.current_project.frames[frame].duration + var duration := Global.current_project.frames[frame].duration var duration_sec := duration * (1.0 / Global.current_project.fps) var duration_str := str(duration_sec) if "." in duration_str: # If its a decimal value duration_str = "%.2f" % duration_sec # Up to 2 decimal places - hint_tooltip = "%s: %sx (%s sec)" % [tr("Duration"), str(duration), duration_str] + tooltip_text = "%s: %sx (%s sec)" % [tr("Duration"), str(duration), duration_str] func _button_pressed() -> void: @@ -29,7 +29,7 @@ func _button_pressed() -> void: Global.canvas.selection.transform_content_confirm() var prev_curr_frame := Global.current_project.current_frame if Input.is_action_pressed("shift"): - var frame_diff_sign := sign(frame - prev_curr_frame) + var frame_diff_sign := signi(frame - prev_curr_frame) if frame_diff_sign == 0: frame_diff_sign = 1 for i in range(prev_curr_frame, frame + frame_diff_sign, frame_diff_sign): @@ -67,12 +67,12 @@ func _button_pressed() -> void: if frame < Global.current_project.frames.size() - 1: popup_menu.set_item_disabled(MOVE_RIGHT, false) popup_menu.popup(Rect2(get_global_mouse_position(), Vector2.ONE)) - pressed = !pressed + button_pressed = !button_pressed elif Input.is_action_just_released("middle_mouse"): - pressed = !pressed + button_pressed = !button_pressed Global.animation_timeline.delete_frames(_get_frame_indices()) else: # An example of this would be Space - pressed = !pressed + button_pressed = !button_pressed func _on_PopupMenu_id_pressed(id: int) -> void: @@ -98,26 +98,26 @@ func _on_PopupMenu_id_pressed(id: int) -> void: func change_frame_order(rate: int) -> void: var change := frame + rate - var project = Global.current_project + var project := Global.current_project project.undo_redo.create_action("Change Frame Order") - project.undo_redo.add_do_method(project, "move_frame", frame, change) - project.undo_redo.add_undo_method(project, "move_frame", change, frame) + project.undo_redo.add_do_method(project.move_frame.bind(frame, change)) + project.undo_redo.add_undo_method(project.move_frame.bind(change, frame)) if project.current_frame == frame: - project.undo_redo.add_do_method(project, "change_cel", change) + project.undo_redo.add_do_method(project.change_cel.bind(change)) else: - project.undo_redo.add_do_method(project, "change_cel", project.current_frame) + project.undo_redo.add_do_method(project.change_cel.bind(project.current_frame)) - project.undo_redo.add_undo_method(project, "change_cel", project.current_frame) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_undo_method(project.change_cel.bind(project.current_frame)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) project.undo_redo.commit_action() -func get_drag_data(_position: Vector2) -> Array: +func _get_drag_data(_position: Vector2) -> Variant: var button := Button.new() - button.rect_size = rect_size + button.size = size button.theme = Global.control.theme button.text = text set_drag_preview(button) @@ -125,7 +125,7 @@ func get_drag_data(_position: Vector2) -> Array: return ["Frame", frame] -func can_drop_data(_pos: Vector2, data) -> bool: +func _can_drop_data(_pos: Vector2, data) -> bool: if typeof(data) == TYPE_ARRAY: if data[0] == "Frame": if data[1] != frame: # Can't move to same frame @@ -139,21 +139,21 @@ func can_drop_data(_pos: Vector2, data) -> bool: else: region = _get_region_rect(0.875, 1.125) region.position.x += 2 # Container spacing - Global.animation_timeline.drag_highlight.rect_global_position = region.position - Global.animation_timeline.drag_highlight.rect_size = region.size + Global.animation_timeline.drag_highlight.global_position = region.position + Global.animation_timeline.drag_highlight.size = region.size Global.animation_timeline.drag_highlight.visible = true return true Global.animation_timeline.drag_highlight.visible = false return false -func drop_data(_pos: Vector2, data) -> void: - var drop_frame = data[1] - var project = Global.current_project +func _drop_data(_pos: Vector2, data) -> void: + var drop_frame: int = data[1] + var project := Global.current_project project.undo_redo.create_action("Change Frame Order") if Input.is_action_pressed("ctrl"): # Swap frames - project.undo_redo.add_do_method(project, "swap_frame", frame, drop_frame) - project.undo_redo.add_undo_method(project, "swap_frame", frame, drop_frame) + project.undo_redo.add_do_method(project.swap_frame.bind(frame, drop_frame)) + project.undo_redo.add_undo_method(project.swap_frame.bind(frame, drop_frame)) else: # Move frames var to_frame: int if _get_region_rect(0, 0.5).has_point(get_global_mouse_position()): # Left @@ -162,16 +162,16 @@ func drop_data(_pos: Vector2, data) -> void: to_frame = frame + 1 if drop_frame < frame: to_frame -= 1 - project.undo_redo.add_do_method(project, "move_frame", drop_frame, to_frame) - project.undo_redo.add_undo_method(project, "move_frame", to_frame, drop_frame) + project.undo_redo.add_do_method(project.move_frame.bind(drop_frame, to_frame)) + project.undo_redo.add_undo_method(project.move_frame.bind(to_frame, drop_frame)) if project.current_frame == drop_frame: - project.undo_redo.add_do_method(project, "change_cel", frame) + project.undo_redo.add_do_method(project.change_cel.bind(frame)) else: - project.undo_redo.add_do_method(project, "change_cel", project.current_frame) - project.undo_redo.add_undo_method(project, "change_cel", project.current_frame) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_do_method(project.change_cel.bind(project.current_frame)) + project.undo_redo.add_undo_method(project.change_cel.bind(project.current_frame)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) project.undo_redo.commit_action() diff --git a/src/UI/Timeline/FrameButton.tscn b/src/UI/Timeline/FrameButton.tscn index 8950253153e..1a822cbf173 100644 --- a/src/UI/Timeline/FrameButton.tscn +++ b/src/UI/Timeline/FrameButton.tscn @@ -1,28 +1,36 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://dnwoi64rtj5vt"] -[ext_resource path="res://src/UI/Timeline/FrameButton.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/UI/Timeline/FrameButton.gd" id="1"] [node name="FrameButton" type="Button"] -margin_right = 12.0 -margin_bottom = 20.0 +offset_right = 12.0 +offset_bottom = 20.0 focus_mode = 0 mouse_default_cursor_shape = 2 toggle_mode = true button_mask = 7 -enabled_focus_mode = 0 text = "1" -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +script = ExtResource("1") [node name="PopupMenu" type="PopupMenu" parent="."] -margin_right = 20.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 -items = [ "Remove Frame", null, 0, false, true, -1, 0, null, "", false, "Clone Frame", null, 0, false, false, -1, 0, null, "", false, "Move Left", null, 0, false, true, -1, 0, null, "", false, "Move Right", null, 0, false, true, -1, 0, null, "", false, "Frame Properties", null, 0, false, false, -1, 0, null, "", false, "Reverse Frames", null, 0, false, true, 5, 0, null, "", false, "Center Frames", null, 0, false, false, 6, 0, null, "", false ] -__meta__ = { -"_edit_use_anchors_": false -} +item_count = 7 +item_0/text = "Remove Frame" +item_0/id = -1 +item_0/disabled = true +item_1/text = "Clone Frame" +item_1/id = -1 +item_2/text = "Move Left" +item_2/id = -1 +item_2/disabled = true +item_3/text = "Move Right" +item_3/id = -1 +item_3/disabled = true +item_4/text = "Frame Properties" +item_4/id = -1 +item_5/text = "Reverse Frames" +item_5/id = 5 +item_5/disabled = true +item_6/text = "Center Frames" +item_6/id = 6 [connection signal="id_pressed" from="PopupMenu" to="." method="_on_PopupMenu_id_pressed"] diff --git a/src/UI/Timeline/FrameProperties.gd b/src/UI/Timeline/FrameProperties.gd index f5687e69d2f..a91967685ae 100644 --- a/src/UI/Timeline/FrameProperties.gd +++ b/src/UI/Timeline/FrameProperties.gd @@ -1,8 +1,8 @@ extends ConfirmationDialog var frame_indices := [] -onready var frame_num = $VBoxContainer/GridContainer/FrameNum -onready var frame_dur = $VBoxContainer/GridContainer/FrameTime +@onready var frame_num = $VBoxContainer/GridContainer/FrameNum +@onready var frame_dur = $VBoxContainer/GridContainer/FrameTime func _on_FrameProperties_about_to_show() -> void: @@ -17,12 +17,12 @@ func _on_FrameProperties_about_to_show() -> void: frame_dur.set_value(duration) -func _on_FrameProperties_popup_hide() -> void: +func _on_FrameProperties_visibility_changed() -> void: Global.dialog_open(false) func _on_FrameProperties_confirmed() -> void: - var project: Project = Global.current_project + var project := Global.current_project var new_duration: float = frame_dur.get_value() project.undos += 1 project.undo_redo.create_action("Change frame duration") @@ -31,6 +31,6 @@ func _on_FrameProperties_confirmed() -> void: project.undo_redo.add_undo_property( project.frames[frame], "duration", project.frames[frame].duration ) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) project.undo_redo.commit_action() diff --git a/src/UI/Timeline/FrameProperties.tscn b/src/UI/Timeline/FrameProperties.tscn index 4ab3face889..4413e17bce1 100644 --- a/src/UI/Timeline/FrameProperties.tscn +++ b/src/UI/Timeline/FrameProperties.tscn @@ -1,70 +1,51 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://bs3dnnvnxyp68"] -[ext_resource path="res://src/UI/Timeline/FrameProperties.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/UI/Timeline/FrameProperties.gd" id="1"] [node name="FrameProperties" type="ConfirmationDialog"] -margin_right = 209.0 -margin_bottom = 137.0 -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +title = "Frame properties" +exclusive = false +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 201.0 -margin_bottom = 101.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = 201.0 +offset_bottom = 101.0 [node name="Label" type="Label" parent="VBoxContainer"] -margin_right = 193.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Frame properties" [node name="HSeparator" type="HSeparator" parent="VBoxContainer"] -margin_top = 18.0 -margin_right = 193.0 -margin_bottom = 22.0 +layout_mode = 2 [node name="GridContainer" type="GridContainer" parent="VBoxContainer"] -margin_top = 26.0 -margin_right = 193.0 -margin_bottom = 68.0 +layout_mode = 2 columns = 2 [node name="Frame" type="Label" parent="VBoxContainer/GridContainer"] -margin_right = 97.0 -margin_bottom = 14.0 +layout_mode = 2 text = "Frame" [node name="FrameNum" type="Label" parent="VBoxContainer/GridContainer"] -margin_left = 101.0 -margin_right = 193.0 -margin_bottom = 14.0 +layout_mode = 2 text = "1" [node name="FrameDuration" type="Label" parent="VBoxContainer/GridContainer"] -margin_top = 23.0 -margin_right = 97.0 -margin_bottom = 37.0 +layout_mode = 2 text = "Frame duration" [node name="FrameTime" type="SpinBox" parent="VBoxContainer/GridContainer"] -margin_left = 101.0 -margin_top = 18.0 -margin_right = 193.0 -margin_bottom = 42.0 -mouse_default_cursor_shape = 2 +layout_mode = 2 size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 min_value = 0.01 step = 0.05 -value = 2.0 +value = 2.01 allow_greater = true suffix = "x" -[connection signal="about_to_show" from="." to="." method="_on_FrameProperties_about_to_show"] +[connection signal="about_to_popup" from="." to="." method="_on_FrameProperties_about_to_show"] [connection signal="confirmed" from="." to="." method="_on_FrameProperties_confirmed"] -[connection signal="popup_hide" from="." to="." method="_on_FrameProperties_popup_hide"] +[connection signal="visibility_changed" from="." to="." method="_on_FrameProperties_visibility_changed"] diff --git a/src/UI/Timeline/FrameScrollContainer.gd b/src/UI/Timeline/FrameScrollContainer.gd index 16034bb493e..2798554ad3d 100644 --- a/src/UI/Timeline/FrameScrollContainer.gd +++ b/src/UI/Timeline/FrameScrollContainer.gd @@ -1,28 +1,28 @@ extends Container -const PADDING = 1 +const PADDING := 1 -export var h_scroll_bar_node_path: NodePath -onready var h_scroll_bar: HScrollBar = get_node_or_null(h_scroll_bar_node_path) +@export var h_scroll_bar_node_path: NodePath +@onready var h_scroll_bar: HScrollBar = get_node_or_null(h_scroll_bar_node_path) func _ready(): - rect_clip_content = true - connect("sort_children", self, "_on_sort_children") + clip_contents = true + sort_children.connect(_on_sort_children) if is_instance_valid(h_scroll_bar): - h_scroll_bar.connect("resized", self, "_update_scroll") - h_scroll_bar.connect("value_changed", self, "_on_scroll_bar_value_changed") + h_scroll_bar.resized.connect(_update_scroll) + h_scroll_bar.value_changed.connect(_on_scroll_bar_value_changed) func _gui_input(event: InputEvent) -> void: if get_child_count(): - var vertical_scroll: bool = get_child(0).rect_size.y >= rect_size.y - if event is InputEventMouseButton and (event.shift or not vertical_scroll): + var vertical_scroll: bool = get_child(0).size.y >= size.y + if event is InputEventMouseButton and (event.shift_pressed or not vertical_scroll): if is_instance_valid(h_scroll_bar): - if event.button_index == BUTTON_WHEEL_UP: + if event.button_index == MOUSE_BUTTON_WHEEL_UP: h_scroll_bar.value -= Global.animation_timeline.cel_size / 2 + 2 accept_event() - elif event.button_index == BUTTON_WHEEL_DOWN: + elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN: h_scroll_bar.value += Global.animation_timeline.cel_size / 2 + 2 accept_event() @@ -30,10 +30,10 @@ func _gui_input(event: InputEvent) -> void: func _update_scroll() -> void: if get_child_count(): if is_instance_valid(h_scroll_bar): - h_scroll_bar.max_value = get_child(0).rect_size.x - h_scroll_bar.page = rect_size.x + h_scroll_bar.max_value = get_child(0).size.x + h_scroll_bar.page = size.x h_scroll_bar.visible = h_scroll_bar.page < h_scroll_bar.max_value - get_child(0).rect_position.x = -h_scroll_bar.value + PADDING + get_child(0).position.x = -h_scroll_bar.value + PADDING func ensure_control_visible(control: Control): @@ -42,8 +42,8 @@ func ensure_control_visible(control: Control): # Based on Godot's implementation in ScrollContainer var global_rect := get_global_rect() var other_rect := control.get_global_rect() - var diff: float = max( - min(other_rect.position.x, global_rect.position.x), + var diff := maxf( + minf(other_rect.position.x, global_rect.position.x), other_rect.position.x + other_rect.size.x - global_rect.size.x ) h_scroll_bar.value += diff - global_rect.position.x @@ -51,7 +51,7 @@ func ensure_control_visible(control: Control): func _on_sort_children() -> void: if get_child_count(): - get_child(0).rect_size = get_child(0).get_combined_minimum_size() + get_child(0).size = get_child(0).get_combined_minimum_size() _update_scroll() diff --git a/src/UI/Timeline/FrameTagDialog.gd b/src/UI/Timeline/FrameTagDialog.gd index b4bfc24b275..2b90e218bc7 100644 --- a/src/UI/Timeline/FrameTagDialog.gd +++ b/src/UI/Timeline/FrameTagDialog.gd @@ -4,9 +4,9 @@ var current_tag_id := 0 var tag_vboxes := [] var delete_tag_button: Button -onready var main_vbox_cont: VBoxContainer = $VBoxContainer/ScrollContainer/VBoxTagContainer -onready var add_tag_button: Button = $VBoxContainer/ScrollContainer/VBoxTagContainer/AddTag -onready var options_dialog = $TagOptions +@onready var main_vbox_cont: VBoxContainer = $VBoxContainer/ScrollContainer/VBoxTagContainer +@onready var add_tag_button: Button = $VBoxContainer/ScrollContainer/VBoxTagContainer/AddTag +@onready var options_dialog = $TagOptions func _ready() -> void: @@ -33,7 +33,7 @@ func _on_FrameTagDialog_about_to_show() -> void: var edit_button := Button.new() edit_button.text = "Edit" edit_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND - edit_button.connect("pressed", self, "_on_EditButton_pressed", [i, edit_button]) + edit_button.pressed.connect(_on_EditButton_pressed.bind(i, edit_button)) hbox_cont.add_child(edit_button) vbox_cont.add_child(hbox_cont) @@ -43,7 +43,7 @@ func _on_FrameTagDialog_about_to_show() -> void: vbox_cont.add_child(name_label) var hsep := HSeparator.new() - hsep.size_flags_horizontal = SIZE_EXPAND_FILL + hsep.size_flags_horizontal = Control.SIZE_EXPAND_FILL vbox_cont.add_child(hsep) main_vbox_cont.add_child(vbox_cont) @@ -55,16 +55,17 @@ func _on_FrameTagDialog_about_to_show() -> void: main_vbox_cont.move_child(add_tag_button, main_vbox_cont.get_child_count() - 1) -func _on_FrameTagDialog_popup_hide() -> void: - Global.dialog_open(false) +func _on_FrameTagDialog_visibility_changed() -> void: + if not visible: + Global.dialog_open(false) func _on_AddTag_pressed() -> void: - var x_pos = add_tag_button.rect_global_position.x - var y_pos = add_tag_button.rect_global_position.y + 2 * add_tag_button.rect_size.y - options_dialog.popup(Rect2(Vector2(x_pos, y_pos), options_dialog.rect_size)) + var x_pos := add_tag_button.global_position.x + var y_pos := add_tag_button.global_position.y + 2 * add_tag_button.size.y + options_dialog.popup(Rect2i(position + Vector2i(x_pos, y_pos), options_dialog.size)) current_tag_id = Global.current_project.animation_tags.size() - # Determine tag values (Array sort method)... + # Determine tag values (array sort method) var frames := [] for cel in Global.current_project.selected_cels: frames.append(cel[0]) @@ -78,9 +79,9 @@ func _on_AddTag_pressed() -> void: func _on_EditButton_pressed(_tag_id: int, edit_button: Button) -> void: - var x_pos = edit_button.rect_global_position.x - var y_pos = edit_button.rect_global_position.y + 2 * edit_button.rect_size.y - options_dialog.popup(Rect2(Vector2(x_pos, y_pos), options_dialog.rect_size)) + var x_pos = edit_button.global_position.x + var y_pos = edit_button.global_position.y + 2 * edit_button.size.y + options_dialog.popup(Rect2i(position + Vector2i(x_pos, y_pos), options_dialog.size)) current_tag_id = _tag_id var animation_tag: AnimationTag = Global.current_project.animation_tags[_tag_id] options_dialog.get_node("GridContainer/NameLineEdit").text = animation_tag.name @@ -127,8 +128,8 @@ func _on_TagOptions_confirmed() -> void: # Handle Undo/Redo Global.current_project.undos += 1 Global.current_project.undo_redo.create_action("Modify Frame Tag") - Global.current_project.undo_redo.add_do_method(Global, "general_redo") - Global.current_project.undo_redo.add_undo_method(Global, "general_undo") + Global.current_project.undo_redo.add_do_method(Global.general_redo) + Global.current_project.undo_redo.add_undo_method(Global.general_undo) Global.current_project.undo_redo.add_do_property( Global.current_project, "animation_tags", new_animation_tags ) @@ -142,12 +143,12 @@ func _on_TagOptions_confirmed() -> void: func _on_TagOptions_custom_action(action: String) -> void: if action == "delete_tag": var new_animation_tags := Global.current_project.animation_tags.duplicate() - new_animation_tags.remove(current_tag_id) + new_animation_tags.remove_at(current_tag_id) # Handle Undo/Redo Global.current_project.undos += 1 Global.current_project.undo_redo.create_action("Delete Frame Tag") - Global.current_project.undo_redo.add_do_method(Global, "general_redo") - Global.current_project.undo_redo.add_undo_method(Global, "general_undo") + Global.current_project.undo_redo.add_do_method(Global.general_redo) + Global.current_project.undo_redo.add_undo_method(Global.general_undo) Global.current_project.undo_redo.add_do_property( Global.current_project, "animation_tags", new_animation_tags ) @@ -160,7 +161,7 @@ func _on_TagOptions_custom_action(action: String) -> void: _on_FrameTagDialog_about_to_show() -func _on_TagOptions_popup_hide() -> void: +func _on_TagOptions_visibility_changed() -> void: if delete_tag_button: delete_tag_button.visible = false diff --git a/src/UI/Timeline/FrameTagDialog.tscn b/src/UI/Timeline/FrameTagDialog.tscn index 9a9221278f4..1db571e90c5 100644 --- a/src/UI/Timeline/FrameTagDialog.tscn +++ b/src/UI/Timeline/FrameTagDialog.tscn @@ -1,169 +1,122 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://c6je8lgr850wf"] -[ext_resource path="res://src/UI/Timeline/FrameTagDialog.gd" type="Script" id=1] -[ext_resource path="res://assets/graphics/timeline/new_frame.png" type="Texture" id=2] +[ext_resource type="Script" path="res://src/UI/Timeline/FrameTagDialog.gd" id="1"] +[ext_resource type="Texture2D" uid="uid://d1urikaf1lxwl" path="res://assets/graphics/timeline/new_frame.png" id="2"] [node name="FrameTagDialog" type="AcceptDialog"] -margin_right = 83.0 -margin_bottom = 58.0 -rect_min_size = Vector2( 400, 200 ) -window_title = "Frame Tag Properties" -resizable = true -script = ExtResource( 1 ) +title = "Frame Tag Properties" +size = Vector2i(413, 300) +exclusive = false +script = ExtResource("1") [node name="VBoxContainer" type="VBoxContainer" parent="."] +custom_minimum_size = Vector2(0, 100) +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_left = 8.0 -margin_top = 8.0 -margin_right = -8.0 -margin_bottom = -36.0 -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = 8.0 +offset_top = 8.0 +offset_right = -8.0 +offset_bottom = -49.0 [node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"] -margin_right = 384.0 -margin_bottom = 128.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -__meta__ = { -"_edit_use_anchors_": false -} [node name="VBoxTagContainer" type="VBoxContainer" parent="VBoxContainer/ScrollContainer"] -margin_right = 384.0 -margin_bottom = 28.0 +layout_mode = 2 size_flags_horizontal = 3 -__meta__ = { -"_edit_use_anchors_": false -} [node name="HSeparator" type="HSeparator" parent="VBoxContainer/ScrollContainer/VBoxTagContainer"] -margin_right = 384.0 -margin_bottom = 4.0 +layout_mode = 2 size_flags_horizontal = 3 -__meta__ = { -"_edit_use_anchors_": false -} [node name="AddTag" type="Button" parent="VBoxContainer/ScrollContainer/VBoxTagContainer" groups=["UIButtons"]] -margin_top = 8.0 -margin_right = 20.0 -margin_bottom = 28.0 -rect_min_size = Vector2( 20, 0 ) -hint_tooltip = "Add a new frame tag" -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 0 +tooltip_text = "Add a new frame tag" +mouse_default_cursor_shape = 2 [node name="TextureRect" type="TextureRect" parent="VBoxContainer/ScrollContainer/VBoxTagContainer/AddTag"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -6.0 -margin_top = -6.0 -margin_right = 6.0 -margin_bottom = 6.0 -texture = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} +offset_left = -6.0 +offset_top = -6.0 +offset_right = 6.0 +offset_bottom = 6.0 +texture = ExtResource("2") [node name="PlayOnlyTags" type="CheckBox" parent="VBoxContainer"] -margin_top = 132.0 -margin_right = 333.0 -margin_bottom = 156.0 -hint_tooltip = "If it's selected, the animation plays only on the frames that have the same tag. +layout_mode = 2 +size_flags_horizontal = 0 +tooltip_text = "If it's selected, the animation plays only on the frames that have the same tag. If it's not, the animation will play for all frames, ignoring tags." mouse_default_cursor_shape = 2 -size_flags_horizontal = 0 -pressed = true text = "Animation plays only on frames of the same tag" [node name="TagOptions" type="ConfirmationDialog" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 392.0 -margin_bottom = 164.0 +size = Vector2i(303, 127) +exclusive = false [node name="GridContainer" type="GridContainer" parent="TagOptions"] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 376.0 -margin_bottom = 120.0 -custom_constants/vseparation = 8 -custom_constants/hseparation = 8 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 295.0 +offset_bottom = 78.0 +theme_override_constants/h_separation = 8 +theme_override_constants/v_separation = 8 columns = 4 -__meta__ = { -"_edit_use_anchors_": false -} [node name="NameLabel" type="Label" parent="TagOptions/GridContainer"] -margin_top = 5.0 -margin_right = 42.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Name:" [node name="NameLineEdit" type="LineEdit" parent="TagOptions/GridContainer"] -margin_left = 50.0 -margin_right = 124.0 -margin_bottom = 24.0 +layout_mode = 2 caret_blink = true -caret_blink_speed = 0.5 +caret_blink_interval = 0.5 [node name="ColorLabel" type="Label" parent="TagOptions/GridContainer"] -margin_left = 132.0 -margin_top = 5.0 -margin_right = 169.0 -margin_bottom = 19.0 +layout_mode = 2 text = "Color:" [node name="ColorPickerButton" type="ColorPickerButton" parent="TagOptions/GridContainer"] -margin_left = 177.0 -margin_right = 251.0 -margin_bottom = 24.0 +layout_mode = 2 mouse_default_cursor_shape = 2 -color = Color( 1, 0, 0, 1 ) +color = Color(1, 0, 0, 1) [node name="FromLabel" type="Label" parent="TagOptions/GridContainer"] -margin_top = 37.0 -margin_right = 42.0 -margin_bottom = 51.0 +layout_mode = 2 text = "From:" [node name="FromSpinBox" type="SpinBox" parent="TagOptions/GridContainer"] -margin_left = 50.0 -margin_top = 32.0 -margin_right = 124.0 -margin_bottom = 56.0 +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = 1.0 value = 1.0 allow_greater = true [node name="ToLabel" type="Label" parent="TagOptions/GridContainer"] -margin_left = 132.0 -margin_top = 37.0 -margin_right = 169.0 -margin_bottom = 51.0 +layout_mode = 2 text = "To:" [node name="ToSpinBox" type="SpinBox" parent="TagOptions/GridContainer"] -margin_left = 177.0 -margin_top = 32.0 -margin_right = 251.0 -margin_bottom = 56.0 +layout_mode = 2 mouse_default_cursor_shape = 2 min_value = 1.0 value = 1.0 allow_greater = true -[connection signal="about_to_show" from="." to="." method="_on_FrameTagDialog_about_to_show"] -[connection signal="popup_hide" from="." to="." method="_on_FrameTagDialog_popup_hide"] +[connection signal="about_to_popup" from="." to="." method="_on_FrameTagDialog_about_to_show"] +[connection signal="visibility_changed" from="." to="." method="_on_FrameTagDialog_visibility_changed"] [connection signal="pressed" from="VBoxContainer/ScrollContainer/VBoxTagContainer/AddTag" to="." method="_on_AddTag_pressed"] [connection signal="toggled" from="VBoxContainer/PlayOnlyTags" to="." method="_on_PlayOnlyTags_toggled"] [connection signal="confirmed" from="TagOptions" to="." method="_on_TagOptions_confirmed"] [connection signal="custom_action" from="TagOptions" to="." method="_on_TagOptions_custom_action"] -[connection signal="popup_hide" from="TagOptions" to="." method="_on_TagOptions_popup_hide"] +[connection signal="visibility_changed" from="TagOptions" to="." method="_on_TagOptions_visibility_changed"] diff --git a/src/UI/Timeline/GroupCelButton.tscn b/src/UI/Timeline/GroupCelButton.tscn index 07476c0099e..fb3267a1280 100644 --- a/src/UI/Timeline/GroupCelButton.tscn +++ b/src/UI/Timeline/GroupCelButton.tscn @@ -1,10 +1,10 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://b5qw4utq8u88h"] -[ext_resource path="res://src/UI/Timeline/BaseCelButton.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Timeline/CelButton.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://byhnvhs6av108" path="res://src/UI/Timeline/BaseCelButton.tscn" id="1"] +[ext_resource type="Script" path="res://src/UI/Timeline/CelButton.gd" id="2"] -[node name="GroupCelButton" instance=ExtResource( 1 )] -script = ExtResource( 2 ) +[node name="GroupCelButton" instance=ExtResource("1")] +script = ExtResource("2") [node name="TransparentChecker" parent="CelTexture" index="0"] visible = false diff --git a/src/UI/Timeline/GroupLayerButton.tscn b/src/UI/Timeline/GroupLayerButton.tscn index c1464f47007..f01d8863699 100644 --- a/src/UI/Timeline/GroupLayerButton.tscn +++ b/src/UI/Timeline/GroupLayerButton.tscn @@ -1,10 +1,44 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://j2uq83bsi4si"] -[ext_resource path="res://src/UI/Timeline/BaseLayerButton.tscn" type="PackedScene" id=1] -[ext_resource path="res://assets/graphics/layers/group_expanded.png" type="Texture" id=4] +[ext_resource type="PackedScene" uid="uid://bai814sqvk68f" path="res://src/UI/Timeline/BaseLayerButton.tscn" id="1"] +[ext_resource type="Texture2D" uid="uid://dndlglvqc7v6a" path="res://assets/graphics/layers/group_expanded.png" id="4"] -[node name="GroupLayerButton" instance=ExtResource( 1 )] +[node name="GroupLayerButton" instance=ExtResource("1")] hide_expand_button = false +[node name="HBoxContainer" parent="." index="0"] +layout_mode = 1 +anchors_preset = 15 +grow_horizontal = 2 +grow_vertical = 2 + [node name="TextureRect" parent="HBoxContainer/LayerButtons/ExpandButton" index="0"] -texture = ExtResource( 4 ) +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_left = 0.0 +offset_top = 0.0 +offset_right = 22.0 +offset_bottom = 22.0 +texture = ExtResource("4") + +[node name="TextureRect" parent="HBoxContainer/LayerButtons/VisibilityButton" index="0"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_left = 0.0 +offset_top = 0.0 +offset_right = 22.0 +offset_bottom = 22.0 + +[node name="TextureRect" parent="HBoxContainer/LayerButtons/LockButton" index="0"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_left = 0.0 +offset_top = 0.0 +offset_right = 22.0 +offset_bottom = 22.0 diff --git a/src/UI/Timeline/LayerButton.gd b/src/UI/Timeline/LayerButton.gd index d681ff8b62b..6c9a2e8fd56 100644 --- a/src/UI/Timeline/LayerButton.gd +++ b/src/UI/Timeline/LayerButton.gd @@ -3,35 +3,35 @@ extends Button const HIERARCHY_DEPTH_PIXEL_SHIFT = 8 -export var hide_expand_button := true +@export var hide_expand_button := true var layer := 0 -onready var expand_button: BaseButton = find_node("ExpandButton") -onready var visibility_button: BaseButton = find_node("VisibilityButton") -onready var lock_button: BaseButton = find_node("LockButton") -onready var label: Label = find_node("Label") -onready var line_edit: LineEdit = find_node("LineEdit") -onready var hierarchy_spacer: Control = find_node("HierarchySpacer") -onready var linked_button: BaseButton = find_node("LinkButton") +@onready var expand_button: BaseButton = find_child("ExpandButton") +@onready var visibility_button: BaseButton = find_child("VisibilityButton") +@onready var lock_button: BaseButton = find_child("LockButton") +@onready var label: Label = find_child("Label") +@onready var line_edit: LineEdit = find_child("LineEdit") +@onready var hierarchy_spacer: Control = find_child("HierarchySpacer") +@onready var linked_button: BaseButton = find_child("LinkButton") func _ready() -> void: - rect_min_size.y = Global.animation_timeline.cel_size + custom_minimum_size.y = Global.animation_timeline.cel_size label.text = Global.current_project.layers[layer].name line_edit.text = Global.current_project.layers[layer].name - var layer_buttons = find_node("LayerButtons") + var layer_buttons = find_child("LayerButtons") for child in layer_buttons.get_children(): var texture = child.get_child(0) texture.modulate = Global.modulate_icon_color # Visualize how deep into the hierarchy the layer is - var hierarchy_depth: int = Global.current_project.layers[layer].get_hierarchy_depth() - hierarchy_spacer.rect_min_size.x = hierarchy_depth * HIERARCHY_DEPTH_PIXEL_SHIFT + var hierarchy_depth := Global.current_project.layers[layer].get_hierarchy_depth() + hierarchy_spacer.custom_minimum_size.x = hierarchy_depth * HIERARCHY_DEPTH_PIXEL_SHIFT - if Global.control.theme.get_color("font_color", "Button").v > 0.5: # Light text is dark theme + if Global.control.theme.get_color("font_color", "Button").v > 0.5: # Light3D text is dark theme self_modulate.v = 1 + hierarchy_depth * 0.4 else: # Dark text should be light theme self_modulate.v = 1 - hierarchy_depth * 0.075 @@ -74,44 +74,40 @@ func update_buttons() -> void: lock_button.modulate.a = 0.33 -# When pressing a button, change the appearance of other layers (ie: expand or visible) +## When pressing a button, change the appearance of other layers (ie: expand or visible) func _update_buttons_all_layers() -> void: for layer_button in Global.layer_vbox.get_children(): layer_button.update_buttons() - var expanded = Global.current_project.layers[layer_button.layer].is_expanded_in_hierarchy() + var expanded := Global.current_project.layers[layer_button.layer].is_expanded_in_hierarchy() layer_button.visible = expanded Global.cel_vbox.get_child(layer_button.get_index()).visible = expanded func _draw() -> void: - if hierarchy_spacer.rect_size.x > 0.1: + if hierarchy_spacer.size.x > 0.1: var color := Color(1, 1, 1, 0.33) - color.v = round(Global.control.theme.get_color("font_color", "Button").v) - var x = ( - hierarchy_spacer.rect_global_position.x - - rect_global_position.x - + hierarchy_spacer.rect_size.x - ) - draw_line(Vector2(x, 0), Vector2(x, rect_size.y), color) + color.v = roundf(Global.control.theme.get_color("font_color", "Button").v) + var x := hierarchy_spacer.global_position.x - global_position.x + hierarchy_spacer.size.x + draw_line(Vector2(x, 0), Vector2(x, size.y), color) func _input(event: InputEvent) -> void: if ( (event.is_action_released("ui_accept") or event.is_action_released("ui_cancel")) and line_edit.visible - and event.scancode != KEY_SPACE + and event.keycode != KEY_SPACE ): _save_layer_name(line_edit.text) func _on_LayerContainer_gui_input(event: InputEvent) -> void: - var project = Global.current_project + var project := Global.current_project - if event is InputEventMouseButton and event.button_index == BUTTON_LEFT: + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: Global.canvas.selection.transform_content_confirm() - var prev_curr_layer: int = project.current_layer + var prev_curr_layer := project.current_layer if Input.is_action_pressed("shift"): - var layer_diff_sign = sign(layer - prev_curr_layer) + var layer_diff_sign := signi(layer - prev_curr_layer) if layer_diff_sign == 0: layer_diff_sign = 1 for i in range(0, project.frames.size()): @@ -129,7 +125,7 @@ func _on_LayerContainer_gui_input(event: InputEvent) -> void: else: # If the button is pressed without Shift or Control _select_current_layer() - if event.doubleclick: + if event.double_click: label.visible = false line_edit.visible = true line_edit.editable = true @@ -156,7 +152,7 @@ func _on_ExpandButton_pressed() -> void: func _on_VisibilityButton_pressed() -> void: Global.canvas.selection.transform_content_confirm() Global.current_project.layers[layer].visible = !Global.current_project.layers[layer].visible - Global.canvas.update() + Global.canvas.queue_redraw() if Global.select_layer_on_button_click: _select_current_layer() _update_buttons_all_layers() @@ -172,7 +168,9 @@ func _on_LockButton_pressed() -> void: func _on_LinkButton_pressed() -> void: Global.canvas.selection.transform_content_confirm() - var layer_class: PixelLayer = Global.current_project.layers[layer] + var layer_class := Global.current_project.layers[layer] + if not layer_class is PixelLayer: + return layer_class.new_cels_linked = !layer_class.new_cels_linked update_buttons() if Global.select_layer_on_button_click: @@ -188,7 +186,7 @@ func _select_current_layer() -> void: Global.current_project.change_cel(-1, layer) -func get_drag_data(_position: Vector2) -> Array: +func _get_drag_data(_position: Vector2) -> Variant: var layers := range( layer - Global.current_project.layers[layer].get_child_count(true), layer + 1 ) @@ -196,7 +194,7 @@ func get_drag_data(_position: Vector2) -> Array: var box := VBoxContainer.new() for i in layers.size(): var button := Button.new() - button.rect_min_size = rect_size + button.custom_minimum_size = size button.theme = Global.control.theme button.text = Global.current_project.layers[layers[-1 - i]].name box.add_child(button) @@ -205,7 +203,7 @@ func get_drag_data(_position: Vector2) -> Array: return ["Layer", layer] -func can_drop_data(_pos: Vector2, data) -> bool: +func _can_drop_data(_pos: Vector2, data) -> bool: if typeof(data) != TYPE_ARRAY: Global.animation_timeline.drag_highlight.visible = false return false @@ -220,16 +218,16 @@ func can_drop_data(_pos: Vector2, data) -> bool: return false var region: Rect2 - var depth: int = Global.current_project.layers[layer].get_hierarchy_depth() + var depth := Global.current_project.layers[layer].get_hierarchy_depth() if Input.is_action_pressed("ctrl"): # Swap layers - if drag_layer.is_a_parent_of(curr_layer) or curr_layer.is_a_parent_of(drag_layer): + if drag_layer.is_ancestor_of(curr_layer) or curr_layer.is_ancestor_of(drag_layer): Global.animation_timeline.drag_highlight.visible = false return false region = get_global_rect() else: # Shift layers - if drag_layer.is_a_parent_of(curr_layer): + if drag_layer.is_ancestor_of(curr_layer): Global.animation_timeline.drag_highlight.visible = false return false # If accepted as a child, is it in the center region? @@ -249,15 +247,15 @@ func can_drop_data(_pos: Vector2, data) -> bool: # Shift drawn region to the right a bit for hierarchy depth visualization: region.position.x += depth * HIERARCHY_DEPTH_PIXEL_SHIFT region.size.x -= depth * HIERARCHY_DEPTH_PIXEL_SHIFT - Global.animation_timeline.drag_highlight.rect_global_position = region.position - Global.animation_timeline.drag_highlight.rect_size = region.size + Global.animation_timeline.drag_highlight.global_position = region.position + Global.animation_timeline.drag_highlight.size = region.size Global.animation_timeline.drag_highlight.visible = true return true -func drop_data(_pos: Vector2, data) -> void: +func _drop_data(_pos: Vector2, data) -> void: var drop_layer: int = data[1] - var project: Project = Global.current_project + var project := Global.current_project project.undo_redo.create_action("Change Layer Order") var layers: Array = project.layers # This shouldn't be modified directly @@ -295,12 +293,12 @@ func drop_data(_pos: Vector2, data) -> void: a.to_parents[-1] = drop_from_parents[-1] b.to_parents[-1] = a_from_parents[-1] - project.undo_redo.add_do_method(project, "swap_layers", a, b) + project.undo_redo.add_do_method(project.swap_layers.bind(a, b)) project.undo_redo.add_undo_method( - project, - "swap_layers", - {"from": a.to, "to": a.from, "to_parents": a_from_parents}, - {"from": b.to, "to": drop_from_indices, "to_parents": drop_from_parents} + project.swap_layers.bind( + {"from": a.to, "to": a.from, "to_parents": a_from_parents}, + {"from": b.to, "to": drop_from_indices, "to_parents": drop_from_parents} + ) ) else: # Move layers @@ -324,7 +322,7 @@ func drop_data(_pos: Vector2, data) -> void: if layers[layer].has_children(): to_index = layers[layer].get_children(true)[0].index - if layers[layer].is_a_parent_of(layers[drop_layer]): + if layers[layer].is_ancestor_of(layers[drop_layer]): to_index += drop_from_indices.size() else: to_index = layer @@ -339,18 +337,18 @@ func drop_data(_pos: Vector2, data) -> void: to_parents[-1] = to_parent project.undo_redo.add_do_method( - project, "move_layers", drop_from_indices, drop_to_indices, to_parents + project.move_layers.bind(drop_from_indices, drop_to_indices, to_parents) ) project.undo_redo.add_undo_method( - project, "move_layers", drop_to_indices, drop_from_indices, drop_from_parents + project.move_layers.bind(drop_to_indices, drop_from_indices, drop_from_parents) ) if project.current_layer == drop_layer: - project.undo_redo.add_do_method(project, "change_cel", -1, layer) + project.undo_redo.add_do_method(project.change_cel.bind(-1, layer)) else: - project.undo_redo.add_do_method(project, "change_cel", -1, project.current_layer) - project.undo_redo.add_undo_method(project, "change_cel", -1, project.current_layer) - project.undo_redo.add_undo_method(Global, "undo_or_redo", true) - project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_do_method(project.change_cel.bind(-1, project.current_layer)) + project.undo_redo.add_undo_method(project.change_cel.bind(-1, project.current_layer)) + project.undo_redo.add_undo_method(Global.undo_or_redo.bind(true)) + project.undo_redo.add_do_method(Global.undo_or_redo.bind(false)) project.undo_redo.commit_action() diff --git a/src/UI/Timeline/PasteTagPopup.gd b/src/UI/Timeline/PasteTagPopup.gd index c5984650962..9d82972384d 100644 --- a/src/UI/Timeline/PasteTagPopup.gd +++ b/src/UI/Timeline/PasteTagPopup.gd @@ -2,9 +2,9 @@ extends PopupMenu func _ready() -> void: - var tag_container: Control = Global.animation_timeline.find_node("TagContainer") - connect("id_pressed", self, "_on_TagList_id_pressed") - tag_container.connect("gui_input", self, "_on_TagContainer_gui_input") + var tag_container: Control = Global.animation_timeline.find_child("TagContainer") + id_pressed.connect(_on_TagList_id_pressed) + tag_container.gui_input.connect(_on_TagContainer_gui_input) func _on_TagContainer_gui_input(event: InputEvent) -> void: @@ -12,22 +12,22 @@ func _on_TagContainer_gui_input(event: InputEvent) -> void: return if Input.is_action_just_released("right_mouse"): clear() - if Global.current_project.animation_tags.empty(): + if Global.current_project.animation_tags.is_empty(): return add_separator("Paste content from tag:") for tag in Global.current_project.animation_tags: - var img = Image.new() - img.create(5, 5, true, Image.FORMAT_RGBA8) + var img := Image.create(5, 5, true, Image.FORMAT_RGBA8) img.fill(tag.color) - var tex = ImageTexture.new() - tex.create_from_image(img) - var title = tag.name - if title == "": - title = "(Untitled)" - add_icon_item(tex, title) - var frame_idx = Global.current_project.current_frame + 2 + var tex := ImageTexture.create_from_image(img) + var tag_name := tag.name + if tag_name == "": + tag_name = "(Untitled)" + add_icon_item(tex, tag_name) + var frame_idx := Global.current_project.current_frame + 2 add_separator(str("The pasted frames will start at (Frame ", frame_idx, ")")) - popup(Rect2(get_global_mouse_position(), Vector2.ONE)) + + +# popup(Rect2(get_global_mouse_position(), Vector2.ONE)) func _on_TagList_id_pressed(id: int) -> void: diff --git a/src/UI/Timeline/PixelCelButton.tscn b/src/UI/Timeline/PixelCelButton.tscn index a65e032714e..947f31686ed 100644 --- a/src/UI/Timeline/PixelCelButton.tscn +++ b/src/UI/Timeline/PixelCelButton.tscn @@ -1,25 +1,25 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://dw7ci3uixjuev"] -[ext_resource path="res://src/UI/Timeline/BaseCelButton.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Timeline/CelButton.gd" type="Script" id=2] +[ext_resource type="PackedScene" uid="uid://byhnvhs6av108" path="res://src/UI/Timeline/BaseCelButton.tscn" id="1"] +[ext_resource type="Script" path="res://src/UI/Timeline/CelButton.gd" id="2"] -[node name="PixelCelButton" instance=ExtResource( 1 )] -rect_pivot_offset = Vector2( -18, 6 ) -script = ExtResource( 2 ) +[node name="PixelCelButton" instance=ExtResource("1")] +pivot_offset = Vector2(-18, 6) +script = ExtResource("2") [node name="PopupMenu" type="PopupMenu" parent="." index="1"] -margin_right = 20.0 -margin_bottom = 20.0 -mouse_default_cursor_shape = 2 -items = [ "Delete", null, 0, false, false, -1, 0, null, "", false, "Link Cels to", null, 0, false, false, -1, 0, null, "", false, "Unlink Cels", null, 0, false, false, 2, 0, null, "", false ] -__meta__ = { -"_edit_use_anchors_": false -} +item_count = 3 +item_0/text = "Delete" +item_0/id = -1 +item_1/text = "Link Cels to" +item_1/id = -1 +item_2/text = "Unlink Cels" +item_2/id = 2 [node name="LinkedIndicator" type="Polygon2D" parent="." index="2"] -color = Color( 0, 1, 0, 1 ) -invert_enable = true +color = Color(0, 1, 0, 1) +invert_enabled = true invert_border = 1.0 -polygon = PoolVector2Array( 0, 0, 36, 0, 36, 36, 0, 36 ) +polygon = PackedVector2Array(0, 0, 36, 0, 36, 36, 0, 36) [connection signal="id_pressed" from="PopupMenu" to="." method="_on_PopupMenu_id_pressed"] diff --git a/src/UI/Timeline/PixelLayerButton.tscn b/src/UI/Timeline/PixelLayerButton.tscn index 17391b151d5..d950a36eec3 100644 --- a/src/UI/Timeline/PixelLayerButton.tscn +++ b/src/UI/Timeline/PixelLayerButton.tscn @@ -1,37 +1,65 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://b7huapiokn3h4"] -[ext_resource path="res://src/UI/Timeline/BaseLayerButton.tscn" type="PackedScene" id=1] -[ext_resource path="res://assets/graphics/layers/unlinked_layer.png" type="Texture" id=4] +[ext_resource type="PackedScene" uid="uid://bai814sqvk68f" path="res://src/UI/Timeline/BaseLayerButton.tscn" id="1"] +[ext_resource type="Texture2D" uid="uid://cofw1x6chh4i" path="res://assets/graphics/layers/unlinked_layer.png" id="4"] -[node name="PixelLayerButton" instance=ExtResource( 1 )] +[node name="PixelLayerButton" instance=ExtResource("1")] -[node name="LayerButtons" parent="HBoxContainer" index="1"] -margin_right = 122.0 +[node name="ExpandButton" parent="HBoxContainer/LayerButtons" index="0"] +visible = false -[node name="LinkButton" type="ToolButton" parent="HBoxContainer/LayerButtons" index="3" groups=["UIButtons"]] -margin_left = 96.0 -margin_top = 7.0 -margin_right = 118.0 -margin_bottom = 29.0 -rect_min_size = Vector2( 22, 22 ) -hint_tooltip = "Enable/disable automatic linking of new cels when creating new frames +[node name="TextureRect" parent="HBoxContainer/LayerButtons/ExpandButton" index="0"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_left = 0.0 +offset_top = 0.0 +offset_right = 22.0 +offset_bottom = 22.0 -Linked cels share content across multiple frames" -mouse_default_cursor_shape = 2 +[node name="TextureRect" parent="HBoxContainer/LayerButtons/VisibilityButton" index="0"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_left = 0.0 +offset_top = 0.0 +offset_right = 22.0 +offset_bottom = 22.0 + +[node name="TextureRect" parent="HBoxContainer/LayerButtons/LockButton" index="0"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_left = 0.0 +offset_top = 0.0 +offset_right = 22.0 +offset_bottom = 22.0 + +[node name="LinkButton" type="Button" parent="HBoxContainer/LayerButtons" index="3" groups=["UIButtons"]] +custom_minimum_size = Vector2(22, 22) +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 4 +tooltip_text = "Enable/disable automatic linking of new cels when creating new frames + +Linked cels share content across multiple frames" +mouse_default_cursor_shape = 2 [node name="TextureRect" type="TextureRect" parent="HBoxContainer/LayerButtons/LinkButton" index="0"] +layout_mode = 0 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -margin_left = -11.0 -margin_top = -11.0 -margin_right = 11.0 -margin_bottom = 11.0 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 size_flags_horizontal = 0 size_flags_vertical = 0 -texture = ExtResource( 4 ) +texture = ExtResource("4") [connection signal="pressed" from="HBoxContainer/LayerButtons/LinkButton" to="." method="_on_LinkButton_pressed"] diff --git a/src/UI/Tools/ToolButtons.gd b/src/UI/Tools/ToolButtons.gd index f45a9c1c30c..734b62dc8c4 100644 --- a/src/UI/Tools/ToolButtons.gd +++ b/src/UI/Tools/ToolButtons.gd @@ -17,24 +17,24 @@ func _input(event: InputEvent) -> void: if InputMap.has_action("right_" + t.shortcut + "_tool"): if ( event.is_action_pressed("right_" + t.shortcut + "_tool") - and (!event.control and !event.command) + and (!event.is_command_or_control_pressed()) ): # Shortcut for right button (with Alt) - Tools.assign_tool(t.name, BUTTON_RIGHT) + Tools.assign_tool(t.name, MOUSE_BUTTON_RIGHT) return if InputMap.has_action("left_" + t.shortcut + "_tool"): if ( event.is_action_pressed("left_" + t.shortcut + "_tool") - and (!event.control and !event.command) + and (!event.is_command_or_control_pressed()) ): # Shortcut for left button - Tools.assign_tool(t.name, BUTTON_LEFT) + Tools.assign_tool(t.name, MOUSE_BUTTON_LEFT) return func _on_Tool_pressed(tool_pressed: BaseButton) -> void: var button := -1 - button = BUTTON_LEFT if Input.is_action_just_released("left_mouse") else button - button = BUTTON_RIGHT if Input.is_action_just_released("right_mouse") else button + button = MOUSE_BUTTON_LEFT if Input.is_action_just_released("left_mouse") else button + button = MOUSE_BUTTON_RIGHT if Input.is_action_just_released("right_mouse") else button if button != -1: Tools.assign_tool(tool_pressed.name, button) diff --git a/src/UI/Tools/Tools.tscn b/src/UI/Tools/Tools.tscn index 329b5a0490d..d0c812704e4 100644 --- a/src/UI/Tools/Tools.tscn +++ b/src/UI/Tools/Tools.tscn @@ -1,27 +1,21 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=2 format=3 uid="uid://byu3rtoipuvoc"] -[ext_resource path="res://src/UI/Tools/ToolButtons.gd" type="Script" id=1] +[ext_resource type="Script" path="res://src/UI/Tools/ToolButtons.gd" id="1"] [node name="Tools" type="ScrollContainer"] +custom_minimum_size = Vector2(36, 36) +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = -1242.0 -margin_bottom = -230.0 -rect_min_size = Vector2( 36, 36 ) +offset_right = -1242.0 +offset_bottom = -230.0 size_flags_horizontal = 0 size_flags_vertical = 0 [node name="PanelContainer" type="PanelContainer" parent="."] -margin_right = 38.0 -margin_bottom = 14.0 +layout_mode = 2 size_flags_horizontal = 3 -__meta__ = { -"_edit_use_anchors_": false -} [node name="ToolButtons" type="HFlowContainer" parent="PanelContainer"] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 31.0 -margin_bottom = 7.0 -script = ExtResource( 1 ) +layout_mode = 2 +script = ExtResource("1") diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd index 174beb1a473..fb71bd17f96 100644 --- a/src/UI/TopMenuContainer/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer/TopMenuContainer.gd @@ -1,4 +1,6 @@ extends Panel +# gdlint: ignore=max-line-length +const CHANGELOG_URL := "https://github.com/Orama-Interactive/Pixelorama/blob/master/CHANGELOG.md#v011---2023-06-13" var file_menu: PopupMenu var view_menu: PopupMenu @@ -12,28 +14,28 @@ var default_layout_size := layouts.size() var selected_layout := 0 var zen_mode := false -onready var ui: Container = Global.control.find_node("DockableContainer") -onready var ui_elements: Array = ui.get_children() -onready var file_menu_button := $MenuItems/FileMenu -onready var edit_menu_button := $MenuItems/EditMenu -onready var select_menu_button := $MenuItems/SelectMenu -onready var image_menu_button := $MenuItems/ImageMenu -onready var view_menu_button := $MenuItems/ViewMenu -onready var window_menu_button := $MenuItems/WindowMenu -onready var help_menu_button := $MenuItems/HelpMenu - -onready var greyscale_vision: ColorRect = ui.find_node("GreyscaleVision") -onready var new_image_dialog: ConfirmationDialog = Global.control.find_node("CreateNewImage") -onready var window_opacity_dialog: AcceptDialog = Global.control.find_node("WindowOpacityDialog") -onready var tile_mode_submenu := PopupMenu.new() -onready var snap_to_submenu := PopupMenu.new() -onready var panels_submenu := PopupMenu.new() -onready var layouts_submenu := PopupMenu.new() -onready var recent_projects_submenu := PopupMenu.new() +@onready var ui := Global.control.find_child("DockableContainer") as DockableContainer +@onready var ui_elements := ui.get_children() +@onready var file_menu_button := $MenuItems/FileMenu +@onready var edit_menu_button := $MenuItems/EditMenu +@onready var select_menu_button := $MenuItems/SelectMenu +@onready var image_menu_button := $MenuItems/ImageMenu +@onready var view_menu_button := $MenuItems/ViewMenu +@onready var window_menu_button := $MenuItems/WindowMenu +@onready var help_menu_button := $MenuItems/HelpMenu + +@onready var greyscale_vision: ColorRect = ui.find_child("GreyscaleVision") +@onready var new_image_dialog: ConfirmationDialog = Global.control.find_child("CreateNewImage") +@onready var window_opacity_dialog: AcceptDialog = Global.control.find_child("WindowOpacityDialog") +@onready var tile_mode_submenu := PopupMenu.new() +@onready var snap_to_submenu := PopupMenu.new() +@onready var panels_submenu := PopupMenu.new() +@onready var layouts_submenu := PopupMenu.new() +@onready var recent_projects_submenu := PopupMenu.new() func _ready() -> void: - var dir := Directory.new() + var dir := DirAccess.open("user://") dir.make_dir("user://layouts") _setup_file_menu() _setup_edit_menu() @@ -46,17 +48,17 @@ func _ready() -> void: func _setup_file_menu() -> void: # Order as in FileMenu enum - var file_menu_items := [ - "New...", - "Open...", - "Open last project...", - "Recent projects", - "Save...", - "Save as...", - "Export...", - "Export as...", - "Quit", - ] + var file_menu_items := { + "New...": "new_file", + "Open...": "open_file", + "Open last project...": "open_last_project", + "Recent projects": "", + "Save...": "save_file", + "Save as...": "save_file_as", + "Export...": "export_file", + "Export as...": "export_file_as", + "Quit": "quit", + } file_menu = file_menu_button.get_popup() var i := 0 for item in file_menu_items: @@ -64,18 +66,19 @@ func _setup_file_menu() -> void: _setup_recent_projects_submenu(item) else: file_menu.add_item(item, i) + _set_menu_shortcut(file_menu_items[item], file_menu, i) i += 1 - file_menu.connect("id_pressed", self, "file_menu_id_pressed") + file_menu.id_pressed.connect(file_menu_id_pressed) - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": file_menu.set_item_disabled(Global.FileMenu.OPEN_LAST_PROJECT, true) file_menu.set_item_disabled(Global.FileMenu.RECENT, true) func _setup_recent_projects_submenu(item: String) -> void: recent_projects = Global.config_cache.get_value("data", "recent_projects", []) - recent_projects_submenu.connect("id_pressed", self, "_on_recent_projects_submenu_id_pressed") + recent_projects_submenu.id_pressed.connect(_on_recent_projects_submenu_id_pressed) update_recent_projects_submenu() file_menu.add_child(recent_projects_submenu) @@ -83,52 +86,53 @@ func _setup_recent_projects_submenu(item: String) -> void: func update_recent_projects_submenu() -> void: - var reversed_recent_projects = recent_projects.duplicate() - reversed_recent_projects.invert() + var reversed_recent_projects := recent_projects.duplicate() + reversed_recent_projects.reverse() for project in reversed_recent_projects: recent_projects_submenu.add_item(project.get_file()) func _setup_edit_menu() -> void: # Order as in Global.EditMenu enum - var edit_menu_items := [ - "Undo", - "Redo", - "Copy", - "Cut", - "Paste", - "Paste in Place", - "Delete", - "New Brush", - "Preferences" - ] + var edit_menu_items := { + "Undo": "undo", + "Redo": "redo", + "Copy": "copy", + "Cut": "cut", + "Paste": "paste", + "Paste in Place": "paste_in_place", + "Delete": "delete", + "New Brush": "new_brush", + "Preferences": "preferences" + } var edit_menu: PopupMenu = edit_menu_button.get_popup() var i := 0 for item in edit_menu_items: edit_menu.add_item(item, i) + _set_menu_shortcut(edit_menu_items[item], edit_menu, i) i += 1 edit_menu.set_item_disabled(Global.EditMenu.NEW_BRUSH, true) - edit_menu.connect("id_pressed", self, "edit_menu_id_pressed") + edit_menu.id_pressed.connect(edit_menu_id_pressed) func _setup_view_menu() -> void: # Order as in Global.ViewMenu enum - var view_menu_items := [ - "Tile Mode", - "Tile Mode Offsets", - "Grayscale View", - "Mirror View", - "Show Grid", - "Show Pixel Grid", - "Show Rulers", - "Show Guides", - "Show Mouse Guides", - "Snap To", - ] + var view_menu_items := { + "Tile Mode": "", + "Tile Mode Offsets": "", + "Grayscale View": "", + "Mirror View": "mirror_view", + "Show Grid": "show_grid", + "Show Pixel Grid": "show_pixel_grid", + "Show Rulers": "show_rulers", + "Show Guides": "show_guides", + "Show Mouse Guides": "", + "Snap To": "", + } view_menu = view_menu_button.get_popup() for i in view_menu_items.size(): - var item: String = view_menu_items[i] + var item: String = view_menu_items.keys()[i] if item == "Tile Mode": _setup_tile_mode_submenu(item) elif item == "Snap To": @@ -137,10 +141,11 @@ func _setup_view_menu() -> void: view_menu.add_item(item, i) else: view_menu.add_check_item(item, i) + _set_menu_shortcut(view_menu_items[item], view_menu, i) view_menu.set_item_checked(Global.ViewMenu.SHOW_RULERS, true) view_menu.set_item_checked(Global.ViewMenu.SHOW_GUIDES, true) view_menu.hide_on_checkable_item_selection = false - view_menu.connect("id_pressed", self, "view_menu_id_pressed") + view_menu.id_pressed.connect(view_menu_id_pressed) var draw_grid: bool = Global.config_cache.get_value("view_menu", "draw_grid", Global.draw_grid) if draw_grid != Global.draw_grid: @@ -179,7 +184,7 @@ func _setup_tile_mode_submenu(item: String) -> void: tile_mode_submenu.add_radio_check_item("Tiled In Y Axis", Tiles.MODE.Y_AXIS) tile_mode_submenu.hide_on_checkable_item_selection = false - tile_mode_submenu.connect("id_pressed", self, "_tile_mode_submenu_id_pressed") + tile_mode_submenu.id_pressed.connect(_tile_mode_submenu_id_pressed) view_menu.add_child(tile_mode_submenu) view_menu.add_submenu_item(item, tile_mode_submenu.get_name()) @@ -190,21 +195,21 @@ func _setup_snap_to_submenu(item: String) -> void: snap_to_submenu.add_check_item("Snap to Rectangular Grid Center") snap_to_submenu.add_check_item("Snap to Guides") snap_to_submenu.add_check_item("Snap to Perspective Guides") - snap_to_submenu.connect("id_pressed", self, "_snap_to_submenu_id_pressed") + snap_to_submenu.id_pressed.connect(_snap_to_submenu_id_pressed) view_menu.add_child(snap_to_submenu) view_menu.add_submenu_item(item, snap_to_submenu.get_name()) func _setup_window_menu() -> void: # Order as in Global.WindowMenu enum - var window_menu_items := [ - "Window Opacity", - "Panels", - "Layouts", - "Moveable Panels", - "Zen Mode", - "Fullscreen Mode", - ] + var window_menu_items := { + "Window Opacity": "", + "Panels": "", + "Layouts": "", + "Moveable Panels": "moveable_panels", + "Zen Mode": "zen_mode", + "Fullscreen Mode": "toggle_fullscreen", + } window_menu = window_menu_button.get_popup() var i := 0 for item in window_menu_items: @@ -216,9 +221,10 @@ func _setup_window_menu() -> void: window_menu.add_item(item, i) else: window_menu.add_check_item(item, i) + _set_menu_shortcut(window_menu_items[item], window_menu, i) i += 1 window_menu.hide_on_checkable_item_selection = false - window_menu.connect("id_pressed", self, "window_menu_id_pressed") + window_menu.id_pressed.connect(window_menu_id_pressed) # Disable window opacity item if per pixel transparency is not allowed window_menu.set_item_disabled( Global.WindowMenu.WINDOW_OPACITY, @@ -234,28 +240,29 @@ func _setup_panels_submenu(item: String) -> void: var is_hidden: bool = ui.is_control_hidden(element) panels_submenu.set_item_checked(ui_elements.find(element), !is_hidden) - panels_submenu.connect("id_pressed", self, "_panels_submenu_id_pressed") + panels_submenu.id_pressed.connect(_panels_submenu_id_pressed) window_menu.add_child(panels_submenu) window_menu.add_submenu_item(item, panels_submenu.get_name()) func _setup_layouts_submenu(item: String) -> void: - var dir := Directory.new() var path := "user://layouts" - if dir.open(path) == OK: + var dir := DirAccess.open(path) + if DirAccess.get_open_error() == OK: dir.list_dir_begin() var file_name = dir.get_next() while file_name != "": if !dir.current_is_dir(): var file_name_no_tres: String = file_name.get_basename() - layouts.append([file_name_no_tres, ResourceLoader.load(path.plus_file(file_name))]) + layouts.append([file_name_no_tres, ResourceLoader.load(path.path_join(file_name))]) file_name = dir.get_next() + dir.list_dir_end() layouts_submenu.set_name("layouts_submenu") layouts_submenu.hide_on_checkable_item_selection = false populate_layouts_submenu() - layouts_submenu.connect("id_pressed", self, "_layouts_submenu_id_pressed") + layouts_submenu.id_pressed.connect(_layouts_submenu_id_pressed) window_menu.add_child(layouts_submenu) window_menu.add_submenu_item(item, layouts_submenu.get_name()) @@ -272,62 +279,80 @@ func populate_layouts_submenu() -> void: func _setup_image_menu() -> void: # Order as in Global.ImageMenu enum - var image_menu_items := [ - "Resize Canvas", - "Offset Image", - "Scale Image", - "Crop Image", - "Mirror Image", - "Rotate Image", - "Outline", - "Drop Shadow", - "Invert Colors", - "Desaturation", - "Adjust Hue/Saturation/Value", - "Posterize", - "Gradient", - "Gradient Map", - # "Shader" - ] + var image_menu_items := { + "Resize Canvas": "resize_canvas", + "Offset Image": "offset_image", + "Scale Image": "scale_image", + "Crop Image": "crop_image", + "Mirror Image": "mirror_image", + "Rotate Image": "rotate_image", + "Outline": "outline", + "Drop Shadow": "drop_shadow", + "Invert Colors": "invert_colors", + "Desaturation": "desaturation", + "Adjust Hue/Saturation/Value": "adjust_hsv", + "Posterize": "posterize", + "Gradient": "gradient", + "Gradient Map": "gradient_map", + # "Shader": "" + } var image_menu: PopupMenu = image_menu_button.get_popup() var i := 0 for item in image_menu_items: image_menu.add_item(item, i) + _set_menu_shortcut(image_menu_items[item], image_menu, i) i += 1 - image_menu.connect("id_pressed", self, "image_menu_id_pressed") + image_menu.id_pressed.connect(image_menu_id_pressed) func _setup_select_menu() -> void: # Order as in Global.SelectMenu enum - var select_menu_items := ["All", "Clear", "Invert", "Tile Mode"] + var select_menu_items := { + "All": "select_all", + "Clear": "clear_selection", + "Invert": "invert_selection", + "Tile Mode": "" + } var select_menu: PopupMenu = select_menu_button.get_popup() for i in select_menu_items.size(): - var item: String = select_menu_items[i] + var item: String = select_menu_items.keys()[i] if item == "Tile Mode": select_menu.add_check_item(item, i) else: select_menu.add_item(item, i) - select_menu.connect("id_pressed", self, "select_menu_id_pressed") + _set_menu_shortcut(select_menu_items[item], select_menu, i) + select_menu.id_pressed.connect(select_menu_id_pressed) func _setup_help_menu() -> void: # Order as in Global.HelpMenu enum - var help_menu_items := [ - "View Splash Screen", - "Online Docs", - "Issue Tracker", - "Open Logs Folder", - "Changelog", - "About Pixelorama", - ] + var help_menu_items := { + "View Splash Screen": "view_splash_screen", + "Online Docs": "open_docs", + "Issue Tracker": "issue_tracker", + "Open Logs Folder": "open_logs_folder", + "Changelog": "changelog", + "About Pixelorama": "about_pixelorama", + } var help_menu: PopupMenu = help_menu_button.get_popup() var i := 0 for item in help_menu_items: help_menu.add_item(item, i) + _set_menu_shortcut(help_menu_items[item], help_menu, i) i += 1 - help_menu.connect("id_pressed", self, "help_menu_id_pressed") + help_menu.id_pressed.connect(help_menu_id_pressed) + + +func _set_menu_shortcut(action: String, menu: PopupMenu, index: int) -> void: + if action.is_empty(): + return + var shortcut := Shortcut.new() + var event := InputEventAction.new() + event.action = action + shortcut.events.append(event) + menu.set_item_shortcut(index, shortcut) func _handle_metadata(id: int, menu_button: MenuButton) -> void: @@ -339,8 +364,8 @@ func _handle_metadata(id: int, menu_button: MenuButton) -> void: metadata.call("menu_item_clicked") -func _popup_dialog(dialog: Popup, size := Vector2.ZERO) -> void: - dialog.popup_centered(size) +func _popup_dialog(dialog: Window, dialog_size := Vector2i.ZERO) -> void: + dialog.popup_centered(dialog_size) Global.dialog_open(true) @@ -374,7 +399,7 @@ func _on_new_project_file_menu_option_pressed() -> void: func _open_project_file() -> void: - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": Html5FileExchange.load_image() else: _popup_dialog(Global.open_sprites_dialog) @@ -399,16 +424,16 @@ func _save_project_file() -> void: func _save_project_file_as() -> void: Global.dialog_open(true) - if OS.get_name() == "HTML5": + if OS.get_name() == "Web": var save_dialog: ConfirmationDialog = Global.save_sprites_html5_dialog var save_filename = save_dialog.get_node("FileNameContainer/FileNameLineEdit") save_dialog.popup_centered() save_filename.text = Global.current_project.name else: - Global.save_sprites_dialog.get_ok().text = "Save" + Global.save_sprites_dialog.get_ok_button().text = "Save" Global.save_sprites_dialog.popup_centered() - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + await get_tree().process_frame + await get_tree().process_frame Global.save_sprites_dialog.get_line_edit().text = Global.current_project.name @@ -420,8 +445,8 @@ func _export_file() -> void: func _on_recent_projects_submenu_id_pressed(id: int) -> void: - var reversed_recent_projects = recent_projects.duplicate() - reversed_recent_projects.invert() + var reversed_recent_projects := recent_projects.duplicate() + reversed_recent_projects.reverse() Global.control.load_recent_project_file(reversed_recent_projects[id]) @@ -446,7 +471,7 @@ func edit_menu_id_pressed(id: int) -> void: Global.EditMenu.NEW_BRUSH: Global.canvas.selection.new_brush() Global.EditMenu.PREFERENCES: - _popup_dialog(Global.preferences_dialog, Vector2(600, 400)) + _popup_dialog(Global.preferences_dialog) _: _handle_metadata(id, edit_menu_button) @@ -474,7 +499,7 @@ func view_menu_id_pressed(id: int) -> void: _: _handle_metadata(id, view_menu_button) - Global.canvas.update() + Global.canvas.queue_redraw() func window_menu_id_pressed(id: int) -> void: @@ -494,14 +519,14 @@ func window_menu_id_pressed(id: int) -> void: _handle_metadata(id, window_menu_button) -func _tile_mode_submenu_id_pressed(id: int) -> void: +func _tile_mode_submenu_id_pressed(id: Tiles.MODE) -> void: Global.current_project.tiles.mode = id Global.transparent_checker.fit_rect(Global.current_project.tiles.get_bounding_rect()) for i in Tiles.MODE.values(): tile_mode_submenu.set_item_checked(i, i == id) - Global.canvas.tile_mode.update() - Global.canvas.pixel_grid.update() - Global.canvas.grid.update() + Global.canvas.tile_mode.queue_redraw() + Global.canvas.pixel_grid.queue_redraw() + Global.canvas.grid.queue_redraw() Global.tile_mode_offset_dialog.change_mask() @@ -529,8 +554,8 @@ func _panels_submenu_id_pressed(id: int) -> void: panels_submenu.set_item_checked(id, !element_visible) if ui.tabs_visible == false: ui.tabs_visible = true - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + await get_tree().process_frame + await get_tree().process_frame ui.tabs_visible = false @@ -547,21 +572,21 @@ func set_layout(id: int) -> void: selected_layout = id ui.layout = layouts[id][1].clone() # Clone is needed to avoid modifying premade layouts for i in layouts.size(): - var offset: int = i + 1 + var offset := i + 1 layouts_submenu.set_item_checked(offset, offset == (id + 1)) for i in ui_elements.size(): - var is_hidden: bool = ui.is_control_hidden(ui_elements[i]) + var is_hidden := ui.is_control_hidden(ui_elements[i]) panels_submenu.set_item_checked(i, !is_hidden) if zen_mode: # Turn zen mode off - Global.control.find_node("TabsContainer").visible = true + Global.control.find_child("TabsContainer").visible = true zen_mode = false window_menu.set_item_checked(Global.WindowMenu.ZEN_MODE, false) # Hacky but without 2 idle frames it doesn't work properly. Should be replaced eventually - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + await get_tree().process_frame + await get_tree().process_frame # Call set_tabs_visible to keep tabs visible if there are 2 or more in the same panel ui.tabs_visible = ui.tabs_visible @@ -574,16 +599,15 @@ func _toggle_greyscale_view() -> void: func _toggle_mirror_view() -> void: Global.mirror_view = !Global.mirror_view - var marching_ants_outline: Sprite = Global.canvas.selection.marching_ants_outline + var marching_ants_outline: Sprite2D = Global.canvas.selection.marching_ants_outline marching_ants_outline.scale.x = -marching_ants_outline.scale.x if Global.mirror_view: marching_ants_outline.position.x = ( - marching_ants_outline.position.x - + Global.current_project.size.x + marching_ants_outline.position.x + Global.current_project.size.x ) else: Global.canvas.selection.marching_ants_outline.position.x = 0 - Global.canvas.selection.update() + Global.canvas.selection.queue_redraw() view_menu.set_item_checked(Global.ViewMenu.MIRROR_VIEW, Global.mirror_view) @@ -591,7 +615,7 @@ func _toggle_show_grid() -> void: Global.draw_grid = !Global.draw_grid view_menu.set_item_checked(Global.ViewMenu.SHOW_GRID, Global.draw_grid) if Global.canvas.grid: - Global.canvas.grid.update() + Global.canvas.grid.queue_redraw() func _toggle_show_pixel_grid() -> void: @@ -624,8 +648,8 @@ func _toggle_show_mouse_guides() -> void: view_menu.set_item_checked(Global.ViewMenu.SHOW_MOUSE_GUIDES, Global.show_mouse_guides) if Global.show_mouse_guides: if Global.canvas.mouse_guide_container: - Global.canvas.mouse_guide_container.get_child(0).update() - Global.canvas.mouse_guide_container.get_child(1).update() + Global.canvas.mouse_guide_container.get_child(0).queue_redraw() + Global.canvas.mouse_guide_container.get_child(1).queue_redraw() func _toggle_zen_mode() -> void: @@ -635,15 +659,31 @@ func _toggle_zen_mode() -> void: if !panels_submenu.is_item_checked(i): continue ui.set_control_hidden(ui_elements[i], !zen_mode) - Global.control.find_node("TabsContainer").visible = zen_mode + Global.control.find_child("TabsContainer").visible = zen_mode zen_mode = !zen_mode window_menu.set_item_checked(Global.WindowMenu.ZEN_MODE, zen_mode) func _toggle_fullscreen() -> void: - OS.window_fullscreen = !OS.window_fullscreen - window_menu.set_item_checked(Global.WindowMenu.FULLSCREEN_MODE, OS.window_fullscreen) - if OS.window_fullscreen: # If window is fullscreen then reset transparency + get_window().mode = ( + Window.MODE_EXCLUSIVE_FULLSCREEN + if (!( + (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN) + or (get_window().mode == Window.MODE_FULLSCREEN) + )) + else Window.MODE_WINDOWED + ) + window_menu.set_item_checked( + Global.WindowMenu.FULLSCREEN_MODE, + ( + (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN) + or (get_window().mode == Window.MODE_FULLSCREEN) + ) + ) + if ( + (get_window().mode == Window.MODE_EXCLUSIVE_FULLSCREEN) + or (get_window().mode == Window.MODE_FULLSCREEN) + ): # If window is fullscreen then reset transparency window_opacity_dialog.set_window_opacity(100.0) @@ -729,13 +769,11 @@ func help_menu_id_pressed(id: int) -> void: Global.HelpMenu.ISSUE_TRACKER: OS.shell_open("https://github.com/Orama-Interactive/Pixelorama/issues") Global.HelpMenu.OPEN_LOGS_FOLDER: - var dir = Directory.new() + var dir := DirAccess.open("user://logs") dir.make_dir_recursive("user://logs") # In case someone deleted it OS.shell_open(ProjectSettings.globalize_path("user://logs")) Global.HelpMenu.CHANGELOG: - OS.shell_open( - "https://github.com/Orama-Interactive/Pixelorama/blob/master/CHANGELOG.md#v0112---2023-08-31" - ) + OS.shell_open(CHANGELOG_URL) Global.HelpMenu.ABOUT_PIXELORAMA: _popup_dialog(Global.control.get_node("Dialogs/AboutDialog")) _: diff --git a/src/UI/TopMenuContainer/TopMenuContainer.tscn b/src/UI/TopMenuContainer/TopMenuContainer.tscn index 9ce66eb53b5..1a238e02344 100644 --- a/src/UI/TopMenuContainer/TopMenuContainer.tscn +++ b/src/UI/TopMenuContainer/TopMenuContainer.tscn @@ -1,92 +1,80 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=3 format=3 uid="uid://bsgwar3l6qtgv"] -[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=1] -[ext_resource path="res://src/UI/TopMenuContainer/TopMenuContainer.gd" type="Script" id=2] +[ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="1"] +[ext_resource type="Script" path="res://src/UI/TopMenuContainer/TopMenuContainer.gd" id="2"] [node name="TopMenuContainer" type="Panel"] -margin_right = 1280.0 -margin_bottom = 28.0 -rect_min_size = Vector2( 0, 28 ) -theme_type_variation = "TopMenuPanel" -script = ExtResource( 2 ) +custom_minimum_size = Vector2(0, 28) +offset_right = 1280.0 +offset_bottom = 28.0 +theme_type_variation = &"TopMenuPanel" +script = ExtResource("2") [node name="MenuItems" type="HBoxContainer" parent="."] -margin_left = 7.0 -margin_top = 4.0 -margin_right = 1010.0 +layout_mode = 0 +offset_left = 7.0 +offset_top = 4.0 +offset_right = 1010.0 [node name="FileMenu" type="MenuButton" parent="MenuItems"] -margin_right = 35.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "File" switch_on_hover = true [node name="EditMenu" type="MenuButton" parent="MenuItems"] -margin_left = 39.0 -margin_right = 75.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Edit" switch_on_hover = true [node name="SelectMenu" type="MenuButton" parent="MenuItems"] -margin_left = 79.0 -margin_right = 130.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Select" switch_on_hover = true [node name="ImageMenu" type="MenuButton" parent="MenuItems"] -margin_left = 134.0 -margin_right = 186.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Image" switch_on_hover = true [node name="ViewMenu" type="MenuButton" parent="MenuItems"] -margin_left = 190.0 -margin_right = 232.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "View" switch_on_hover = true [node name="WindowMenu" type="MenuButton" parent="MenuItems"] -margin_left = 236.0 -margin_right = 299.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Window" switch_on_hover = true [node name="HelpMenu" type="MenuButton" parent="MenuItems"] -margin_left = 303.0 -margin_right = 345.0 -margin_bottom = 20.0 +layout_mode = 2 mouse_default_cursor_shape = 2 text = "Help" switch_on_hover = true [node name="TopLabels" type="HBoxContainer" parent="."] +layout_mode = 0 anchor_left = 0.5 anchor_right = 0.5 anchor_bottom = 1.0 -margin_left = -65.5 -margin_right = 65.5 -custom_constants/separation = 20 +offset_left = -65.5 +offset_right = 65.5 +theme_override_constants/separation = 20 -[node name="RotationSlider" type="TextureProgress" parent="TopLabels"] +[node name="RotationSlider" type="TextureProgressBar" parent="TopLabels"] unique_name_in_owner = true -margin_top = 4.0 -margin_right = 70.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 70, 20 ) -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(70, 20) +layout_mode = 2 size_flags_vertical = 4 -theme_type_variation = "ValueSlider" +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" min_value = -180.0 max_value = 180.0 step = 0.1 @@ -97,64 +85,51 @@ stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 1 ) +script = ExtResource("1") suffix = "ยฐ" -[node name="ZoomSlider" type="TextureProgress" parent="TopLabels"] +[node name="ZoomSlider" type="TextureProgressBar" parent="TopLabels"] unique_name_in_owner = true -margin_left = 90.0 -margin_top = 4.0 -margin_right = 160.0 -margin_bottom = 24.0 -rect_min_size = Vector2( 70, 20 ) -mouse_default_cursor_shape = 2 +custom_minimum_size = Vector2(70, 20) +layout_mode = 2 size_flags_vertical = 4 -theme_type_variation = "ValueSlider" -min_value = 50.0 -max_value = 2000.0 +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" +min_value = 1.0 +max_value = 50000.0 value = 50.0 -allow_greater = true nine_patch_stretch = true stretch_margin_left = 3 stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 -script = ExtResource( 1 ) +script = ExtResource("1") suffix = "%" [node name="CursorPosition" type="Label" parent="TopLabels"] -margin_left = 180.0 -margin_top = 7.0 -margin_right = 228.0 -margin_bottom = 21.0 +layout_mode = 2 text = "[64ร—64]" -align = 2 [node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 0 anchor_left = 1.0 anchor_top = 0.5 anchor_right = 1.0 anchor_bottom = 0.5 -margin_left = -330.0 -margin_top = -10.0 -margin_right = 0.00012207 -margin_bottom = 13.0 +offset_left = -330.0 +offset_top = -10.0 +offset_right = 0.00012207 +offset_bottom = 13.0 grow_horizontal = 2 alignment = 1 [node name="CurrentFrame" type="Label" parent="HBoxContainer"] -margin_left = 106.0 -margin_right = 198.0 -margin_bottom = 23.0 +layout_mode = 2 size_flags_vertical = 1 text = "Current frame:" -__meta__ = { -"_edit_use_anchors_": false -} [node name="CurrentFrameMark" type="Label" parent="HBoxContainer"] -margin_left = 202.0 -margin_right = 223.0 -margin_bottom = 23.0 +layout_mode = 2 size_flags_vertical = 1 text = "1/1" diff --git a/src/UI/UI.gd b/src/UI/UI.gd index 8cb8e1d2041..3cbc532b0ec 100644 --- a/src/UI/UI.gd +++ b/src/UI/UI.gd @@ -1,6 +1,6 @@ extends Panel -onready var main_canvas_container: Container = find_node("Main Canvas") +@onready var main_canvas_container := find_child("Main Canvas") as Container func _ready() -> void: @@ -16,10 +16,10 @@ func _on_main_canvas_visibility_changed() -> void: func update_transparent_shader() -> void: + if not is_instance_valid(main_canvas_container): + return # Works independently of the transparency feature - var canvas_size: Vector2 = (main_canvas_container.rect_size - Vector2.DOWN * 2) * Global.shrink - material.set("shader_param/screen_resolution", get_viewport().size) - material.set( - "shader_param/position", main_canvas_container.rect_global_position * Global.shrink - ) - material.set("shader_param/size", canvas_size) + var canvas_size: Vector2 = (main_canvas_container.size - Vector2.DOWN * 2) * Global.shrink + material.set_shader_parameter("screen_resolution", get_viewport().size) + material.set_shader_parameter("position", main_canvas_container.global_position * Global.shrink) + material.set_shader_parameter("size", canvas_size) diff --git a/src/UI/UI.tscn b/src/UI/UI.tscn index f1c1233c3c5..fd8e74fabaa 100644 --- a/src/UI/UI.tscn +++ b/src/UI/UI.tscn @@ -1,467 +1,417 @@ -[gd_scene load_steps=54 format=2] - -[ext_resource path="res://src/UI/Tools/Tools.tscn" type="PackedScene" id=1] -[ext_resource path="res://src/UI/Canvas/CanvasPreview.tscn" type="PackedScene" id=2] -[ext_resource path="res://src/UI/Tabs.gd" type="Script" id=3] -[ext_resource path="res://src/UI/Canvas/Rulers/VerticalRuler.gd" type="Script" id=4] -[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=5] -[ext_resource path="res://src/UI/Canvas/Rulers/HorizontalRuler.gd" type="Script" id=6] -[ext_resource path="res://src/UI/Canvas/CameraMovement.gd" type="Script" id=7] -[ext_resource path="res://src/Shaders/Greyscale.gdshader" type="Shader" id=8] -[ext_resource path="res://src/Shaders/TransparentChecker.shader" type="Shader" id=9] -[ext_resource path="res://src/UI/GlobalToolOptions/GlobalToolOptions.tscn" type="PackedScene" id=10] -[ext_resource path="res://src/UI/ReferenceImages/ReferencesPanel.tscn" type="PackedScene" id=11] -[ext_resource path="res://src/UI/PerspectiveEditor/PerspectiveEditor.tscn" type="PackedScene" id=12] -[ext_resource path="res://src/UI/Recorder/Recorder.tscn" type="PackedScene" id=13] -[ext_resource path="res://addons/dockable_container/layout.gd" type="Script" id=14] -[ext_resource path="res://src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn" type="PackedScene" id=16] -[ext_resource path="res://src/UI/ColorPickers/ColorPickers.tscn" type="PackedScene" id=17] -[ext_resource path="res://src/UI/Timeline/AnimationTimeline.tscn" type="PackedScene" id=18] -[ext_resource path="res://src/UI/Canvas/Canvas.tscn" type="PackedScene" id=19] -[ext_resource path="res://src/Palette/PalettePanel.tscn" type="PackedScene" id=20] -[ext_resource path="res://src/UI/ViewportContainer.gd" type="Script" id=23] -[ext_resource path="res://addons/dockable_container/layout_split.gd" type="Script" id=27] -[ext_resource path="res://addons/dockable_container/dockable_container.gd" type="Script" id=35] -[ext_resource path="res://addons/dockable_container/layout_panel.gd" type="Script" id=36] -[ext_resource path="res://src/UI/UI.gd" type="Script" id=37] -[ext_resource path="res://src/Shaders/UITransparency.gdshader" type="Shader" id=38] - -[sub_resource type="ShaderMaterial" id=26] -shader = ExtResource( 38 ) -shader_param/alpha = 0.0 -shader_param/screen_resolution = Vector2( 1280, 720 ) -shader_param/position = Vector2( 100, 100 ) -shader_param/size = Vector2( 100, 100 ) - -[sub_resource type="Resource" id=1] +[gd_scene load_steps=54 format=3 uid="uid://c8dsi6ggkqa7a"] + +[ext_resource type="PackedScene" uid="uid://byu3rtoipuvoc" path="res://src/UI/Tools/Tools.tscn" id="1"] +[ext_resource type="PackedScene" uid="uid://c546tskdu53j1" path="res://src/UI/Canvas/CanvasPreview.tscn" id="2"] +[ext_resource type="Script" path="res://src/UI/Tabs.gd" id="3"] +[ext_resource type="Script" path="res://src/UI/Canvas/Rulers/VerticalRuler.gd" id="4"] +[ext_resource type="PackedScene" uid="uid://3pmb60gpst7b" path="res://src/UI/Nodes/TransparentChecker.tscn" id="5"] +[ext_resource type="Script" path="res://src/UI/Canvas/Rulers/HorizontalRuler.gd" id="6"] +[ext_resource type="Script" path="res://src/UI/Canvas/CameraMovement.gd" id="7"] +[ext_resource type="Shader" path="res://src/Shaders/Greyscale.gdshader" id="8"] +[ext_resource type="Shader" path="res://src/Shaders/TransparentChecker.gdshader" id="9"] +[ext_resource type="PackedScene" uid="uid://wo0hqxkst808" path="res://src/UI/GlobalToolOptions/GlobalToolOptions.tscn" id="10"] +[ext_resource type="PackedScene" uid="uid://b75xk2ix8xxml" path="res://src/UI/ReferenceImages/ReferencesPanel.tscn" id="11"] +[ext_resource type="PackedScene" uid="uid://cap1bhavhi33g" path="res://src/UI/PerspectiveEditor/PerspectiveEditor.tscn" id="12"] +[ext_resource type="PackedScene" uid="uid://dl6ook010q86o" path="res://src/UI/Recorder/Recorder.tscn" id="13"] +[ext_resource type="Script" path="res://addons/dockable_container/layout.gd" id="14"] +[ext_resource type="PackedScene" uid="uid://ccsihk3yxwei5" path="res://src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn" id="16"] +[ext_resource type="PackedScene" uid="uid://c3vcvhh4d8hd7" path="res://src/UI/ColorPickers/ColorPickers.tscn" id="17"] +[ext_resource type="PackedScene" uid="uid://dbr6mulku2qju" path="res://src/UI/Timeline/AnimationTimeline.tscn" id="18"] +[ext_resource type="PackedScene" uid="uid://ba24iuv55m4l3" path="res://src/UI/Canvas/Canvas.tscn" id="19"] +[ext_resource type="PackedScene" uid="uid://wplk62pbgih4" path="res://src/Palette/PalettePanel.tscn" id="20"] +[ext_resource type="Script" path="res://src/UI/ViewportContainer.gd" id="23"] +[ext_resource type="Script" path="res://addons/dockable_container/layout_split.gd" id="27"] +[ext_resource type="Script" path="res://addons/dockable_container/dockable_container.gd" id="35"] +[ext_resource type="Script" path="res://addons/dockable_container/layout_panel.gd" id="36"] +[ext_resource type="Script" path="res://src/UI/UI.gd" id="37"] +[ext_resource type="Shader" path="res://src/Shaders/UITransparency.gdshader" id="38"] + +[sub_resource type="ShaderMaterial" id="26"] +shader = ExtResource("38") +shader_parameter/alpha = 0.0 +shader_parameter/screen_resolution = Vector2(1280, 720) +shader_parameter/position = Vector2(100, 100) +shader_parameter/size = Vector2(100, 100) + +[sub_resource type="Resource" id="Resource_xnnnd"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Tools" ) +script = ExtResource("36") +names = PackedStringArray("Tools", "Reference Images") current_tab = 0 -[sub_resource type="Resource" id=8] +[sub_resource type="Resource" id="Resource_34hle"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Main Canvas" ) +script = ExtResource("36") +names = PackedStringArray("Main Canvas") current_tab = 0 -[sub_resource type="Resource" id=33] +[sub_resource type="Resource" id="Resource_l6i6g"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Perspective Editor" ) +script = ExtResource("36") +names = PackedStringArray("Perspective Editor") current_tab = 0 -[sub_resource type="Resource" id=34] +[sub_resource type="Resource" id="Resource_r2r5t"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 0 percent = 0.5 -first = SubResource( 8 ) -second = SubResource( 33 ) +first = SubResource("Resource_34hle") +second = SubResource("Resource_l6i6g") -[sub_resource type="Resource" id=28] +[sub_resource type="Resource" id="Resource_k7omi"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Second Canvas" ) +script = ExtResource("36") +names = PackedStringArray("Second Canvas") current_tab = 0 -[sub_resource type="Resource" id=29] +[sub_resource type="Resource" id="Resource_l142s"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 0 percent = 0.980952 -first = SubResource( 34 ) -second = SubResource( 28 ) +first = SubResource("Resource_r2r5t") +second = SubResource("Resource_k7omi") -[sub_resource type="Resource" id=9] +[sub_resource type="Resource" id="Resource_wobi1"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Animation Timeline" ) +script = ExtResource("36") +names = PackedStringArray("Animation Timeline") current_tab = 0 -[sub_resource type="Resource" id=10] +[sub_resource type="Resource" id="Resource_85y6p"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 1 -percent = 0.90625 -first = SubResource( 29 ) -second = SubResource( 9 ) +percent = 0.74711 +first = SubResource("Resource_l142s") +second = SubResource("Resource_wobi1") -[sub_resource type="Resource" id=11] +[sub_resource type="Resource" id="Resource_4egp5"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Canvas Preview", "Reference Images" ) +script = ExtResource("36") +names = PackedStringArray("Canvas Preview") current_tab = 0 -[sub_resource type="Resource" id=20] +[sub_resource type="Resource" id="Resource_fcw5v"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Color Pickers" ) +script = ExtResource("36") +names = PackedStringArray("Color Pickers") current_tab = 0 -[sub_resource type="Resource" id=30] +[sub_resource type="Resource" id="Resource_c7hpy"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Global Tool Options" ) +script = ExtResource("36") +names = PackedStringArray("Global Tool Options") current_tab = 0 -[sub_resource type="Resource" id=35] +[sub_resource type="Resource" id="Resource_56tpw"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Recorder" ) +script = ExtResource("36") +names = PackedStringArray("Recorder") current_tab = 0 -[sub_resource type="Resource" id=36] +[sub_resource type="Resource" id="Resource_fhmn0"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 1 percent = 0.5 -first = SubResource( 30 ) -second = SubResource( 35 ) +first = SubResource("Resource_c7hpy") +second = SubResource("Resource_56tpw") -[sub_resource type="Resource" id=31] +[sub_resource type="Resource" id="Resource_u1u2a"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 1 percent = 0.5 -first = SubResource( 20 ) -second = SubResource( 36 ) +first = SubResource("Resource_fcw5v") +second = SubResource("Resource_fhmn0") -[sub_resource type="Resource" id=21] +[sub_resource type="Resource" id="Resource_6eonw"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 1 percent = 0.911765 -first = SubResource( 11 ) -second = SubResource( 31 ) +first = SubResource("Resource_4egp5") +second = SubResource("Resource_u1u2a") -[sub_resource type="Resource" id=22] +[sub_resource type="Resource" id="Resource_6pwxm"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Left Tool Options" ) +script = ExtResource("36") +names = PackedStringArray("Left Tool Options") current_tab = 0 -[sub_resource type="Resource" id=23] +[sub_resource type="Resource" id="Resource_24rfh"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Right Tool Options" ) +script = ExtResource("36") +names = PackedStringArray("Right Tool Options") current_tab = 0 -[sub_resource type="Resource" id=24] +[sub_resource type="Resource" id="Resource_tcb26"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 0 percent = 0.5 -first = SubResource( 22 ) -second = SubResource( 23 ) +first = SubResource("Resource_6pwxm") +second = SubResource("Resource_24rfh") -[sub_resource type="Resource" id=13] +[sub_resource type="Resource" id="Resource_ugja0"] resource_name = "Tabs" -script = ExtResource( 36 ) -names = PoolStringArray( "Palettes" ) +script = ExtResource("36") +names = PackedStringArray("Palettes") current_tab = 0 -[sub_resource type="Resource" id=14] +[sub_resource type="Resource" id="Resource_hr77s"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 1 -percent = 0.754808 -first = SubResource( 24 ) -second = SubResource( 13 ) +percent = 0.692661 +first = SubResource("Resource_tcb26") +second = SubResource("Resource_ugja0") -[sub_resource type="Resource" id=15] +[sub_resource type="Resource" id="Resource_l8roh"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 1 -percent = 0.332031 -first = SubResource( 21 ) -second = SubResource( 14 ) +percent = 0.339595 +first = SubResource("Resource_6eonw") +second = SubResource("Resource_hr77s") -[sub_resource type="Resource" id=16] +[sub_resource type="Resource" id="Resource_s2xu6"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 0 -percent = 0.855 -first = SubResource( 10 ) -second = SubResource( 15 ) +percent = 0.727569 +first = SubResource("Resource_85y6p") +second = SubResource("Resource_l8roh") -[sub_resource type="Resource" id=5] +[sub_resource type="Resource" id="Resource_cwe4h"] resource_name = "Split" -script = ExtResource( 27 ) +script = ExtResource("27") direction = 0 -percent = 0.0 -first = SubResource( 1 ) -second = SubResource( 16 ) +percent = 0.0398437 +first = SubResource("Resource_xnnnd") +second = SubResource("Resource_s2xu6") -[sub_resource type="Resource" id=37] +[sub_resource type="Resource" id="Resource_b6o2t"] resource_name = "Layout" -script = ExtResource( 14 ) -root = SubResource( 5 ) +script = ExtResource("14") +root = SubResource("Resource_cwe4h") hidden_tabs = { "Perspective Editor": true, "Recorder": true, "Second Canvas": true } -[sub_resource type="ShaderMaterial" id=2] -shader = ExtResource( 9 ) -shader_param/size = 10.0 -shader_param/alpha = 1.0 -shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 ) -shader_param/color2 = Color( 1, 1, 1, 1 ) -shader_param/offset = Vector2( 0, 0 ) -shader_param/scale = Vector2( 0, 0 ) -shader_param/rect_size = Vector2( 0, 0 ) -shader_param/follow_movement = false -shader_param/follow_scale = false - -[sub_resource type="ShaderMaterial" id=27] -shader = ExtResource( 8 ) - -[sub_resource type="ShaderMaterial" id=3] -shader = ExtResource( 9 ) -shader_param/size = 10.0 -shader_param/alpha = 1.0 -shader_param/color1 = Color( 0.7, 0.7, 0.7, 1 ) -shader_param/color2 = Color( 1, 1, 1, 1 ) -shader_param/offset = Vector2( 0, 0 ) -shader_param/scale = Vector2( 0, 0 ) -shader_param/rect_size = Vector2( 0, 0 ) -shader_param/follow_movement = false -shader_param/follow_scale = false +[sub_resource type="ShaderMaterial" id="2"] +shader = ExtResource("9") +shader_parameter/size = 10.0 +shader_parameter/alpha = 1.0 +shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1) +shader_parameter/color2 = Color(1, 1, 1, 1) +shader_parameter/offset = Vector2(0, 0) +shader_parameter/scale = Vector2(0, 0) +shader_parameter/rect_size = Vector2(0, 0) +shader_parameter/follow_movement = false +shader_parameter/follow_scale = false + +[sub_resource type="ShaderMaterial" id="27"] +shader = ExtResource("8") + +[sub_resource type="ShaderMaterial" id="3"] +shader = ExtResource("9") +shader_parameter/size = 10.0 +shader_parameter/alpha = 1.0 +shader_parameter/color1 = Color(0.7, 0.7, 0.7, 1) +shader_parameter/color2 = Color(1, 1, 1, 1) +shader_parameter/offset = Vector2(0, 0) +shader_parameter/scale = Vector2(0, 0) +shader_parameter/rect_size = Vector2(0, 0) +shader_parameter/follow_movement = false +shader_parameter/follow_scale = false [node name="UI" type="Panel"] -material = SubResource( 26 ) +material = SubResource("26") +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 size_flags_horizontal = 3 size_flags_vertical = 3 -script = ExtResource( 37 ) +script = ExtResource("37") [node name="DockableContainer" type="Container" parent="."] +layout_mode = 0 anchor_right = 1.0 anchor_bottom = 1.0 size_flags_horizontal = 3 size_flags_vertical = 3 -script = ExtResource( 35 ) +script = ExtResource("35") tabs_visible = false -layout = SubResource( 37 ) +layout = SubResource("Resource_b6o2t") -[node name="Tools" parent="DockableContainer" instance=ExtResource( 1 )] -margin_left = 4.0 -margin_top = 8.0 -margin_right = -1240.0 -margin_bottom = -4.0 +[node name="Tools" parent="DockableContainer" instance=ExtResource("1")] +layout_mode = 2 [node name="Main Canvas" type="VBoxContainer" parent="DockableContainer"] -margin_left = 60.0 -margin_top = 8.0 -margin_right = 977.0 -margin_bottom = 642.5 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -custom_constants/separation = 0 +theme_override_constants/separation = 0 [node name="TabsContainer" type="PanelContainer" parent="DockableContainer/Main Canvas"] -margin_right = 917.0 -margin_bottom = 38.0 - -[node name="Tabs" type="Tabs" parent="DockableContainer/Main Canvas/TabsContainer"] -margin_left = 7.0 -margin_top = 7.0 -margin_right = 910.0 -margin_bottom = 31.0 -tab_align = 0 +layout_mode = 2 + +[node name="TabBar" type="TabBar" parent="DockableContainer/Main Canvas/TabsContainer"] +layout_mode = 2 tab_close_display_policy = 2 drag_to_rearrange_enabled = true -script = ExtResource( 3 ) +script = ExtResource("3") [node name="HorizontalRuler" type="Button" parent="DockableContainer/Main Canvas"] -margin_top = 38.0 -margin_right = 917.0 -margin_bottom = 58.0 -rect_min_size = Vector2( 0, 16 ) +custom_minimum_size = Vector2(0, 16) +layout_mode = 2 focus_mode = 0 mouse_default_cursor_shape = 14 -theme_type_variation = "RulerButton" +theme_type_variation = &"RulerButton" action_mode = 0 -script = ExtResource( 6 ) +script = ExtResource("6") [node name="ViewportandVerticalRuler" type="HBoxContainer" parent="DockableContainer/Main Canvas"] -margin_top = 58.0 -margin_right = 917.0 -margin_bottom = 634.0 +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -custom_constants/separation = 0 +theme_override_constants/separation = 0 [node name="VerticalRuler" type="Button" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler"] -margin_right = 16.0 -margin_bottom = 576.0 -rect_min_size = Vector2( 16, 0 ) -focus_mode = 0 -mouse_default_cursor_shape = 15 +custom_minimum_size = Vector2(16, 0) +layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 3 -theme_type_variation = "RulerButton" +focus_mode = 0 +mouse_default_cursor_shape = 15 +theme_type_variation = &"RulerButton" action_mode = 0 -script = ExtResource( 4 ) +script = ExtResource("4") -[node name="ViewportContainer" type="ViewportContainer" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler"] -margin_left = 16.0 -margin_right = 917.0 -margin_bottom = 576.0 -focus_mode = 2 -mouse_default_cursor_shape = 3 +[node name="SubViewportContainer" type="SubViewportContainer" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler"] +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +focus_mode = 2 +mouse_default_cursor_shape = 3 stretch = true -script = ExtResource( 23 ) -camera_path = NodePath("Viewport/Camera2D") +script = ExtResource("23") +camera_path = NodePath("SubViewport/Camera2D") -[node name="Viewport" type="Viewport" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer"] -size = Vector2( 901, 576 ) +[node name="SubViewport" type="SubViewport" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer"] handle_input_locally = false -usage = 0 -render_target_update_mode = 3 +canvas_item_default_texture_filter = 0 +size = Vector2i(867, 515) +render_target_update_mode = 4 -[node name="TransparentChecker" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer/Viewport" instance=ExtResource( 5 )] -material = SubResource( 2 ) +[node name="TransparentChecker" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport" instance=ExtResource("5")] +material = SubResource("2") +anchors_preset = 0 -[node name="Canvas" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer/Viewport" instance=ExtResource( 19 )] +[node name="Canvas" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport" instance=ExtResource("19")] -[node name="Camera2D" type="Camera2D" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer/Viewport"] -current = true -zoom = Vector2( 0.15, 0.15 ) -script = ExtResource( 7 ) +[node name="Camera2D" type="Camera2D" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport"] +zoom = Vector2(0.15, 0.15) +script = ExtResource("7") -[node name="CanvasLayer" type="CanvasLayer" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer/Viewport"] +[node name="CanvasLayer" type="CanvasLayer" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport"] -[node name="GreyscaleVision" type="ColorRect" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer/Viewport/CanvasLayer"] +[node name="GreyscaleVision" type="ColorRect" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport/CanvasLayer"] visible = false -material = SubResource( 27 ) +material = SubResource("27") +anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -margin_right = 40.0 -margin_bottom = 40.0 +offset_right = 40.0 +offset_bottom = 40.0 mouse_filter = 2 -[node name="Second Canvas" type="ViewportContainer" parent="DockableContainer"] +[node name="Second Canvas" type="SubViewportContainer" parent="DockableContainer"] visible = false -margin_left = 1274.0 -margin_top = 8.0 -margin_right = 1276.0 -margin_bottom = 350.0 +layout_mode = 2 size_flags_vertical = 3 stretch = true -script = ExtResource( 23 ) -camera_path = NodePath("Viewport/Camera2D2") +script = ExtResource("23") +camera_path = NodePath("SubViewport/Camera2D2") -[node name="Viewport" type="Viewport" parent="DockableContainer/Second Canvas"] -size = Vector2( 2, 342 ) +[node name="SubViewport" type="SubViewport" parent="DockableContainer/Second Canvas"] handle_input_locally = false +canvas_item_default_texture_filter = 0 +size = Vector2i(2, 2) render_target_update_mode = 0 -[node name="TransparentChecker" parent="DockableContainer/Second Canvas/Viewport" instance=ExtResource( 5 )] -material = SubResource( 3 ) +[node name="TransparentChecker" parent="DockableContainer/Second Canvas/SubViewport" instance=ExtResource("5")] +material = SubResource("3") +anchors_preset = 0 -[node name="CanvasPreview" parent="DockableContainer/Second Canvas/Viewport" instance=ExtResource( 2 )] +[node name="CanvasPreview" parent="DockableContainer/Second Canvas/SubViewport" instance=ExtResource("2")] -[node name="Camera2D2" type="Camera2D" parent="DockableContainer/Second Canvas/Viewport"] -current = true -zoom = Vector2( 0.15, 0.15 ) -script = ExtResource( 7 ) +[node name="Camera2D2" type="Camera2D" parent="DockableContainer/Second Canvas/SubViewport"] +zoom = Vector2(0.15, 0.15) +script = ExtResource("7") index = 1 -[node name="Animation Timeline" parent="DockableContainer" instance=ExtResource( 18 )] -margin_left = 60.0 -margin_top = 666.5 -margin_right = 977.0 -margin_bottom = 716.0 - -[node name="Canvas Preview" parent="DockableContainer" instance=ExtResource( 16 )] -margin_left = 997.0 -margin_top = 8.0 -margin_right = 1276.0 -margin_bottom = 98.0 - -[node name="Color Pickers" parent="DockableContainer" instance=ExtResource( 17 )] -margin_left = 997.0 -margin_top = 122.0 -margin_bottom = 184.0 - -[node name="Global Tool Options" parent="DockableContainer" instance=ExtResource( 10 )] -margin_left = 997.0 -margin_top = 208.0 -margin_right = 1276.0 -margin_bottom = 258.0 +[node name="Animation Timeline" parent="DockableContainer" instance=ExtResource("18")] +layout_mode = 2 + +[node name="Canvas Preview" parent="DockableContainer" instance=ExtResource("16")] +layout_mode = 2 + +[node name="Color Pickers" parent="DockableContainer" instance=ExtResource("17")] +layout_mode = 2 + +[node name="Global Tool Options" parent="DockableContainer" instance=ExtResource("10")] +layout_mode = 2 [node name="Left Tool Options" type="ScrollContainer" parent="DockableContainer"] -margin_left = 997.0 -margin_top = 282.0 -margin_right = 1126.5 -margin_bottom = 592.0 -rect_min_size = Vector2( 72, 72 ) -__meta__ = { -"_edit_use_anchors_": false -} +custom_minimum_size = Vector2(72, 72) +layout_mode = 2 [node name="LeftPanelContainer" type="PanelContainer" parent="DockableContainer/Left Tool Options"] -margin_right = 130.0 -margin_bottom = 298.0 -rect_min_size = Vector2( 130, 0 ) +custom_minimum_size = Vector2(130, 0) +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="Right Tool Options" type="ScrollContainer" parent="DockableContainer"] -margin_left = 1146.5 -margin_top = 282.0 -margin_right = 1276.0 -margin_bottom = 592.0 -rect_min_size = Vector2( 72, 72 ) +custom_minimum_size = Vector2(72, 72) +layout_mode = 2 [node name="RightPanelContainer" type="PanelContainer" parent="DockableContainer/Right Tool Options"] -margin_right = 130.0 -margin_bottom = 298.0 -rect_min_size = Vector2( 130, 0 ) +custom_minimum_size = Vector2(130, 0) +layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="Palettes" parent="DockableContainer" instance=ExtResource( 20 )] -margin_left = 997.0 -margin_top = 616.0 -margin_right = 1276.0 -margin_bottom = 716.0 +[node name="Palettes" parent="DockableContainer" instance=ExtResource("20")] +layout_mode = 2 -[node name="Reference Images" parent="DockableContainer" instance=ExtResource( 11 )] +[node name="Reference Images" parent="DockableContainer" instance=ExtResource("11")] visible = false -margin_left = 993.0 -margin_right = -166.0 -margin_bottom = -684.0 +layout_mode = 2 -[node name="Perspective Editor" parent="DockableContainer" instance=ExtResource( 12 )] +[node name="Perspective Editor" parent="DockableContainer" instance=ExtResource("12")] visible = false -margin_left = 528.5 -margin_top = 8.0 -margin_right = -303.0 -margin_bottom = -77.5 +layout_mode = 2 -[node name="Recorder" parent="DockableContainer" instance=ExtResource( 13 )] +[node name="Recorder" parent="DockableContainer" instance=ExtResource("13")] visible = false -margin_left = 997.0 -margin_top = 282.0 -margin_right = 1276.0 -margin_bottom = 332.0 +layout_mode = 2 [connection signal="item_rect_changed" from="DockableContainer/Main Canvas" to="." method="_on_main_canvas_item_rect_changed"] [connection signal="visibility_changed" from="DockableContainer/Main Canvas" to="." method="_on_main_canvas_visibility_changed"] -[connection signal="reposition_active_tab_request" from="DockableContainer/Main Canvas/TabsContainer/Tabs" to="DockableContainer/Main Canvas/TabsContainer/Tabs" method="_on_Tabs_reposition_active_tab_request"] -[connection signal="tab_changed" from="DockableContainer/Main Canvas/TabsContainer/Tabs" to="DockableContainer/Main Canvas/TabsContainer/Tabs" method="_on_Tabs_tab_changed"] -[connection signal="tab_close" from="DockableContainer/Main Canvas/TabsContainer/Tabs" to="DockableContainer/Main Canvas/TabsContainer/Tabs" method="_on_Tabs_tab_close"] +[connection signal="active_tab_rearranged" from="DockableContainer/Main Canvas/TabsContainer/TabBar" to="DockableContainer/Main Canvas/TabsContainer/TabBar" method="_on_active_tab_rearranged"] +[connection signal="tab_changed" from="DockableContainer/Main Canvas/TabsContainer/TabBar" to="DockableContainer/Main Canvas/TabsContainer/TabBar" method="_on_Tabs_tab_changed"] +[connection signal="tab_close_pressed" from="DockableContainer/Main Canvas/TabsContainer/TabBar" to="DockableContainer/Main Canvas/TabsContainer/TabBar" method="_on_tab_close_pressed"] [connection signal="mouse_entered" from="DockableContainer/Main Canvas/HorizontalRuler" to="DockableContainer/Main Canvas/HorizontalRuler" method="_on_HorizontalRuler_mouse_entered"] [connection signal="pressed" from="DockableContainer/Main Canvas/HorizontalRuler" to="DockableContainer/Main Canvas/HorizontalRuler" method="_on_HorizontalRuler_pressed"] [connection signal="pressed" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/VerticalRuler" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/VerticalRuler" method="_on_VerticalRuler_pressed"] -[connection signal="mouse_entered" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer" method="_on_ViewportContainer_mouse_entered"] -[connection signal="mouse_exited" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/ViewportContainer" method="_on_ViewportContainer_mouse_exited"] +[connection signal="mouse_entered" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" method="_on_ViewportContainer_mouse_entered"] +[connection signal="mouse_exited" from="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" to="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer" method="_on_ViewportContainer_mouse_exited"] [connection signal="mouse_entered" from="DockableContainer/Second Canvas" to="DockableContainer/Second Canvas" method="_on_ViewportContainer_mouse_entered"] [connection signal="mouse_exited" from="DockableContainer/Second Canvas" to="DockableContainer/Second Canvas" method="_on_ViewportContainer_mouse_exited"] diff --git a/src/UI/ViewportContainer.gd b/src/UI/ViewportContainer.gd index 48ca5b84345..d1822f8737e 100644 --- a/src/UI/ViewportContainer.gd +++ b/src/UI/ViewportContainer.gd @@ -1,8 +1,8 @@ -extends ViewportContainer +extends SubViewportContainer -export(NodePath) var camera_path +@export var camera_path: NodePath -onready var camera := get_node(camera_path) as Camera2D +@onready var camera := get_node(camera_path) as Camera2D func _ready() -> void: diff --git a/src/XDGDataPaths.gd b/src/XDGDataPaths.gd deleted file mode 100644 index c2891970ce1..00000000000 --- a/src/XDGDataPaths.gd +++ /dev/null @@ -1,139 +0,0 @@ -extends Reference - -# Default location for xdg_data_home relative to $HOME -const DEFAULT_XDG_DATA_HOME_REL := ".local/share" -const DEFAULT_XDG_DATA_DIRS := ["/usr/local/share", "/usr/share"] - -const CONFIG_SUBDIR_NAME := "pixelorama_data" -const XDG_CONFIG_SUBDIR_NAME := "pixelorama" - -const PALETTES_DATA_SUBDIRECTORY := "Palettes" -const BRUSHES_DATA_SUBDIRECTORY := "Brushes" -const PATTERNS_DATA_SUBDIRECTORY := "Patterns" - -# These are *with* the config subdirectory name -var xdg_data_home: String -var xdg_data_dirs: Array - -# These are *without* the config subdirectory name -var raw_xdg_data_home: String -var raw_xdg_data_dirs: Array - - -# Get if we should use XDG standard or not nyaaaa -func use_xdg_standard() -> bool: - # see: https://docs.godotengine.org/en/latest/getting_started/workflow/export/feature_tags.html - # return OS.has_feature("Linux") or OS.has_feature("BSD") - # Previous was unreliable and buggy >.< nyaa - return OS.get_name() == "X11" - - -func _init() -> void: - if use_xdg_standard(): - print("Detected system where we should use XDG basedir standard (currently Linux or BSD)") - var home := OS.get_environment("HOME") - raw_xdg_data_home = home.plus_file(DEFAULT_XDG_DATA_HOME_REL) - xdg_data_home = raw_xdg_data_home.plus_file(XDG_CONFIG_SUBDIR_NAME) - - # Create defaults - xdg_data_dirs = [] - raw_xdg_data_dirs = DEFAULT_XDG_DATA_DIRS - for default_loc in raw_xdg_data_dirs: - xdg_data_dirs.append(default_loc.plus_file(XDG_CONFIG_SUBDIR_NAME)) - - # Now check the XDG environment variables and if - # present, replace the defaults with them! - # See: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html - # Checks the xdg data home var - if OS.has_environment("XDG_DATA_HOME"): - raw_xdg_data_home = OS.get_environment("XDG_DATA_HOME") - xdg_data_home = raw_xdg_data_home.plus_file(XDG_CONFIG_SUBDIR_NAME) - # Checks the list of files var, and processes them. - if OS.has_environment("XDG_DATA_DIRS"): - var raw_env_var := OS.get_environment("XDG_DATA_DIRS") - # includes empties. - var unappended_subdirs := raw_env_var.split(":", true) - raw_xdg_data_dirs = unappended_subdirs - xdg_data_dirs = [] - for unapp_subdir in raw_xdg_data_dirs: - xdg_data_dirs.append(unapp_subdir.plus_file(XDG_CONFIG_SUBDIR_NAME)) - xdg_data_dirs.append(Global.root_directory.plus_file(CONFIG_SUBDIR_NAME)) - - else: - raw_xdg_data_home = Global.root_directory - xdg_data_home = raw_xdg_data_home.plus_file(CONFIG_SUBDIR_NAME) - raw_xdg_data_dirs = [] - xdg_data_dirs = [] - - -func append_file_to_all(basepaths: Array, subpath: String) -> Array: - var res := [] - for _path in basepaths: - res.append(_path.plus_file(subpath)) - return res - - -# Get search paths in order of priority -func get_search_paths_in_order() -> Array: - return [xdg_data_home] + xdg_data_dirs - - -# Gets the paths, in order of search priority, for palettes. -func get_palette_search_path_in_order() -> Array: - var base_paths := get_search_paths_in_order() - return append_file_to_all(base_paths, PALETTES_DATA_SUBDIRECTORY) - - -# Gets the paths, in order of search priority, for brushes. -func get_brushes_search_path_in_order() -> Array: - var base_paths := get_search_paths_in_order() - return append_file_to_all(base_paths, BRUSHES_DATA_SUBDIRECTORY) - - -# Gets the paths, in order of search priority, for patterns. -func get_patterns_search_path_in_order() -> Array: - var base_paths := get_search_paths_in_order() - return append_file_to_all(base_paths, PATTERNS_DATA_SUBDIRECTORY) - - -# Get the path that we are ok to be writing palettes to: -func get_palette_write_path() -> String: - return xdg_data_home.plus_file(PALETTES_DATA_SUBDIRECTORY) - - -# Get the path that we are ok to be writing brushes to: -func get_brushes_write_path() -> String: - return xdg_data_home.plus_file(BRUSHES_DATA_SUBDIRECTORY) - - -# Get the path that we are ok to be writing patterns to: -func get_patterns_write_path() -> String: - return xdg_data_home.plus_file(PATTERNS_DATA_SUBDIRECTORY) - - -# Ensure the user xdg directories exist: -func ensure_xdg_user_dirs_exist() -> void: - if !OS.has_feature("standalone"): # Don't execute if we're in the editor - return - - var base_dir := Directory.new() - base_dir.open(raw_xdg_data_home) - # Ensure the main config directory exists. - if not base_dir.dir_exists(xdg_data_home): - base_dir.make_dir(xdg_data_home) - - var actual_data_dir := Directory.new() - actual_data_dir.open(xdg_data_home) - var palette_writing_dir := get_palette_write_path() - var brushes_writing_dir := get_brushes_write_path() - var pattern_writing_dir := get_patterns_write_path() - # Create the palette and brush dirs - if not actual_data_dir.dir_exists(palette_writing_dir): - print("Making directory %s" % [palette_writing_dir]) - actual_data_dir.make_dir(palette_writing_dir) - if not actual_data_dir.dir_exists(brushes_writing_dir): - print("Making directory %s" % [brushes_writing_dir]) - actual_data_dir.make_dir(brushes_writing_dir) - if not actual_data_dir.dir_exists(pattern_writing_dir): - print("Making directory %s" % [pattern_writing_dir]) - actual_data_dir.make_dir(pattern_writing_dir)