Compare commits

...

91 Commits

Author SHA1 Message Date
58bb1d9ca5 trying to fix CI
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 23s
Create tag and build when new code gets to main / Export (push) Failing after 1m43s
2026-01-25 00:24:51 +01:00
cf7591b413 this is so easy to develop there must be a catch
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 26s
Create tag and build when new code gets to main / Export (push) Failing after 1m55s
2026-01-25 00:16:16 +01:00
92cc4f0264 sooooo coded a feature first try? weird
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 25s
Create tag and build when new code gets to main / Export (push) Failing after 1m48s
2026-01-24 23:29:22 +01:00
18c8b741dd can plant weapon in targetables, dash towards it, jump in the air.
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 28s
Create tag and build when new code gets to main / Export (push) Failing after 1m47s
2026-01-24 15:22:16 +01:00
b84b7e4dd5 aim dashing through targetable entities now possible 2026-01-24 13:49:16 +01:00
4d419b9010 basic healthbars for enemies 2026-01-23 13:31:11 +01:00
8b2bf3e32e fixed a going through wall issue 2026-01-21 17:31:24 +01:00
db49703326 added fixed dash targets and can dash towards enemies to hit them, get a knockback or dash through if killed
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 22s
Create tag and build when new code gets to main / Export (push) Failing after 1m51s
2026-01-21 16:46:20 +01:00
fb78add739 export target variables and made a targetable interface 2026-01-21 14:21:47 +01:00
04121f18a4 basic targeting system 2026-01-21 12:32:58 +01:00
fa029b9e53 fixed resources constructors
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 24s
Create tag and build when new code gets to main / Export (push) Successful in 15m37s
2026-01-21 10:13:00 +01:00
494f0cb9ca some SFX
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 21s
Create tag and build when new code gets to main / Export (push) Successful in 15m19s
2026-01-20 17:39:14 +01:00
c1ca0bf27b some shake 2026-01-20 15:27:59 +01:00
8d1e7ebb4f some jumping animations
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 10m30s
2026-01-20 13:23:42 +01:00
a257306999 reorganizing stuff
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 10m45s
2026-01-20 12:23:26 +01:00
2e5fcb6a75 implemented player health, knockback, invicibility frames and hitstop
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 9m56s
2026-01-20 12:05:31 +01:00
87a9fad005 now that's an animation
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 9m57s
2026-01-19 23:15:40 +01:00
837b3d7705 hyperfocused on the procedural FP animations
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 9m46s
2026-01-19 18:51:27 +01:00
4224333963 improved weapon system and cleaner weapon setup
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m20s
2026-01-19 17:25:12 +01:00
4dd48bed70 orienting flying sword 2026-01-19 16:55:22 +01:00
abe6f42a3b some juice work on the first person weapon 2026-01-19 16:46:00 +01:00
27c67dbdd9 Some swords
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 10m0s
2026-01-18 18:34:11 +01:00
98ed361546 reorganizing stuff
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 17s
Create tag and build when new code gets to main / Export (push) Successful in 9m26s
2026-01-18 17:04:28 +01:00
eb1c7f78fa flying knockback as well
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Has been cancelled
2026-01-18 16:58:23 +01:00
35b9ea383c knockback component 2026-01-18 12:39:01 +01:00
9690280cd7 better spawning
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m36s
2026-01-18 10:27:21 +01:00
65538495c4 spawning
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 9m59s
2026-01-17 23:18:06 +01:00
561e026834 ok so this should be the way to go
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m24s
2026-01-17 21:51:57 +01:00
7c74b8b5e5 removing broken ABC and refactoring enemy movement
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 10m2s
2026-01-17 19:55:51 +01:00
f7705a6d57 moving files around
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 10m3s
2026-01-17 17:58:23 +01:00
0dcf4a3f99 fixed damage composition issue 2026-01-17 17:47:14 +01:00
4ccdbc0ee6 broken composition and signals 2026-01-17 17:02:31 +01:00
0436053c62 broken composition and signals 2026-01-17 17:02:16 +01:00
6b97c226f1 setup damage types and modifiers as resources
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 10m48s
2026-01-17 14:32:48 +01:00
b1e78df6c7 some damage interfacing 2026-01-17 11:02:17 +01:00
5908494977 two enemy types, ready to refactor 2026-01-17 10:10:14 +01:00
63529a11ae removed tool script stuff
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 9m57s
2026-01-16 18:36:36 +01:00
255b87f991 basic interface and no success trying to use them in a Tool script 2026-01-16 18:35:58 +01:00
fd3eb35782 added enemy inputs as a resource
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 9m48s
2026-01-16 11:18:57 +01:00
9e75193731 enemies can move, also changed and named a few collision layers
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m18s
2026-01-16 11:05:02 +01:00
609078c584 enemy work
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 10m32s
2026-01-15 21:47:17 +01:00
893126ef78 starting on enemies 2026-01-14 18:10:37 +01:00
6737668391 groundslide camera setup
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m16s
2026-01-14 17:21:57 +01:00
ca77579168 ground sliding under stuff 2026-01-14 15:26:41 +01:00
c6559d593a fixed slope ground slide
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 9m32s
2026-01-14 10:21:50 +01:00
e32dac9e6e broken sloped slide
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 9m32s
2026-01-13 23:52:44 +01:00
30b4d1a2eb jumping from slides and some improvement on air gliding 2026-01-13 14:22:26 +01:00
2fa4ce68e7 revamped the dash, fixed an infinite jump issue and fixed buffered inputs
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m15s
2026-01-13 11:18:56 +01:00
80e533d98e simple slam and changed wall hugging to only work when input is towards the wall 2026-01-13 09:43:58 +01:00
0e3e258fd3 basic slide and air glide mechanic
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 17s
Create tag and build when new code gets to main / Export (push) Successful in 10m40s
2026-01-12 17:47:32 +01:00
c7991198ea code cleanup 2026-01-12 16:43:52 +01:00
1a4b2f4c19 Ended with remapping and removed old junk
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 10m34s
2026-01-12 15:41:43 +01:00
52a9c3f120 Remapped some inputs and added slide, slam and parry mappings 2026-01-12 14:58:43 +01:00
2301884418 added a wall jump section in the GYM 2026-01-12 12:01:40 +01:00
04054cfeae Added ground-like movement (i.e. air control when close to ground) and wall jumping away from the wall is always possible even when facing it 2026-01-12 11:52:35 +01:00
66be7838bb buffered inputs revamped and added mantle jumps and dashed
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 21s
Create tag and build when new code gets to main / Export (push) Successful in 10m30s
2026-01-11 18:14:53 +01:00
1eb65d1520 some shader work and improved mantle feel 2026-01-11 17:09:58 +01:00
f2a39316ba shader changes that don't do anything
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 9m48s
2026-01-07 17:11:49 +01:00
fffd8c947b implementing jump input buffering on grounded
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 9m47s
2026-01-07 09:58:18 +01:00
a1d57d6a1a some tuto fixing
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 9m49s
2026-01-06 16:35:17 +01:00
941205af2b small gravity and jump balancing, removed wall jumping coyote times
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 9m34s
2026-01-06 16:08:39 +01:00
6c2ad89687 fixing the manlting into geo
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 9m42s
2026-01-06 12:36:38 +01:00
59494f9e98 updating CI to build for linux as well
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 9m34s
2025-12-25 09:37:51 +01:00
510246c341 fix a scene load issue
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 21s
Create tag and build when new code gets to main / Export (push) Successful in 8m22s
2025-12-22 14:25:17 +01:00
b184bcdea5 added a small dash when leaving a wall run organically
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 8m36s
2025-12-21 17:23:38 +01:00
cf52af4237 mantling after aimed dash with new mantle system 2025-12-21 16:44:35 +01:00
e0fc301414 fixed user stuff
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 17s
Create tag and build when new code gets to main / Export (push) Successful in 8m10s
2025-12-19 19:11:53 +01:00
b792e8721c mantle system fix amazing
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 22s
Create tag and build when new code gets to main / Export (push) Successful in 8m19s
2025-12-19 18:59:34 +01:00
2e2df4ff50 new broken mantle system and fixed lots of gamefeel regarding wall hugs and jumps and coyote time
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 8m51s
2025-12-17 16:39:10 +01:00
a84e0ecfb3 Merge branch 'main' of https://git.game-dev.space/minimata/MovementTests
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 8m25s
2025-12-15 11:20:39 +01:00
f828c1d786 added a coyote time for wall jumps 2025-12-15 11:20:17 +01:00
a98785abec Update .gitea/workflows/main.yaml
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 8m49s
2025-12-10 21:26:25 +00:00
7c4e541446 fixed input mapping context issue
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 6m5s
2025-12-10 17:10:41 +01:00
7d31d17034 tuto fixes
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 6m7s
2025-12-10 10:04:05 +01:00
2ff8cc74cc camera incline on wall run and normal run
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 21s
Create tag and build when new code gets to main / Export (push) Successful in 6m17s
2025-12-08 12:23:36 +01:00
fabafbb35b small improvements on the wall run
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 5m54s
2025-11-14 16:39:17 +01:00
0b0163a0ac finally managed to pin down the in game UI and control issues for keyboard
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 5m43s
2025-11-14 12:32:03 +01:00
5b3d6c9f19 can quit menus using B button
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 6m5s
2025-11-14 11:41:11 +01:00
ac14352e7f wall run, keyboard controls, mouse sensitivity setting, and more
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 6m15s
2025-11-13 22:38:44 +01:00
27130257c9 small camera animation on mantle
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 6m0s
2025-11-11 11:38:49 +01:00
e70a2e7537 keeping more intertia after dashes and mantles
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 6m6s
2025-11-11 09:52:57 +01:00
6051588f24 lots of tutorial fixed
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 7m39s
2025-11-10 14:55:16 +01:00
c895dfe9a0 made a dedicated scene for simple on-screen tutorials
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 6m11s
2025-11-08 10:56:35 +01:00
1ea3945cf6 final tutorial setup and UI fix
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 19s
Create tag and build when new code gets to main / Export (push) Successful in 6m9s
2025-11-06 09:29:05 +01:00
29d9f44142 basic tutorial setup
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 18s
Create tag and build when new code gets to main / Export (push) Successful in 6m12s
2025-11-05 16:08:36 +01:00
31b7b5ea0c adding windows ARM target
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 17s
Create tag and build when new code gets to main / Export (push) Successful in 6m40s
2025-11-05 11:06:51 +01:00
78ab2cc637 small changes
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 16s
Create tag and build when new code gets to main / Export (push) Successful in 4m34s
2025-10-31 16:31:21 +01:00
fd16342aca getting the weapon tutorial
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 16s
Create tag and build when new code gets to main / Export (push) Successful in 4m47s
2025-10-31 16:18:59 +01:00
2d3a1b0d4c lift fix
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 16s
Create tag and build when new code gets to main / Export (push) Successful in 4m48s
2025-10-31 11:04:42 +01:00
1c7abeb0d9 tutorial is set up and final lift as well
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Successful in 4m49s
2025-10-29 18:48:49 +01:00
97828ecdda tutorial is set up and final lift as well
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 20s
Create tag and build when new code gets to main / Export (push) Has been cancelled
2025-10-29 18:47:52 +01:00
9529 changed files with 211085 additions and 2702 deletions

View File

@@ -54,22 +54,12 @@ jobs:
- name: Import resources and build solution
run: |
godot --headless --editor --build-solutions --quit --import --path $PWD
- name: Build Windows
run: |
mkdir -v -p build/windows
godot --headless --verbose --build-solutions --export-release "Windows Desktop" build/windows/${{ env.GAME_NAME }}.exe
zip -r Windows.zip build/windows
# - name: Linux Build
# run: |
# mkdir -v -p build/linux
# godot --headless --verbose --export-release "Linux/X11" build/linux/${{ env.GAME_NAME }}.x86_64
# zip -r Linux.zip build/linux
# - name: Mac Build
# run: |
# mkdir -v -p build/mac
# godot --headless --verbose --export-release "macOS" build/mac/${{ env.GAME_NAME }}.zip
# zip -r Mac.zip build/mac
- name: Upload to Itch
uses: KikimoraGames/itch-publish@v0.0.3
with:
@@ -79,21 +69,48 @@ jobs:
buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
gameData: Windows.zip
buildChannel: windows
# - name: Upload to Itch
# uses: KikimoraGames/itch-publish@v0.0.3
# with:
# butlerApiKey: ${{ secrets.BUTLER_TOKEN }}
# itchUsername: ${{ env.ITCHIO_USERNAME }}
# itchGameId: ${{ env.ITCHIO_GAMEID }}
# buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
# gameData: Linux.zip
# buildChannel: linux
# - name: Upload to Itch
# uses: KikimoraGames/itch-publish@v0.0.3
# with:
# butlerApiKey: ${{ secrets.BUTLER_TOKEN }}
# itchUsername: ${{ env.ITCHIO_USERNAME }}
# itchGameId: ${{ env.ITCHIO_GAMEID }}
# buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
# gameData: Mac.zip
# buildChannel: mac
- name: Build Windows ARM
run: |
mkdir -v -p build/windowsArm
godot --headless --verbose --build-solutions --export-release "Windows ARM" build/windowsArm/${{ env.GAME_NAME }}.exe
zip -r WindowsArm.zip build/windowsArm
- name: Upload to Itch
uses: KikimoraGames/itch-publish@v0.0.3
with:
butlerApiKey: ${{ secrets.BUTLER_TOKEN }}
itchUsername: ${{ env.ITCHIO_USERNAME }}
itchGameId: ${{ env.ITCHIO_GAMEID }}
buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
gameData: WindowsArm.zip
buildChannel: windows-arm
- name: Linux Build
run: |
mkdir -v -p build/linux
godot --headless --verbose --export-release "Linux/X11" build/linux/${{ env.GAME_NAME }}.x86_64
zip -r Linux.zip build/linux
- name: Upload to Itch
uses: KikimoraGames/itch-publish@v0.0.3
with:
butlerApiKey: ${{ secrets.BUTLER_TOKEN }}
itchUsername: ${{ env.ITCHIO_USERNAME }}
itchGameId: ${{ env.ITCHIO_GAMEID }}
buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
gameData: Linux.zip
buildChannel: linux
- name: Mac Build
run: |
mkdir -v -p build/mac
godot --headless --verbose --export-release "macOS" build/mac/${{ env.GAME_NAME }}.zip
zip -r Mac.zip build/mac
- name: Upload to Itch
uses: KikimoraGames/itch-publish@v0.0.3
with:
butlerApiKey: ${{ secrets.BUTLER_TOKEN }}
itchUsername: ${{ env.ITCHIO_USERNAME }}
itchGameId: ${{ env.ITCHIO_GAMEID }}
buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
gameData: Mac.zip
buildChannel: mac

1
.gitignore vendored
View File

@@ -10,6 +10,7 @@
.import/
/builds
/communication
# Imported translations (automatically generated from CSV files)
*.translation

View File

@@ -1,4 +1,8 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAction_00601_002Ecs_002Fl_003AC_0021_003FUsers_003FMinimata_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F7c0f83388bfc4d2c9d09befcec9dd79bc90908_003Fb8_003F4d300c4d_003FAction_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAction_00602_002Ecs_002Fl_003AC_0021_003FUsers_003FMinimata_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F7c0f83388bfc4d2c9d09befcec9dd79bc90908_003F87_003Fded27e2d_003FAction_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEnemy_005FScriptMethods_002Egenerated_002Ecs_002Fl_003AC_0021_003FUsers_003FMinimata_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F8e71dc81611862c01a2cb998a1f327de14747655_003FEnemy_005FScriptMethods_002Egenerated_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANode_002Ecs_002Fl_003AC_0021_003FUsers_003FMinimata_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F716d154fef5cbe863cd637bd32beda6e3cec5f12e8fed2dc5b2d8149a0d558ab_003FNode_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANode_002Ecs_002Fl_003AC_0021_003FUsers_003FMinimata_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fdf73a4db74df89d59655c5fb6326406f47fbfa9af1fa81518fe0a07c49d34133_003FNode_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASceneTree_002Ecs_002Fl_003AC_0021_003FUsers_003FMinimata_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F8d6960554e939a669841b1ece03d27df4ab42f92bb80be3767eaec8cdaccf84b_003FSceneTree_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:Boolean x:Key="/Default/UserDictionary/Words/=floorplane/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View File

@@ -6,11 +6,15 @@ extends Control
@export var options_packed_scene : PackedScene
@export var credits_packed_scene : PackedScene
@export var menu_context : GUIDEMappingContext
@export var back_action : GUIDEAction
var options_scene
var credits_scene
var sub_menu
func load_game_scene() -> void:
GUIDE.disable_mapping_context(menu_context)
SceneLoader.load_scene(game_scene_path)
func new_game() -> void:
@@ -73,7 +77,12 @@ func _ready() -> void:
_add_or_hide_options()
_add_or_hide_credits()
_hide_new_game_if_unset()
_setup_inputs()
func _setup_inputs() -> void:
GUIDE.enable_mapping_context(menu_context)
back_action.triggered.connect(_on_back_button_pressed)
func _on_new_game_button_pressed() -> void:
new_game()

View File

@@ -9,16 +9,19 @@ extends OverlaidMenu
var popup_open : Node
var previous_mapping_contexts : Array
func on_enter_tree() -> void:
pass
#previous_mapping_contexts = GUIDE.get_enabled_mapping_contexts()
#GUIDE.enable_mapping_context(menu_context)
var is_listening_to_inputs = true
func _enter_tree() -> void:
super._enter_tree()
previous_mapping_contexts = GUIDE.get_enabled_mapping_contexts()
for previous_context in previous_mapping_contexts:
GUIDE.disable_mapping_context(previous_context)
GUIDE.enable_mapping_context(menu_context)
func on_exit_tree() -> void:
pass
#GUIDE.disable_mapping_context(menu_context)
#for previous_context in previous_mapping_contexts:
#GUIDE.enable_mapping_context(previous_context)
func _exit_tree() -> void:
GUIDE.disable_mapping_context(menu_context)
for previous_context in previous_mapping_contexts:
GUIDE.enable_mapping_context(previous_context)
func close_popup() -> void:
if popup_open != null:
@@ -43,10 +46,15 @@ func open_options_menu() -> void:
var options_scene := options_packed_scene.instantiate()
add_child(options_scene)
_disable_focus.call_deferred()
is_listening_to_inputs = false
await options_scene.tree_exiting
is_listening_to_inputs = true
_enable_focus.call_deferred()
func _handle_cancel_input() -> void:
if not is_listening_to_inputs:
return
if popup_open != null:
close_popup()
else:
@@ -68,6 +76,8 @@ func _ready() -> void:
_hide_exit_for_web()
_hide_options_if_unset()
_hide_main_menu_if_unset()
back_action.triggered.connect(_handle_cancel_input)
func _on_restart_button_pressed() -> void:
%ConfirmRestart.popup_centered()
@@ -93,3 +103,5 @@ func _on_confirm_main_menu_confirmed() -> void:
func _on_confirm_exit_confirmed() -> void:
get_tree().quit()

View File

@@ -11,6 +11,10 @@ extends Control
process_mode = PROCESS_MODE_INHERIT
@export var makes_mouse_visible : bool = true
@export var back_action : GUIDEAction
signal menu_closing
var _initial_pause_state : bool = false
var _initial_focus_mode : FocusMode = FOCUS_ALL
var _initial_mouse_mode : Input.MouseMode
@@ -18,6 +22,7 @@ var _initial_focus_control
var _scene_tree : SceneTree
func close() -> void:
menu_closing.emit()
_scene_tree.paused = _initial_pause_state
Input.set_mouse_mode(_initial_mouse_mode)
if is_instance_valid(_initial_focus_control) and _initial_focus_control.is_inside_tree():
@@ -29,13 +34,14 @@ func _handle_cancel_input() -> void:
close()
func _unhandled_input(event : InputEvent) -> void:
return
if event.is_action_pressed("ui_cancel"):
_handle_cancel_input()
get_viewport().set_input_as_handled()
func _on_close_button_pressed() -> void:
close()
func _enter_tree() -> void:
_scene_tree = get_tree()
_initial_pause_state = _scene_tree.paused

View File

@@ -12,3 +12,11 @@ extends OverlaidMenu
if menu_scene:
var _instance = menu_scene.instantiate()
%MenuContainer.add_child(_instance)
func blocking_close() -> void:
get_viewport().set_input_as_handled()
super.close()
func _ready() -> void:
back_action.triggered.connect(blocking_close)

View File

@@ -4,26 +4,30 @@ extends Node
## Node for opening a pause menu when detecting a 'ui_cancel' event.
@export var pause_menu_packed : PackedScene
@export var focused_viewport : Viewport
@export var player : CharacterBody3D
@export_group("Inputs")
@export var base_mode:GUIDEMappingContext
@export var pause:GUIDEAction
var menu_already_open = false
func _ready() -> void:
# GUIDE.enable_mapping_context(base_mode)
pause.triggered.connect(on_input_pause)
func on_input_pause():
if menu_already_open:
return
menu_already_open = true
if not focused_viewport:
focused_viewport = get_viewport()
var _initial_focus_control = focused_viewport.gui_get_focus_owner()
var current_menu = pause_menu_packed.instantiate()
current_menu.menu_closing.connect(player.LoadSettings)
get_tree().current_scene.call_deferred("add_child", current_menu)
await current_menu.tree_exited
menu_already_open = false
if is_inside_tree() and _initial_focus_control:
_initial_focus_control.grab_focus()
func _unhandled_input(event : InputEvent) -> void:
if event.is_action_pressed("ui_cancel"):
pass

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<defs>
<style>
.cls-1 {
fill: #f4b144;
stroke-width: 0px;
}
</style>
</defs>
<rect class="cls-1" x="40.5" y="4" width="15" height="56" rx="7.5" ry="7.5"/>
<rect class="cls-1" x="8.5" y="4" width="15" height="56" rx="7.5" ry="7.5"/>
</svg>

After

Width:  |  Height:  |  Size: 415 B

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://gdl502i1v8r0"
path="res://.godot/imported/Pause.svg-bf8a05fc34af72ad423e24582ebdfe77.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/Pause.svg"
dest_files=["res://.godot/imported/Pause.svg-bf8a05fc34af72ad423e24582ebdfe77.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Play" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<defs>
<style>
.cls-1 {
fill: #39b54a;
stroke-width: 0px;
}
</style>
</defs>
<path class="cls-1" d="m54.72,36.38L14.34,59.7c-3.37,1.95-7.59-.49-7.59-4.38V8.69c0-3.9,4.22-6.33,7.59-4.38l40.38,23.31c3.37,1.95,3.37,6.82,0,8.77Z"/>
</svg>

After

Width:  |  Height:  |  Size: 386 B

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bkiomqdsxl5am"
path="res://.godot/imported/Play.svg-7dc254fbb0920cfd077cd3ee6c205a32.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/Play.svg"
dest_files=["res://.godot/imported/Play.svg-7dc254fbb0920cfd077cd3ee6c205a32.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhcslgdhamqy2"
path="res://.godot/imported/ShaderPreset.svg-baad8a708c9f1500bbd83c441bef7504.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShaderPreset.svg"
dest_files=["res://.godot/imported/ShaderPreset.svg-baad8a708c9f1500bbd83c441bef7504.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

View File

@@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ds3kdjxwpmo1g"
path="res://.godot/imported/ShakeTypeBase.svg-a9a71023b460c004e6d4f7703e2899c5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakeTypeBase.svg"
dest_files=["res://.godot/imported/ShakeTypeBase.svg-a9a71023b460c004e6d4f7703e2899c5.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=0.12
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.98 14.45">
<defs>
<style>
.cls-1 {
fill: #efefef;
stroke-width: 0px;
}
</style>
</defs>
<g id="Layer_1-2" data-name="Layer 1-2">
<path class="cls-1" d="m7.99.01C4,.01.76,3.25.76,7.23c0,.64.08,1.25.24,1.83.75-1.14,1.53-2.34,1.86-2.84.12-.18.3-.3.51-.34.58-2.01,2.43-3.47,4.63-3.47,1.95,0,3.63,1.16,4.38,2.83l1.18-2.64c-1.33-1.59-3.33-2.6-5.56-2.6h-.01Zm7.15,6.15l-2.63,4.97c-.14.26-.41.42-.7.42-.2,0-.41-.08-.55-.24l-.29-.3c-.82.65-1.86,1.04-2.98,1.04-.11,0-.2,0-.31-.01-.18.28-.33.52-.42.67-.14.24-.39.37-.66.37-.25,0-.48-.12-.63-.33-.28-.39-.87-1.19-1.48-2.02l-1.02-1.41-1.54,1.81c1.28,2,3.52,3.32,6.07,3.32,3.99,0,7.23-3.24,7.23-7.22,0-.36-.02-.72-.08-1.07h-.01Z"/>
<path class="cls-1" d="m15.92,3.34l-.88,1.69-2.97,5.61c-.04.06-.1.1-.17.1-.05,0-.08-.02-.12-.06l-.27-.28-2.04-2.05s-.08-.06-.13-.06-.11.02-.14.08c-.64,1.02-1.55,2.5-2.09,3.36-.11.18-.2.33-.28.45-.04.06-.1.08-.16.08-.05,0-.11-.02-.14-.07-.14-.19-.37-.52-.65-.89-.65-.9-1.57-2.16-2.17-2.97-.04-.05-.08-.07-.14-.07-.05,0-.1.02-.13.06l-1.77,2.06-1.3,1.52-.37-.28c.12-.18.67-1.05,1.33-2.03.72-1.08,1.53-2.32,1.96-3,.07-.1.12-.18.17-.25.04-.05.1-.08.16-.08.05,0,.11.02.14.08.46.65,1.8,2.52,2.64,3.71.04.05.08.07.13.07.07,0,.13-.04.17-.1l2.18-4.42c.04-.07.1-.11.16-.11.05,0,.1.02.13.06.48.58,1.48,1.77,2.25,2.67.04.05.08.06.13.06.07,0,.13-.04.17-.11l1.04-2.31,1.29-2.91.19-.42c.08-.19.28-.31.47-.31.07,0,.16.02.23.06l.75.37c.27.12.37.45.23.7h0Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dbffv1avjrgvs"
path="res://.godot/imported/Shaker.svg-c2d9686bdc2ea03ed737291e31637bc9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/Shaker.svg"
dest_files=["res://.godot/imported/Shaker.svg-c2d9686bdc2ea03ed737291e31637bc9.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=4.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.98 14.45">
<defs>
<style>
.cls-1 {
fill: #6393ff;
stroke-width: 0px;
}
</style>
</defs>
<g id="Layer_1-2" data-name="Layer 1-2">
<path class="cls-1" d="m7.99.01C4,.01.76,3.25.76,7.23c0,.64.08,1.25.24,1.83.75-1.14,1.53-2.34,1.86-2.84.12-.18.3-.3.51-.34.58-2.01,2.43-3.47,4.63-3.47,1.95,0,3.63,1.16,4.38,2.83l1.18-2.64c-1.33-1.59-3.33-2.6-5.56-2.6h-.01Zm7.15,6.15l-2.63,4.97c-.14.26-.41.42-.7.42-.2,0-.41-.08-.55-.24l-.29-.3c-.82.65-1.86,1.04-2.98,1.04-.11,0-.2,0-.31-.01-.18.28-.33.52-.42.67-.14.24-.39.37-.66.37-.25,0-.48-.12-.63-.33-.28-.39-.87-1.19-1.48-2.02l-1.02-1.41-1.54,1.81c1.28,2,3.52,3.32,6.07,3.32,3.99,0,7.23-3.24,7.23-7.22,0-.36-.02-.72-.08-1.07h-.01Z"/>
<path class="cls-1" d="m15.92,3.34l-.88,1.69-2.97,5.61c-.04.06-.1.1-.17.1-.05,0-.08-.02-.12-.06l-.27-.28-2.04-2.05s-.08-.06-.13-.06-.11.02-.14.08c-.64,1.02-1.55,2.5-2.09,3.36-.11.18-.2.33-.28.45-.04.06-.1.08-.16.08-.05,0-.11-.02-.14-.07-.14-.19-.37-.52-.65-.89-.65-.9-1.57-2.16-2.17-2.97-.04-.05-.08-.07-.14-.07-.05,0-.1.02-.13.06l-1.77,2.06-1.3,1.52-.37-.28c.12-.18.67-1.05,1.33-2.03.72-1.08,1.53-2.32,1.96-3,.07-.1.12-.18.17-.25.04-.05.1-.08.16-.08.05,0,.11.02.14.08.46.65,1.8,2.52,2.64,3.71.04.05.08.07.13.07.07,0,.13-.04.17-.1l2.18-4.42c.04-.07.1-.11.16-.11.05,0,.1.02.13.06.48.58,1.48,1.77,2.25,2.67.04.05.08.06.13.06.07,0,.13-.04.17-.11l1.04-2.31,1.29-2.91.19-.42c.08-.19.28-.31.47-.31.07,0,.16.02.23.06l.75.37c.27.12.37.45.23.7h0Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dn8xxp7r67as3"
path="res://.godot/imported/Shaker2D.svg-a5c6b73315dff06dec7bf743af8bf0a9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/Shaker2D.svg"
dest_files=["res://.godot/imported/Shaker2D.svg-a5c6b73315dff06dec7bf743af8bf0a9.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.99 14.45">
<defs>
<style>
.cls-1 {
fill: #fc7f7f;
stroke-width: 0px;
}
</style>
</defs>
<g id="Layer_1-2" data-name="Layer 1">
<path class="cls-1" d="m7.99,0C4,0,.76,3.24.76,7.22c0,.64.08,1.25.24,1.83.75-1.14,1.53-2.34,1.86-2.84.12-.18.3-.3.51-.34.58-2.01,2.43-3.47,4.63-3.47,1.95,0,3.63,1.16,4.38,2.83l1.18-2.64c-1.33-1.59-3.33-2.6-5.56-2.6Zm7.15,6.15l-2.63,4.97c-.14.26-.41.42-.7.42-.2,0-.41-.08-.55-.24l-.29-.3c-.82.65-1.86,1.04-2.98,1.04-.11,0-.2,0-.31-.01-.18.28-.33.52-.42.67-.14.24-.39.37-.66.37-.25,0-.48-.12-.63-.33-.28-.39-.87-1.19-1.48-2.02l-1.02-1.41-1.54,1.81c1.28,2,3.52,3.32,6.07,3.32,3.99,0,7.23-3.24,7.23-7.22,0-.36-.02-.72-.08-1.07Z"/>
<path class="cls-1" d="m15.92,3.33l-.88,1.69-2.97,5.61c-.04.06-.1.1-.17.1-.05,0-.08-.02-.12-.06l-.27-.28-2.04-2.05s-.08-.06-.13-.06-.11.02-.14.08c-.64,1.02-1.55,2.5-2.09,3.36-.11.18-.2.33-.28.45-.04.06-.1.08-.16.08-.05,0-.11-.02-.14-.07-.14-.19-.37-.52-.65-.89-.65-.9-1.57-2.16-2.17-2.97-.04-.05-.08-.07-.14-.07-.05,0-.1.02-.13.06l-1.77,2.06-1.3,1.52-.37-.28c.12-.18.67-1.05,1.33-2.03.72-1.08,1.53-2.32,1.96-3,.07-.1.12-.18.17-.25.04-.05.1-.08.16-.08.05,0,.11.02.14.08.46.65,1.8,2.52,2.64,3.71.04.05.08.07.13.07.07,0,.13-.04.17-.1l2.18-4.42c.04-.07.1-.11.16-.11.05,0,.1.02.13.06.48.58,1.48,1.77,2.25,2.67.04.05.08.06.13.06.07,0,.13-.04.17-.11l1.04-2.31,1.29-2.91.19-.42c.08-.19.28-.31.47-.31.07,0,.16.02.23.06l.75.37c.27.12.37.45.23.7Z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dm4yc7w77q1u8"
path="res://.godot/imported/Shaker3D.svg-ed425183c69b0c043ce3ce5088c6ff49.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/Shaker3D.svg"
dest_files=["res://.godot/imported/Shaker3D.svg-ed425183c69b0c043ce3ce5088c6ff49.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 15.98 14.45">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
}
.cls-1, .cls-2 {
stroke-width: 0px;
}
.cls-2 {
fill: url(#linear-gradient-2);
}
</style>
<linearGradient id="linear-gradient" x1="2.19" y1="15.22" x2="13.97" y2="2.21" gradientTransform="translate(0 16.02) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fff"/>
<stop offset="1" stop-color="#999b9e"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1=".56" y1="3.27" x2="16.55" y2="12.71" gradientTransform="translate(0 16.02) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fff"/>
<stop offset="1" stop-color="#cf519d"/>
</linearGradient>
</defs>
<path class="cls-1" d="m7.99,0C4,0,.76,3.25.76,7.23c0,.64.08,1.25.24,1.83.75-1.14,1.53-2.34,1.86-2.84.12-.18.3-.3.51-.34.58-2.01,2.43-3.47,4.63-3.47,1.95,0,3.63,1.16,4.38,2.83l1.18-2.64c-1.33-1.59-3.33-2.6-5.56-2.6h-.01Zm7.15,6.15l-2.63,4.97c-.14.26-.41.42-.7.42-.2,0-.41-.08-.55-.24l-.29-.3c-.82.65-1.86,1.04-2.98,1.04-.11,0-.2,0-.31-.01-.18.28-.33.52-.42.67-.14.24-.39.37-.66.37-.25,0-.48-.12-.63-.33-.28-.39-.87-1.19-1.48-2.02l-1.02-1.41-1.54,1.81c1.28,2,3.52,3.32,6.07,3.32,3.99,0,7.23-3.24,7.23-7.22,0-.36-.02-.72-.08-1.07,0,0-.01,0-.01,0Z"/>
<path class="cls-2" d="m15.92,3.34l-.88,1.69-2.97,5.61c-.04.06-.1.1-.17.1-.05,0-.08-.02-.12-.06l-.27-.28-2.04-2.05s-.08-.06-.13-.06-.11.02-.14.08c-.64,1.02-1.55,2.5-2.09,3.36-.11.18-.2.33-.28.45-.04.06-.1.08-.16.08-.05,0-.11-.02-.14-.07-.14-.19-.37-.52-.65-.89-.65-.9-1.57-2.16-2.17-2.97-.04-.05-.08-.07-.14-.07-.05,0-.1.02-.13.06l-1.77,2.06-1.3,1.52-.37-.28c.12-.18.67-1.05,1.33-2.03.72-1.08,1.53-2.32,1.96-3,.07-.1.12-.18.17-.25.04-.05.1-.08.16-.08.05,0,.11.02.14.08.46.65,1.8,2.52,2.64,3.71.04.05.08.07.13.07.07,0,.13-.04.17-.1l2.18-4.42c.04-.07.1-.11.16-.11.05,0,.1.02.13.06.48.58,1.48,1.77,2.25,2.67.04.05.08.06.13.06.07,0,.13-.04.17-.11l1.04-2.31,1.29-2.91.19-.42c.08-.19.28-.31.47-.31.07,0,.16.02.23.06l.75.37c.27.12.37.45.23.7h0Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://do6o8aob6hi6v"
path="res://.godot/imported/ShakerEmitter.svg-99409f1c9ef4b7c7de1c60cac5619af4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerEmitter.svg"
dest_files=["res://.godot/imported/ShakerEmitter.svg-99409f1c9ef4b7c7de1c60cac5619af4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=4.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 15.98 14.45">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
}
.cls-1, .cls-2 {
stroke-width: 0px;
}
.cls-2 {
fill: url(#linear-gradient-2);
}
</style>
<linearGradient id="linear-gradient" x1="2.19" y1="15.22" x2="13.97" y2="2.21" gradientTransform="translate(0 16.02) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#6393ff"/>
<stop offset="1" stop-color="#3a56a6"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1=".56" y1="3.27" x2="16.55" y2="12.71" gradientTransform="translate(0 16.02) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#44577e"/>
<stop offset="1" stop-color="#cf519d"/>
</linearGradient>
</defs>
<path class="cls-1" d="m7.99,0C4,0,.76,3.25.76,7.23c0,.64.08,1.25.24,1.83.75-1.14,1.53-2.34,1.86-2.84.12-.18.3-.3.51-.34.58-2.01,2.43-3.47,4.63-3.47,1.95,0,3.63,1.16,4.38,2.83l1.18-2.64c-1.33-1.59-3.33-2.6-5.56-2.6h-.01Zm7.15,6.15l-2.63,4.97c-.14.26-.41.42-.7.42-.2,0-.41-.08-.55-.24l-.29-.3c-.82.65-1.86,1.04-2.98,1.04-.11,0-.2,0-.31-.01-.18.28-.33.52-.42.67-.14.24-.39.37-.66.37-.25,0-.48-.12-.63-.33-.28-.39-.87-1.19-1.48-2.02l-1.02-1.41-1.54,1.81c1.28,2,3.52,3.32,6.07,3.32,3.99,0,7.23-3.24,7.23-7.22,0-.36-.02-.72-.08-1.07,0,0-.01,0-.01,0Z"/>
<path class="cls-2" d="m15.92,3.34l-.88,1.69-2.97,5.61c-.04.06-.1.1-.17.1-.05,0-.08-.02-.12-.06l-.27-.28-2.04-2.05s-.08-.06-.13-.06-.11.02-.14.08c-.64,1.02-1.55,2.5-2.09,3.36-.11.18-.2.33-.28.45-.04.06-.1.08-.16.08-.05,0-.11-.02-.14-.07-.14-.19-.37-.52-.65-.89-.65-.9-1.57-2.16-2.17-2.97-.04-.05-.08-.07-.14-.07-.05,0-.1.02-.13.06l-1.77,2.06-1.3,1.52-.37-.28c.12-.18.67-1.05,1.33-2.03.72-1.08,1.53-2.32,1.96-3,.07-.1.12-.18.17-.25.04-.05.1-.08.16-.08.05,0,.11.02.14.08.46.65,1.8,2.52,2.64,3.71.04.05.08.07.13.07.07,0,.13-.04.17-.1l2.18-4.42c.04-.07.1-.11.16-.11.05,0,.1.02.13.06.48.58,1.48,1.77,2.25,2.67.04.05.08.06.13.06.07,0,.13-.04.17-.11l1.04-2.31,1.29-2.91.19-.42c.08-.19.28-.31.47-.31.07,0,.16.02.23.06l.75.37c.27.12.37.45.23.7h0Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://blvoltt74gide"
path="res://.godot/imported/ShakerEmitter2D.svg-8c956d5aa03f14ce38dd1438d858114a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerEmitter2D.svg"
dest_files=["res://.godot/imported/ShakerEmitter2D.svg-8c956d5aa03f14ce38dd1438d858114a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 15.99 14.45">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
}
.cls-1, .cls-2 {
stroke-width: 0px;
}
.cls-2 {
fill: url(#linear-gradient-2);
}
</style>
<linearGradient id="linear-gradient" x1="2.19" y1=".79" x2="13.97" y2="13.8" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fc7f7f"/>
<stop offset=".1" stop-color="#f37d80"/>
<stop offset=".27" stop-color="#dd7885"/>
<stop offset=".47" stop-color="#b8708c"/>
<stop offset=".7" stop-color="#856596"/>
<stop offset=".96" stop-color="#4558a3"/>
<stop offset="1" stop-color="#3a56a6"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1=".56" y1="12.74" x2="16.55" y2="3.3" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fc7f7f"/>
<stop offset=".29" stop-color="#f37684"/>
<stop offset=".75" stop-color="#de6092"/>
<stop offset="1" stop-color="#cf519d"/>
</linearGradient>
</defs>
<path class="cls-1" d="m7.99,0C4,0,.76,3.24.76,7.22c0,.64.08,1.25.24,1.83.75-1.14,1.53-2.34,1.86-2.84.12-.18.3-.3.51-.34.58-2.01,2.43-3.47,4.63-3.47,1.95,0,3.63,1.16,4.38,2.83l1.18-2.64C12.23,1,10.23-.01,8-.01h-.01Zm7.15,6.15l-2.63,4.97c-.14.26-.41.42-.7.42-.2,0-.41-.08-.55-.24l-.29-.3c-.82.65-1.86,1.04-2.98,1.04-.11,0-.2,0-.31-.01-.18.28-.33.52-.42.67-.14.24-.39.37-.66.37-.25,0-.48-.12-.63-.33-.28-.39-.87-1.19-1.48-2.02l-1.02-1.41-1.54,1.81c1.28,2,3.52,3.32,6.07,3.32,3.99,0,7.23-3.24,7.23-7.22,0-.36-.02-.72-.08-1.07h-.01Z"/>
<path class="cls-2" d="m15.92,3.33l-.88,1.69-2.97,5.61c-.04.06-.1.1-.17.1-.05,0-.08-.02-.12-.06l-.27-.28-2.04-2.05s-.08-.06-.13-.06-.11.02-.14.08c-.64,1.02-1.55,2.5-2.09,3.36-.11.18-.2.33-.28.45-.04.06-.1.08-.16.08-.05,0-.11-.02-.14-.07-.14-.19-.37-.52-.65-.89-.65-.9-1.57-2.16-2.17-2.97-.04-.05-.08-.07-.14-.07-.05,0-.1.02-.13.06l-1.77,2.06-1.3,1.52L0,11.61c.12-.18.67-1.05,1.33-2.03.72-1.08,1.53-2.32,1.96-3,.07-.1.12-.18.17-.25.04-.05.1-.08.16-.08.05,0,.11.02.14.08.46.65,1.8,2.52,2.64,3.71.04.05.08.07.13.07.07,0,.13-.04.17-.1l2.18-4.42c.04-.07.1-.11.16-.11.05,0,.1.02.13.06.48.58,1.48,1.77,2.25,2.67.04.05.08.06.13.06.07,0,.13-.04.17-.11l1.04-2.31,1.29-2.91.19-.42c.08-.19.28-.31.47-.31.07,0,.16.02.23.06l.75.37c.27.12.37.45.23.7h0Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dbu31ogcp75bh"
path="res://.godot/imported/ShakerEmitter3D.svg-b7aef419023b93692d18599c57d2046e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerEmitter3D.svg"
dest_files=["res://.godot/imported/ShakerEmitter3D.svg-b7aef419023b93692d18599c57d2046e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 55 56">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
}
.cls-1, .cls-2, .cls-3, .cls-4, .cls-5, .cls-6, .cls-7, .cls-8, .cls-9, .cls-10 {
stroke-width: 0px;
}
.cls-2 {
fill: url(#linear-gradient-6);
}
.cls-3 {
fill: #e5e5e5;
}
.cls-4 {
fill: url(#linear-gradient-5);
}
.cls-5 {
fill: url(#linear-gradient-2);
}
.cls-6 {
fill: #d3d3d3;
}
.cls-7 {
fill: url(#linear-gradient-7);
}
.cls-8 {
fill: url(#linear-gradient-3);
}
.cls-9 {
fill: url(#linear-gradient-8);
}
.cls-10 {
fill: url(#linear-gradient-4);
}
</style>
<linearGradient id="linear-gradient" x1="8.13" y1="38.53" x2="15.57" y2="41.07" gradientTransform="translate(0 56) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fff"/>
<stop offset="1" stop-color="#a1a3a6"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="13.79" y1="40.27" x2="19.8" y2="42.32" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-3" x1="18.72" y1="39.75" x2="25.01" y2="41.9" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-4" x1="23.89" y1="41.29" x2="29.39" y2="43.16" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-5" x1="28.85" y1="40.78" x2="34.59" y2="42.74" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-6" x1="33.79" y1="40.27" x2="39.8" y2="42.32" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-7" x1="38.9" y1="41.77" x2="44.2" y2="43.58" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-8" x1="43.32" y1="39.58" x2="50.14" y2="41.91" xlink:href="#linear-gradient"/>
</defs>
<path class="cls-3" d="m8.8,5h46.2V0H3.8C1.7,0,0,1.7,0,3.8v48.4c0,2.1,1.7,3.8,3.8,3.8h47.4c2.1,0,3.8-1.7,3.8-3.8v-29.2h-5v24.2c0,2.1-1.7,3.8-3.8,3.8H8.8c-2.1,0-3.8-1.7-3.8-3.8V8.8c0-2.1,1.7-3.8,3.8-3.8Z"/>
<g>
<path class="cls-6" d="m49,38v2.4c-.52.06-4.04.49-5.35.65-.26.03-.49-.14-.54-.39l-.88-4.4c-.1-.51-.82-.54-.96-.04-.97,3.39-2.1,7.33-2.69,9.39-.13.44-.73.49-.92.07-.99-2.19-2.94-6.47-4.27-9.41-.17-.38-.7-.39-.89-.02-1.05,2.11-2.39,4.79-3.21,6.43-.21.41-.81.35-.92-.1-.38-1.51-1.02-4.02-1.65-6.53-.13-.51-.87-.49-.97.03l-1.77,9.1-.96,5.01c-.39-1.94-1.19-5.92-1.9-9.46-.1-.5-.79-.54-.95-.06-.99,2.96-2.12,6.36-2.88,8.62-.16.49-.88.43-.96-.08-.48-3.08-1.38-8.73-2.13-13.46-.09-.54-.85-.56-.97-.03l-1.27,5.51-.2.9c-.44-.06-5.2-.85-5.77-.94v-2.18h4c.2-.03-.04.2,0,0,.78-3.43,2.64-9.57,3.61-13.77.12-.53.88-.5.97.03.61,3.82,1.66,10.47,2.45,15.51.08.51.79.57.96.08,1.29-3.85,2.76-8.27,3.25-9.74l.74,3.69.91,4.54c.8-5.04,1.85-11.63,2.52-15.81.09-.54.86-.56.97-.02.77,3.68,1.87,8.99,2.72,13.08.1.46.71.54.92.12.93-1.85,1.94-3.89,2.55-5.1.19-.37.72-.36.89.02.8,1.75,2.47,5.44,3.77,8.28.19.42.8.38.92-.07,1.08-3.78,2.58-9.05,3.45-12.11.14-.5.86-.47.96.04.63,3.17,1.87,7.48,2.43,10.23.04.21-.21-.03,0,0h4.02Z"/>
<path class="cls-6" d="m49,37.6v.8c-.52.06-4.04.49-5.35.65-.26.03-.49-.14-.54-.39l-.88-4.4c-.1-.51-.82-.54-.96-.04-.97,3.39-2.1,7.33-2.69,9.39-.13.44-.73.49-.92.07-.99-2.19-2.94-6.47-4.27-9.41-.17-.38-.7-.39-.89-.02-1.05,2.11-2.39,4.79-3.21,6.43-.21.41-.81.35-.92-.1-.38-1.51-1.02-4.02-1.65-6.53-.13-.51-.87-.49-.97.03l-1.77,9.1-.96,5.01c-.39-1.94-1.19-5.92-1.9-9.46-.1-.5-.79-.54-.95-.06-.99,2.96-2.12,6.36-2.88,8.62-.16.49-.88.43-.96-.08-.48-3.08-1.38-8.73-2.13-13.46-.09-.54-.85-.56-.97-.03l-1.27,5.51-.2.9c-.44-.06-5.2-.85-5.77-.94v-.36l3.85-.63c.2-.03.36-.17.4-.37.78-3.43,2.39-10.39,3.36-14.6.12-.53.88-.5.97.03.61,3.82,1.66,10.47,2.45,15.51.08.51.79.57.96.08,1.29-3.85,2.76-8.27,3.25-9.74l.74,3.69.91,4.54c.8-5.04,1.85-11.63,2.52-15.81.09-.54.86-.56.97-.02.77,3.68,1.87,8.99,2.72,13.08.1.46.71.54.92.12.93-1.85,1.94-3.89,2.55-5.1.19-.37.72-.36.89.02.8,1.75,2.47,5.44,3.77,8.28.19.42.8.38.92-.07,1.08-3.78,2.58-9.05,3.45-12.11.14-.5.86-.47.96.04.63,3.17,1.64,8.24,2.2,10.99.04.21.21.36.42.39l3.8.46h.03Z"/>
</g>
<path class="cls-1" d="m13,13c0-1.1-.9-2-2-2s-2,.9-2,2-1,9,2,9,2-7.9,2-9Z"/>
<path class="cls-5" d="m18,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,6,2,6,2-4.9,2-6Z"/>
<path class="cls-8" d="m23,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,7,2,7,2-5.9,2-7Z"/>
<path class="cls-10" d="m28,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,4,2,4,2-2.9,2-4Z"/>
<path class="cls-4" d="m33,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,5,2,5,2-3.9,2-5Z"/>
<path class="cls-2" d="m38,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,6,2,6,2-4.9,2-6Z"/>
<path class="cls-7" d="m43,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,3,2,3,2-1.9,2-3Z"/>
<path class="cls-9" d="m48,13c0-1.1-.9-2-2-2s-2,.9-2,2-1,7,2,7,2-5.9,2-7Z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://24qdtwt14uiu"
path="res://.godot/imported/ShakerPreset.svg-e4c67cf03c32289efa8dece68a179055.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerPreset.svg"
dest_files=["res://.godot/imported/ShakerPreset.svg-e4c67cf03c32289efa8dece68a179055.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 55 56">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
}
.cls-1, .cls-2, .cls-3, .cls-4, .cls-5, .cls-6, .cls-7, .cls-8, .cls-9, .cls-10 {
stroke-width: 0px;
}
.cls-2 {
fill: #6393ff;
}
.cls-3 {
fill: url(#linear-gradient-6);
}
.cls-4 {
fill: url(#linear-gradient-5);
}
.cls-5 {
fill: url(#linear-gradient-2);
}
.cls-6 {
fill: url(#linear-gradient-7);
}
.cls-7 {
fill: url(#linear-gradient-3);
}
.cls-8 {
fill: #4180af;
}
.cls-9 {
fill: url(#linear-gradient-8);
}
.cls-10 {
fill: url(#linear-gradient-4);
}
</style>
<linearGradient id="linear-gradient" x1="8.13" y1="38.53" x2="15.57" y2="41.07" gradientTransform="translate(0 56) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#6393ff"/>
<stop offset="1" stop-color="#f7941d"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="13.79" y1="40.27" x2="19.8" y2="42.32" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-3" x1="18.72" y1="39.75" x2="25.01" y2="41.9" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-4" x1="23.89" y1="41.29" x2="29.39" y2="43.16" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-5" x1="28.85" y1="40.78" x2="34.59" y2="42.74" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-6" x1="33.79" y1="40.27" x2="39.8" y2="42.32" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-7" x1="38.9" y1="41.77" x2="44.2" y2="43.58" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-8" x1="43.32" y1="39.58" x2="50.14" y2="41.91" xlink:href="#linear-gradient"/>
</defs>
<path class="cls-8" d="m8.8,5h46.2V0H3.8C1.7,0,0,1.7,0,3.8v48.4c0,2.1,1.7,3.8,3.8,3.8h47.4c2.1,0,3.8-1.7,3.8-3.8v-29.2h-5v24.2c0,2.1-1.7,3.8-3.8,3.8H8.8c-2.1,0-3.8-1.7-3.8-3.8V8.8c0-2.1,1.7-3.8,3.8-3.8Z"/>
<g>
<path class="cls-2" d="m49,38v2.4c-.52.06-4.04.49-5.35.65-.26.03-.49-.14-.54-.39l-.88-4.4c-.1-.51-.82-.54-.96-.04-.97,3.39-2.1,7.33-2.69,9.39-.13.44-.73.49-.92.07-.99-2.19-2.94-6.47-4.27-9.41-.17-.38-.7-.39-.89-.02-1.05,2.11-2.39,4.79-3.21,6.43-.21.41-.81.35-.92-.1-.38-1.51-1.02-4.02-1.65-6.53-.13-.51-.87-.49-.97.03l-1.77,9.1-.96,5.01c-.39-1.94-1.19-5.92-1.9-9.46-.1-.5-.79-.54-.95-.06-.99,2.96-2.12,6.36-2.88,8.62-.16.49-.88.43-.96-.08-.48-3.08-1.38-8.73-2.13-13.46-.09-.54-.85-.56-.97-.03l-1.27,5.51-.2.9c-.44-.06-5.2-.85-5.77-.94v-2.18h4c.2-.03-.04.2,0,0,.78-3.43,2.64-9.57,3.61-13.77.12-.53.88-.5.97.03.61,3.82,1.66,10.47,2.45,15.51.08.51.79.57.96.08,1.29-3.85,2.76-8.27,3.25-9.74l.74,3.69.91,4.54c.8-5.04,1.85-11.63,2.52-15.81.09-.54.86-.56.97-.02.77,3.68,1.87,8.99,2.72,13.08.1.46.71.54.92.12.93-1.85,1.94-3.89,2.55-5.1.19-.37.72-.36.89.02.8,1.75,2.47,5.44,3.77,8.28.19.42.8.38.92-.07,1.08-3.78,2.58-9.05,3.45-12.11.14-.5.86-.47.96.04.63,3.17,1.87,7.48,2.43,10.23.04.21-.21-.03,0,0h4.02Z"/>
<path class="cls-2" d="m49,37.6v.8c-.52.06-4.04.49-5.35.65-.26.03-.49-.14-.54-.39l-.88-4.4c-.1-.51-.82-.54-.96-.04-.97,3.39-2.1,7.33-2.69,9.39-.13.44-.73.49-.92.07-.99-2.19-2.94-6.47-4.27-9.41-.17-.38-.7-.39-.89-.02-1.05,2.11-2.39,4.79-3.21,6.43-.21.41-.81.35-.92-.1-.38-1.51-1.02-4.02-1.65-6.53-.13-.51-.87-.49-.97.03l-1.77,9.1-.96,5.01c-.39-1.94-1.19-5.92-1.9-9.46-.1-.5-.79-.54-.95-.06-.99,2.96-2.12,6.36-2.88,8.62-.16.49-.88.43-.96-.08-.48-3.08-1.38-8.73-2.13-13.46-.09-.54-.85-.56-.97-.03l-1.27,5.51-.2.9c-.44-.06-5.2-.85-5.77-.94v-.36l3.85-.63c.2-.03.36-.17.4-.37.78-3.43,2.39-10.39,3.36-14.6.12-.53.88-.5.97.03.61,3.82,1.66,10.47,2.45,15.51.08.51.79.57.96.08,1.29-3.85,2.76-8.27,3.25-9.74l.74,3.69.91,4.54c.8-5.04,1.85-11.63,2.52-15.81.09-.54.86-.56.97-.02.77,3.68,1.87,8.99,2.72,13.08.1.46.71.54.92.12.93-1.85,1.94-3.89,2.55-5.1.19-.37.72-.36.89.02.8,1.75,2.47,5.44,3.77,8.28.19.42.8.38.92-.07,1.08-3.78,2.58-9.05,3.45-12.11.14-.5.86-.47.96.04.63,3.17,1.64,8.24,2.2,10.99.04.21.21.36.42.39l3.8.46h.03Z"/>
</g>
<path class="cls-1" d="m13,13c0-1.1-.9-2-2-2s-2,.9-2,2-1,9,2,9,2-7.9,2-9Z"/>
<path class="cls-5" d="m18,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,6,2,6,2-4.9,2-6Z"/>
<path class="cls-7" d="m23,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,7,2,7,2-5.9,2-7Z"/>
<path class="cls-10" d="m28,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,4,2,4,2-2.9,2-4Z"/>
<path class="cls-4" d="m33,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,5,2,5,2-3.9,2-5Z"/>
<path class="cls-3" d="m38,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,6,2,6,2-4.9,2-6Z"/>
<path class="cls-6" d="m43,13c0-1.1-.9-2-2-2s-2,.9-2,2,0,3,2,3,2-1.9,2-3Z"/>
<path class="cls-9" d="m48,13c0-1.1-.9-2-2-2s-2,.9-2,2-1,7,2,7,2-5.9,2-7Z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dkyto2qkh0a2h"
path="res://.godot/imported/ShakerPreset2D.svg-dda8f976490b38216c486a3c325a6e1c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerPreset2D.svg"
dest_files=["res://.godot/imported/ShakerPreset2D.svg-dda8f976490b38216c486a3c325a6e1c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 64 64">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
}
.cls-1, .cls-2, .cls-3, .cls-4, .cls-5, .cls-6, .cls-7, .cls-8, .cls-9, .cls-10, .cls-11 {
stroke-width: 0px;
}
.cls-2 {
fill: #bd3c3c;
}
.cls-3 {
fill: url(#linear-gradient-6);
}
.cls-4 {
fill: url(#linear-gradient-5);
}
.cls-5 {
fill: url(#linear-gradient-2);
}
.cls-6 {
fill: url(#linear-gradient-7);
}
.cls-7 {
fill: url(#linear-gradient-3);
}
.cls-8 {
fill: url(#linear-gradient-9);
}
.cls-9 {
fill: url(#linear-gradient-8);
}
.cls-10 {
fill: url(#linear-gradient-4);
}
.cls-11 {
fill: #f15758;
filter: url(#drop-shadow-1);
}
</style>
<filter id="drop-shadow-1" filterUnits="userSpaceOnUse">
<feOffset dx="0" dy="3"/>
<feGaussianBlur result="blur" stdDeviation="0"/>
<feFlood flood-color="#bd3c3c" flood-opacity="1"/>
<feComposite in2="blur" operator="in"/>
<feComposite in="SourceGraphic"/>
</filter>
<linearGradient id="linear-gradient" x1="10.38" y1="44.47" x2="61.38" y2="27.06" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ec008c"/>
<stop offset="1" stop-color="#f7941d"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="13.13" y1="21.47" x2="20.57" y2="18.93" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-3" x1="18.79" y1="19.73" x2="24.8" y2="17.68" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-4" x1="23.72" y1="20.25" x2="30.01" y2="18.1" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-5" x1="28.89" y1="18.71" x2="34.39" y2="16.84" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-6" x1="33.85" y1="19.22" x2="39.59" y2="17.26" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-7" x1="38.79" y1="19.73" x2="44.8" y2="17.68" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-8" x1="43.9" y1="18.23" x2="49.2" y2="16.42" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-9" x1="48.32" y1="20.42" x2="55.14" y2="18.09" xlink:href="#linear-gradient"/>
</defs>
<path class="cls-11" d="m13.8,9h46.2v-5H8.8c-2.1,0-3.8,1.7-3.8,3.8v48.4c0,2.1,1.7,3.8,3.8,3.8h47.4c2.1,0,3.8-1.7,3.8-3.8v-29.2h-5v24.2c0,2.1-1.7,3.8-3.8,3.8H13.8c-2.1,0-3.8-1.7-3.8-3.8V12.8c0-2.1,1.7-3.8,3.8-3.8Z"/>
<g>
<path class="cls-2" d="m54,42v2.4c-.52.06-4.04.49-5.35.65-.26.03-.49-.14-.54-.39l-.88-4.4c-.1-.51-.82-.54-.96-.04-.97,3.39-2.1,7.33-2.69,9.39-.13.44-.73.49-.92.07-.99-2.19-2.94-6.47-4.27-9.41-.17-.38-.7-.39-.89-.02-1.05,2.11-2.39,4.79-3.21,6.43-.21.41-.81.35-.92-.1-.38-1.51-1.02-4.02-1.65-6.53-.13-.51-.87-.49-.97.03l-1.77,9.1-.96,5.01c-.39-1.94-1.19-5.92-1.9-9.46-.1-.5-.79-.54-.95-.06-.99,2.96-2.12,6.36-2.88,8.62-.16.49-.88.43-.96-.08-.48-3.08-1.38-8.73-2.13-13.46-.09-.54-.85-.56-.97-.03l-1.27,5.51-.2.9c-.44-.06-5.2-.85-5.77-.94v-2.18h4c.2-.03-.04.2,0,0,.78-3.43,2.64-9.57,3.61-13.77.12-.53.88-.5.97.03.61,3.82,1.66,10.47,2.45,15.51.08.51.79.57.96.08,1.29-3.85,2.76-8.27,3.25-9.74l.74,3.69.91,4.54c.8-5.04,1.85-11.63,2.52-15.81.09-.54.86-.56.97-.02.77,3.68,1.87,8.99,2.72,13.08.1.46.71.54.92.12.93-1.85,1.94-3.89,2.55-5.1.19-.37.72-.36.89.02.8,1.75,2.47,5.44,3.77,8.28.19.42.8.38.92-.07,1.08-3.78,2.58-9.05,3.45-12.11.14-.5.86-.47.96.04.63,3.17,1.87,7.48,2.43,10.23.04.21-.21-.03,0,0h4Z"/>
<path class="cls-1" d="m54,41.6v.8c-.52.06-4.04.49-5.35.65-.26.03-.49-.14-.54-.39l-.88-4.4c-.1-.51-.82-.54-.96-.04-.97,3.39-2.1,7.33-2.69,9.39-.13.44-.73.49-.92.07-.99-2.19-2.94-6.47-4.27-9.41-.17-.38-.7-.39-.89-.02-1.05,2.11-2.39,4.79-3.21,6.43-.21.41-.81.35-.92-.1-.38-1.51-1.02-4.02-1.65-6.53-.13-.51-.87-.49-.97.03l-1.77,9.1-.96,5.01c-.39-1.94-1.19-5.92-1.9-9.46-.1-.5-.79-.54-.95-.06-.99,2.96-2.12,6.36-2.88,8.62-.16.49-.88.43-.96-.08-.48-3.08-1.38-8.73-2.13-13.46-.09-.54-.85-.56-.97-.03l-1.27,5.51-.2.9c-.44-.06-5.2-.85-5.77-.94v-.36l3.85-.63c.2-.03.36-.17.4-.37.78-3.43,2.39-10.39,3.36-14.6.12-.53.88-.5.97.03.61,3.82,1.66,10.47,2.45,15.51.08.51.79.57.96.08,1.29-3.85,2.76-8.27,3.25-9.74l.74,3.69.91,4.54c.8-5.04,1.85-11.63,2.52-15.81.09-.54.86-.56.97-.02.77,3.68,1.87,8.99,2.72,13.08.1.46.71.54.92.12.93-1.85,1.94-3.89,2.55-5.1.19-.37.72-.36.89.02.8,1.75,2.47,5.44,3.77,8.28.19.42.8.38.92-.07,1.08-3.78,2.58-9.05,3.45-12.11.14-.5.86-.47.96.04.63,3.17,1.64,8.24,2.2,10.99.04.21.21.36.42.39l3.8.46Z"/>
</g>
<path class="cls-5" d="m18,17c0-1.1-.9-2-2-2s-2,.9-2,2-1,9,2,9,2-7.9,2-9Z"/>
<path class="cls-7" d="m23,17c0-1.1-.9-2-2-2s-2,.9-2,2,0,6,2,6,2-4.9,2-6Z"/>
<path class="cls-10" d="m28,17c0-1.1-.9-2-2-2s-2,.9-2,2,0,7,2,7,2-5.9,2-7Z"/>
<path class="cls-4" d="m33,17c0-1.1-.9-2-2-2s-2,.9-2,2,0,4,2,4,2-2.9,2-4Z"/>
<path class="cls-3" d="m38,17c0-1.1-.9-2-2-2s-2,.9-2,2,0,5,2,5,2-3.9,2-5Z"/>
<path class="cls-6" d="m43,17c0-1.1-.9-2-2-2s-2,.9-2,2,0,6,2,6,2-4.9,2-6Z"/>
<path class="cls-9" d="m48,17c0-1.1-.9-2-2-2s-2,.9-2,2,0,3,2,3,2-1.9,2-3Z"/>
<path class="cls-8" d="m53,17c0-1.1-.9-2-2-2s-2,.9-2,2-1,7,2,7,2-5.9,2-7Z"/>
</svg>

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://3461bedpoktj"
path="res://.godot/imported/ShakerPreset3D.svg-ac15877b6c78545ef46f5ca5bf99cede.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerPreset3D.svg"
dest_files=["res://.godot/imported/ShakerPreset3D.svg-ac15877b6c78545ef46f5ca5bf99cede.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 15.98 14.45">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
}
.cls-1, .cls-2, .cls-3, .cls-4, .cls-5 {
stroke-width: 0px;
}
.cls-2 {
fill: url(#linear-gradient-5);
}
.cls-3 {
fill: url(#linear-gradient-2);
}
.cls-4 {
fill: url(#linear-gradient-3);
}
.cls-5 {
fill: url(#linear-gradient-4);
}
</style>
<linearGradient id="linear-gradient" x1="2.19" y1="15.22" x2="13.97" y2="2.21" gradientTransform="translate(0 16.02) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fff"/>
<stop offset="1" stop-color="#949494"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="7.39" y1="8.1" x2="9.93" y2="9.6" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fc7f7f"/>
<stop offset=".29" stop-color="#f37684"/>
<stop offset=".75" stop-color="#de6092"/>
<stop offset="1" stop-color="#cf519d"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0" y1="9.26" x2="7" y2="9.26" gradientTransform="matrix(1,0,0,1,0,0)" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-4" x1="9.41" y1="6.48" x2="15.98" y2="6.48" gradientTransform="matrix(1,0,0,1,0,0)" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-5" x1="5.7" y1="2.25" x2="12.01" y2="11.44" gradientTransform="matrix(1,0,0,1,0,0)" xlink:href="#linear-gradient"/>
</defs>
<path class="cls-1" d="m.76,7.23c0,.64.08,1.25.24,1.83.75-1.14,1.53-2.34,1.86-2.84.12-.18.3-.3.51-.34.46-1.6,1.72-2.85,3.33-3.29V.14C3.32.74.76,3.69.76,7.23ZM8,0h-.01c-.27.01-.53.02-.79.06v2.42c.26-.05.53-.07.8-.07.31,0,.61.03.91.09V.06c-.3-.04-.6-.06-.91-.06Zm1.41.14v2.48c1.33.41,2.41,1.37,2.97,2.62l1.18-2.64C12.52,1.35,11.06.46,9.41.14Zm5.74,6.02h-.01l-2.63,4.97c-.14.26-.41.42-.7.42-.2,0-.41-.08-.55-.24l-.29-.3c-.54.43-1.18.74-1.87.91-.25.32-.63.5-1.05.5-.19,0-.37-.04-.54-.11-.11.16-.19.3-.25.4-.14.24-.39.37-.66.37-.25,0-.48-.12-.63-.33-.28-.39-.87-1.19-1.48-2.02l-1.02-1.41-1.54,1.81c1.28,2,3.52,3.32,6.07,3.32,3.99,0,7.23-3.24,7.23-7.22,0-.36-.02-.72-.08-1.07Z"/>
<path class="cls-3" d="m10.33,8.83l-.14.24-.72-.72s-.08-.06-.13-.06-.11.02-.14.08c-.58.92-1.38,2.22-1.92,3.09l-.78-1.35s.02,0,.03,0c.07,0,.13-.04.17-.1l2.18-4.42s.01-.02.03-.03v1.97h.67c.67,0,1.08.72.75,1.29Z"/>
<g>
<path class="cls-4" d="m5.33,9.08c-.15-.25-.21-.53-.18-.8-.58-.81-1.13-1.57-1.39-1.94-.03-.06-.09-.08-.14-.08-.06,0-.12.03-.16.08-.05.07-.1.15-.17.25-.43.68-1.24,1.92-1.96,3-.66.98-1.21,1.85-1.33,2.03l.37.28,1.3-1.52,1.77-2.06s.08-.06.13-.06c.06,0,.1.02.14.07.6.81,1.52,2.07,2.17,2.97.28.37.51.7.65.89.03.05.09.07.14.07.06,0,.12-.02.16-.08.05-.07.1-.16.17-.26-.05-.05-.09-.11-.13-.18l-1.54-2.66Z"/>
<path class="cls-5" d="m15.69,2.65l-.75-.37c-.07-.04-.16-.06-.23-.06-.19,0-.39.12-.47.31l-.19.42-1.29,2.91-1.04,2.31c-.04.07-.1.11-.17.11-.05,0-.09-.01-.13-.06-.66-.77-1.48-1.75-2.01-2.38v1.2h.17c.5,0,.94.25,1.18.68.25.42.25.93,0,1.36l-.21.36.96.96.27.28s.07.06.12.06c.07,0,.13-.04.17-.1l2.97-5.61.88-1.69c.14-.25.04-.57-.23-.69Z"/>
</g>
<path class="cls-2" d="m10.33,8.83l-.14.24-1.4,2.42c-.17.29-.45.43-.74.43s-.58-.14-.75-.43l-.02-.03-.78-1.35-.74-1.28c-.33-.57.09-1.29.75-1.29h.69V0h1.71v7.54h.67c.67,0,1.08.72.75,1.29Z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://5ubwmsna8qv3"
path="res://.godot/imported/ShakerReceiver.svg-8fa75e085c3c726d592ed5236376746f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerReceiver.svg"
dest_files=["res://.godot/imported/ShakerReceiver.svg-8fa75e085c3c726d592ed5236376746f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 15.98 14.45">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
}
.cls-1, .cls-2, .cls-3, .cls-4, .cls-5 {
stroke-width: 0px;
}
.cls-2 {
fill: url(#linear-gradient-5);
}
.cls-3 {
fill: url(#linear-gradient-2);
}
.cls-4 {
fill: url(#linear-gradient-3);
}
.cls-5 {
fill: url(#linear-gradient-4);
}
</style>
<linearGradient id="linear-gradient" x1="2.19" y1="15.22" x2="13.97" y2="2.21" gradientTransform="translate(0 16.02) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#5d8cf3"/>
<stop offset="1" stop-color="#3a56a6"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="7.39" y1="8.1" x2="9.93" y2="9.6" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fc7f7f"/>
<stop offset=".29" stop-color="#f37684"/>
<stop offset=".75" stop-color="#de6092"/>
<stop offset="1" stop-color="#cf519d"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="0" y1="9.26" x2="7" y2="9.26" gradientTransform="matrix(1,0,0,1,0,0)" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-4" x1="9.41" y1="6.48" x2="15.98" y2="6.48" gradientTransform="matrix(1,0,0,1,0,0)" xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-5" x1="5.7" y1="2.25" x2="12.01" y2="11.44" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#9061cb"/>
<stop offset="1" stop-color="#08ffff"/>
</linearGradient>
</defs>
<path class="cls-1" d="m.76,7.23c0,.64.08,1.25.24,1.83.75-1.14,1.53-2.34,1.86-2.84.12-.18.3-.3.51-.34.46-1.6,1.72-2.85,3.33-3.29V.14C3.32.74.76,3.69.76,7.23ZM8,0h-.01c-.27.01-.53.02-.79.06v2.42c.26-.05.53-.07.8-.07.31,0,.61.03.91.09V.06c-.3-.04-.6-.06-.91-.06Zm1.41.14v2.48c1.33.41,2.41,1.37,2.97,2.62l1.18-2.64C12.52,1.35,11.06.46,9.41.14Zm5.74,6.02h-.01l-2.63,4.97c-.14.26-.41.42-.7.42-.2,0-.41-.08-.55-.24l-.29-.3c-.54.43-1.18.74-1.87.91-.25.32-.63.5-1.05.5-.19,0-.37-.04-.54-.11-.11.16-.19.3-.25.4-.14.24-.39.37-.66.37-.25,0-.48-.12-.63-.33-.28-.39-.87-1.19-1.48-2.02l-1.02-1.41-1.54,1.81c1.28,2,3.52,3.32,6.07,3.32,3.99,0,7.23-3.24,7.23-7.22,0-.36-.02-.72-.08-1.07Z"/>
<path class="cls-3" d="m10.33,8.83l-.14.24-.72-.72s-.08-.06-.13-.06-.11.02-.14.08c-.58.92-1.38,2.22-1.92,3.09l-.78-1.35s.02,0,.03,0c.07,0,.13-.04.17-.1l2.18-4.42s.01-.02.03-.03v1.97h.67c.67,0,1.08.72.75,1.29Z"/>
<g>
<path class="cls-4" d="m5.33,9.08c-.15-.25-.21-.53-.18-.8-.58-.81-1.13-1.57-1.39-1.94-.03-.06-.09-.08-.14-.08-.06,0-.12.03-.16.08-.05.07-.1.15-.17.25-.43.68-1.24,1.92-1.96,3-.66.98-1.21,1.85-1.33,2.03l.37.28,1.3-1.52,1.77-2.06s.08-.06.13-.06c.06,0,.1.02.14.07.6.81,1.52,2.07,2.17,2.97.28.37.51.7.65.89.03.05.09.07.14.07.06,0,.12-.02.16-.08.05-.07.1-.16.17-.26-.05-.05-.09-.11-.13-.18l-1.54-2.66Z"/>
<path class="cls-5" d="m15.69,2.65l-.75-.37c-.07-.04-.16-.06-.23-.06-.19,0-.39.12-.47.31l-.19.42-1.29,2.91-1.04,2.31c-.04.07-.1.11-.17.11-.05,0-.09-.01-.13-.06-.66-.77-1.48-1.75-2.01-2.38v1.2h.17c.5,0,.94.25,1.18.68.25.42.25.93,0,1.36l-.21.36.96.96.27.28s.07.06.12.06c.07,0,.13-.04.17-.1l2.97-5.61.88-1.69c.14-.25.04-.57-.23-.69Z"/>
</g>
<path class="cls-2" d="m10.33,8.83l-.14.24-1.4,2.42c-.17.29-.45.43-.74.43s-.58-.14-.75-.43l-.02-.03-.78-1.35-.74-1.28c-.33-.57.09-1.29.75-1.29h.69V0h1.71v7.54h.67c.67,0,1.08.72.75,1.29Z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bu1om2nm428ec"
path="res://.godot/imported/ShakerReceiver2D.svg-99072f9033b4ac51b75a8e8f089f2f8c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerReceiver2D.svg"
dest_files=["res://.godot/imported/ShakerReceiver2D.svg-99072f9033b4ac51b75a8e8f089f2f8c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 15.98 14.45">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
}
.cls-1, .cls-2, .cls-3, .cls-4, .cls-5 {
stroke-width: 0px;
}
.cls-2 {
fill: url(#linear-gradient-5);
}
.cls-3 {
fill: url(#linear-gradient-2);
}
.cls-4 {
fill: url(#linear-gradient-3);
}
.cls-5 {
fill: url(#linear-gradient-4);
}
</style>
<linearGradient id="linear-gradient" x1="2.19" y1="15.22" x2="13.97" y2="2.21" gradientTransform="translate(0 16.02) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fc7f7f"/>
<stop offset=".1" stop-color="#f37d80"/>
<stop offset=".27" stop-color="#dd7885"/>
<stop offset=".47" stop-color="#b8708c"/>
<stop offset=".7" stop-color="#856596"/>
<stop offset=".96" stop-color="#4558a3"/>
<stop offset="1" stop-color="#3a56a6"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="1.61" y1="8.84" x2="7.05" y2="12.05" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fc7f7f"/>
<stop offset=".29" stop-color="#f37684"/>
<stop offset=".75" stop-color="#de6092"/>
<stop offset="1" stop-color="#cf519d"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="7.39" y1="8.1" x2="9.93" y2="9.6" xlink:href="#linear-gradient-2"/>
<linearGradient id="linear-gradient-4" x1="10.14" y1="4.55" x2="14.31" y2="7.01" xlink:href="#linear-gradient-2"/>
<linearGradient id="linear-gradient-5" x1="5.7" y1="2.25" x2="12.01" y2="11.44" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fc7f39"/>
<stop offset="1" stop-color="#3abaff"/>
</linearGradient>
</defs>
<path class="cls-1" d="m.76,7.23c0,.64.08,1.25.24,1.83.75-1.14,1.53-2.34,1.86-2.84.12-.18.3-.3.51-.34.46-1.6,1.72-2.85,3.33-3.29V.14C3.32.74.76,3.69.76,7.23ZM8,0h-.01c-.27.01-.53.02-.79.06v2.42c.26-.05.53-.07.8-.07.31,0,.61.03.91.09V.06c-.3-.04-.6-.06-.91-.06Zm1.41.14v2.48c1.33.41,2.41,1.37,2.97,2.62l1.18-2.64C12.52,1.35,11.06.46,9.41.14Zm5.74,6.02h-.01l-2.63,4.97c-.14.26-.41.42-.7.42-.2,0-.41-.08-.55-.24l-.29-.3c-.54.43-1.18.74-1.87.91-.25.32-.63.5-1.05.5-.19,0-.37-.04-.54-.11-.11.16-.19.3-.25.4-.14.24-.39.37-.66.37-.25,0-.48-.12-.63-.33-.28-.39-.87-1.19-1.48-2.02l-1.02-1.41-1.54,1.81c1.28,2,3.52,3.32,6.07,3.32,3.99,0,7.23-3.24,7.23-7.22,0-.36-.02-.72-.08-1.07Z"/>
<path class="cls-3" d="m6.87,11.74c.04.07.08.13.13.18-.07.1-.12.19-.17.26-.04.06-.1.08-.16.08-.05,0-.11-.02-.14-.07-.14-.19-.37-.52-.65-.89-.65-.9-1.57-2.16-2.17-2.97-.04-.05-.08-.07-.14-.07-.05,0-.1.02-.13.06l-1.77,2.06-1.3,1.52-.37-.28c.12-.18.67-1.05,1.33-2.03.72-1.08,1.53-2.32,1.96-3,.07-.1.12-.18.17-.25.04-.05.1-.08.16-.08.05,0,.11.02.14.08.26.37.81,1.13,1.39,1.94-.03.27.03.55.18.8l1.54,2.66Z"/>
<path class="cls-4" d="m10.33,8.83l-.14.24-.72-.72s-.08-.06-.13-.06-.11.02-.14.08c-.58.92-1.38,2.22-1.92,3.09l-.78-1.35s.02,0,.03,0c.07,0,.13-.04.17-.1l2.18-4.42s.01-.02.03-.03v1.97h.67c.67,0,1.08.72.75,1.29Z"/>
<path class="cls-5" d="m15.92,3.34l-.88,1.69-2.97,5.61c-.04.06-.1.1-.17.1-.05,0-.08-.02-.12-.06l-.27-.28-.96-.96.21-.36c.25-.43.25-.94,0-1.36-.24-.43-.68-.68-1.18-.68h-.17v-1.2c.53.63,1.35,1.61,2.01,2.38.04.05.08.06.13.06.07,0,.13-.04.17-.11l1.04-2.31,1.29-2.91.19-.42c.08-.19.28-.31.47-.31.07,0,.16.02.23.06l.75.37c.27.12.37.44.23.69Z"/>
<path class="cls-2" d="m10.33,8.83l-.14.24-1.4,2.42c-.17.29-.45.43-.74.43s-.58-.14-.75-.43l-.02-.03-.78-1.35-.74-1.28c-.33-.57.09-1.29.75-1.29h.69V0h1.71v7.54h.67c.67,0,1.08.72.75,1.29Z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bfwyj7gf187kd"
path="res://.godot/imported/ShakerReceiver3D.svg-1cf90100ef9bf3dbbc6653627fdab7fc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerReceiver3D.svg"
dest_files=["res://.godot/imported/ShakerReceiver3D.svg-1cf90100ef9bf3dbbc6653627fdab7fc.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512.01 461.61">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
stroke-width: 0px;
}
</style>
<linearGradient id="linear-gradient" x1="21.82" y1="71.06" x2="504.54" y2="392.27" gradientTransform="translate(0 449.52) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fff"/>
<stop offset=".99" stop-color="#a5a2b9"/>
</linearGradient>
</defs>
<path class="cls-1" d="m512.01,231.05v4.86c0,2.78-2.07,5.11-4.83,5.44-15.23,1.8-57.92,6.87-71.99,8.53-2.52.3-4.91-1.18-5.78-3.56l-2.53-6.94-21.05-57.78c-1.94-5.33-9.71-4.56-10.56,1.04-11.66,76.65-28.37,186.59-37.3,245.29-.86,5.66-8.72,6.37-10.59.96-16.91-48.96-44.35-128.42-63.77-184.67-1.72-4.99-8.81-4.89-10.4.14-10.97,34.8-24.71,78.36-33.95,107.66-1.69,5.35-9.37,5-10.57-.48l-8.18-37.16-26.06-118.54c-1.34-6.1-10.21-5.57-10.8.65-8.78,92.45-19.42,204.5-24.71,260.16-.55,5.76-8.48,6.84-10.56,1.45-21.89-56.74-59.41-154.05-79.41-205.9-.72-1.86-2.39-3.18-4.36-3.45l-59.88-8.23c-2.71-.37-4.73-2.69-4.73-5.43h0c0-2.74,2.02-5.05,4.73-5.43,16.03-2.2,65.17-8.96,79.71-10.96,2.36-.32,4.66.92,5.69,3.07l3.39,7.13,30.48,64.02c2.34,4.92,9.64,3.78,10.37-1.62,12.43-92.05,29.95-221.59,38.72-286.56.82-6.06,9.45-6.42,10.77-.45,13.12,59.21,36.96,166.79,53.28,240.4,1.15,5.17,8.22,5.86,10.36,1.02,9.56-21.68,19.33-43.84,24.89-56.46,1.83-4.14,7.59-4.41,9.79-.46,9.57,17.21,30.27,54.36,48.88,87.78,2.4,4.31,8.82,3.5,10.08-1.27,15.94-60.64,37.47-142.6,46.27-176.04,1.31-4.99,8.17-5.55,10.29-.85,13.26,29.48,40.49,89.85,53.09,117.84.79,1.75,2.44,2.96,4.35,3.18l52.02,6.15c2.76.33,4.83,2.66,4.83,5.44l.02.03Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ch5mp344tqj3w"
path="res://.godot/imported/ShakerType.svg-0e40c87944ca8f10dcb4da67f37ccfdf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerType.svg"
dest_files=["res://.godot/imported/ShakerType.svg-0e40c87944ca8f10dcb4da67f37ccfdf.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512.01 461.61">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
stroke-width: 0px;
}
</style>
<linearGradient id="linear-gradient" x1="21.82" y1="71.06" x2="504.54" y2="392.27" gradientTransform="translate(0 449.52) scale(1 -1)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#6393ff"/>
<stop offset="1" stop-color="#6a7d8c"/>
</linearGradient>
</defs>
<path class="cls-1" d="m512.01,231.05v4.86c0,2.78-2.07,5.11-4.83,5.44-15.23,1.8-57.92,6.87-71.99,8.53-2.52.3-4.91-1.18-5.78-3.56l-2.53-6.94-21.05-57.78c-1.94-5.33-9.71-4.56-10.56,1.04-11.66,76.65-28.37,186.59-37.3,245.29-.86,5.66-8.72,6.37-10.59.96-16.91-48.96-44.35-128.42-63.77-184.67-1.72-4.99-8.81-4.89-10.4.14-10.97,34.8-24.71,78.36-33.95,107.66-1.69,5.35-9.37,5-10.57-.48l-8.18-37.16-26.06-118.54c-1.34-6.1-10.21-5.57-10.8.65-8.78,92.45-19.42,204.5-24.71,260.16-.55,5.76-8.48,6.84-10.56,1.45-21.89-56.74-59.41-154.05-79.41-205.9-.72-1.86-2.39-3.18-4.36-3.45l-59.88-8.23c-2.71-.37-4.73-2.69-4.73-5.43h0c0-2.74,2.02-5.05,4.73-5.43,16.03-2.2,65.17-8.96,79.71-10.96,2.36-.32,4.66.92,5.69,3.07l3.39,7.13,30.48,64.02c2.34,4.92,9.64,3.78,10.37-1.62,12.43-92.05,29.95-221.59,38.72-286.56.82-6.06,9.45-6.42,10.77-.45,13.12,59.21,36.96,166.79,53.28,240.4,1.15,5.17,8.22,5.86,10.36,1.02,9.56-21.68,19.33-43.84,24.89-56.46,1.83-4.14,7.59-4.41,9.79-.46,9.57,17.21,30.27,54.36,48.88,87.78,2.4,4.31,8.82,3.5,10.08-1.27,15.94-60.64,37.47-142.6,46.27-176.04,1.31-4.99,8.17-5.55,10.29-.85,13.26,29.48,40.49,89.85,53.09,117.84.79,1.75,2.44,2.96,4.35,3.18l52.02,6.15c2.76.33,4.83,2.66,4.83,5.44l.02.03Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://caqg2nfs1y64r"
path="res://.godot/imported/ShakerType2D.svg-a5c5aa77a1e3263e925140c95a5a30c3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerType2D.svg"
dest_files=["res://.godot/imported/ShakerType2D.svg-a5c5aa77a1e3263e925140c95a5a30c3.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512">
<defs>
<style>
.cls-1 {
fill: url(#linear-gradient);
stroke-width: 0px;
}
</style>
<linearGradient id="linear-gradient" x1="21.82" y1="409.71" x2="504.54" y2="88.5" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#f15758"/>
<stop offset="1" stop-color="#f0577c"/>
</linearGradient>
</defs>
<path class="cls-1" d="m512,262.29v4.86c0,2.78-2.07,5.11-4.83,5.44-15.23,1.8-57.92,6.87-71.99,8.53-2.52.3-4.91-1.18-5.78-3.56l-2.53-6.94-21.05-57.78c-1.94-5.33-9.71-4.56-10.56,1.04-11.66,76.65-28.37,186.59-37.3,245.29-.86,5.66-8.72,6.37-10.59.96-16.91-48.96-44.35-128.42-63.77-184.67-1.72-4.99-8.81-4.89-10.4.14-10.97,34.8-24.71,78.36-33.95,107.66-1.69,5.35-9.37,5-10.57-.48l-8.18-37.16-26.06-118.54c-1.34-6.1-10.21-5.57-10.8.65-8.78,92.45-19.42,204.5-24.71,260.16-.55,5.76-8.48,6.84-10.56,1.45-21.89-56.74-59.41-154.05-79.41-205.9-.72-1.86-2.39-3.18-4.36-3.45l-59.88-8.23c-2.71-.37-4.73-2.69-4.73-5.43h0c0-2.74,2.02-5.05,4.73-5.43,16.03-2.2,65.17-8.96,79.71-10.96,2.36-.32,4.66.92,5.69,3.07l3.39,7.13,30.48,64.02c2.34,4.92,9.64,3.78,10.37-1.62,12.43-92.05,29.95-221.59,38.72-286.56.82-6.06,9.45-6.42,10.77-.45,13.12,59.21,36.96,166.79,53.28,240.4,1.15,5.17,8.22,5.86,10.36,1.02,9.56-21.68,19.33-43.84,24.89-56.46,1.83-4.14,7.59-4.41,9.79-.46,9.57,17.21,30.27,54.36,48.88,87.78,2.4,4.31,8.82,3.5,10.08-1.27,15.94-60.64,37.47-142.6,46.27-176.04,1.31-4.99,8.17-5.55,10.29-.85,13.26,29.48,40.49,89.85,53.09,117.84.79,1.75,2.44,2.96,4.35,3.18l52.02,6.15c2.76.33,4.83,2.66,4.83,5.44Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dd7q87w4eoudf"
path="res://.godot/imported/ShakerType3D.svg-1bc2b24943aa01bcdaa956f9b08b254c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/ShakerType3D.svg"
dest_files=["res://.godot/imported/ShakerType3D.svg-1bc2b24943aa01bcdaa956f9b08b254c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_3" data-name="Layer 3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<defs>
<style>
.cls-1 {
fill: #ef4747;
stroke-width: 0px;
}
</style>
</defs>
<rect class="cls-1" x="8" y="8" width="48" height="48" rx="11.48" ry="11.48"/>
</svg>

After

Width:  |  Height:  |  Size: 337 B

View File

@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://m45uspfna0ol"
path="res://.godot/imported/Stop.svg-ae1c54e343f70b570e088fac0e2ac232.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/Stop.svg"
dest_files=["res://.godot/imported/Stop.svg-ae1c54e343f70b570e088fac0e2ac232.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

BIN
addons/shaker/assets/icon.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://8m3nobyk16wm"
path="res://.godot/imported/icon.png-0661645ebcd1f259541e43f0afd1f280.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/shaker/assets/icon.png"
dest_files=["res://.godot/imported/icon.png-0661645ebcd1f259541e43f0afd1f280.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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

View File

@@ -0,0 +1,112 @@
@icon("res://addons/shaker/assets/ShakerType.svg")
@tool
class_name ShakerTypeBase
extends Resource
# Enumerations for blending modes and graph axes
enum BlendingModes {
Add,
Override,
Multiply,
Subtract,
Average,
Max,
Min
}
# Shake Properties
@export_group("Shake Properties")
@export var BlendingMode: BlendingModes = BlendingModes.Add:
set = set_blending_mode,
get = get_blending_mode
@export_exp_easing var fade_in: float = 0.0:
set = set_fade_in,
get = get_fade_in
@export_exp_easing("attenuation") var fade_out: float = 0.0:
set = set_fade_out,
get = get_fade_out
@export_range(0.0, 1.0) var start_percent: float = 0.0:
set = set_start_percent,
get = get_start_percent
@export_range(0.0, 1.0) var end_percent: float = 1.0:
set = set_end_percent,
get = get_end_percent
# Live Shake Graph
@export_group("Live Shake Graph")
@export var _temp_graph: bool = false
@export_range(16, 96) var bake_internal: int = 64:
set = set_bake_internal,
get = get_bake_internal
var duration = 0.0:
set = set_duration,
get = get_duration
func _init(blending_mode:BlendingModes=BlendingModes.Add, fade_in:float=self.fade_in, fade_out:float=self.fade_out, start_percent:float=self.start_percent, end_percent:float=self.end_percent) -> void:
self.BlendingMode = blending_mode
self.fade_in = fade_in
self.fade_out = fade_out
self.start_percent = start_percent
self.end_percent = end_percent
# Signals
signal property_changed(name: StringName)
# Custom setter and getter functions
func set_blending_mode(value: BlendingModes) -> void:
BlendingMode = value
_on_property_changed("BlendingMode")
func get_blending_mode() -> BlendingModes:
return BlendingMode
func set_fade_in(value: float) -> void:
fade_in = value
_on_property_changed("fade_in")
func get_fade_in() -> float:
return fade_in
func set_fade_out(value: float) -> void:
fade_out = value
_on_property_changed("fade_out")
func get_fade_out() -> float:
return fade_out
func set_start_percent(value: float) -> void:
start_percent = min(value, end_percent)
_on_property_changed("start_percent")
func get_start_percent() -> float:
return start_percent
func set_end_percent(value: float) -> void:
end_percent = max(value, start_percent)
_on_property_changed("end_percent")
func get_end_percent() -> float:
return end_percent
func set_bake_internal(value: int) -> void:
bake_internal = clamp(value, 16, 96)
_on_property_changed("bake_internal")
func get_bake_internal() -> int:
return bake_internal
func set_duration(value: float = 0.0) -> void:
duration = value
func get_duration() -> float:
return duration
# Handle property changes
func _on_property_changed(property_name: StringName) -> void:
property_changed.emit(property_name)

View File

@@ -0,0 +1 @@
uid://d2i321te0ny64

View File

@@ -0,0 +1,53 @@
@tool
@icon("res://addons/shaker/assets/ShakerPreset.svg")
class_name ShakerPresetBase
extends Resource
# Enum for shake categories
enum Categories {
POSITION,
ROTATION,
SCALE
}
# Graph panel reference
var Graph: Panel
# Bake internal setting
@export_range(16, 96) var bake_internal: int = 64:
set = set_bake_internal,
get = get_bake_internal
# Follow timeline flag
@export var __follow_timeline: bool = false:
set = set_follow_timeline,
get = get_follow_timeline
# Component duration and parent node
var component_duration: float = 0.0
var parent: Node
# Signal for property changes
signal property_changed(name: StringName)
func set_bake_internal(value: int) -> void:
bake_internal = clamp(value, 16, 96)
_on_property_changed("bake_internal")
func get_bake_internal() -> int:
return bake_internal
func set_follow_timeline(value: bool) -> void:
__follow_timeline = value
_on_property_changed("__follow_timeline")
func get_follow_timeline() -> bool:
return __follow_timeline
# Handle property changes
func _on_property_changed(property_name: StringName) -> void:
property_changed.emit(property_name)
# Calculate the difference between two arrays
func _array_difference(a: Array, b: Array) -> Array:
return b.filter(func(item): return not a.has(item))

View File

@@ -0,0 +1 @@
uid://cveqkhn5t8vng

View File

@@ -0,0 +1,24 @@
@tool
@icon("res://addons/shaker/assets/ShakerPreset.svg")
class_name ShakerProperty
extends Resource
@export var property_name:String
# Properties
@export var shake_type:ShakerTypeBase
# Signal for property changes
signal property_changed(name: StringName)
func _init(property_name:String="", shake_type:ShakerTypeBase=null) -> void:
self.property_name = property_name
self.shake_type = shake_type
# Handle property changes
func _on_property_changed(property_name: StringName) -> void:
property_changed.emit(property_name)
func get_value(_t:float) -> Variant:
if shake_type:
return shake_type.get_value(_t)
return 0.0

View File

@@ -0,0 +1 @@
uid://bd8eceas8jvyl

View File

@@ -0,0 +1,46 @@
@icon("res://addons/shaker/assets/ShakerType.svg")
@tool
class_name ShakerTypeBase1D
extends ShakerTypeBase
enum GraphAxis {
X,
}
@export var amplitude:float = 1.0:
set = set_amplitude,
get = get_amplitude
@export var offset:float = 0.0:
set = set_offset,
get = get_offset
func set_amplitude(value: float) -> void:
amplitude = value
_on_property_changed("amplitude")
func get_amplitude() -> float:
return amplitude
func set_offset(value: float) -> void:
offset = value
_on_property_changed("offset")
func get_offset() -> float:
return offset
# Get the shake value at a given time
func get_value(t: float) -> float:
var result:float = 0.0;
return _calc_value(fmod(t, 1.0), result)
# Calculate the shake value
func _calc_value(t: float, result: float) -> float:
if duration > 0:
t /= duration
if (start_percent != 0 && start_percent > t) || (end_percent != 1 && end_percent < t):
result = 0.0;
else:
result = result * amplitude + offset
result *= (ease(t, fade_in) if fade_in > 0.0001 else 1.0) * (ease(1.0 - t, fade_out) if fade_out > 0.0001 else 1.0)
return result;

View File

@@ -0,0 +1 @@
uid://bhqlklbhcxfgf

View File

@@ -0,0 +1,43 @@
@tool
class_name ShakerTypeAudioBus1D
extends ShakerTypeBase1D
@export var bus_name:String = "Master":
set = set_bus_name,
get = get_bus_name
@export_range(20, 20000) var min_frequence:float = 20
@export_range(20, 20000) var max_frequence:float = 20000
var bus_index:int = 0
var effect:AudioEffectSpectrumAnalyzerInstance
## Calculates the value of the square wave at time t.
func get_value(t: float) -> float:
var result:float = 0.0
if effect:
var mag:Vector2 = effect.get_magnitude_for_frequency_range(min_frequence, max_frequence, AudioEffectSpectrumAnalyzerInstance.MAGNITUDE_MAX)
result = mag.length()
return _calc_value(t, result)
func set_bus_name(value: String) -> void:
bus_name = value
_update_bus_index()
_on_property_changed("bus_name")
func get_bus_name() -> String:
return bus_name
func _update_bus_index() -> void:
bus_index = AudioServer.get_bus_index(bus_name)
if bus_index > -1:
for e in AudioServer.get_bus_effect_count(bus_index):
var _effect:AudioEffect = AudioServer.get_bus_effect(bus_index, e)
if _effect is AudioEffectSpectrumAnalyzer:
effect = AudioServer.get_bus_effect_instance(bus_index, e, 0)
break;
if effect == null:
AudioServer.add_bus_effect(bus_index, AudioEffectSpectrumAnalyzer.new(), 0)
effect = AudioServer.get_bus_effect_instance(bus_index, 0)
else:
push_error("Error: Bus '" + bus_name + "' not found!")
effect = null

View File

@@ -0,0 +1 @@
uid://dshti5xd41w07

View File

@@ -0,0 +1,42 @@
@tool
class_name ShakerTypeBrownianShake1D
extends ShakerTypeBase1D
@export var roughness:float = 1.0:
set = set_roughness,
get = get_roughness
@export var persistence:float = 0.5:
set = set_persistence,
get = get_persistence
var _generator: RandomNumberGenerator = RandomNumberGenerator.new()
var _last_pos:float = 0.0
func _init() -> void:
property_changed.connect(_property_changed)
func get_value(t: float) -> float:
var result:float = 0.0
result = (_last_pos + _generator.randf_range(-roughness, roughness))
result = _calc_value(t, result)
_last_pos = lerpf(_last_pos, result, 1.0 - persistence)
return _last_pos
func _property_changed(name: StringName) -> void:
_last_pos = 0.0
func set_roughness(value: float) -> void:
roughness = value
_on_property_changed("roughness")
func get_roughness() -> float:
return roughness
func set_persistence(value: float) -> void:
persistence = clamp(persistence,0, 1)
_on_property_changed("persistence")
func get_persistence() -> float:
return persistence

View File

@@ -0,0 +1 @@
uid://62yumjskyeow

View File

@@ -0,0 +1,41 @@
@tool
class_name ShakerTypeCurve1D
extends ShakerTypeBase1D
@export var curve: Curve:
set = set_curve,
get = get_curve
@export var loop: bool = true:
set = set_loop,
get = get_loop
func _curve_changed() -> void:
_on_property_changed("curve")
func get_value(t: float) -> float:
var result: float = 0.0
if loop && t > 1.0:
t = fmod(t, 1.0)
if curve:
result = curve.sample(t)
return _calc_value(t, result)
func set_curve(value: Curve) -> void:
if curve:
curve.changed.disconnect(_curve_changed)
curve = value
if curve:
curve.changed.connect(_curve_changed)
else:
_curve_changed()
func get_curve() -> Curve:
return curve
func set_loop(value: bool) -> void:
loop = value
_on_property_changed("loop")
func get_loop() -> bool:
return loop

View File

@@ -0,0 +1 @@
uid://dadkdm3tvmuqq

View File

@@ -0,0 +1,32 @@
@tool
class_name ShakerTypeNoiseShake1D
extends ShakerTypeBase1D
@export var noise_texture: NoiseTexture2D = NoiseTexture2D.new():
set = set_noise_texture,
get = get_noise_texture
func _init() -> void:
noise_texture.changed.connect(_on_noise_changed)
func get_value(t: float) -> float:
var result:float = 0.0
if noise_texture && noise_texture.noise:
var noise_size:Vector2 = Vector2(noise_texture.width, noise_texture.height)
var noise_offset:float = t * noise_size.x
result = noise_texture.noise.get_noise_1d(noise_offset)
result *= 2.0
return _calc_value(t, result)
func _on_noise_changed() -> void:
_on_property_changed("noise_texture")
func set_noise_texture(value: NoiseTexture2D) -> void:
if noise_texture:
noise_texture.changed.disconnect(_on_noise_changed)
noise_texture = value
if noise_texture:
noise_texture.changed.connect(_on_noise_changed)
func get_noise_texture() -> NoiseTexture2D:
return noise_texture

View File

@@ -0,0 +1 @@
uid://bdrk4rkut1y3l

View File

@@ -0,0 +1,30 @@
@tool
class_name ShakerTypeRandom1D
extends ShakerTypeBase1D
## The seed for the random number generator.
@export var seed: int = 0:
set = set_seed
## The random number generator instance.
var _generator: RandomNumberGenerator = RandomNumberGenerator.new()
## Initializes the shake type with the given seed.
func _init() -> void:
set_seed(seed)
## Calculates a random value for each axis at time t.
func get_value(t: float) -> float:
var result:float = 0.0
result = _generator.randf_range(-1.0, 1.0)
return _calc_value(t, result)
## Sets the seed for the random number generator.
func set_seed(value: int) -> void:
seed = value
_generator.seed = seed
_on_property_changed("seed")
## Gets the current seed of the random number generator.
func get_seed() -> int:
return seed

View File

@@ -0,0 +1 @@
uid://buor2ix0dmwk2

View File

@@ -0,0 +1,41 @@
@tool
class_name ShakerTypeSawtoothWave1D
extends ShakerTypeBase1D
## The frequency of the sawtooth wave for each axis.
@export var frequency:float = 5.0:
set = set_frequency
## The asymmetry of the sawtooth wave for each axis (0 to 1).
@export var asymmetry:float = 0.5:
set = set_asymmetry
## Sets the frequency of the sawtooth wave.
func set_frequency(value: float) -> void:
frequency = value
_on_property_changed("frequency")
## Gets the frequency of the sawtooth wave.
func get_frequency() -> float:
return frequency
## Sets the asymmetry of the sawtooth wave.
func set_asymmetry(value: float) -> void:
asymmetry = clamp(value, 0.0, 0.0)
_on_property_changed("asymmetry")
## Gets the asymmetry of the sawtooth wave.
func get_asymmetry() -> float:
return asymmetry
## Calculates the value of the sawtooth wave at time t.
func get_value(t: float) -> float:
var result:float = 0.0
var _real_time:float = fmod(t, 1.0) if t > 1.0 else t
var wave:float = fmod(_real_time * frequency, 1.0)
wave = wave / asymmetry if wave < asymmetry else (1.0 - wave) / (1.0 - asymmetry)
result = wave
result = _calc_value(t, result)
result = (result - amplitude * 0.5) * 2.0
return result

View File

@@ -0,0 +1 @@
uid://tftoajmajyfg

View File

@@ -0,0 +1,32 @@
@tool
class_name ShakerTypeSineWave1D
extends ShakerTypeBase1D
@export_group("Sinewave Properties")
@export var frequency:float = 1.0:
set = set_frequency,
get = get_frequency
@export var phase:float = 0.0:
set = set_phase,
get = get_phase
func get_value(t: float) -> float:
var result:float = 0.0
var _real_time: float = fmod(t, 1.0) if t > 1.0 else t
result = sin(t * frequency * TAU + phase)
return _calc_value(_real_time, result)
func set_frequency(value: float) -> void:
frequency = value
_on_property_changed("frequency")
func get_frequency() -> float:
return frequency
func set_phase(value: float) -> void:
phase = value
_on_property_changed("phase")
func get_phase() -> float:
return phase

View File

@@ -0,0 +1 @@
uid://vvwsdrpmw7w4

View File

@@ -0,0 +1,35 @@
@tool
class_name ShakerTypeSquareWave1D
extends ShakerTypeBase1D
## The frequency of the square wave for each axis.
@export var frequency:float = 5.0:
set = set_frequency
## The duty cycle of the square wave for each axis (0 to 1).
@export var duty_cycle:float = 0.5:
set = set_duty_cycle
## Sets the frequency of the square wave.
func set_frequency(value:float) -> void:
frequency = value
_on_property_changed("frequency")
## Gets the frequency of the square wave.
func get_frequency() -> float:
return frequency
## Sets the duty cycle of the square wave.
func set_duty_cycle(value:float) -> void:
duty_cycle = clamp(value, 0.0, 0.0)
_on_property_changed("duty_cycle")
## Gets the duty cycle of the square wave.
func get_duty_cycle() -> float:
return duty_cycle
## Calculates the value of the square wave at time t.
func get_value(t: float) -> float:
var result:float = 0.0
result = 1.0 if fmod(t * frequency, 1.0) < duty_cycle else -1.0
return _calc_value(t, result)

View File

@@ -0,0 +1 @@
uid://bwuxn8yt7jiwy

View File

@@ -0,0 +1,47 @@
@icon("res://addons/shaker/assets/ShakerType2D.svg")
@tool
class_name ShakerTypeBase2D
extends ShakerTypeBase
enum GraphAxis {
X,
Y,
}
@export var amplitude: Vector2 = Vector2.ONE:
set = set_amplitude,
get = get_amplitude
@export var offset: Vector2 = Vector2.ZERO:
set = set_offset,
get = get_offset
func set_amplitude(value: Vector2) -> void:
amplitude = value
_on_property_changed("amplitude")
func get_amplitude() -> Vector2:
return amplitude
func set_offset(value: Vector2) -> void:
offset = value
_on_property_changed("offset")
func get_offset() -> Vector2:
return offset
# Get the shake value at a given time
func get_value(t: float) -> Vector2:
var result: Vector2 = Vector2.ZERO
return _calc_value(fmod(t, 1.0), result)
# Calculate the shake value
func _calc_value(t: float, result: Vector2) -> Vector2:
if duration > 0:
t /= duration
if (start_percent != 0 && start_percent > t) || (end_percent != 1 && end_percent < t):
result = Vector2.ZERO
else:
result = result * amplitude + offset
result *= (ease(t, fade_in) if fade_in > 0.0001 else 1.0) * (ease(1.0 - t, fade_out) if fade_out > 0.0001 else 1.0)
return result

View File

@@ -0,0 +1 @@
uid://chp1jfq2fdtbm

View File

@@ -0,0 +1,94 @@
@tool
@icon("res://addons/shaker/assets/ShakerPreset2D.svg")
class_name ShakerPreset2D
extends ShakerPresetBase
# Shake type arrays for each category
@export var PositionShake: Array[ShakerTypeBase2D]:
set = set_position_shake,
get = get_position_shake
@export var RotationShake: Array[ShakerTypeBase1D]:
set = set_rotation_shake,
get = get_rotation_shake
@export var ScaleShake: Array[ShakerTypeBase2D]:
set = set_scale_shake,
get = get_scale_shake
# Custom setter and getter functions
func set_position_shake(value: Array[ShakerTypeBase2D]) -> void:
for _shake_type in _array_difference(PositionShake, value):
if _shake_type != null:
_shake_type.property_changed.connect(_on_property_changed)
PositionShake = value
_on_property_changed("PositionShake")
if Graph != null:
Graph._on_fit_button_clicked()
func get_position_shake() -> Array[ShakerTypeBase2D]:
return PositionShake
func set_rotation_shake(value: Array[ShakerTypeBase1D]) -> void:
for _shake_type in _array_difference(RotationShake, value):
if _shake_type != null:
_shake_type.property_changed.connect(_on_property_changed)
RotationShake = value
_on_property_changed("RotationShake")
if Graph != null:
Graph._on_fit_button_clicked()
func get_rotation_shake() -> Array[ShakerTypeBase1D]:
return RotationShake
func get_shakes_by_category(category:Categories) -> Array:
if category == Categories.POSITION:
return PositionShake
elif category == Categories.ROTATION:
return RotationShake
elif category == Categories.SCALE:
return ScaleShake
return [null]
func set_scale_shake(value: Array[ShakerTypeBase2D]) -> void:
for _shake_type in _array_difference(ScaleShake, value):
if _shake_type != null:
_shake_type.property_changed.connect(_on_property_changed)
ScaleShake = value
_on_property_changed("ScaleShake")
if Graph != null:
Graph._on_fit_button_clicked()
func get_scale_shake() -> Array[ShakerTypeBase2D]:
return ScaleShake
# Get the shake value for a given time and category
func get_value(t: float, _category: Categories = Categories.POSITION):
var result
if _category == Categories.ROTATION:
result = 0.0
else:
result = Vector2.ZERO
for shake_type in [PositionShake, RotationShake, ScaleShake][_category]:
if shake_type != null:
shake_type.duration = component_duration
var _shake_result = shake_type.get_value(t)
match shake_type.BlendingMode:
shake_type.BlendingModes.Add:
result += _shake_result
shake_type.BlendingModes.Multiply:
result *= _shake_result
shake_type.BlendingModes.Subtract:
result -= _shake_result
shake_type.BlendingModes.Max:
result.x = max(result.x, _shake_result.x)
result.y = max(result.y, _shake_result.y)
shake_type.BlendingModes.Min:
result.x = min(result.x, _shake_result.x)
result.y = min(result.y, _shake_result.y)
shake_type.BlendingModes.Average:
result = (result + _shake_result) * 0.5
shake_type.BlendingModes.Override:
result = _shake_result
return result

View File

@@ -0,0 +1 @@
uid://ieocwh32dyx1

View File

@@ -0,0 +1,45 @@
@tool
class_name ShakerTypeAudioBus2D
extends ShakerTypeBase2D
@export var bus_name:String = "Master":
set = set_bus_name,
get = get_bus_name
@export var min_frequence:Vector2 = Vector2(20, 20)
@export var max_frequence:Vector2 = Vector2(20000, 20000)
var bus_index:int = 0
var effect:AudioEffectSpectrumAnalyzerInstance
## Calculates the value of the square wave at time t.
func get_value(t: float) -> Vector2:
var result:Vector2 = Vector2.ZERO
if effect:
var mag_x:Vector2 = effect.get_magnitude_for_frequency_range(min_frequence.x, max_frequence.x, AudioEffectSpectrumAnalyzerInstance.MAGNITUDE_MAX)
var mag_y:Vector2 = effect.get_magnitude_for_frequency_range(min_frequence.y, max_frequence.y, AudioEffectSpectrumAnalyzerInstance.MAGNITUDE_MAX)
result.x = mag_x.length()
result.y = mag_y.length()
return _calc_value(t, result)
func set_bus_name(value: String) -> void:
bus_name = value
_update_bus_index()
_on_property_changed("bus_name")
func get_bus_name() -> String:
return bus_name
func _update_bus_index() -> void:
bus_index = AudioServer.get_bus_index(bus_name)
if bus_index > -1:
for e in AudioServer.get_bus_effect_count(bus_index):
var _effect:AudioEffect = AudioServer.get_bus_effect(bus_index, e)
if _effect is AudioEffectSpectrumAnalyzer:
effect = AudioServer.get_bus_effect_instance(bus_index, e, 0)
break;
if effect == null:
AudioServer.add_bus_effect(bus_index, AudioEffectSpectrumAnalyzer.new(), 0)
effect = AudioServer.get_bus_effect_instance(bus_index, 0)
else:
push_error("Error: Bus '" + bus_name + "' not found!")
effect = null

View File

@@ -0,0 +1 @@
uid://4msbbvpnv85g

View File

@@ -0,0 +1,44 @@
@tool
class_name ShakerTypeBrownianShake2D
extends ShakerTypeBase2D
@export var roughness: Vector2 = Vector2.ONE * 1.0:
set = set_roughness,
get = get_roughness
@export var persistence: Vector2 = Vector2.ONE * 0.5:
set = set_persistence,
get = get_persistence
var _generator: RandomNumberGenerator = RandomNumberGenerator.new()
var _last_pos: Vector2 = Vector2.ZERO
func _init() -> void:
property_changed.connect(_property_changed)
func get_value(t: float) -> Vector2:
var result: Vector2 = Vector2.ZERO
result.x = (_last_pos.x + _generator.randf_range(-roughness.x, roughness.x))
result.y = (_last_pos.y + _generator.randf_range(-roughness.y, roughness.y))
result = _calc_value(t, result)
_last_pos.x = lerpf(_last_pos.x, result.x, 1.0 - persistence.x)
_last_pos.y = lerpf(_last_pos.y, result.y, 1.0 - persistence.y)
return _last_pos
func _property_changed(name: StringName) -> void:
_last_pos = Vector2.ZERO
func set_roughness(value: Vector2) -> void:
roughness = value
_on_property_changed("roughness")
func get_roughness() -> Vector2:
return roughness
func set_persistence(value: Vector2) -> void:
persistence = value.clamp(Vector2(0,0),Vector2(1,1))
_on_property_changed("persistence")
func get_persistence() -> Vector2:
return persistence

View File

@@ -0,0 +1 @@
uid://c2p5nhqgceojd

View File

@@ -0,0 +1,60 @@
@tool
class_name ShakerTypeCurve2D
extends ShakerTypeBase2D
@export var curve_x: Curve:
set = set_curve_x,
get = get_curve_x
@export var curve_y: Curve:
set = set_curve_y,
get = get_curve_y
@export var loop: bool = true:
set = set_loop,
get = get_loop
func _curve_changed() -> void:
_on_property_changed("curve_")
func get_value(t: float) -> Vector2:
var result: Vector2 = Vector2.ZERO
if loop && t > 1.0:
t = fmod(t, 1.0)
if curve_x:
result.x = curve_x.sample(t)
if curve_y:
result.y = curve_y.sample(t)
return _calc_value(t, result)
func set_curve_x(value: Curve) -> void:
if curve_x:
curve_x.changed.disconnect(_curve_changed)
curve_x = value
if curve_x:
curve_x.changed.connect(_curve_changed)
else:
_curve_changed()
func get_curve_x() -> Curve:
return curve_x
func set_curve_y(value: Curve) -> void:
if curve_y:
curve_y.changed.disconnect(_curve_changed)
curve_y = value
if curve_y:
curve_y.changed.connect(_curve_changed)
else:
_curve_changed()
func get_curve_y() -> Curve:
return curve_y
func set_loop(value: bool) -> void:
loop = value
_on_property_changed("loop")
func get_loop() -> bool:
return loop

View File

@@ -0,0 +1 @@
uid://dd6hr5hjnra0i

View File

@@ -0,0 +1,33 @@
@tool
class_name ShakerTypeNoiseShake2D
extends ShakerTypeBase2D
@export var noise_texture: NoiseTexture2D = NoiseTexture2D.new():
set = set_noise_texture,
get = get_noise_texture
func _init() -> void:
noise_texture.changed.connect(_on_noise_changed)
func get_value(t: float) -> Vector2:
var result: Vector2 = Vector2.ZERO
if noise_texture && noise_texture.noise:
var noise_size: Vector2 = Vector2(noise_texture.width, noise_texture.height)
var noise_offset: Vector2 = t * noise_size
result.x = noise_texture.noise.get_noise_2d(noise_offset.x, 0.0)
result.y = noise_texture.noise.get_noise_2d(0.0, noise_offset.y)
result *= 2.0
return _calc_value(t, result)
func _on_noise_changed() -> void:
_on_property_changed("noise_texture")
func set_noise_texture(value: NoiseTexture2D) -> void:
if noise_texture:
noise_texture.changed.disconnect(_on_noise_changed)
noise_texture = value
if noise_texture:
noise_texture.changed.connect(_on_noise_changed)
func get_noise_texture() -> NoiseTexture2D:
return noise_texture

View File

@@ -0,0 +1 @@
uid://rytryaspugdk

View File

@@ -0,0 +1,31 @@
@tool
class_name ShakerTypeRandom2D
extends ShakerTypeBase2D
## The seed for the random number generator.
@export var seed: int = 0:
set = set_seed
## The random number generator instance.
var _generator: RandomNumberGenerator = RandomNumberGenerator.new()
## Initializes the shake type with the given seed.
func _init() -> void:
set_seed(seed)
## Calculates a random value for each axis at time t.
func get_value(t: float) -> Vector2:
var result: Vector2 = Vector2.ZERO
result.x = _generator.randf_range(-1.0, 1.0)
result.y = _generator.randf_range(-1.0, 1.0)
return _calc_value(t, result)
## Sets the seed for the random number generator.
func set_seed(value: int) -> void:
seed = value
_generator.seed = seed
_on_property_changed("seed")
## Gets the current seed of the random number generator.
func get_seed() -> int:
return seed

View File

@@ -0,0 +1 @@
uid://c7jr8ltct1k17

View File

@@ -0,0 +1,42 @@
@tool
class_name ShakerTypeSawtoothWave2D
extends ShakerTypeBase2D
## The frequency of the sawtooth wave for each axis.
@export var frequency: Vector2 = Vector2.ONE * 5.0:
set = set_frequency
## The asymmetry of the sawtooth wave for each axis (0 to 1).
@export var asymmetry: Vector2 = Vector2.ONE * 0.5:
set = set_asymmetry
## Sets the frequency of the sawtooth wave.
func set_frequency(value: Vector2) -> void:
frequency = value
_on_property_changed("frequency")
## Gets the frequency of the sawtooth wave.
func get_frequency() -> Vector2:
return frequency
## Sets the asymmetry of the sawtooth wave.
func set_asymmetry(value: Vector2) -> void:
asymmetry = value.clamp(Vector2.ZERO, Vector2.ONE)
_on_property_changed("asymmetry")
## Gets the asymmetry of the sawtooth wave.
func get_asymmetry() -> Vector2:
return asymmetry
## Calculates the value of the sawtooth wave at time t.
func get_value(t: float) -> Vector2:
var result: Vector2 = Vector2.ZERO
var _real_time: float = fmod(t, 1.0) if t > 1.0 else t
var wave: Vector2 = (_real_time * frequency).posmod(1.0)
wave.x = wave.x / asymmetry.x if wave.x < asymmetry.x else (1.0 - wave.x) / (1.0 - asymmetry.x)
wave.y = wave.y / asymmetry.y if wave.y < asymmetry.y else (1.0 - wave.y) / (1.0 - asymmetry.y)
result = wave
result = _calc_value(t, result)
result = (result - amplitude * 0.5) * 2.0
return result

View File

@@ -0,0 +1 @@
uid://x16d6et41iut

View File

@@ -0,0 +1,33 @@
@tool
class_name ShakerTypeSineWave2D
extends ShakerTypeBase2D
@export_group("Sinewave Properties")
@export var frequency: Vector2 = Vector2.ONE:
set = set_frequency,
get = get_frequency
@export var phase: Vector2 = Vector2.ONE:
set = set_phase,
get = get_phase
func get_value(t: float) -> Vector2:
var result: Vector2 = Vector2.ZERO
var _real_time: float = fmod(t, 1.0) if t > 1.0 else t
result.x = sin(t * frequency.x * TAU + phase.x)
result.y = sin(t * frequency.y * TAU + phase.y + PI/2)
return _calc_value(_real_time, result)
func set_frequency(value: Vector2) -> void:
frequency = value
_on_property_changed("frequency")
func get_frequency() -> Vector2:
return frequency
func set_phase(value: Vector2) -> void:
phase = value
_on_property_changed("phase")
func get_phase() -> Vector2:
return phase

View File

@@ -0,0 +1 @@
uid://drm7drd6f4t4x

View File

@@ -0,0 +1,36 @@
@tool
class_name ShakerTypeSquareWave2D
extends ShakerTypeBase2D
## The frequency of the square wave for each axis.
@export var frequency: Vector2 = Vector2.ONE * 5.0:
set = set_frequency
## The duty cycle of the square wave for each axis (0 to 1).
@export var duty_cycle: Vector2 = Vector2.ONE * 0.5:
set = set_duty_cycle
## Sets the frequency of the square wave.
func set_frequency(value: Vector2) -> void:
frequency = value
_on_property_changed("frequency")
## Gets the frequency of the square wave.
func get_frequency() -> Vector2:
return frequency
## Sets the duty cycle of the square wave.
func set_duty_cycle(value: Vector2) -> void:
duty_cycle = value.clamp(Vector2.ZERO, Vector2.ONE)
_on_property_changed("duty_cycle")
## Gets the duty cycle of the square wave.
func get_duty_cycle() -> Vector2:
return duty_cycle
## Calculates the value of the square wave at time t.
func get_value(t: float) -> Vector2:
var result: Vector2 = Vector2.ZERO
result.x = 1.0 if fmod(t * frequency.x, 1.0) < duty_cycle.x else -1.0
result.y = 1.0 if fmod(t * frequency.y, 1.0) < duty_cycle.y else -1.0
return _calc_value(t, result)

View File

@@ -0,0 +1 @@
uid://btxrpjbvdcl1f

View File

@@ -0,0 +1,48 @@
@icon("res://addons/shaker/assets/ShakerType3D.svg")
@tool
class_name ShakerTypeBase3D
extends ShakerTypeBase
enum GraphAxis {
X,
Y,
Z
}
@export var amplitude: Vector3 = Vector3.ONE:
set = set_amplitude,
get = get_amplitude
@export var offset: Vector3 = Vector3.ZERO:
set = set_offset,
get = get_offset
func set_amplitude(value: Vector3) -> void:
amplitude = value
_on_property_changed("amplitude")
func get_amplitude() -> Vector3:
return amplitude
func set_offset(value: Vector3) -> void:
offset = value
_on_property_changed("offset")
func get_offset() -> Vector3:
return offset
# Get the shake value at a given time
func get_value(t: float) -> Vector3:
var result: Vector3 = Vector3.ZERO
return _calc_value(fmod(t, 1.0), result)
# Calculate the shake value
func _calc_value(t: float, result: Vector3) -> Vector3:
if duration > 0:
t /= duration
if (start_percent != 0 && start_percent > t) || (end_percent != 1 && end_percent < t):
result = Vector3.ZERO
else:
result = result * amplitude + offset
result *= (ease(t, fade_in) if abs(fade_in) > 0.0001 else 1.0) * (ease(1.0 - t, fade_out) if abs(fade_out) > 0.0001 else 1.0)
return result

View File

@@ -0,0 +1 @@
uid://0tu2q57qqu4s

View File

@@ -0,0 +1,103 @@
@tool
@icon("res://addons/shaker/assets/ShakerPreset3D.svg")
class_name ShakerPreset3D
extends ShakerPresetBase
# Shake type arrays for each category
@export var PositionShake: Array[ShakerTypeBase3D]:
set = set_position_shake,
get = get_position_shake
@export var RotationShake: Array[ShakerTypeBase3D]:
set = set_rotation_shake,
get = get_rotation_shake
@export var ScaleShake: Array[ShakerTypeBase3D]:
set = set_scale_shake,
get = get_scale_shake
# Custom setter and getter functions
func set_position_shake(value: Array[ShakerTypeBase3D]) -> void:
for _shake_type in _array_difference(PositionShake, value):
if _shake_type != null:
_shake_type.property_changed.connect(_on_property_changed)
_shake_type.property_changed.connect(_change_graph_category.bind(0))
PositionShake = value
if Graph != null:
Graph.select_category(0)
Graph._on_fit_button_clicked()
_on_property_changed("PositionShake")
func get_position_shake() -> Array[ShakerTypeBase3D]:
return PositionShake
func set_rotation_shake(value: Array[ShakerTypeBase3D]) -> void:
for _shake_type in _array_difference(RotationShake, value):
if _shake_type != null:
_shake_type.property_changed.connect(_on_property_changed)
_shake_type.property_changed.connect(_change_graph_category.bind(1))
RotationShake = value
if Graph != null:
Graph.select_category(1)
Graph._on_fit_button_clicked()
_on_property_changed("RotationShake")
func get_rotation_shake() -> Array[ShakerTypeBase3D]:
return RotationShake
func set_scale_shake(value: Array[ShakerTypeBase3D]) -> void:
for _shake_type in _array_difference(ScaleShake, value):
if _shake_type != null:
_shake_type.property_changed.connect(_on_property_changed)
_shake_type.property_changed.connect(_change_graph_category.bind(2))
ScaleShake = value
if Graph != null:
Graph.select_category(2)
Graph._on_fit_button_clicked()
_on_property_changed("ScaleShake")
func get_scale_shake() -> Array[ShakerTypeBase3D]:
return ScaleShake
# Get the shake value for a given time and category
func get_value(t: float, _category: Categories = Categories.POSITION) -> Vector3:
var result: Vector3 = Vector3.ZERO
var selected_category: Array[ShakerTypeBase3D] = [PositionShake, RotationShake, ScaleShake][_category]
for shake_type in selected_category:
if shake_type != null:
shake_type.duration = component_duration
var _shake_result: Vector3 = shake_type.get_value(t)
match shake_type.BlendingMode:
shake_type.BlendingModes.Add:
result += _shake_result
shake_type.BlendingModes.Multiply:
result *= _shake_result
shake_type.BlendingModes.Subtract:
result -= _shake_result
shake_type.BlendingModes.Max:
result.x = max(result.x, _shake_result.x)
result.y = max(result.y, _shake_result.y)
result.z = max(result.z, _shake_result.z)
shake_type.BlendingModes.Min:
result.x = min(result.x, _shake_result.x)
result.y = min(result.y, _shake_result.y)
result.z = min(result.z, _shake_result.z)
shake_type.BlendingModes.Average:
result = (result + _shake_result) * 0.5
shake_type.BlendingModes.Override:
result = _shake_result
return result
func _change_graph_category(_name:String, _category_index:int) -> void:
if Graph:
Graph.category_button.select(_category_index)
Graph.category_button.item_selected.emit(_category_index)
func get_shakes_by_category(category:Categories) -> Array:
if category == Categories.POSITION:
return PositionShake
elif category == Categories.ROTATION:
return RotationShake
elif category == Categories.SCALE:
return ScaleShake
return [null]

View File

@@ -0,0 +1 @@
uid://mlwdmecg12xd

View File

@@ -0,0 +1,49 @@
@tool
class_name ShakerTypeAudioBus3D
extends ShakerTypeBase3D
@export var bus_name:String = "Master":
set = set_bus_name,
get = get_bus_name
@export var min_frequence:Vector3 = Vector3(20, 20, 20)
@export var max_frequence:Vector3 = Vector3(20000, 20000, 20000)
var bus_index:int = 0
var effect:AudioEffectSpectrumAnalyzerInstance
func _init():
_update_bus_index()
## Calculates the value of the square wave at time t.
func get_value(t: float) -> Vector3:
var result:Vector3 = Vector3.ZERO
if effect:
var mag_x:Vector2 = effect.get_magnitude_for_frequency_range(min_frequence.x, max_frequence.x, AudioEffectSpectrumAnalyzerInstance.MAGNITUDE_MAX)
var mag_y:Vector2 = effect.get_magnitude_for_frequency_range(min_frequence.y, max_frequence.y, AudioEffectSpectrumAnalyzerInstance.MAGNITUDE_MAX)
var mag_z:Vector2 = effect.get_magnitude_for_frequency_range(min_frequence.z, max_frequence.z, AudioEffectSpectrumAnalyzerInstance.MAGNITUDE_MAX)
result.x = mag_x.length()
result.y = mag_y.length()
result.z = mag_y.length()
return _calc_value(t, result)
func set_bus_name(value: String) -> void:
bus_name = value
_update_bus_index()
_on_property_changed("bus_name")
func get_bus_name() -> String:
return bus_name
func _update_bus_index() -> void:
bus_index = AudioServer.get_bus_index(bus_name)
if bus_index > -1:
for e in AudioServer.get_bus_effect_count(bus_index):
var _effect:AudioEffect = AudioServer.get_bus_effect(bus_index, e)
if _effect is AudioEffectSpectrumAnalyzer:
effect = AudioServer.get_bus_effect_instance(bus_index, e, 0)
break;
if effect == null:
AudioServer.add_bus_effect(bus_index, AudioEffectSpectrumAnalyzer.new(), 0)
effect = AudioServer.get_bus_effect_instance(bus_index, 0)
else:
push_error("Error: Bus '" + bus_name + "' not found!")
effect = null

View File

@@ -0,0 +1 @@
uid://cdne0sspxhssj

View File

@@ -0,0 +1,46 @@
@tool
class_name ShakerTypeBrownianShake3D
extends ShakerTypeBase3D
@export var roughness: Vector3 = Vector3.ONE * 1.0:
set = set_roughness,
get = get_roughness
@export var persistence: Vector3 = Vector3.ONE * 0.5:
set = set_persistence,
get = get_persistence
var _generator: RandomNumberGenerator = RandomNumberGenerator.new()
var _last_pos: Vector3 = Vector3.ZERO
func _init() -> void:
property_changed.connect(_property_changed)
func get_value(t: float) -> Vector3:
var result: Vector3 = Vector3.ZERO
result.x = (_last_pos.x + _generator.randf_range(-roughness.x, roughness.x))
result.y = (_last_pos.y + _generator.randf_range(-roughness.y, roughness.y))
result.z = (_last_pos.z + _generator.randf_range(-roughness.z, roughness.z))
result = _calc_value(t, result)
_last_pos.x = lerpf(_last_pos.x, result.x, 1.0 - persistence.x)
_last_pos.y = lerpf(_last_pos.y, result.y, 1.0 - persistence.y)
_last_pos.z = lerpf(_last_pos.z, result.z, 1.0 - persistence.z)
return _last_pos
func _property_changed(name: StringName) -> void:
_last_pos = Vector3.ZERO
func set_roughness(value: Vector3) -> void:
roughness = value
_on_property_changed("roughness")
func get_roughness() -> Vector3:
return roughness
func set_persistence(value: Vector3) -> void:
persistence = value.clamp(Vector3.ZERO, Vector3.ONE)
_on_property_changed("persistence")
func get_persistence() -> Vector3:
return persistence

View File

@@ -0,0 +1 @@
uid://ddk408cg8156q

Some files were not shown because too many files have changed in this diff Show More