Compare commits

...

122 Commits

Author SHA1 Message Date
e50e2c9918 removing .net config file
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 14m44s
2026-01-25 10:02:11 +01:00
5cb2d2beb5 removed blocking condition in ci 2026-01-25 10:02:05 +01:00
cb2d7e35ce dev branch workflow 2026-01-25 10:01:59 +01:00
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
9d8877cc67 fov 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 4m49s
2025-10-28 14:12:32 +01:00
fd7b55452b basic tutorial layout 2025-10-28 14:08:41 +01:00
1cafe6e96d removing import clause on windows export
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 13s
Create tag and build when new code gets to main / Export (push) Successful in 4m30s
2025-10-27 10:41:32 +01:00
ea8821b41a back to base main menu
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 12s
Create tag and build when new code gets to main / Export (push) Successful in 7m51s
2025-10-27 10:15:00 +01:00
8338ce3dd9 trying to change the autoload class name and extends order to fix release issue
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 12s
Create tag and build when new code gets to main / Export (push) Has been cancelled
2025-10-27 10:14:11 +01:00
39f45d418f trying to add a console to release
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 12s
Create tag and build when new code gets to main / Export (push) Successful in 7m32s
2025-10-27 09:49:52 +01:00
4e756da1ba trying simpler self made menus to fix selection and focus issues on build
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 13s
Create tag and build when new code gets to main / Export (push) Successful in 7m49s
2025-10-27 09:32:58 +01:00
919236a388 tentatives de fixer cette ui de mort
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 12s
Create tag and build when new code gets to main / Export (push) Successful in 8m12s
2025-10-26 19:06:37 +01:00
ef33336975 menus and settings
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 13s
Create tag and build when new code gets to main / Export (push) Successful in 8m15s
2025-10-23 15:21:33 +02:00
916ff1921c dash drop indicators
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 13s
Create tag and build when new code gets to main / Export (push) Successful in 8m13s
2025-10-20 11:42:14 +02:00
70e3f70bcc dash indicators
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 12s
Create tag and build when new code gets to main / Export (push) Successful in 8m25s
2025-10-17 16:53:23 +02:00
417d9f5a6b changed main scene
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 14s
Create tag and build when new code gets to main / Export (push) Successful in 9m35s
2025-10-16 17:17:13 +02:00
591993a1f2 textures
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 15s
Create tag and build when new code gets to main / Export (push) Successful in 8m38s
2025-10-16 11:27:55 +02:00
e39620ce52 F O G
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 5m14s
2025-10-15 13:57:44 +02:00
7312b2b22b second part of city well on track
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 14s
Create tag and build when new code gets to main / Export (push) Successful in 3m36s
2025-10-14 23:15:55 +02:00
45e8ac2f3c mor city
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 9s
Create tag and build when new code gets to main / Export (push) Successful in 3m17s
2025-10-13 17:12:03 +02:00
46bea7ba14 more greyboxing
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 8s
Create tag and build when new code gets to main / Export (push) Successful in 3m17s
2025-10-07 10:28:11 +02:00
c35ce49669 more greyboxing
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 7s
Create tag and build when new code gets to main / Export (push) Successful in 3m9s
2025-10-03 16:55:24 +02:00
c1e8235895 moving away from blend files and using explicit imports through gltf
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 8s
Create tag and build when new code gets to main / Export (push) Successful in 3m37s
2025-10-03 15:45:40 +02:00
1813973daa weapon clip fix
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 7s
Create tag and build when new code gets to main / Export (push) Has been cancelled
2025-09-16 11:01:31 +02:00
7b036c5889 fixed mantle after dash bug
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 7s
Create tag and build when new code gets to main / Export (push) Failing after 2s
2025-09-16 10:28:41 +02:00
88d20431ce updated CI to godot 4.5
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 7s
Create tag and build when new code gets to main / Export (push) Failing after 2s
2025-09-16 09:43:21 +02:00
d15542e4ed ported to Godot 5 and fixed collisions on tooling script
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 7s
Create tag and build when new code gets to main / Export (push) Has been cancelled
2025-09-16 09:40:20 +02:00
63ea62ff74 some greyboxing attempt
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 8s
Create tag and build when new code gets to main / Export (push) Failing after 3h13m16s
2025-09-15 17:33:48 +02:00
c563390796 Merge branch 'main' of https://git.game-dev.space/minimata/MovementTests
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 7s
Create tag and build when new code gets to main / Export (push) Failing after 3h5m23s
2025-09-13 19:15:41 +02:00
5f37f39558 deleted useless stuss 2025-09-13 19:15:38 +02:00
4922e597d9 Merge pull request 'test adding a blend file mesh' (#2) from more-rework into main
Some checks failed
Create tag and build when new code gets to main / BumpTag (push) Successful in 7s
Create tag and build when new code gets to main / Export (push) Has been cancelled
Reviewed-on: #2
2025-09-13 17:14:19 +00:00
739968afbf test adding a clend file mesh 2025-09-13 19:11:50 +02:00
9733 changed files with 217069 additions and 2850 deletions

View File

@@ -0,0 +1,39 @@
name: Create tag and build when new code gets to main
run-name: Create tag and build when new code gets to main
on:
push:
branches:
- '**' # matches every branch
- '!main' # except main
- '!release/*' # except release branches
tags-ignore:
- "**"
env:
GAME_NAME: MovementTests
ITCHIO_USERNAME: Minimata
ITCHIO_GAMEID: MovementTests
jobs:
Export:
runs-on: ubuntu-latest
container:
image: barichello/godot-ci:mono-4.5
steps:
- name: Install node, curl and zip
run: |
apt update && apt -y install curl zip nodejs
- name: Checkout with LFS
uses: https://git.game-dev.space/minimata/checkout-with-lfs.git@main
with:
checkout-version: 3
- 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

View File

@@ -40,7 +40,7 @@ jobs:
runs-on: ubuntu-latest
needs: BumpTag
container:
image: barichello/godot-ci:mono-4.4.1
image: barichello/godot-ci:mono-4.5
steps:
- name: Install node, curl and zip
@@ -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 --import --export-release "Windows Desktop" build/windows/${{ env.GAME_NAME }}.exe
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,6 +69,27 @@ jobs:
buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
gameData: Windows.zip
buildChannel: windows
- 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:
@@ -87,7 +98,13 @@ jobs:
itchGameId: ${{ env.ITCHIO_GAMEID }}
buildNumber: ${{ needs.BumpTag.outputs.tag_name }}
gameData: Linux.zip
buildChannel: linux
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:

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,4 @@
<Project Sdk="Godot.NET.Sdk/4.4.1">
<Project Sdk="Godot.NET.Sdk/4.5.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>

131
Movement tests.csproj.old Normal file
View File

@@ -0,0 +1,131 @@
<Project Sdk="Godot.NET.Sdk/4.4.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
<RootNamespace>Movementtests</RootNamespace>
</PropertyGroup>
<ItemGroup>
<Content Include="export_presets.cfg" />
<Content Include="menus\assets\git_logo\Git-Logo-2Color.png" />
<Content Include="menus\assets\git_logo\Git-Logo-2Color.png.import" />
<Content Include="menus\assets\git_logo\LICENSE.txt" />
<Content Include="menus\assets\godot_engine_logo\LICENSE.txt" />
<Content Include="menus\assets\godot_engine_logo\logo_vertical_color_dark.png" />
<Content Include="menus\assets\godot_engine_logo\logo_vertical_color_dark.png.import" />
<Content Include="menus\assets\icon.png" />
<Content Include="menus\assets\icon.png.import" />
<Content Include="menus\ATTRIBUTION.md" />
<Content Include="menus\resources\themes\expedition.tres" />
<Content Include="menus\resources\themes\gravity.tres" />
<Content Include="menus\resources\themes\grow.tres" />
<Content Include="menus\resources\themes\lab.tres" />
<Content Include="menus\resources\themes\lore.tres" />
<Content Include="menus\resources\themes\steal_this_theme.tres" />
<Content Include="menus\scenes\credits\scrollable_credits.gd" />
<Content Include="menus\scenes\credits\scrollable_credits.gd.uid" />
<Content Include="menus\scenes\credits\scrollable_credits.tscn" />
<Content Include="menus\scenes\credits\scrolling_credits.gd" />
<Content Include="menus\scenes\credits\scrolling_credits.gd.uid" />
<Content Include="menus\scenes\credits\scrolling_credits.tscn" />
<Content Include="menus\scenes\end_credits\end_credits.gd" />
<Content Include="menus\scenes\end_credits\end_credits.gd.uid" />
<Content Include="menus\scenes\end_credits\end_credits.tscn" />
<Content Include="menus\scenes\game_scene\configurable_sub_viewport.gd" />
<Content Include="menus\scenes\game_scene\configurable_sub_viewport.gd.uid" />
<Content Include="menus\scenes\game_scene\game_ui.tscn" />
<Content Include="menus\scenes\game_scene\input_display_label.gd" />
<Content Include="menus\scenes\game_scene\input_display_label.gd.uid" />
<Content Include="menus\scenes\game_scene\levels\level.gd" />
<Content Include="menus\scenes\game_scene\levels\level.gd.uid" />
<Content Include="menus\scenes\game_scene\levels\level_1.tscn" />
<Content Include="menus\scenes\game_scene\levels\level_2.tscn" />
<Content Include="menus\scenes\game_scene\levels\level_3.tscn" />
<Content Include="menus\scenes\game_scene\tutorials\tutorial_1.tscn" />
<Content Include="menus\scenes\game_scene\tutorials\tutorial_2.tscn" />
<Content Include="menus\scenes\game_scene\tutorials\tutorial_3.tscn" />
<Content Include="menus\scenes\game_scene\tutorial_manager.gd" />
<Content Include="menus\scenes\game_scene\tutorial_manager.gd.uid" />
<Content Include="menus\scenes\loading_screen\level_loading_screen.tscn" />
<Content Include="menus\scenes\loading_screen\loading_screen.gd" />
<Content Include="menus\scenes\loading_screen\loading_screen.gd.uid" />
<Content Include="menus\scenes\loading_screen\loading_screen.tscn" />
<Content Include="menus\scenes\loading_screen\loading_screen_with_shader_caching.gd" />
<Content Include="menus\scenes\loading_screen\loading_screen_with_shader_caching.gd.uid" />
<Content Include="menus\scenes\loading_screen\loading_screen_with_shader_caching.tscn" />
<Content Include="menus\scenes\menus\level_select_menu\level_select_menu.gd" />
<Content Include="menus\scenes\menus\level_select_menu\level_select_menu.gd.uid" />
<Content Include="menus\scenes\menus\level_select_menu\level_select_menu.tscn" />
<Content Include="menus\scenes\menus\main_menu\main_menu.gd" />
<Content Include="menus\scenes\menus\main_menu\main_menu.gd.uid" />
<Content Include="menus\scenes\menus\main_menu\main_menu.tscn" />
<Content Include="menus\scenes\menus\main_menu\main_menu_with_animations.gd" />
<Content Include="menus\scenes\menus\main_menu\main_menu_with_animations.gd.uid" />
<Content Include="menus\scenes\menus\main_menu\main_menu_with_animations.tscn" />
<Content Include="menus\scenes\menus\options_menu\audio\audio_input_option_control.gd" />
<Content Include="menus\scenes\menus\options_menu\audio\audio_input_option_control.gd.uid" />
<Content Include="menus\scenes\menus\options_menu\audio\audio_input_option_control.tscn" />
<Content Include="menus\scenes\menus\options_menu\audio\audio_options_menu.gd" />
<Content Include="menus\scenes\menus\options_menu\audio\audio_options_menu.gd.uid" />
<Content Include="menus\scenes\menus\options_menu\audio\audio_options_menu.tscn" />
<Content Include="menus\scenes\menus\options_menu\game\game_options_menu.gd" />
<Content Include="menus\scenes\menus\options_menu\game\game_options_menu.gd.uid" />
<Content Include="menus\scenes\menus\options_menu\game\game_options_menu.tscn" />
<Content Include="menus\scenes\menus\options_menu\game\reset_game_control\reset_game_control.gd" />
<Content Include="menus\scenes\menus\options_menu\game\reset_game_control\reset_game_control.gd.uid" />
<Content Include="menus\scenes\menus\options_menu\game\reset_game_control\reset_game_control.tscn" />
<Content Include="menus\scenes\menus\options_menu\input\input_extras_menu.tscn" />
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu.gd" />
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu.gd.uid" />
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu.tscn" />
<Content Include="menus\scenes\menus\options_menu\input\input_options_menu_with_mouse_sensitivity.tscn" />
<Content Include="menus\scenes\menus\options_menu\master_options_menu.gd" />
<Content Include="menus\scenes\menus\options_menu\master_options_menu.gd.uid" />
<Content Include="menus\scenes\menus\options_menu\master_options_menu.tscn" />
<Content Include="menus\scenes\menus\options_menu\master_options_menu_with_tabs.tscn" />
<Content Include="menus\scenes\menus\options_menu\mini_options_menu.gd" />
<Content Include="menus\scenes\menus\options_menu\mini_options_menu.gd.uid" />
<Content Include="menus\scenes\menus\options_menu\mini_options_menu.tscn" />
<Content Include="menus\scenes\menus\options_menu\mini_options_menu_with_reset.gd" />
<Content Include="menus\scenes\menus\options_menu\mini_options_menu_with_reset.gd.uid" />
<Content Include="menus\scenes\menus\options_menu\mini_options_menu_with_reset.tscn" />
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu.gd" />
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu.gd.uid" />
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu.tscn" />
<Content Include="menus\scenes\menus\options_menu\video\video_options_menu_with_extras.tscn" />
<Content Include="menus\scenes\opening\opening.gd" />
<Content Include="menus\scenes\opening\opening.gd.uid" />
<Content Include="menus\scenes\opening\opening.tscn" />
<Content Include="menus\scenes\opening\opening_with_logo.tscn" />
<Content Include="menus\scenes\overlaid_menus\game_won_menu.gd" />
<Content Include="menus\scenes\overlaid_menus\game_won_menu.gd.uid" />
<Content Include="menus\scenes\overlaid_menus\game_won_menu.tscn" />
<Content Include="menus\scenes\overlaid_menus\level_lost_menu.gd" />
<Content Include="menus\scenes\overlaid_menus\level_lost_menu.gd.uid" />
<Content Include="menus\scenes\overlaid_menus\level_lost_menu.tscn" />
<Content Include="menus\scenes\overlaid_menus\level_won_menu.gd" />
<Content Include="menus\scenes\overlaid_menus\level_won_menu.gd.uid" />
<Content Include="menus\scenes\overlaid_menus\level_won_menu.tscn" />
<Content Include="menus\scenes\overlaid_menus\mini_options_overlaid_menu.tscn" />
<Content Include="menus\scenes\overlaid_menus\overlaid_menu.gd" />
<Content Include="menus\scenes\overlaid_menus\overlaid_menu.gd.uid" />
<Content Include="menus\scenes\overlaid_menus\overlaid_menu.tscn" />
<Content Include="menus\scenes\overlaid_menus\overlaid_menu_container.gd" />
<Content Include="menus\scenes\overlaid_menus\overlaid_menu_container.gd.uid" />
<Content Include="menus\scenes\overlaid_menus\overlaid_menu_container.tscn" />
<Content Include="menus\scenes\overlaid_menus\pause_menu.gd" />
<Content Include="menus\scenes\overlaid_menus\pause_menu.gd.uid" />
<Content Include="menus\scenes\overlaid_menus\pause_menu.tscn" />
<Content Include="menus\scripts\game_state.gd" />
<Content Include="menus\scripts\game_state.gd.uid" />
<Content Include="menus\scripts\level_list_and_state_manager.gd" />
<Content Include="menus\scripts\level_list_and_state_manager.gd.uid" />
<Content Include="menus\scripts\level_state.gd" />
<Content Include="menus\scripts\level_state.gd.uid" />
</ItemGroup>
<ItemGroup>
<Folder Include="addons\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="RustyOptions" Version="0.10.1" />
</ItemGroup>
</Project>

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

@@ -1,6 +1,20 @@
[gd_scene load_steps=2 format=3 uid="uid://cc37235kj4384"]
[gd_scene load_steps=6 format=3 uid="uid://cc37235kj4384"]
[ext_resource type="Script" uid="uid://b5oej1q4h7jvh" path="res://addons/maaacks_game_template/base/scripts/ui_sound_controller.gd" id="1_dmagn"]
[ext_resource type="AudioStream" uid="uid://d0iuat23cm2yd" path="res://assets/audio/kenney_ui-audio/mouseclick1.ogg" id="2_7f8wo"]
[ext_resource type="AudioStream" uid="uid://skgtkftvx1gn" path="res://assets/audio/kenney_ui-audio/switch20.ogg" id="3_nvwb3"]
[ext_resource type="AudioStream" uid="uid://dybdbi28p8a7o" path="res://assets/audio/kenney_ui-audio/switch3.ogg" id="4_e13bv"]
[ext_resource type="AudioStream" uid="uid://o3wvigf0nhg" path="res://assets/audio/kenney_ui-audio/switch4.ogg" id="5_42wer"]
[node name="ProjectUISoundController" type="Node"]
script = ExtResource("1_dmagn")
button_hovered = ExtResource("2_7f8wo")
button_focused = ExtResource("2_7f8wo")
button_pressed = ExtResource("3_nvwb3")
tab_hovered = ExtResource("2_7f8wo")
tab_selected = ExtResource("3_nvwb3")
slider_hovered = ExtResource("2_7f8wo")
slider_focused = ExtResource("2_7f8wo")
slider_drag_started = ExtResource("4_e13bv")
slider_drag_ended = ExtResource("5_42wer")
line_hovered = ExtResource("2_7f8wo")

View File

@@ -1,5 +1,5 @@
class_name SceneLoaderClass
extends Node
class_name SceneLoaderClass
## Autoload class for loading scenes with an optional loading screen.
signal scene_loaded

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

@@ -4,7 +4,24 @@ extends OverlaidMenu
@export var options_packed_scene : PackedScene
@export_file("*.tscn") var main_menu_scene : String
@export var menu_context : GUIDEMappingContext
var popup_open : Node
var previous_mapping_contexts : Array
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 _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:
@@ -29,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:
@@ -54,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()
@@ -79,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

@@ -2,17 +2,32 @@ class_name PauseMenuController
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
func _unhandled_input(event : InputEvent) -> void:
if event.is_action_pressed("ui_cancel"):
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()
get_tree().current_scene.call_deferred("add_child", current_menu)
await current_menu.tree_exited
if is_inside_tree() and _initial_focus_control:
_initial_focus_control.grab_focus()
@export_group("Inputs")
@export var pause:GUIDEAction
var menu_already_open = false
func _ready() -> void:
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()

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]

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